Archive for the 'Uncategorized' Category

MLB Standings 2.0

I just released an update to the MLB Standings widget. This update uses a new data provider, since the old one was removed and caused the old widget to no longer work.

You can download it at the MLB Standings website.

Mail Unread Menu 3.2.2

Apple has added some new functionality for mail plugins in Snow Leopard that requires us to have a whitelist for each version of Mail that is known to work with our plugins. Unfortunately, this means that I need to release an update to Mail Unread Menu pretty much every time there is a Mac OS X update, like there was today with 10.6.1. Unless there is a very major change to Mail, the Mail Unread Menu plugin doesn’t need to be changed in order to maintain functionality, so it’s not difficult for me to release these updates, just tedious.

All of that said, there is a new version of Mail Unread Menu available now, version 3.2.2. All it does is update the Info.plist in the mailbundle file, to provide compatibility for Mac OS X 10.6.1 and Mail 4.1. You can download it at the Mail Unread Menu website.

Snow Leopard Application Updates

Snow Leopard BoxJust a quick note to mention that I’ve updated Mail Unread Menu to version 3.2 and Status Screen Saver to version 1.3. These changes have been made to provide support for Mac OS X 10.6 Snow Leopard. Both of these versions of the applications require Snow Leopard to run, which will be the case for all versions of the applications going forward. The FAQs for each application contains details about Mac OS X 10.5 Leopard compatible versions.

All other applications and widgets should already be compatible with Snow Leopard.

Mail Unread Menu 3.2

  • New Features
    • Added the ability to show each account in the mailbox list.
  • Changes
    • Changed how return values are received from Applescripts, ensuring more stable execution of scripts.
    • Changed the mailbox selection script to improve functionality with mailboxes contained within multiple accounts.
    • The unread count is now updated when a message is opened in a separate window.
    • Built application requiring Mac OS X 10.6 Snow Leopard.
  • Fixes
    • Fixed a handful of small memory leaks.

Status Screen Saver 1.3

  • New Features
    • Updated the screen saver to build in 64-bit mode, requiring Snow Leopard to run.
    • Added module for Skype
  • Changes
    • Replaced the one Time module with two modules, for 12 hour and 24 hour time.
    • Updated the icon for the NetNewsWire module.
  • Fixes
    • Fixed a handful of small memory leaks.

NetNewsWire and Instapaper Updated

Just a few days ago, Marco Armet made some great updates to Instapaper. Included with these updates was a change to the structure of the “Read Later” URL, which makes the URL much shorter and much easier for Marco to update. As a result, my “Read Later in Instapaper” NetNewsWire script needs a bit of an update in order to work properly. You can still follow the steps at , but use this AppleScript file instead of the old one.


iMacQuarium In July 2005, I needed a hobby to keep myself occupied during my first summer home from college. I put out an ad on CraigsList for a cheap iMac shell and decided to make an iMacQuarium, using the directions available from I even decided to update a blog (using Blogger) with the status of building my own aquarium. (Oddly enough, designing the blog was my first experience with the latest amazing web technology: CSS) After just three posts and about halfway done with the project, work stopped and the empty shell and assembled pieces of plastic were put into the closet.

Just two weeks ago, after moving the pieces around to three different homes, Christine casually mentioned that we should finish up the project and I wholeheartedly agreed. (I now live about 5 blocks from where I first bough the shell, which was 30 minutes away from where I lived at the time.) Fortunately, the tank was already waterproof and it was just the final touches that were needed to finish the product. I finished fitting together the tank and the iMac shell, added a small IKEA lamp and a Whisper brand air pump and filter, added some plants and gravel, and we were in business. The final piece of the puzzle was an aquarium stand, which I quickly threw together with a 2′ square piece of plywood and three IKEA desk legs.

There are now three lovely goldfish swimming around inside of a blueberry iMac in my living room. And it only took four and a half years to complete.

Fish Fish iMacQuarium

NetNewsWire and Instapaper

One thing that I’ve really wanted recently is a way to post an article to Instapaper directly from NetNewsWire. A while ago, the developer of NetNewsWire Brent Simmons linked to this blog post by Bruce Walker, which provides an Applescript solution to this problem. It’s a good start, but I don’t like that it relies on Safari for the functionality.

So, here’s my solution to the problem. It takes a little bit more work to set up, but I think that it provides smoother interaction when rifling through your RSS feeds. Here’s how you do it:

  • Download this Read Later in Instapaper AppleScript. Place it in the NetNewsWire scripts folder, which is located at ~/Library/Application Support/NetNewsWire/Scripts/ or can be found by going to the Scripts menu in NetNewsWire and selecting “Open Scripts Folder”.

  • In your favorite browser, get the URL from your “Read Later” bookmarklet that was provided by Instapaper.

    Open the “Read Later in Instapaper” AppleScript via the Finder. Copy the URL from your bookmarklet and paste it between the quotes on the very first line of the script. Also, about half-way through the URL, you’ll need to find (.*\.) and replace it with (.*.), by removing the slash, in order for the script to work. (I apologize for this mess, but I think it’s the easiest way to get the Instapaper key specific to your account.) Save and close the script.

  • In NetNewsWire, open up a new browser tab by selecting Tab > New Tab or hitting ⌘T. Visit and sign in. Doing so will store your user credentials with Instapaper and does not require signing in again.

  • If you would like a keystroke for the command, open up the System Preferences and go to the Keyboard preferences. Select the Keyboard Shortcuts tab and click the + button in the bottom left corner. Select NetNewsWire from the applications list, enter “Read Later in Instapaper” in the Menu Title field and the keystroke you would like (I use ⌘I).

