Archive for October, 2007

New Leopard Dock separator

Monday, October 29th, 2007

If you’re like me, you reject Leopard’s new 3D-looking Dock out of hand, preferring the new 2D smoke look also introduced in Leopard. All it takes is a simple defaults command to switch the Dock from 3D to 2D mode.

I think the new 2D Dock looks a lot cooler than the Dock in Tiger, except for one part that, for me, sticks out like a sore thumb.

It’s the separator between the applications and not-applications sections.

Here’s what Tiger’s separator looks like:

It's just a black line completely bisecting the Dock's background.

Simple; gets the job done.

Leopard, on the other hand, has a goofy-looking zebra crossing instead:

A zebra crossing, in case you don't know, is a series of white (or in this case, light gray) lines. It's named for the alternating black and white stripes of the zebra, which the zebra crossing vaguely resembles.

I can’t have that. So I fired up Lineform and created a new separator that I think looks a lot better:

My separator is a glowing white line.

Obviously, it’s modeled after the white LEDs that have replaced the black arrowheads to mean “application is running”.

In case you prefer this separator as much as I do, here’s how to install it:

  1. Download this image. I’ll assume you downloaded it to ~/Downloads.
  2. If you keep your Dock on the left or right edge of the screen, open the image in Preview and rotate it.
    • If your Dock is on the right edge, rotate the image left (⌘L).
    • If your Dock is on the left edge, rotate the image right (⌘R).
  3. Rename the image file. If your Dock is on the bottom, name it separatorstraight.png; otherwise, name it separatorstraight-horizontal.png.
  4. Open a second Finder window.
  5. Hit ⇧⌘G and go to /System/Library/CoreServices/Dock.app/Contents/Resources.
  6. Make a backup of the separatorstraight.png or separatorstraight-horizontal.png file from that folder.
  7. Move (⌘-drag) the image file from ~/Downloads to the Resources folder.
  8. Authenticate, if necessary.
  9. Open a terminal window and killall Dock. The Dock will relaunch automatically.

I haven’t made a 3D version. If you want one, post a comment. It shouldn’t be too hard to make, thanks to vector graphics.

X11 on Leopard is broken

Monday, October 29th, 2007

See also the follow-up: How to make X11 work better on Leopard.

In Leopard, Apple switched from XFree86 to X.org for its X11 implementation. This caused a few things to break.

Some of these are legitimate brokenness; some of these are just changes that break people’s expectations. I’ll attempt to list them all here.

.xinitrc is ignored (sort of)

In Tiger, when you launch X11, it runs .xinitrc, and .xinitrc runs xterm (unless you comment that line out).

In Leopard, X11.app is just a launcher. All it does is run /usr/bin/login -pf $USER /usr/X11/bin/xterm. In other words, its only purpose is to run xterm (semi-)directly, by itself—it’s not the actual X11 server anymore. When xterm starts, launchd sees it, notices that xterm requires X11, and launches the real X11 server (/usr/X11/X11.app) automatically. The X11 server then runs .xinitrc—but by this time, xterm is already running, so no changes in the .xinitrc can affect it.

This may be just an architectural change: You can’t rely on .xinitrc having been run by the time xterm is running. If not, it’s a bug: .xinitrc is supposed to have completed before any processes that use X11 begin running. I don’t know enough about X11 to know which is the correct behavior.

xterm ignores .Xdefaults when invoked by login

As mentioned above, the X11 launcher does its magic by invoking xterm through login. Unfortunately, when xterm is invoked as a login process (argv[0] starts with '-'), it ignores the contents of your .Xdefaults file—no custom fonts, no custom geometry, nothing; just a stock 80×24 black-on-white terminal.

I’ve created a different launcher that doesn’t go through login in order to work around the problem. I call it xterm.app. Since it doesn’t use login, xterm isn’t invoked as a login process, so it uses .Xdefaults, as it should.

Two X11s

X11’s new two-factor design is similar to the design of the mouse-based app launcher Sapiens. Like Sapiens, X11 now consists of a front-end launcher app and a hidden back-end application.

