Over the last year, we’ve made some changes to how Calagator works with tags. Events have them, and venues have them, but they aren’t very useful if you can’t use them to link to other things. So we’ve been working on that.

Popular tags for events are displayed in the left sidebar of the main page:

Calagator: Portland's Tech Calendar

If you go to an event page that has tags, you will see something like this:

Calagator Code Sprint » Calagator: Portland's Tech Calendar

Click on any tag’s link and it will take you to a search page with all events (or venues, if you’re on a venue page) that share that tag name.

Calagator also recognizes a special kind of tag, known as a machine tag. Machine tags are a way of providing short pieces of structured data. In our case, we’re using them to link to the Plancast or Upcoming pages for an event, letting you see who else you know might be attending.

Lunch 2.0 at the Portland Development Commission » Calagator: Portland's Tech Calendar

Not only that, but thanks to a contribution by Max Ogden, Plancast tags do one more thing:

Portland Ruby Brigade monthly meeting » Calagator: Portland's Tech Calendar

All attendees for that plan are displayed on the Calagator event page. Pretty neat.

The basic format for a machine tag is ‘source_name:reference_type=reference_id’. For Plancast, that looks like ‘plancast:plan=plan_id’ (you can get the plan id from the url on their site).

Our tag model includes a list of sources and types of links currently supported. In addition to the two sources mentioned above, useful for events, you can tag venues with the relevant Foursquare, Gowalla, and Shizzow links. We also have support for ePDX tags, which can be used to link to things like a sponsoring company, the person who’s organizing an event, or the user group the event is part of.

Seeking Gardeners

October 26, 2008

Regular Calagator users may have noticed a upswing in spam lately. We seem to be a new favorite target for people looking to promote sales of certain medications and photos of female celebrities. The Calagator development team has been working to filter against spam entries, but as anyone with an email address knows, even the best spam filter sometimes lets things slip through.

We often talk about Calagator as a wiki-like collaborative calendar, so we borrowed an idea from the wiki world, and added event and venue versioning. This way, if someone (human or bot) decides the SAO Poker Night really needs a bunch of links to [insert generic spam topic here], anyone can roll back the entry to the previous version, cleaning it up.

Here’s how it works:

Go to the entry you want to fix and click the edit link.

DorkbotPDX Meeting » Calagator_ Portland_s Tech Calendar
Uploaded with plasq‘s Skitch!

Select a different version number, and the edit fields will revert to the content for that version.

Portland's Tech Calendar
Uploaded with plasq‘s Skitch!

Then click the save button, and you’re done. A new version with the reverted content is created, and the spammers are foiled (for now).

How do you find out when there’s an entry that needs some cleanup? Calagator now has a Recent Changes page, with a matching Atom feed you can subscribe to in your favorite newsreader. Help us by keeping an eye on things, and fixing spam as it occurs. If you see a wave of new spam the filters aren’t catching, let us know on our Get Satisfaction page. Filtering works well against predictable bots, but less so with human tampering, so even as our filter gets better, we still need your eyes to make sure Calagator remains a great, useable calendar for the Portland tech community.

Adopting hCal

February 2, 2008

We’re using hCalendar (or hCal) for importing events. If you would like to share your events with calagator.org right away, here’s an example, followed by a short explanation of the markup needed.

<div class="vevent">  
   <a class="url" href="https://calagator.wordpress.com">https://calagator.wordpress.com</a>
   <abbr class="dtstart" title="20080216T10:00">February 16, 2008, 10am</abbr>-
   <abbr class="dtend" title="20080216T18:00">6pm</abbr>
   <span class="summary">Calagator Codesprint</span> -  at
   <span class="location">Cubespace</span>, 622 SE Grand Ave. Portland, OR 97214
   <div class="geo">:
      <span class="latitude">45.51845</span>
      <span class="longitude">-122.66056</span>For more information, check with:
      <span class="contact">Audrey Eschright</span>
   </div><!-- end geo -->

   <span class="category">calendaring</span>
   <span class="category">aggregation</span> 
   <span class="category">alligators </span>

   <div class="description">
The Calagator Development Team is meeting every 2 weeks to create a calendar aggregator for local technical events. We're working with Ruby On Rails, writing documentation, gathering information about standards, and trying to increase the use of calendar standards like hCalendar.
</div><!-- end vevent -->

Today, Calagator recognizes the following classes:

  • vevent
    • dtstart (without timezone information)
    • summary
    • url

The import routine also recognizes multiple events on a single page.

Venues can be added through the web interface. The hackers will be working on recognition of the ‘location’ class soon.


To make a valid hCal markup, you need to define three classes at a minimun:

  • vevent
    • summary
    • dtstart

These classes can be added to any HTML tag and do not need to be styled. Once you’ve added these basic tags, Calagator will recognize the event.

Other tags you might consider using include:

Once you’ve done that, you can test our import at http://calagator.org/sources. If there’s a bug, click the Bugs link in the upper right hand corner and let us know what went wrong.

If you’d like to test your hCal before submitting to the Calagator, there is a Firefox plugin called Operator. Operator detects many different microformats in a webpage.

If you’re interested in learning more about what hCal has to offer, have a look at the microformats.org hcalendar explanation. There’s also a cheatsheet, and a list of hCalendar implementations.