And that’s it! After all of this setup, it should be very easy to save a page to Instapaper directly from NetNewsWire. After selecting the “Read Later in Instapaper” menu item or hitting your custom keystroke, you’ll see the Saved page from Instapaper show up in NetNewsWire’s browser and then disappear, much like the standard Instapaper functionality.


A Better NSLog

I looked a bit today at improving the way I use NSLog() and wanted to share my findings here. Recently, I’ve had to use logging as a method of debugging while writing a screen saver, which has been unfortunate. However, I’ve been able to improve it using a #define in my code, inspired by the following sites:

  • The Big Bucket Blog just recently published a blog post which makes available a few custom BBTrace functions. These functions were a great starting point, but I wanted something more compact and that didn’t require adding extra files to my projects.
  • In the comments of the same blog post, Gus Mueller discusses his solution: a simpler #define within an ifdef block that removes logging in Release builds. This is great, but I don’t really need to worry about logging showing up in public builds since I tend to remove all of my logging before committing code to my VCS. Also, I didn’t want to have to add any flags in the target settings of my projects.
  • The Lap Cap Software Blog discusses logging in Leopard, with the goal of removing the log messages from the Console. Again, this isn’t important to me, but the interesting use of arguments to his JJLog() function are what helped me. Also, the idea of adding this code to the .pch file in any project was exactly what I was looking for.

So, after looking at these different options and deciding what information I’m looking for, I came up with the following directive:

#define LRDebug(...) NSLog(@"%s (%d) \n\t %@", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])

With this, I’m able to send LRDebug() arguments exactly as NSLog() handles them, using a formatted string. Also, I tried to get the most readable logging I could, so I added the line break and tab after the function and line number. So, some code could call LRDebug(@"The path is: %@", path) and the log would read:

-[Controller awakeFromNib:] (23)
    The path is: /Applications/


Roundcube Domain Autocomplete Update

Roundcube LogoIn this post from a while ago, I modified the RoundCube web-based email client to autocomplete the domain when typing in the login name. Here are some updated instructions so that it works with the newly-released version 0.1.

Open program/include/ On line 799, replace

$input_user = new textfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30) + $attrib);

with the two lines

$domain = preg_replace("/^www\./", "", $_SERVER['HTTP_HOST']);
$input_user = new textfield(array('name' => '_user', 'id' => 'rcmloginuser', 'size' => 30, 'onchange' => 'domainautocomplete(\'' . $domain . '\');') + $attrib);

(Note: if your Roundcube installation is located somewhere like, then change “www” in the first line to “webmail”. Basically, that line just gets rid of the first part of the domain, so you’re left with “” )

Also in program/include/, on line 73, after


add the line


Finally, in the directory program/js/ create a new file titled domainautocomplete.js and add this content

function domainautocomplete(domain) {
    var loginField = document.getElementById('rcmloginuser');
    if( loginField.value != '' &&
        loginField.value.indexOf('@') == -1 ) {
        loginField.value = loginField.value + "@" + domain;

iPhone SDK Announcement

So remember when MLB Standings was featured in the WWDC 2007 Keynote? Well, it’s happened again. In today’s presentation discussing the iPhone SDK, they had a screenshot of the webclip icons, showcasing a few webapps, including my product SportsTap! (It’s in the bottom right corner, there).

So, I’m not sure who at Apple puts the presentations together, but they sure do like my products. I appreciate it!

Here’s a screenshot from Apple’s Quicktime feed.

System Files

Backup System Files DialogAnother quick and interesting note about Time Machine. The other day, a friend of mine set up Time Machine for use, and decided that he didn’t want to backup the /System, /Library and /Applications folders, basically just giving him backups of his /Users folder. After going into the preferences and choosing Options to add these folders to the Do Not Backup list, an interesting thing happened. After selecting the /System folder, a dialog appeared saying “Would you like to exclude other files installed with Mac OS X, such as applications and UNIX tools?” Quite conveniently, Time Machine is already set up to do what my friend wanted to do. While mucking about looking into the Begin Backup app, I noticed the file /System/Library/CoreServices/backup.bundle/Contents/Resources/System.plist , which contains a list of all of these system files that Apple refers too and will exclude from your backup.

:: RSS Feed :: Archive :: Categories :: Admin