As with Sapiens, this gets confusing if you put the front-end launcher in your Dock, because when you click that tile, two things happen:

  1. That application exits immediately after you start xterm. Its little white LED comes on for just a fraction of a second.
  2. When xterm starts, launchd starts the back-end app to support it. The back-end app isn’t an LSUIElement, so it gets its own Dock icon.

The idea is that you should be able to simply launch an app that requires X11, and X11 will start automatically. If you use xterm as your terminal, and don’t use any other X apps (for which purpose you always had to launch X11.app directly), the best replacement (currently) is my app.

Option-click is broken

Laptops don’t have a middle mouse button, which you need if you want to paste into an X11 window. Thus, those of us with laptops have traditionally used X11’s “Emulate three-button mouse” feature, which maps option-click to middle-click and ⌘-click to right-click.

Unfortunately, this is broken in Leopard. Option-click does nothing; in xterm, ⌘-clicking on the scroll bar is acting like middle-clicking should, and ⌘-clicking on the terminal text area itself seems to do nothing but clear it.

It still looks like Tiger

quartz-wm draws X11 title bars with the Panther/Tiger appearance, rather than the new, darker Leopard appearance. It also has Tiger-sized rather than Leopard-sized drop shadows.

Windows don’t stop at the menu bar

You can’t move a regular Aqua window up underneath the menubar. But you can do this with an X11 window. It’s possible to become unable to recover the window this way.

Applications menu doesn’t work with arguments

Added at 15:44 PDT.

Apple’s X11 has always had an Applications menu that serves as a quick launcher for X11 programs. In Tiger, this launcher did the right thing with command-line arguments; either it went through the shell (perhaps using system(3)), or it split up the arguments and passed them separately to exec(3).

Leopard’s Applications menu is broken: It takes the entire command line you defined and passes it as one argument to execvp. It doesn’t know of any program by that suspiciously-long name, so the launch fails and you get an error message in the Console log.

Can’t drag a window to another screen

Paul Thomas mentions this in a comment here, but my friend Alan Boyd has more details:

It seems impossible to move an X11 window on to another monitor. The window itself is able to cross the boundary, but the mouse pointer is not. As a result, the entire window cannot be moved across. I’ve tried doing it in two steps, but once the window is placed on the boundary, it is not allowed to travel any further away from the original monitor.

X11 doesn’t activate like it’s supposed to

More from Alan’s post:

When launching X11 the menu bar is not set up correctly. Instead, the menu bar from the application that was active when X11 was launched is shown, rather than X11’s own menu bar. Clicking on the window that opens seems to rectify this problem.

Basically, X11 doesn’t come to the front when you launch the first process that requires it, like it should.

My xterm.app utility works around this bug, too: it runs its activate application "X11" script twice in order to make sure it comes to the front.


I will update this post as I find new bugs, and as I file Radar reports for these.

darcs is becoming my favorite VCS

Friday, October 26th, 2007

Here’s a real-world situation that tells you why I’m falling in love with darcs.

I’m working on a plug-in that logs all notifications posted by Apple Mail to a couple of files. The idea of this plug-in is to enable Mail-bundle developers to develop more reliable plug-ins by listening for notifications rather than posing as Mail’s classes or swizzling its methods.

(As you know, I don’t ordinarily announce what I’m working on before it’s ready; for this post, it’s important to provide context.)

The first revision of the plug-in used NSLog, but I found that this spammed console.log rather heavily. So I changed it to use two separate log files, which I write to using NSFileHandles.

Then I started work on a new feature: datestamps. While working on that, however, I noticed that I had forgotten to close and release my two file handles in -dealloc. Oops.

Now, remember that I had local changes. If this code were versioned in svn, I would have to:

  1. bzip2 the source file (which renames it as a side-effect).
  2. svn up the file in order to restore the pristine copy.
  3. Open it in a separate editor (so as not to lose undo history) and add the closeFile and release messages that I’d forgotten.
  4. Save and exit.
  5. Commit.
  6. Delete the committed file and bunzip2 my original one.
  7. Go through an svn diff and redo the fix in my modified file so I don’t clobber the changes in my next commit.

