Thursday, 12 June 2003
Web-izing the Palm Pilot
Having a network-enabled (even if only through BlueTooth and infrared) is a heady experience; the ability to access the Web and sync applications from anywhere - really anywhere - is quite liberating.
However, after playing with the new toy for a few days, I’m left wanting more.
I want to sync my addresses and todo lists with online versions that now live in a LDAP directory and a Wiki, not Palm Desktop or Outlook.
I want to edit my Weblog in the memo pad offline, then connect and sync with a Web-based Weblog.
I don’t want to have to unpack my laptop every time I want to sync, or leave a Windows box on the network with a port open for all to look at my data.
In short, I want the Palm pilot to use a simple, well-understood, widely-deployed network protocol to synchronise, not some proprietary hack. TBL talks about Webizing things like languages (Guido, are you listening?); I want to see the same principles applied to the Palm platform, and Palm-based data.
How could this be done? Pretty easily, I think. There are already HTTP libraries available for Palm; with a URI for each data entry (each address book item, each todo, and each memo), judicious use of Digest Authentication and SSL/TLS and a little imagination, syncing your Palm Pilot would be as simple as a little bit of GET, PUT and DELETE on a Web server.
Configuring your Palm Pilot would be as easy as giving it a base URI to sync to; it can even contain the username and password.
The advantage is obvious - HTTP is the most widely-deployed application protocol in the world, and everyone knows how to use it. Designing your own backend - using CGI, PHP, ASP, JSP, Java Servlets or assembly - is a well-understood problem that millions of developers know how to approach. Or, just deploy a Web server that supports PUT and maybe WebDAV (see below) and let your data be written to actual, real life files. I know it’s horribly unfashionable, but some people find it useful.
But, you say, how do you really synchronise; how do you know about changes in the state of individual entries on the server end of things? Good question. There are a few ways about it.
For example, you could decide that the addressbook would be rooted at the URI path component ‘addresses’, so that My address might be
Then, to discover the state of all of the addresses on the server, you’d GET
which would return a list of ETags of the different addresses (probably content-negotiated; after all, you’d want to serve up a pretty HTML interface by default). This would allow the Pilot to figure out which resources have been added, deleted or changed since it last sync’d, so that it could fetch the appropriate ones.
The other way about it would be to leverage WebDAV. My understanding of it is still fairly embryonic, but I believe you could use PROPFIND to much the same effect. This, by the way, would allow you to manipulate your addresses and other information in a Web folder interface for almost no added cost - nifty!
In either case, delta encoding might help, but that’s just an optimisation.
This is all very ambitious, but I think it could start small. I’m looking for an application that takes the memos in a given category and PUTs them one-by-one to a Web server (with authentication!) so that I can edit a Weblog, and maybe a Wiki, on my Pilot. This is a good start, but it’s based on FTP.
Right now, I’m writing this in an e-mail message on the train, and when I’m done I’ll save it locally, then cut-and-paste it into Moveable Type when I get home. Aren’t we past cut-and-paste yet?