I like calendars. I've been using a hand-rolled web based solution - called, cheesily, ourCal - for about 5 or 6 years now. I hacked it up over an evening and have never really felt the need to make it any more complicated.
Yesterday someone pointed me towards Lightning - a calendaring extensions for Thunderbird.
So far I'm loving it - there's all the standard multiple calendar feeds malarkey that you'd expect and I've copied across my Dopplr feed, the London.pm event stream plus a bunch of others like UK and US holidays. So far so normal - although I love that it's there in my mail client rather than being a seperate app, yet manages to be completely out the way unless I want it.
However it also automagically works with the work Exchange meeting requests which has been a bit of an issue for me in the past - there's no way I'm using Outlook but it's also too easy to miss meetings under plain Thunderbird.
So basically I'm a happy bunny.
Buoyed by this boundless joy, plus the fact that I got my head around, and solved, a particularly tricky asynchronous, distributed, partitioned race condition at work and instantly had a burst of productivity, along with the fact that I made a kick ass Elk cottage pie (the Elk had a strong flavour like lamb but was less greasy than beef and responded really well to the browning then braising) and got to catch up with an old friend - I was inspired to hack iCalendar support into ourCal.
I remember first playing around with RFC 2445 way back in the days with Reefnot and it was a pain in the arse. Under Perl we got a rag tag of projects that sort of had support like Net::ICal, Text::vCard and Net::vCard but which really just didn't seem to work like they should do. To be honest I just sort of despaired and figured it was one of those Hard problems that would never get a non-sucky interface.
Then Jesse Vincent and the crew at Best Practical produced Data::ICal which rocked and was a joy to use. I was so grateful I hacked in parsing support. Nowadays it takes a trivial amount of code to add .ics file support to Perl app and so I've grafted it onto everything and anything that makes sense.
I also have to thank my past-self. The textual descriptions in ourCal use the Chump markup, a sort of pre-cursor to Textile. I wrote Text::Chump and clearly I was a lot smarter back then because in standard usage it's trivial to use (although I possibly should have created a static method that DTRT) but thanks to a rather nifty extension mechanism it's dead easy to add new markup or to change the behaviour of the existing markup. Since iCalendar doesn't understand HTML I've rejigged the layout and used the URL property instead for links and everything works just tickety-boo.
I knew that extra effort back then was worth it.