What a hassle. But darcs has first-class support for just this situation.

All I had to do was darcs amend-record. darcs asked me whether the most recent commit was the one I wanted to amend, then it offered me the choice of which hunks of local changes I wanted to include in the amendment. I said yes to the one with the closeFile and release messages and no to all the others. That’s all I had to do.

Let me summarize that for you: I was able to retroactively fix my previous commit while I had other local changes in the same file, without sweeping up those other changes into the commit.

That’s awesome.

Man, this song sounds familiar

Thursday, October 25th, 2007

Here’s the background music for episode 1, map 1 of Doom:

(Alternatively, you may prefer this version by Paul Burdette.)

And here’s the first twenty seconds (I’ll spare you the rest of it) of “Snake Devil” by Scary Kids Scaring Kids:

I found the similarity interesting.

Generating all combinations from an arbitrary number of sequences

Monday, October 22nd, 2007

In Python 2.5:

import itertools

def combinations(*seqs):
    def base_combinations(so_far, seq):
        for x in seq:
            yield so_far + [x]
    def nested_combinations(so_far, seqs):
        if len(seqs) == 1:
            return base_combinations(so_far, seqs[0])
        else:
            iterators = (nested_combinations(so_far + [x], seqs[1:]) for x in seqs[0])
            return itertools.chain(*iterators)
    return nested_combinations([], seqs)

Usage:

for x, y, z in combinations(xs, ys, zs):
    # Perform magic

If you have a better way, I’d like to read it.

(Thanks to Colin for inspiring me to write it, and renaming one of the nested functions.)

They Fixed the Leopard Folders… or not

Wednesday, October 17th, 2007

Last month, Brandon Walkin wrote an analysis of why Leopard’s new folder icons are broken.

Point number 2 is that Apple has removed all color from the distinguishing marks on folder icons. For example (cropped from one of his images):

Leopard's new Public Folder icon still has the old crosswalk sign on a folder, but now it's just embossed into the imaginary paper of the folder, rather than superimposed in full color.

Bland, isn’t it? And hard to spot at a glance among a folder full of other special folders, such as the folders in your Home folder.

So I was pleased to see this image on Apple’s page for the Leopard File Sharing features:

The Sharing pane in System Preferences has a giant Public folder icon, but with the full-color crosswalk sign restored.

Woo-hoo! They brought the colors back!

But then I looked more closely:

This is a close-up of the aforementioned Sharing pane. In the pane is a list of shared folders; two of the folders in the screenshot have special folder icons, and we can plainly see that these real folder icons are still embossed.

If they know how much cooler it looks with color, as evidenced by using it with color on the big image, then why not put the color back in the real icons?

From the reusable-slogans department

Tuesday, October 16th, 2007

Apple, in 1998, about Mac OS 8.5:

Get a new Mac for $99.

Apple, in 2007, about Mac OS X 10.5:

Add a new Mac to your Mac.

Also, both versions end in .5. Freaky!

Negative Turing Test fixes are done

Tuesday, October 16th, 2007

I’ve finished fixing number 12. Now, when you forget to answer the Turing test, your response will reappear in the comment form when the post loads.

For those of you who run Negative Turing Test on your own blag: WordPress has a bug as of both 2.1 and 2.3. Normally, when you submit a comment, WordPress sets three cookies that it uses to automatically fill in the Name, Email, and URL fields on the commenter’s future visits. When a plug-in like NTT deletes the comment, WordPress fails to notice and empties out the cookies. The result is that, when NTT deletes the comment, the name, email, and URL fields come back empty. (This is true with or without the fix for number 12.)

There’s nothing NTT can do about that—it’s a WordPress bug that I discovered in testing the fix for number 12. I isolated the problem and have already fixed it here, and I’ll soon submit a patch to the WordPress developers so that you can all have this fix as well. Until they accept it, here’s the patch for WordPress 2.3.

