One of the liabilities of having worked in the Mac world for nearly 20 years is the constant need to move both data and basic capabilities forward to keep pace with the state of the industry. Sometimes, as with Nisus Writer Classic, the move is forced by a technological change (the loss of the Classic environment), but in other situations, it's harder to find the excuse to make the move.
That's what happened for us with calendaring. We've used Now Software's Now Up-to-Date since the mid-1990s, and it has served us well. Although iCal has improved since its release a number of years ago, it has always suffered from a basic limitation: you can't share calendars in a read-write fashion. That is, if Tonya puts an event on her iCal calendar, although I can subscribe to her calendar and see that event, I can't reschedule or otherwise change that event. (The other limitation, of course, is that you need either a MobileMe account or a private server on which to post the shared calendar; we have both, but not everyone does.)
iCal's read-only approach makes no sense for us beyond the most basic usage patterns, since many of our events revolve around shared topics, such as Tristan, TidBITS, or specific Take Control book projects. If Tonya were to put an event on her calendar for Tristan's fencing lesson, for instance, and the time changed, I'd have to ask her to change the time or go do it myself on her Mac. This is yet another case of Apple's sharing myopia - for Apple, sharing is too often a look-but-don't-touch affair (think of iPhoto and iTunes if you don't believe me). That's not how we teach children to share, and I think it's unnecessarily limiting in the computer world as well.
Choosing an Alternative -- Although Now Up-to-Date kept working through some lean years during the Mac OS X transition, and although Now Software revitalized the product with version 5.0, the code base was old, so the company has been working on a complete rewrite codenamed Nighthawk. Nighthawk may ship soon, but the wait has been awfully long. We considered other calendaring programs but settled on iCal to take advantage of some of the other integration between iCal and the iPhone/iPod touch, and with applications like the to-do program Things. It's another case where it eventually proved too hard to avoid Apple's solution, despite its remaining warts.
Our other need was to be able to share calendars not just with each other, but also with the many people with whom we work on TidBITS and Take Control. The program that makes the kind of sharing we want possible is BusySync, from BusyMac. BusySync is a clever utility that synchronizes iCal calendars with other Macs on a local network, with Macs out on the Internet (if you have a static IP address), and with Google Calendar. With BusySync, Tonya and I don't have to have read-only views of each other's calendars; instead, we can actually share specific calendars. Any event Tonya creates, I can edit if necessary, and vice versa.
Where BusySync gets even more interesting is with its capability to publish and subscribe to Google Calendar. With it, I can publish our Home calendar up to Google Calendar and share it with our assistant. Her copy of BusySync is set to subscribe to our Home calendar, so she can see when we have free time for an appointment, make the appointment for us, and put the event on the Home calendar in her copy of iCal. As soon as she does that, her copy of BusySync syncs her changes up to Google Calendar, and then a copy of BusySync here syncs them down to our copies of iCal. It's really very slick, and provides exactly the read-write sharing that iCal's normal publishing to MobileMe doesn't.
Of course, in between when we started this transition and when I wrote this article, Google officially released its CalDAV support, which enables read-write sharing of calendars between iCal and Google Calendar. Doug McLean looked at Google's Calaboration program and wrote about it in "Google Calendar Gains Official CalDAV Support" (2008-12-03). I haven't tried Calaboration myself, since it lacks a number of features we have now with BusySync, most notably read-write synchronization of calendars on our iPhone and iPod touch. (For a more detailed comparison, see BusyMac's comparison chart.)
I did run into a few minor and unreproducible quirks when setting up BusySync initially, but John Chaffee of BusyMac was highly responsive, thanks in part to a clever capability built into BusySync that bundles up relevant logs and attaches them to an email message to their support address.
Sync Carefully -- With power comes responsibility. Since BusySync lets anyone both publish and subscribe, you need to be careful that you set a single Mac as the primary publisher, and have everyone else subscribe to the correct published calendar. Although BusySync has checks in place to prevent duplication (so you can't subscribe to the same calendar locally and via Google Calendar, for instance), I have a feeling that wanton publishing and subscribing from multiple Macs is a recipe for confusion.
Similarly, you have to be careful with adding attendees to events, since iCal happily notifies them via email of the event, including the event as an attachment in the email. And by default, Mail and iCal collaborate such that Mail automatically puts received events into iCal (see "Configure Mail to Prevent iCal Spam" by Jeff Carlson, 2008-04-10). So, if I create an event that Tonya needs to know about and add her as an attendee, she must avoid adding that event from Mail to iCal, or otherwise it becomes a duplicate that her copy of BusySync immediately shares back with me. The solution here seems to be to turn off the Automatically Retrieve Invitations from Mail setting in iCal's Advanced preferences.
A corollary is that you want to think carefully about which Mac should be the primary publisher. Consider for instance, our Home calendar. I publish it from our always-on Power Mac G5 server over the local network for all of our other Macs to subscribe to locally, and that G5 also publishes it to Google Calendar for our assistant. If I instead used my MacBook as the primary publisher and conduit, Tonya and our assistant wouldn't be able to sync events in that calendar while I was travelling. Those changes would sync as soon as I came home and completed the synchronization circuit, but that's not ideal. If you travel a lot, it might make the most sense to have Google Calendar be the primary publisher, since that way you can sync whenever you have an Internet connection. Be careful with Google Calendar and time zones, since we've run into as-yet-unsolved problems with some events changing times when synced with people in other time zones.
Besides, changing which Mac is the primary publisher (which we did recently after the Power Mac G5 changed from being my personal desktop Mac to being our internal file server), is tricky. I believe it's best done by backing up iCal on the publishing Mac, breaking down all the rest of the sharing, setting up iCal on the new Mac with the backup, and setting everything up again from scratch. It's also good to stop publishing to Google Calendar, delete the calendars already published to Google Calendar before the transition, publish the calendars from the new Mac to Google Calendar again, and then share those again within Google Calendar. Those subscribed to your Google Calendar via BusySync will need to subscribe again to the newly published calendars. In short, save yourself some effort and set up BusySync as the publisher on the correct Mac to start.
Luckily, all this is made safer by the fact that BusySync automatically backs up iCal every day and retains 10 days of backups in ~/Library/Application Support/BusySync/Backups.
Doing the Export/Import Dance -- Some people are happy to break from the past and move to a new system without bothering to migrate old data forward. That's not our style, so I put some effort into figuring out how to import our years of calendar information from Now Up-to-Date into iCal. The process was not straightforward at the time. There's now a utility that will do all this for you (see "Easy Now Up-to-Date to iCal Imports", 2009-01-04), but I'm leaving this information here in case it's of use in similar situations.
Now Up-to-Date knows how to export events to tab-delimited text files, which would seem to be an entirely reasonable approach. However, iCal, for reasons known only to Apple, can import only from another iCal file, from Microsoft Entourage, or from a vCal file. According to Wikipedia, vCal is an open-source calendar format for the Vision personal information management program, and not to be confused with vCalendar, a more well-known standard for calendar data exchange that has since morphed into the iCalendar format. Putting this all together, I suspect that what iCal considers a "vCal" file is actually a vCalendar file, or in the modern world, an iCalendar file (which is in turn sometimes known as an "iCal file" - augh!).
Regardless of all the possible meanings of "vCal," the best way I was able to find to convert Now Up-to-Date's exported text file into vCal format was by importing it into Palm Desktop 4.2.1, which I happened to have on my Mac from years ago when I last used a Palm device. The program is hard to find on Palm's servers, but this link will download it if you need it.
Once all the data was in Palm Desktop, it was easy to export it in vCal format, and import into iCal. However, it took me a number of tries to get it right, for reasons I didn't anticipate initially.
- Now Up-to-Date has an export format for Palm Desktop, so I figured I'd choose that. It worked, but didn't include things like the description field. After some fiddling, I realized that Palm Desktop had an option to import a text file exported from Now Up-to-Date that did include more fields. So the trick was to avoid the Palm Desktop-specific export option in Now Up-to-Date and use the Now Up-to-Date-specific import option in Palm Desktop.
- Now Up-to-Date's concept of categories matches iCal's concept of calendars, so it made sense to export certain categories from Now Up-to-Date separately, so they could be imported into different iCal calendars. I separated out birthdays and anniversaries and TidBITS events, and then lumped all the rest of the events into an iCal calendar called Historical.
- Repeating events, such as birthdays and reminders to take out the recycling, were a problem, since Now Up-to-Date simply exported a normal event for each repetition, there being no way to indicate that an event was to repeat. I resolved this by opening the exports (which were text files, remember) in BBEdit and using its Process Lines Containing feature to find and delete unnecessary events. After importing into iCal, I had to turn all the birthdays back into yearly repeating events manually.
- For reasons I still don't understand, iCal made some mistakes on importing, automatically making some random events repeat, causing some events to become multi-day events, and so on. I had to fix all these spurious events manually. It's possible that my mistake was in importing into the Tiger version of iCal on the Power Mac G5, rather than the Leopard version on my MacBook - I simply didn't think of that until it was too late.
In the end, I created a number of different calendars in iCal:
- Home: For personal events, to be shared with our assistant and my father, since we often coordinate working together on firewood, garden stuff, and the like.
- Holidays: This is actually a group of calendars, one for the birthdays of friends, several for the birthdays of the different sides of our extended family (for use with iPhoto when making calendars for specific people), and an edited calendar of U.S. holidays that I also use for the iPhoto calendars.
- TidBITS: TidBITS-specific events and tasks, to be shared with TidBITS staff and translators who might want to see our rough editorial schedule.
- Take Control: This too is a group of calendars, one for each ebook that has activity. The goal here is to share each book's calendar with the author and editor, so they can see our publishing schedule.
- Historical: This calendar holds all the miscellaneous events from Now Up-to-Date that we might want to refer to in the future. Its events run from the early 1990s through October 2008, and it can be turned off entirely to speed up searches.
iCal Annoyances -- Although BusySync eliminates the primary problem with iCal, I'm still not particularly impressed with iCal, even in comparison to the ancient Now Up-to-Date. Plus, since I used both the Tiger and Leopard versions simultaneously for a while, I'm a bit irritated that I prefer aspects of the Tiger version.
The main thing I don't like about iCal is that although you can set the color for each calendar (which uses it for the text color for each event in the calendar), iCal desaturates those colors, making them almost pastel. It does this so it can indicate selected events by making their colors more vivid. The end result is that it's more difficult to read most of the text than is necessary, and the whole thing looks a bit like an Easter egg display. On my MacBook screen, this is particularly troubling at certain screen angles. I've looked on the Internet for solutions to this, and found none, although I've seen complaints from people who are color-blind and can barely see the pastels at all.
Similarly, although iCal has a keyboard shortcut to select the current day (Command-T), it indicates the selected day in Month view (my preference) with such a light color that I can barely see it. Again, this is somewhat dependent on the particular monitor and screen angle, but there's no way to change the color within iCal.
Creating events in iCal's month view is easy; just double-click the day to make a new event in the selected calendar (in day and week views, just drag from the start to the end times). In the Tiger version, you have to tab through the month/day/year for the From and To lines, before you can get to the time. The Leopard version jumps over the dates automatically, assuming they're correct, and if you do want to enter dates in the Leopard version, you can use the / to move from field to field. That's better, although I still find it clumsier than in Now Up-to-Date.
However, the Tiger version displays event details in a drawer, whereas the Leopard version instead shows a pop-up balloon. The problem comes when you want to edit an event, since in the Tiger version, you can just select it and change the details in the drawer. In the Leopard version, you must double-click the event to display the pop-up balloon with the event details, then you must click the pop-up's Edit button, and only then can you make your changes. A tip: if you want to change only the event's title, Option-double-click it to edit directly. You can select an event and press Command-E to edit it directly (thanks to Chris Pepper for pointing this out!), but weirdly, you press Escape to accept your changes; Escape normally cancels changes in a dialog. From a usability standpoint, editing events in Leopard's iCal is a distinct step backwards. We can only hope that Apple improves the iCal user experience in Snow Leopard.
Moving On -- Despite the non-trivial amount of effort that went into moving many years of events from Now Up-to-Date to iCal and setting up BusySync to make up for iCal's shortcomings, the end result is worth it. Tonya and I can share calendar information with each other and with the people with whom we work, and we can sync events seamlessly back and forth with our iPhone and iPod touch. And equally important, now that we're using Apple's recommended solution, we'll be able to take advantage of the numerous add-ons and utilities for working with iCal data.