Jonathan McDowell: Thoughts on calendars
I keep having what I've started to think of as the "calendar
conversation" with various people. I start by outlining what I think are
some fairly reasonable requirements. I'd like to have multiple calenders
viewable by different sets of people. So
Simon would be able to view my work
calendar, while Katherine could see my personal calender (and possibly
small bits of work calender where I was going to be away from home). I
also want to be able to view my calenders from a variety of devices. My
desktop, my phone and my laptop, for example. A web interface might be
nice too, though less important to me.
This doesn't seem like a lot to ask. My general hope is that whoever I'm
boring about this will then say "Oh, you need to look at foo and maybe
bar". After all, that's the case with most software related things I
need - it's already been done, and there's a good solution available.
What actually happens is the person I'm talking to nods in agreement and
says they'd like the same sort of things but don't know of anything that
manages it.
I think the problem comes down to syncing. Sharing my calendars with
other people is effectively allowing them to sync their calendar(s) with
mine, with some sort of filtering so we each see only what the other
wants to see.
Likewise, multiple devices is all about syncing. Changes made via one
method need to be visible on all of them (ideally as soon as possible).
Decent syncing also brings another advantage; client independence. If I
can reliably sync my information to a variety of devices/clients then I
can try a different client with little risk. We have this already for
mail - anything that can talk POP3, IMAP and/or mbox is easy to try out
and if you don't like it then you can just change back to what you had
before or try something else. Calendaring doesn't seem to have that.
I don't think that the interface a client exposes needs to be complex.
At a basic level what you need is a way to find out what the client
thinks has been added, removed or changed. You also need to present this
information in a standard format. Unfortunately iCal
(RFC2445) appears to be what we've
got here. I think it's a bit overly inclusive, which seems to lead to
incomplete implementations. Is there a complete iCal parser library out
there?
The best hope for syncing that I'm aware of is
OpenSync. And I haven't been that impressed;
while I managed to get it to move the contacts from my SonyEricsson
v600i to my Nokia E70 some of the details got mangled on the way. And
lack of things like recurring event support in some of the plugins (eg
the Google Calendar syncing adaptor) or
warnings about data loss in the Sunbird plugin aren't
encouraging.
Speaking of Sunbird,
I'm not impressed. Last time I looked (and it doesn't appear to have
moved very far since then) it didn't make any attempt to support
syncing. I'm sorry, WebDAV isn't a syncing system. It's a way of storing
files remotely. Sure, I found the interface ok, but I need to make my
calendaring data accessible for it to be useful.
The Windows approach to all of this seems to be ActiveSync and the use
of Outlook. I don't believe that it really handles more than the desktop
client and a remote device though? And group calendar sharing requires
an Exchange server? Not exactly the flexible solution I'm looking for.
I think a key point is that all of this needs to be reliable. I didn't
spend time debugging my OpenSync contact syncing issues partly because I
didn't notice straight away that there was a problem (it was with
additional details like email addresses rather than names/numbers IIRC),
but also because it was a lot of work to delve into the code and find
out just what on earth was going on. A while back I started looking at
writing some calendar syncing code (called Pony) and hit a problem with
complete inconsistency in handling time zones between clients that put
me right off. If it's not reliable it's not useful. If it's not useful
people won't test it and fix it.
I think a starting point is a reliable iCal implementation that can
handle everything in the spec. From there you can write plugins that
will take whatever bastardised variant your device/client supports and
translate to and from it. The syncing tool will need to keep a master
copy of all the data, because there's no guarantee anything else will be
able to support all the fields. A local complete copy should enable
appropriate frobbing of data to/from any device/client without losing
the information if a new device/client that can handle the data is
added.
Of course almost all the above applies to contacts as well; I have work
contacts, personal contacts, boring house contacts (plumber, garage
etc). vCard is the appropriate interchange
format for that (why did vCalendar become iCalendar, but vCard not
change?), but contacts feature similar issues to calendars I believe.
Does this seem reasonable? Please tell me someone has already done it.
Point me at Debian packages that will let me
sync my phone, my Google Calendar and a local client and make me very
happy. I have visions of a suite of tools all chatting over DBus; a
little client that looks for my phone to appear over bluetooth and then
syncs when it does, a little client that monitors Google Calendar for
changes. Sunbird reporting when something changes (and accepting
notification of changes). Some other client ([Dates
http://www.pimlico-project.org/dates.html]?) doing the same. Another
sending the data over WebDAV or SFTP so that my laptop can pick up the
info when I'm on the move.
I don't think I'm the only person looking for this sort of stuff. Where
is it?