No more free stuff on Amazon?

Monday, October 15th, 2007

Well, this sucks. It’s now Tuesday (when all the new music and DVDs come out here in the US), so I just now went to the Amazon MP3 store to see what this week’s free song is.

No luck. Just a week after I blogged about it, it looks like Amazon has stopped offering a free song, as there’s nothing about it on the front page anymore. And in case you’re wondering, last week’s free song was there yesterday (I went there yesterday and saw it).

I hope this isn’t permanent.

UPDATE 2007-10-17: Woo-hoo! It wasn’t. The free song section is back now, and updated with this week’s song.

Patience is a virtue, I guess. ☺

What do the periodic scripts do?

Monday, October 15th, 2007

Mac OS X includes three scripts that run at different periodic intervals. There are a number of utilities—such as Macaroni (currently on sale through Friday), Cocktail, MacJanitor, and Anacron—that will run these scripts at your command or move them to a more convenient schedule (since we don’t all leave our Macs running all night). (UPDATE 2007-10-16 07:31: Not that that’s necessary. Tiger will run the periodic scripts at next opportunity, if the regularly scheduled time is missed. See Augie Fackler’s comment below.)

The problem is that these scripts have become voodoo, like zapping the PRAM or rebuilding the Desktop file or repairing permissions. People run them for no reason and any reason. Something wrong? Make sure you’ve run the periodic scripts!

The truth is: The periodic scripts won’t fix anything. At best, they’ll save you a very tiny bit of disk space.

Here, in plain English, is the full list of everything the periodic scripts do as of Mac OS X 10.4.10.

There are three scripts: “daily” runs at 0315 every morning, “weekly” runs at 0315 every Saturday, and “monthly” runs at 0530 on the first day of every month.

Daily

  • Clean out crash logs older than 60 days.
  • Delete temporary files used by the rwho command older than 7 days. If you don’t use rwho, this doesn’t affect you. (It doesn’t even seem to be enabled on my system. It may only be in use on Mac OS X Server.)
  • Cleans out the /tmp (temporary files) directory
  • Cleans out old temporary files for faxes.
  • Removes system messages older than 21 days. I don’t know of anything that actually sends a system message by the mechanism involved.
  • Sweeps up old system accounting statistics. These are solely for monitoring by a human administrator; they aren’t needed by the system. This feature may not even exist on Mac OS X, or may be only on Mac OS X Server; the folder that this cleans out doesn’t even exist on my system.
  • Makes a backup copy of the NetInfo database, which contains information such as Mac OS X account details. Unless you frequently add and remove such accounts, you probably don’t need to worry about making sure this runs.
  • Lists several things in the output:
    • Disks, with amounts of space used and free (df -k -l)
    • Recent backups made with the dump command
    • The mail queue (is your Mac a mail server? probably not, in which case this doesn’t do anything)
    • Network interfaces (Ethernet ports, AirPort cards, IP over FireWire), with their IP addresses and counts of packets sent and received
    • Uptime for all systems on the network, if rwho is active (it isn’t, on my system)
  • Rotates system.log. The script deletes system.log.9.gz, renames system.log.8.gz to system.log.9.gz, renames system.log.7.gz to system.log.8.gz, and so on. It then compresses the current system.log, renaming it to system.log.0.gz in the same step, and starts a new system.log.

Weekly

  • Updates the locate database. locate is just a find-files command.
  • Updates the whatis database. whatis is just a command that briefly describes other commands. For example, “whatis locate” describes locate as “find files”.
  • Rotates the log files of the FTP server, DNS, print server, mail server, NetInfo server, Xserve hardware-monitoring server, firewall, PPP (dial-up internet—remember that?) system, and security server. (The security server is responsible for authorization dialogs, the Keychain, and the sudo command.) Of these, most Macs have only DNS, NetInfo, and the security server actually in use; the others are not even running.
  • Rotates the log files of the web server. If you don’t have “Personal Web Sharing” (also known as Apache) turned on, this doesn’t affect you.

