I chose to use Google for my calendar. I already use Google for some of my mail and I sync contacts with Thunderbird using Zindus. Using Google means that my information is available on any platform. Google provides a nice sync interface for the iPod touch.
One annoying thing about the Google calendar integration with the iPod Touch is the lack of the ability to choose the color of the calendar. You need to choose to sync one calendar, then if the calendar color isn’t what you want, tell google to not sync the calendar, wait 10 minutes, then tell it to sync again. Repeat until you get the color you want.
I started writing a python program to do the calendar conversion as jppy gave me acces to the Palm database and Google has a python version of their API. However I found the python API to be lagging behind the Java API in features supported, such as birthday and anniversary information. So I decided to use Java to interact with Google. In initial testing this worked well, however I needed a way to access my Palm database from Java.
Instead of direct access I choose to write a C++ program that read the Palm database using the pilot link library and then output using Google protocol buffers. This kept me from having to rewrite the code to parse the palm database and give me a format that I could read in most any language. The C++ program is available on github as palm-export. The Java program for importing into Google calendar is also on github as calendar-import.
As of this writing I can import all calendar information except recurrence exceptions. This is when you have a repeating event and have chosen to cancel some of the events in the series. Google supports this concept and I have even gotten it to work for some events. However since I haven’t gotten it to work for all and I can’t tell when it’s not working, I came up with a workaround. Instead of creating the exception I create a new single event for the exception with “EXCEPTION:” prepended to the event name. This way I can recognize when one is canceled and I can just cancel the single event in Google, which works fine.
After the import I found a few of my appointments off by an hour. I suspect some timezones on recurring events didn’t get in correctly, so you’ll want to check appointments that are created with timezones in your Palm.
A couple of things to note. The iTouch doesn’t support all repeat types nor all alarm durations that the Palm does, however Google does. What this means is that these will show up as “Custom” in the iTouch and cannot be entered directly. So when you want to use an alarm or repeat type that the iTouch doesn’t support you’ll need to use the Google web interface to the calendar and then wait for the data to sync, which is pretty fast.
Recently (2/17/2011) I’ve noted that Google sometimes has trouble loading all of my calendars so they will disappear from the iTouch and then come back later. I’m hoping this is just a temporary situation and will be corrected in the future.