iCalendar files (.ics) - a couple ways to make or customize them
May 1, 2022 4:32 AM   Subscribe

iCalendar (.ics) files (electronic calendar invitations) are specially formatted text and, if you're a programmer, maybe you'll enjoy Christine Spang's "Email as Distributed Protocol Transport: How Meeting Invites Work and Ideas for the Future" (34 minute video) (an Open Source Bridge talk from 2015), as I did. And/or: if you need to make a slightly complicated .ics file to attach to a message or make available as a download/feed, to invite people to several events in a series, Marudot's iCal Event Maker makes that easier.
posted by brainwane (8 comments total) 33 users marked this as a favorite
 
This is relevant to my interests! A Fellow MeFite and myself built a calendar app using SMTP instead of calDAV etc because the various servers in 201x gave us more consistent behaviors. It is still running for a consortium of hundreds of offices. Over time their consolidation to exchange/office365 online made maintenance do-able.

Carefully made ical attachments in a multi-MIME message worked with everything from lotus notes to exchange to google and thunderbird and apple by placing the info redundantly in the body and the file.

Getting a single reschedule within a series to work with a recurring ID worked too, but got tricky. The only thing that felt hacky was that reminders from the server had to be versioned messages that had no new information; we couldn’t control the client side alerts well.

I am looking forward to finding out why this worked, so thank you brainwane! I don’t mean to turn this into a Hacker News thread but if you made something I’d love to hear about that too.


posted by drowsy at 5:43 AM on May 1, 2022 [5 favorites]


In the early days of the internet, especially during the BBS days, we used FTPmail and Gophermail, which were protocols over email. We did this sort of thing quite a bit.
posted by garbhoch at 5:58 AM on May 1, 2022 [4 favorites]


drowsy: thanks for asking!

A few years ago I was annoyed at a problem with the .ics files that my local art house movie theater proffered along with their film listings, so I hacked together something to take the URIs of a bunch of them and fix them and consolidate them into one multi-event file I could import into my calendar. [Their problem had to do with misleading DTEND values.]

And more recently someone pointed to the Marudot site to help me make a .ics feed for Volunteer Responsibility Amnesty Day. They made a file using that site, then I hand-fiddled with it to get it to indicate "all day in the user's local timezone" instead of 24 hrs starting at midnight UTC.
posted by brainwane at 6:12 AM on May 1, 2022 [3 favorites]


This is a remarkable coincidence. Just yesterday I was looking for a simple calendar feed of moon phases and wheel of the year dates. I ran into something on iCalShare that seemed to fit my modest requirements but the actual CalDAV endpoints provided by iCalShare all appeared totally dead. It occurred to me that algorithmic calendars such as this should be pretty easy to generate (modulo how non-trivial any date/time code winds up being) and I'd just need some calendar glue.

Looks like Data::ICal or the icalendar package are more than enough to do it without having to get too far down the abstraction stack. It's always important to me, though, to know the fundamentals of the tools I'm using.

On the subject of mail as transport, I used to be a much stronger advocate for this in the era before reliably sending and receiving mail became a Truly Hard Problem. Operating usable mail infrastructure used to be something an informed enthusiast or hobbyist could do with modest effort but deliverability has become a major obstacle to that now. Receiving mail is so fraught that every receiving MTA has to mount vigorous defenses and they're all very thorny to deal with for even the most kindly and friendly of senders. Operating such defenses is now a non-trivial exercise, too. A decently curated SpamAssassin is barely enough to protect recipients and keeping false positives from degrading deliverability is real work.

As such, I consider the ubiquity of email on the wane and its suitability as a readily available moderately reliable protocol transport no longer favorable.
posted by majick at 6:48 AM on May 1, 2022 [6 favorites]


This is nice and I haven't even watched the video yet.

I had vaguely noticed that cross-system calendar info was getting more reliable, and of course it's because of decades of people patiently thinking up fixes and writing the RFCs and -- deep work -- the big companies not breaking it on purpose.
posted by clew at 12:12 PM on May 1, 2022 [1 favorite]


@brainwane, I remember how good it was to have that discussion about volunteering, so that’s like compounded goodness!
posted by drowsy at 4:45 PM on May 1, 2022 [1 favorite]


This was really great, thanks for posting.
posted by kmt at 7:56 AM on May 2, 2022 [1 favorite]


I've been using Nate Henrie's ical generator to create ical files for all my classes as an end-run around the monkey's paw automatic syllabus software we're required to use that simultaneously ticks a box on our accreditor's checklist (every course has a documented syllabus!) and makes the course calendar nearly impossible to find and unusable in practice (none of your students will ever see the syllabus!). It's a little clunky, requiring a properly formatted spreadsheet, but it seems to work.

Marudot's website looks interesting. Maybe it will make next semester's calendar a little easier. Thanks for posting!
posted by fogovonslack at 11:31 AM on May 2, 2022 [2 favorites]


« Older Structural Stupidity   |   SWITCHED ON/SYNTHESIZER CLUB/PATCHING TODAY/VIDEO... Newer »


This thread has been archived and is closed to new comments