Monthly

  • Reports in the output how much time each user on the system has spent in a terminal in the past month (as a running count of days spent—it’s not broken down by weekdays or anything like that).
  • Rotates the file used by ac to tally up how much time each user is spending in a terminal (see previous list item).
  • Rotates the Installer log. I think this also covers Software Updates, but I’m not sure. It doesn’t cover third-party application updates.
  • Rotates the fax logs.

While all of that is nice to do once in awhile, you don’t need to do it and it won’t fix anything. UPDATE 2007-10-16 07:31: Further, as Augie points out in his comment, Tiger will run the periodic scripts at the next opportunity anyway, so there is NO reason to run them yourself.

Weird Target ad

Monday, October 15th, 2007

So I was flipping through the 2007-10-15 Target ad and I noticed this Halloween costume:

A photo of a kid wearing a really bad ninja costume.
“I look forward to killing you soon!”
“For the last time, go to your room!”

What kind of ninja costume is that?!

First off, the chestplate. This makes a certain amount of sense for, say, a Superman costume, but why would a ninja have one? More to the point, why does this chestplate look slightly H.R. Giger-esque, rather than having a six-pack?

And why is it red?

Then we come to the mask. The top half is riding way too high: you can see his hair. Ninjas are supposed to be unidentifiable; as such, the mask should completely cover the hair, so that the ninja’s hair color cannot be determined.

Then there’s the footwear—or lack thereof. Socks? Really?

Get some shoes! (Obviously, I mean soft shoes—not like hiking boots or something.)

Finally… the sword.

I realize it’s just a fake plastic sword that can’t really bisect anybody, but even so, YOU’RE HOLDING IT THE WRONG WAY, KID! The would-be-sharp-if-it-were-real side of the blade should face AWAY from your thumb, NOT TOWARDS IT!

You can tell how easily I notice details like these, that I noticed them on just a casual perusal of the Target ad.

How to make a custom bundle act as a file

Sunday, October 14th, 2007

Recently, Gus Mueller had a blog post about a new plug-in for his image editor Acorn. One thing I noticed is that the plug-in is delivered as a folder:

The plug-in is a bundle, but since it shows up in Finder as a folder, users can navigate into it and poke around. It’s unlikely that anything really serious will come of it, but you never know what the average user will wreck when he or she goes exploring in the internals of something.

Fortunately, there are two solutions.

The ad-hoc solution: Turn on the bundle bit

The Mac OS X Xcode Tools include a program called SetFile that, among other things, lets you set the bundle bit on an item:

% SetFile -a B ImageIO\ Export.acplugin

Note that case matters here: If we use an uppercase B, the bit is set; if we use a lowercase b, the bit is cleared.

Those of you who came from the Classic Mac OS may remember that the bundle bit originally indicated that a file contained a ‘BNDL’ resource (which simplified scanning a folder full of applications to see which ones had some icons to display). I doubt Mac OS X uses it for that purpose anymore.

Its new purpose is for directories: Finder will check for the bundle bit, and if it finds it, it will list the directory as a package.

Packages are directories that Finder treats as files (such as .app bundles). That’s exactly what we want. Here’s how the plug-in appears after running the above command:

(Note that to get the change to show in Finder, you have to either quit the Finder—such as by logging out—or use AppleScript. I use a command-line tool I wrote that calls -[NSWorkspace noteFileSystemChanged:] with the path to the changed item.)

The permanent solution: Define all items of this type as packages

In the current version of Acorn, it’s up to Jens Ayton and other plug-in authors to set the bundle bit on their plug-ins. I think a lot of host apps have this problem.

However, a host app can take care of this for all its plug-ins. All it has to do is have a declaration of its plug-in type (in Acorn’s case, that’s .acplugin) in its Info.plist, with LSTypeIsPackage set to true in the declaration.

