Mac OS X
Google Calendar Sync
mogrify -strip *.jpg
jhead -de *.jpg
I use Amazon’s S3 (Simple Storage Service) to back up files, and I also use OmniGraffle, a diagramming program, on my Mac. This is a letter I sent to OmniGraffle recently that explains a problem with the interaction of OmniGraffle and S3.
OmniGraffle (OG) is a great app, but it has a serious, showstopping incompatability with Amazon’s S3 (Simple Storage Service).
S3 is an online backup service run by Amazon. Lots & lots of people use it, with more moving to it all the time. You can find out more about S3 here:
I created some documents in OmniGraffle and uploaded them to S3. When I tried to perform another backup, the command-line S3 app I was using crashed. I tried another. Crashed. I tried Interarchy, a GUI app, but while it appeared to work, in reality it simply silently failed. After much trial and error, I finally determined that it was a particular file generated by OG that was causing the problems. But I had no idea how to fix things.
After searching on the Amazon S3 forums, it turns out others are experiencing the exact same problem. I found two entries discussing how an invisible character in the name of the Icon file located in a .graffle folder was causing the crash. Here are those two entries:
Eventually, after over an hour of trying various combinations with the help of a friend, I was able to delete the offending file using this command.
./s3cmd.rb -v delete “granneclientele:clientele/images/omnigraffle/audacity-toolbar-tools.graffle/Icon”$’\r’
I show that command to you not because I expect you’ll understand it, but because it demonstrates that this is a bear of a problem that many of your customers will be unable to solve on their own. As more of your customers use S3, they’re going to run into this issue.
I understand this all may sound confusing, so please do not hesitate to call or email me for further details.
An OmniGraffle support person wrote me back, saying that this issue had been fixed in version 4.2 of the software.
From Bruce Schneier’s “How to Crash the Oscars” (7 March 2006):
If you want to crash the glitziest party of all, the Oscars, here’s a tip from a professional: Show up at the theater, dressed as a chef carrying a live lobster, looking really concerned. …
“The most important technique is confidence,” he said. “Part of it is being dressed the part, looking the part, and acting the part and then lying to get in the door.”
The biggest hole in the elaborate Oscars security plan, Mamlet said, is that while everyone from stagehands to reporters have to wear official credentials, the celebrities and movie executives attending the event do not.
“If you really act like a celebrity, the security guards will worry that they will get into trouble for not recognizing you,” Mamlet said.
From Bruce Schneier’s “Social Engineering Notes” (15 May 2007):
This is a fantastic story of a major prank pulled off at the Super Bowl this year. Basically, five people smuggled more than a quarter of a ton of material into Dolphin Stadium in order to display their secret message on TV.
Given all the security, it’s amazing how easy it was for them to become part of the security perimeter with all that random stuff. But to those of us who follow this thing, it shouldn’t be. His observations are spot on:
1. Wear a suit.
2. Wear a Bluetooth headset.
3. Pretend to be talking loudly to someone on the other line.
4. Carry a clipboard.
5. Be white.
On the CWE-LUG mailing list, someone asked a question about creating a program that can be extended with plugins. I thought the answer was so useful that I wanted to save it and make it available to others.
On 2/17/07, Mark wrote:
I’m a young programmer (just finishing high school) who has done a fair amount of programming with PHP, MySQL, and other web technologies. … How does one go about designing a program so it can be extended later with plugins, apis, and modules?
Ed Howland, veteran programmer, replied:
Mark, if i understand you correctly, you are seeking how to design a general purpose program that can be extended by others. It would help us to know what your target environment is. Especially if it is a dynamic language like Perl, Ruby or Python.Or a compiled language like Java or C/C++. The difference lies in linking others source code with yours, interpreted languages are easier in this respect.
That said, the general techniques are well-established. For purposes of illustration, I’ll call the code you are wanting to write the host (application) and the external modules, the guest (module.) The basic idea is to use various callbacks into the guest module from the host application. But first the guest application must register itself with the host (see it is like a hotel checkin…) This registration process can take many forms and is usually dictated by the programming environment. Anyway, the host maintains a list of registered guests. Each time a new guest registers, he is appended to said list.
Next, the host will then use the handle that represents the main object of the guest, and call an initialize routine in the guest. That routine sets stuff and gets a handle to the host so it can call things in the framework API to open windows, etc.
So the basic steps are:
- Devise a registration process
- Maintain a list of registered guest modules
- When starting, loop over your registered guests and call their initialize routines
- When a guest’s initialize routine is called, it calls pre-defined host API calls to open windows, or other things.
- These might cause the framework (in the host) to callback to the guest to display the window, and paint the contents of the windows.
You want to make your plugin callback interface as narrow as possible. And you want your host API to be simple to create widgets, windows, whatever in a few easy steps. If using a O-O language like Java or C#, use interfaces for both the IPlugin (guest) and IPluginHost (host) and guest module writes will inherit from or implement those interfaces. Ideally, the minimal IPlugin interface could be as small as init() and destroy() (if destroy is needed.)
Finally, if starting fresh, you might think about designing your entire application to nothing but the framework and your own pieces will simply be plugins.
The hard part is the registration process. Do you allow files to be uploaded to a web server? Does it write and re-read a config file listing plugins? I haven’t looked at DotNuke or PHPNuke or Typo, WordPress or any of the other ones. But the answer is in there.
Ruby on Rails has a built-in plugin architecture, but not one that you can upload files to, at least not w/o restarting the RoR app iteself, IIRC. It looks in a subdirectory for plugin subdirs for a file called init.rb. It just executes whatever is in that tile.
If you want to add a device like an external hard drive to your /etc/fstab file, it helps if you know the hard drive’s UUID. If you use K/Ubuntu, the following command will display the UUID, along with other useful information.
$ sudo vol_id /dev/sdo1 Password: ID_FS_USAGE=filesystem ID_FS_TYPE=ext3 ID_FS_VERSION=1.0 ID_FS_UUID=4857d4bb-5f6b-4f21-af62-830ebae92cff ID_FS_LABEL=movies ID_FS_LABEL_SAFE=movies
Start | Settings | Control Panel | System
Under Registered to, you’ll see user name & a 20-digit number. Digits 6 through 15 make up the CD key.
If you’re using an OEM version, the entire number is the CD key.
I upgraded my Ubuntu Linux desktop today from Dapper to Edgy. It appears that in
LABEL= no longer works, and you must now use
So my fstab now looks like this, for instance (these are all external drives):
UUID=a3d8a126-a7fc-4994-9675-748ed62c3109 /media/music xfs rw,user,noauto 0 0 UUID=e6e83a83-7487-4f22-a7ac-42cb100dfe24 /media/music-copy reiserfs rw,user,noauto 0 0 UUID=99198c52-3f9e-4255-9326-7891a90223ac /media/temp reiserfs rw,user,noauto 0 0 UUID=e0e73b81-f432-4b9e-918c-595fbfb1ac93 /media/data ext3 rw,user,noauto 0 0 UUID=2296551a-1d7d-4aff-9aea-873121464c9a /media/data-copy ext3 rw,user,noauto 0 0 UUID=e04e7b7a-b429-4a0f-a458-6af0c120bb9b /media/music-rock xfs rw,user,noauto 0 0 UUID=af39f5e1-1554-4dac-be5c-1f5028ee9503 /media/music-rock-copy xfs rw,user,noauto 0 0
Edgy also converts any old fstab entries for
/dev/hda1 and so on to the new UUID method as well.
For more on labels & uuid in fstab, see: http://ubuntuforums.org/showthread.php?t=283131
From Paul’s “The easiest way to fool smart people“:
ThereÃ¢â‚¬â„¢s a saying among con-men that smart people are easier targets, because they donÃ¢â‚¬â„¢t think they can be conned.
IÃ¢â‚¬â„¢m not sure if thatÃ¢â‚¬â„¢s true, but thereÃ¢â‚¬â„¢s one scam thatÃ¢â‚¬â„¢s almost guaranteed to make smart people switch off their brains and reach for their wallets. ItÃ¢â‚¬â„¢s a trick thatÃ¢â‚¬â„¢s used so pervasively in our culture, that once you become aware of it, you start to see it everywhere. …
Most smart people have a hidden weakness and itÃ¢â‚¬â„¢s this Ã¢â‚¬â€œ theyÃ¢â‚¬â„¢re absolute suckers for anything that sounds clever.
As soon as you start hitting people with technical terms, fancy graphs, famous names and the like, youÃ¢â‚¬â„¢ll immediately increase your credibility. If theyÃ¢â‚¬â„¢re smart, theyÃ¢â‚¬â„¢re even more likely to find themselves nodding in agreement. Many intelligent people would rather cut off a finger than admit they donÃ¢â‚¬â„¢t know what youÃ¢â‚¬â„¢re talking about. …
Even better, they can pretend to be teaching their audience something important. A person who was previously completely ignorant about quantum physics now feels as if they understand something about it – even if that something is absolute baloney. The audience have been fed ideas theyÃ¢â‚¬â„¢ll now defend even against someone who’s a real expert in that subject. Nobody likes to be told that something they’ve been led to believe is wrong. …
Consultants behave this way because they know thatÃ¢â‚¬â„¢s how to get a sale. Bombard people with clever-sounding stuff they donÃ¢â‚¬â„¢t really understand, and theyÃ¢â‚¬â„¢ll assume that youÃ¢â‚¬â„¢re some kind of genius. It’s a great way of making money.
Stock analysts, economic forecasters, management consultants, futurologists, investment advisors and so on use this tactic all the time. ItÃ¢â‚¬â„¢s their chief marketing strategy for the simple reason that it works.
While every website is different, Google has published some heat maps showing the optimal locations. No surprise that the best spots are middle of the page and left hand side. …
Google has also has published a list of the highest performing ad sizes:
- 336×280 large rectangle
- 300×250 inline rectangle
- 160×600 wide skyscraper
In light of the lawsuit against Hewlett-Packard over the expiration date of their cartridges, two ways to fix the problem:
2) Preemptive: Change the parameters of the printer driver
Search for hp*.ini … In it there is a parameter something like pencheck. It is set to 0100. … Set it to 0000 in the file and save the file and REBOOT.
From Jake Ludington’s “Create Podcasts Using Your PC“:
I’m walking through the steps required to record and post your own podcast using tools virtually everyone has or can easily acquire on a tiny budget. … I recommend starting out with Audacity, an open source audio recording application.