Syndication of rules versus syndication of data

To follow up on last week’s item about parsing the kinds of dates and times that people actually write, Google Calendar’s Quick Add feature looks like the clear winner. Here’s a test page with expressions like:

Third Saturday of Every Month, 10 – 11:30 am

Let’s try the Chronic module from Ruby:

irb(main):007:0> Chronic.parse('Third Saturday of Every Month, 10 - 11:30 am')
=> nil

No joy.

As David French pointed out, Google Calendar’s Quick Add gets this right. Or anyway, close enough. There seems to be a small bug that pokes an instance of the event into today’s slot, whether or not today is a 3rd Saturday. But otherwise it works great.

There are tougher challenges on that test page, like:

9:00 am – 1:30 pm, North Conference Room 1
April: April 5 and 12
May: May 3 and 10
June: June 7 and 14

I doubt think anything we’ve mentioned so far can touch that, though I’d be happy to be proven wrong.

Meanwhile, the ability to capture recurring events like ‘Third Saturday of Every Month, 10 – 11:30 am’ for my aggregated community calendar has raised a new question. When I use Google Calendar for this purpose, its iCal export doesn’t enumerate the series, it defines a rule:

LOCATION:Cheshire Medical Center
RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=3SA;WKST=MO

When I pull that event into elmcity.info/events, the RRULE (recurrence rule) only fires once each time the feed is fetched. And that’s fine. I don’t necessarily want to see these recurring events on the the calendar into the far future.

But while I can syndicate these events directly from Google Calendar into elmcity.info, I would rather route them through Eventful.com. The reason is social not technical. Although I’m herding almost all these events into my aggregator for the time being, I want their rightful owners to claim them at some point and take care for them thereafter. Eventful is better suited for the kind of commons-based peer production I’m hoping to encourage.

But, I don’t see how to inject dynamic rules, rather than static events, into Eventful. You could run the rule yourself, then poke the generated events into Eventful, but that’d create maintenance woes when events are rescheduled, modified, or cancelled. I’d rather syndicate the rule than the data.

7 Comments

  1. The combination of Chronic + Duration gives you some amazing date flexibility.

    Duration is Chronic in reverse, go from seconds to something the user can intuitively read and understand.

  2. In the iCalendar (RFC2445) spec, the RRULE isn’t a script that gets run by some calendar server, it just describes the rules and exceptions. So, your program which ingests the iCal data would have to “expand” it.

    One thing to attempt: create a new calendar in Outlook, open the .ics file, then export all to iCalendar – I _think_ Outlook will “expand” it.

  3. > So, your program which ingests the iCal data would have to
    > “expand” it.

    Yes, I’ve now had occasion to do that. Of course many expansions are infinite unless arbitrarily bounded.

    Eventful does a bounded expansion for you, and doesn’t pass you the rule, it passes you the data, when you ask for an iCal feed.

    Google Calendar passes the rule which you get to expand.

    Interesting tradeoffs. Ideally you could ask the iCal provider, with a parameter on the URL, whether or not to expand and if so how far.

  4. I’m not sure if this was mentioned earlier in the series, but did Lotus Agenda do this correctly back in the day?

    Also, is there a way to get a ping of sorts when someone responds to this comment? Having to come back every once in a while just to check is pretty suboptimal.

  5. > did Lotus Agenda do this correctly back in the day?

    Can’t remember :-)

    > Also, is there a way to get a ping of sorts when someone
    > responds to this comment?

    That’s a good question. I thought wordpress.com did per-article comment feeds, but I’m not finding that feature now that you mention it.

  6. I’m working on a prototype event aggregator for the purposes of promoting event syndication. I’ve some research in this area, and wondered if you had pointers to information in the area of event syndication. What I’ve got so far is a few rdf namespaces one coult use to extend an Atom feed and a prototype that reads and caches Google Calendar feeds (working on a search engine). I plan to add the ability to parse ical “feeds” since it seems more events are available as an ical file than as atom/rss, but really, importing an ical file should work just as well… I’ve seen that Google Calendar will re-syndicate an Ical file as an atom feed.

    Anyway, got any research/knowledge in this area you’d care to share?

    Best Regards,
    Aerik

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s