Then, plug-in authors don’t need to do anything, because all plug-ins of that type will be shown in the Finder as packages, simply because the declaration in the host app’s Info.plist says so. No more setting the bundle bit; in fact, that bit is then ignored.

A productive Apple Bug Friday

Saturday, October 13th, 2007

I finally got around to filing a lot of the Leopard bugs I racked up after WWDC:

All told, I filed 15 of them.

Too bad I did it so late, though. It’s probably GM already.

What do different VCSs do when a file changes?

Thursday, October 11th, 2007

Here’s the scenario:

  1. You change a file.
  2. You invoke your-vcs-here commit file.txt (or equivalent).
  3. You write a commit message in the editor.
  4. You suspend the editor with ^z and make another change to a file. (Perhaps you started the commit and a build at the same time, and the build failed because you forgot a comma.)
  5. You resume the editor, and issue :wq or ^x^c to save and exit.

What happens?

Subversion

svn commits the changed version of the file—in other words, the file as it existed when the editor exited.

Monotone

mtn notices that the file changed, tells you “you can’t do that”, and throws away saves the commit message.

More precisely, it says:

mtn: misuse: file 'Test.txt' modified during commit, aborting

darcs

darcs commits the file as it existed before it started the editor. (Presumably, it copies changed files to a staging area rather than simply committing them from the WC.)

Mercurial

hg commits the file as it existed before it started the editor, just as darcs does.


UPDATE 2008-03-05: Jack, in a comment below, corrected me on what Monotone does with the commit message. I have applied this correction above.

UPDATE 2008-03-26: jpc, in a comment below, corrected me on what Mercurial does with the commit message. I thought that that’s what I had written, but I wrote the wrong thing: that it acted like svn, rather than darcs. I apologize for the brainfart, and I have applied this correction above.

I can’t tell whether this is spam

Wednesday, October 10th, 2007

Dear Candidate,

We have a job offer available for you. I am Darnell [deleted], Recruiting agent [deleted] Consultant Group Of Co., an establishment that deals in the import and export of Cocoa butter cream, Rubber, Cotton, textiles and fabric materials based in the UK.

We are looking for a trustworthy representative in the United State that will aid as a link between us and our customers in US for getting and remitting our payments. I would like to know if you are interested, respond only if you will like to work from home (part-time) and get paid weekly without leaving or affecting your present job.

(PAY IS GOOD)
if you are interested, forward the following info. to my email address which is :

[deleted]

Full Names.
Mailing Address.(PO BOX NOT ALLOWED)
City.
Zip-Code.
State.
Tel:
Gender.
Present Occupation.
Age.
Email.
Mode Of Identification.
Country:

I would be expecting your email ASAP if you are interested and want to know more about this job.

Regards,
Darnell [deleted]
For: [deleted] Consultant Group Of Co.

Points to consider:

  • The message did originate from LinkedIn‘s servers. (LinkedIn, for those of you who don’t know, is basically a social network intended to be used for corporate networking—i.e., getting hired or finding somebody to hire.)
  • I don’t have an account on LinkedIn.
  • So he must know my email address, in which case, why not email me directly?
  • This person seems to know that I work with Cocoa.
  • But didn’t notice that I’m a Cocoa programmer.
  • Much of the language reads like a Nigerian 419 letter (e.g., “We are looking for a trustworthy representative in the United State that will aid as a link between us and our customers in US for getting and remitting our payments.”).
  • OTOH, nothing about deposed rulers or millions of dollars.

I still can’t tell whether this is spam. :\

Free stuff on Amazon

Tuesday, October 9th, 2007

It’s a bit hard to notice—they don’t promote it as obviously as Apple always has—but the Amazon MP3 Store also has a free song of the week. It’s the third box down in the left column, and it’s titled “Weekly Free Download”.

And, of course, unlike most of Apple’s free songs, Amazon’s free songs are free in two ways: free of charge, and DRM-free.

I’ve been interviewed!

Monday, October 8th, 2007

I don’t ordinarily post to my main blog with a link, but this isn’t my average link. ☺

