The folks at Apple are supposed to eat their own dog food, but it seems to me that the people who write iCal clearly don't use iCal. That's the thought that occurred to me, anyway, as I contemplated having to switch away from my favorite, long-time calendering companion, Dave Warker's Remember? (see "Remember? Not Forgotten [1]," 30 June 2003).
Abandoning Remember? wasn't going to be easy, but this utility hasn't made the progress I'd hoped for in recent years; it's still a PowerPC app running under Rosetta in Snow Leopard, and its choice of years runs only to 2018 (believe it or not, I have events to schedule beyond that date). Despite my offers to help port it to Cocoa, this program has been giving off that old abandonware smell since its last update three years ago, and I started looking about for a replacement. But I was darned if I was going to spend any money (as I'm also a notorious cheapskate), so I started looking into iCal, which comes with Mac OS X.
To my surprise, iCal proved remarkably acceptable in many ways. It can post reminders (alerts) on the screen without the application itself actually running, and these can be "snoozed" temporarily, which was one of my favorite Remember? features. And it has a reasonably good notion of repeating events. The interface is fairly horrendous - configuring an event in Remember? is insanely slick and fast in comparison to all the clumsy clicking you have to do in iCal, and nothing will ever beat Remember?'s compact calendar display - but I could live with it.
But there was one thing that seriously threatened to put the kibosh on the whole deal: iCal was irreducibly organized into calendrical units. This means, for example, that if today is 30 July 2010 (a Friday) and you launch iCal, no view - not week view, not month view - will inform you that you have something important coming up across the week/month boundary at the start of August. In other words, iCal doesn't show you what's coming up: you have to hunt, paging through the future weeks and months yourself. And that was utterly unacceptable, especially in comparison to Remember?'s wonderful view of all events upcoming in the next 40 days that has greeted me every morning for almost as long as I've been using a Mac.
It looked like the deal was off, until I got to thinking: iCal does have one major advantage here; it is eminently queryable. And I don't just mean via AppleScript, which requires iCal to be running. The iCal "store" (the calendrical data) itself can be queried directly [2] through the system without launching iCal at all. So in theory I could write a little app that would show me the upcoming events, just as Remember? used to do.
At this point, however, one of my major virtues intervened - laziness. Why should I do any work? Surely someone has already solved this problem for me. A moment's googling brought me to the Web pages of Ali Rantakari, who has solved it indeed, and then some. His wonderful command-line tool, icalBuddy [3], looked to be just the ticket.
Before you could say "the first Sunday after the first full moon after the vernal equinox," I had downloaded icalBuddy, examined the ReadMe file, double-clicked on install.command, opened Terminal, and entered this little incantation: "icalBuddy eventsToday+40".
That command produces a textual list of all events upcoming in the next 40 days, without launching iCal - just the sort of thing I was after. Problem solved. All I had to do was remember to run Terminal every morning and type that command, and then leave the Terminal window open all day... Uh, no. That wasn't going to be acceptable. I needed a way to make sure I was shown this data every day, automatically.
Back to Ali Rantakari's Web site, where I found him saying, in effect, "If you like icalBuddy you're probably going to want to run it using GeekTool." I had never heard of GeekTool, but I quickly realized that it was the missing piece of the puzzle.
GeekTool [4], by Yann Bizeul, is a system preference pane along with a background application. Using the preference pane, you configure a rectangular area on your desktop - effectively, a borderless window that sits (by default) in front of your desktop background and behind your desktop icons - and displays the output of a shell command. Moreover, this shell command can be configured to be repeated at regular intervals.
So I set up the lower left-hand corner of my desktop to display the output of the following:
date; echo; /usr/local/bin/icalBuddy -nrd -nc eventsToday+80
What that means is: First, let's see the date and time right now. That way, I can gauge both when this window was last refreshed and how long I've got until the first event displayed. Next, put a blank line, to separate the current date and time from the events. Finally, use icalBuddy to show all events for the next 80 days, with no relative dates and no calendar names. The result looks like the screenshot.
[image link] [5]
The "80 days" specification is a bit misleading, since what I really mean is, "enough events to fill the window, if there are that many," and if there are more, I don't care. The point is that I always see what's coming up, and that's sufficient to remind me to open iCal and look directly if the occasion warrants. This GeekTool window is configured to refresh itself every hour, so I'm always up-to-date. The slight transparency (through which you can see part of a photo centered on my desktop) and the font and size are my choices.
Indeed, what struck me most about this whole process, as I congratulated myself on a job well done, was the generosity of the people who had provided the tools I was using. I don't just mean that the software is free; I mean that it gives me the power to do what I please. GeekTool doesn't make just one window: it can make many, and besides running a script, a window can also monitor a file or display an image. And icalBuddy, too, has a gazillion options of its own. Both these free tools solve real problems that many users might have, and they do so by letting the user customize their behavior.
So we live in a great time - an age of cool freeware tools. And thanks to these two, my switch to iCal has been made a lot less painful than it otherwise might have been.
[1]: http://db.tidbits.com/article/7249
[2]: http://developer.apple.com/mac/library/documentation/AppleApplications/Conceptual/CalendarStoreProgGuide/Introduction/Introduction.html
[3]: http://hasseg.org/icalBuddy/
[4]: http://projects.tynsoe.org/en/geektool/
[5]: http://db.tidbits.com/resources/2010-08/geektool.png