iCal calendar push

There’s a common misconception that iCal uses WebDAV to upload calendars to remove servers. This bites me every so often, as I wrote the Dopplr iCal upload code and people tend to assume that if iCal can upload calendars, so should any other local calendar client that uses WebDAV. And they can’t – things break.

iCal actually does the simplest thing that could possibly work, and I love it for this. You give it a upload url, a username, and a password. The calendar you’re uploading has a name. iCal url-encodes the calendar name, and builds a calendar URL that looks like http://upload_url/calendar_name.ics. Then it does an HTTP PUT (authenticated with the username and password) of the contents of the calendar to that URL. Then it gives the url to the user and tells them that their calendar is here.

(As an aside, this means that you can upload more than one calendar into Dopplr, as long as they all have different names.)

That’s it. Exactly one HTTP call, one verb (Well, ok, there’s another verb. When you unpublish something, iCal sends an HTTP DELETE. But you knew that). It’s a subset of WebDAV, which is why iCal can also publish to WebDAV servers. But I was able to implement 60% of the iCal upload feature in Dopplr during the tea break in the middle of the meeting where someone came up with the idea, because adding support for a single extra verb to a single extra path is easy. Implementing WebDAV? Harder to get right.

Google Earth placemarks from Dopplr

Thanks to a combination of dopplr, XML, mattb and Zimki, you can now display the locations of your Dopplr fellow travelers in Google Earth.

I’ve been wanting to use zimki to make a Google Earth KML file for some time now – not for any particularly good reason, mind, it’s just that Zimki is good at XML and Google Earth is fun technology. I just haven’t had an idea worth building till now. Then dopplr turned up, with its lovely geographical data and data on fellow travelers exposed in a simple XML format, and I had my project.

The next thing I’d like to do is expose information about the home cities of the travelers, to indicate people away from home, or perhaps an arrow to where people are going next. Any useful ideas?