Jonathan Allen (also known as grauenwolf on reddit) interviewed me about how I do code review on Adium, after I mentioned it in a comment thread on programming.reddit.

In the interview, I talk about why you should review your fellow developers’ code and how it works on Adium. I say it’s worth reading for anybody who works on a software project with other people.

Tear down this wall

Monday, October 8th, 2007

Quoth MacJournals:

Thaler says, “But really, seriously, dude. The kid is cool. Don’t be like that. Don’t be a ZFS hater.” No one who reads our analysis in MWJ 2007.06.11 could possibly accuse us of hating ZFS.

Yes, but nobody read that analysis, because it is behind a pay wall; you can get a free trial subscription to read it, but nobody wants to do that either.

Of course, by “nobody”, I don’t mean literally zero people. Obviously, there are a few people with subscriptions, because otherwise MacJournals is not profitable. But it is irrational to assume that the entire internet should have read the article because you generously provide a free trial; most people, upon seeing your subscription wall, will say “fuck that” (or a cleaner equivalent) and move onto some other activity.

That’s assuming they even see a link to the walled-off article. I never did. The small (one-page) public article they had was the only one I saw.

Notes on Sapiens

Tuesday, October 2nd, 2007

Sapiens, which I found on the DFLL, is a new app launcher that serves as a mouse-based counterpart to Quicksilver.

(Of course, Quicksilver can do a lot more than launch applications. Sapiens can’t, so it’s a counterpart in only the app-launching aspect.)

One thing I noticed is that when it’s running, it gets two Dock tiles:

One of them is the application bundle as I see it in the Finder, which is what I added to the Dock myself, and which is no longer running; the other is the application behind the running Sapiens process, which appears in the Dock for only that reason.

That’s if you add it to the Dock from the Finder, of course. That’s what I did. If you just drag the running process into place, you’ll have only one tile.

The reason for this weird behavior is that Sapiens is actually two applications: The front-end app (which, I guess, just checks whether you’ve run Sapiens before and shows you the intro movie if you haven’t seen it yet), and the real app (which runs in the background and is the real app-launcher app).

Speaking of the intro movie:

The Resources folder for the front-end app contains the introductory movie as a Shockwave Flash (SWF) file, and an HTML file to display it.

What?

Seriously, this is a Mac application. QuickTime is always available, and it’s a lot easier to put a QuickTime movie into a QTMovieView (just type the name into the field in IB) than it is to put a Flash movie into a WebView. (And I don’t think you even need the HTML file. You could just load the SWF file itself into the WebView.)

The idea is cool, and the app seems to implement it well enough. If I see any other weirdness, I’ll add it here.

Growl Registration Dictionary Editor

Monday, October 1st, 2007

Since 0.7, Growl has been able to detect a registration dictionary in your application when your app launches—all you have to do is put it in a file with a certain name inside your app bundle. We call this feature auto-discovery or auto-registration.

I don’t think people have been taking much advantage of this feature, though, for two reasons:

  1. We didn’t mention it in the docs. (This would be the major reason.)
  2. There was no handy-dandy editor to quickly bash out a registration dictionary file.

Sure, we can all use Property List Editor, but that’s not a tool honed to the purpose. You have to rifle through GrowlDefines.h to find all the different keys you can use in the dictionary (the docs only cover the most basic set).

Well, now there’s a tool honed to the purpose.

Here’s beta 1 of the Growl Registration Dictionary Editor. I invite you to try it. Obvious things worth doing:

  • Creating new reg dicts
  • Editing existing ones
  • Importing a reg dict from your saved tickets (great for porting your existing app to use auto-reg!)

Feedback will be appreciated. If you’re subscribed to the Growl discussion list, you can send it there; if not, comments here are OK.

The source for the GRDE is in the Growl source repository.

If this announcement looks familiar to you, don’t worry; you’re not going crazy. I posted a similar message to the Growl discussion list, then decided to edit it a bit and post it here, since I know that at least several of you are Growl framework users who can put this app to good use.