Code Sprint Notes and Status Reports

Shawna C. Scott edited this page Jun 6, 2015 · 19 revisions

Code Sprint Status Reports


This page describes the code sprints that helped build Calagator. Earlier on, we would have many people meet together at a venue for big, formal code sprints, followed by sessions to massage the resulting code into something we could deploy. Later on, development shifted towards individuals or smaller teams of volunteers working separately at informal hacking sessions.

#June 6, 2015

  • Michael
  • Pat
  • Andrew
  • Audrey
  • Reid
  • Shawna
  • Mary Anne

Worked on: Shawna and Reid archived and reformatted wiki documentation. Pat and Michael audited wiki documentation articles. Andrew audited the about language. Mary Anne audited the gem installation process.

#May 16, 2015 Participants:

  • Audrey
  • Reid
  • Shawna
  • Pat

Worked on: Pat reviewed UX bugs and worked on filing more mobile design ones. Shawna worked on adding useful tags to bugs, in the style of ones used on Growstuff. Shawna and Audrey worked on #364

#April 4, 2015 Participants:

  • Anne
  • Natalie
  • David
  • Shawna
  • Finn
  • Reid
  • Eric
  • Sam


New Issues:

Next Time:

#March 21, 2015 Participants:


  • Finn, Michael, David, and Chris are first time contributors--thank you!
  • Shawna worked on updating wiki notes, issue tracking triage, adding a note about ignoring the seed file in with PR #342, and paired with David on #324 (PR #337).
  • David worked on #324 (PR #337).
  • Reid worked on writing release notes since we have none since 2013, and merged #314! :tada:
  • Audrey worked on server configuration for the #314 merge.
  • Chris and Finn worked on an intermittent test failure
  • Michael got set up to contribute for next time.

New Issues

Next Time

  • Update the README to have it make sense for the new engine format
  • Release Calagator as a non-pre gem
  • Any of our open issues!

#March 14, 2015 Participants:


Micah worked on updates to paper-trail-manager to get ready for #180. Audrey and Reid worked on updating the servers to prepare for the impending merge of #314. Shawna took notes. Ariel worked on issue triage and identifying beginner-friendly issues. Eric worked on updating Vagrant to use a Docker engine. Amy and Maureen worked on things for other projects.

New Issues


Next Time

Things that would be useful:

  • More bug triage, especially in light of the impending Rails engine merge. Are bugs still relevant, fixed by the merge, in the right repo, etc.?
  • Update the README to have it make sense for the new engine format
  • Release Calagator as a non-pre gem
  • Any of our open issues!

#February 21, 2015

No notes were taken for this code sprint.

#February 7, 2015 Participants: Audrey, Micah, James K., Maureen, Shawna, Adam, Ryan McC, Aaron, Jason, Alex, Mary Anne, Dustin, Rob


  • Engine-izing Calagator and creating a separate engine gem and project
  • admin tools
  • discussion of theming

What I did today (Mary Anne)

I needed to update my Calagator fork on github. A lot of changes had happened since I forked it. I didn’t know what to do. Shawna helped me figure it out. Commands that I typed in a terminal window while in the calagator directory to update a fork:

add remote git remote add name git remote -v

To work with remote rename remote (I missed spelled origin) git remote -v (gives names, how I found out I missed spelled origin) git remote help git remote rename orgin upstream (old name, new name) git pull upsteam master git push origin master

It worked git fetch Mary Anne

#January 3, 2015



New participants got working development environments set up with little issue.

Maureen and Matt began work on #274 to address #158. This adds the Figaro gem to replace our homegrown SettingsReader and SecretsReader classes with an alternative that can read configuration from environment variables.

Reid reviewed #272, a refactoring of Source and SourceParser

Mason introduced #275, which replaces the JavaScript time pickers with a newer alternative that provides a better user experience.

##New Issues

##Next Time

#December 6, 2014



Issue #231, updating specs from "should" syntax to "expect" syntax, was closed by JJ with #246.

Work in progress on Issue #259 (Settings reader) was committed by Maureen. Credit to Maureen, Jesse, and benstreb.

Issue #221 was partially reviewed by Shawna.

Issue #256, extract Event::Cloner, was filed, closed, and merged. Micah and Jesse.

Issue #257, fix latitude validation, was filed, closed, and merged. Jonathan and Jesse.

Pull requests #254 (tag icon improvements) and #255 (iCal rendering cleanup) were filed. Reid and Micah, respectively.

##New Issues

Issue #249 addresses a feature request giving users the ability to easily see previous/past events. Split out from #245 by Sumana.

Issue #250 discusses making it easier for users to import/approve recurring events. One idea: an "Add a recurring event" option in the console that asks for an email address. Each week the site emails the user to ask "is this event happening?" If the user replies yes (via email), the site publishes it. Split out from #245 by Sumana.

Issue #251 addresses improving the importing of events from Meetup. Possibly related to [#16] in that creating a sensible default end time could fix the endtime import issue. Reid mentioned it may be an easy/beginner task. Split out from #245 by Sumana.

Issue #252 is a feature request for better scrapbooking of event artifacts in order to improve community documentation of past events. Split out from #245 by Sumana.

Issue #253 is a feature request from Shawna for the ability to create and import events in bulk.

Issue #244, dropping Ruby 1.9 and 2.0 support, was fleshed out a bit more by the group.

Group shared understanding around the necessary Rails upgrade, user access models, recurring events/import workflow, and user experience improvements.

Next Time

The next code sprint will be Saturday January 3, 2015.

Notes compiled from Issue #238 by Jim

#November 8, 2014


  • Shawna Scott (@shawnacscott)
  • Natalie Blackburn (@nblackburn87)
  • Tina Hinojosa
  • Josh
  • JJ
  • Jonathan Hinkle (@hynkle)
  • Benjamin
  • Eli
  • Jennifer


Issue #222, serving from a subdirectory. Josh and Benjamin. They think they've finished the necessary changes, but are trying to figure out how to write a test for it.

Issue #209, adding seed data so that new developers don't start out with no sample data. Shawna. Didn't quite finish it, as some questions on design arose. Will continue working on it between the scheduled code sprints.

Issue #190, adding ability to search by partial words. JJ and Jonathan. Some (passing) tests already existed that indicated that this would work, but were not testing exactly what they thought they were due to Solr's tokenizer. Still in progress.

Natalie wrote some tests for Event creation, editing, etc. She's partway through doing a similar thing for Venues.

Eli worked on familiarizing himself with the duplicate venue UI and making it discoverable.

Tina fixed the white bubble bug, where resizing the screen narrow caused the active link to be styled as a white rounded rectangle with no visible text.

New Issues

#230, on the relevance of venue tags (like upcoming:venue=9175).

#231, on migrating from using RSpec's should syntax to the preferred expect syntax.

Next Time

We decided the next code sprint will be Saturday, December 6, 2014.

#October 18, 2014


  • Shawna
  • Tina
  • Mary Anne
  • Kelly
  • Maureen

What we worked on:

*Mary Anne and Kelly worked on setting up development environment. More info is need for setting up SQLlite the first time.

#August 23, 2014


  • Reid
  • Audrey
  • Shawna
  • Natalie
  • Rob
  • Benjamin
  • Fred
  • Mary Anne

What we worked on:

  • Reid worked with Fred to fix event ordering issues in search. #165
  • Natalie and Shawna worked on creating a database seed task with venue data. Next task: do the same for events.
  • Audrey added a code of conduct for the project to our wiki #142
  • We also helped three new participants set up the project for development.

#August 10, 2014


  • Reid
  • Shawna Scott
  • Natalie Blackburn
  • Maureen Dugan
  • Mary Anne Thygesen
  • Audrey Eschright
  • Micah
  • Donald
  • Michael
  • Rob
  • Bryan
  • Don Park



PR submitted to merge mobile and desktop stylesheets. Mobile contents moved into media query. Footer explicit choice functionality is now broken. Type size changes committed. Now causing some issues.

Changed "Calagator" header to be correct text.

Continued overarching discussion about direction for UI.


Documentation on Solar setup for search. Discussion about testing (integration specific) for venue autocomplete in searching. Brings up new issues about deployment and speed (Travis).

PR submitted for changing event ordering (previously date descending, artifact of event importing logic).

Created and fixed #187. Investigating narrowing search params so that it functions well. Failing test exists.

Began working on search for word partials and phrases. Created ticket for this, #190.


Integration tests. Beginning with RSPEC/Capybara with Selenium. Need Poltergeist to make that work with Travis.

Extracting various methods for cleanup.


More deletions for ticket #115

Added more Wiki context for various pages. Deleted some older pages that were no longer relevant.

PR Reviews

#115, Deleted Upcoming from various places. Should result in increased test coverage.

#191, Documentation only PR.

#189, Ascending order for event sorting. Currently failing Travis. Some test issues remain.

#188, Merging mobile and desktop stylesheets. Remove print media option and wrap everything in a media query. Helper deleted, once tests referencing them go away this should pass Travis.

#194, Narrowing search results for events.

Discussed setting up a new sprint. Decided on Saturday, August 23, 2014 at Elemental.

July 26, 2014

Audrey: Start with intros:

  • Name,
  • Interest in Calagator
  • Skill to contribute

Audrey: Started project, feels gratitude Brings sense of history

Maureen epicodus grad, into ruby Coding on the weekends

Jen: Learned ruby Coding on the weekends Really like calagator

Dale Chance to contribute to a bigger project Ruby/Rails

Mark: Epicodus Grad Ruby/Rails Docs

Bryan: Ruby, worked on calagator long ago

Reid: Discuss future directions Coordinating UX work Clearer understanding of open issues, triage

alorente: Mostly here because Shawna asked him

Shawna Portland Code School grad Likes Calagator, large part of how I got involved in Portland tech community

Audrey: Original goals: Not be beholden to Google Educational experience Reid: To have something usable at the end of each sprint A: Lead to having a nicely sorted stack of ideas to feed into future sprints.

Reid: Calagator solves the mass of uncoordinated tech events by provdining a central location for publicizing those some events might be imported from some other initial source Eventually realized that as Cal gained momentum the import features were less important, Cal stood on its own as the source of record. Figuring out how to customize the graphics so other cities can port and customize easier

Eric: Would like to dockerize calagator to make it easier for deployment/development accessibility and/or optimize front end layout

Code Sprint Outcomes

Brian & Dale: Search features: Sunspot and Solr, reviewed decisions made for which search engine to use for searches. The tests were passing at the beginning (shouldn't have been).

Reid, Natalie, Eric, Shawna: UX Discussion Move to single code base for mobile and desktop which is responsive to device width.

  1. Improve filtering
  2. Add faceted search approach
  3. Calagator Front page different from Event listing page. Resolve/troubleshoot. No need for a separate search results page
  4. Add infinite scrolling to front page
  5. Created a list of tasks/features to add to the issues

Maureen & Audrey: Removing Upcoming API There were code examples that were vague - some hacks to make Upcoming work didn't have a defined end point, although the comments referred to their start. There may be some Gemfile control issues that Audrey is looking into more

Andrew: Removed skipped tests

Mark: created friendly URL's for venue/event tags; redirected machine_tags to root_url

Eric researched Docker. Potential hangup: need to have access to calagator source code on host machine (easy to do on ubuntu; not necessarily so simple on other os).

Next Steps: Next Code Sprint, Sunday August 10

Follow Up before next event: Keep on posting issues!

Reviewed the PR's from the afternoon

June 7, 2011

= We had a productive code sprint as part of the PDX11 Hackathon.


Roy Martin, Daniel Hedlund, Bart Massey, Selena Deckelmann, Leif Warner, William Van Hevelingen, Kirsten Comandich, Dunbar Aitkens, Mary Anne Thygesen, Reid Beels, Audrey Eschright and Igal Koshevoy.


  • Added mobile interface to improve user experience on devices with small screens. The new interface puts the most useful information at the top and makes better use of screen real estate, reflows text for graceful zooming, and hides infrequently-used features behind click-to-expand controls.
  • Improved iCalendar exports and feed to include the venue's address and Calagator source URL.
  • Updated to Hpricot 0.8.4 library, which should eliminate or reduce segmentation faults, primarily encountered in tests.
  • Fixed missing "bundle exec" references in documentation and webadmin service.
  • Improved documentation to explain the search engine service ports used, which need to be firewalled.
  • Fixed "Cinderella event" handling, so events ending at midnight aren't shown as part of the next day's listing.
  • Added per-event venue details field, for describing the room used and other event-specific information.
  • Improved Plancast importer to add machine tags to the event, so that their RSVPs and links are immediately available.
  • Confirmed that all index and show actions can emit XML and JSON for those consuming our data.
  • Fixed test suite to eliminate non-deterministic behavior caused by state leaking between tests.
  • Fixed tests so they don't access the network and fail.
  • Refactored views that display subnav menus by extracting common logic into helpers.
  • Removed custom geocoder keys in hopes of simplifying setup -- only to have to revert these changes because the keys are still needed for displaying maps on anything other than "localhost".
  • Updated "Code" link in header to point to github.
  • Removed unwanted files that were accidentally checked in.
  • Added a custom iCalendar "prodid" value. Unfortunately, the patch to populate this with Unicode 6.0 glyphs of a crocodile, a calendar, and a happy-snowman-wearing-a-fez were rejected. This decision may need to be reconsidered in the future.


  • Issue 434: Review and merge rical_remodel branch.
  • Issue 443: Recent changes feed should link to both the change log entry and actual entry.
  • Issue 357: Deleting sources should delete their associated events and children.
  • Issue 424: Refresh version shouldn't throw an exception.
  • Issue 423: Calagator should be able to export events to Google Calendar.
  • Issue 306: Submit patches to acts_as_versioned.
  • Issue 316: Consider adding version number to iCalendar export.
  • Issue 196: Fix acts_as_solr, make it log to a file.
  • Issue 401: JSON should be supported by all controller actions.
  • Issue 436: Solr's admin port should not be publicly accessible.
  • Issue 447: Import Plancast events.
  • Issue 191: Submit patche to acts-as_solr that make it work.
  • Issue 397: Timezone in settings should be used.
  • Issue 24: Include venue information in iCalendar exports.
  • Issue 339: User should be able to create a new event from an old one.


  • Updated Issue 387: Add JavaScript widgets and usage instructions.
  • Added Issue 450: Write guide with per-platform installation instructions.
  • Added Issue 451: Add per-item duplicate squasher.
  • Added Issue 452: Add fuzzy venue search.
  • Added Issue 453: Improve the import system.
  • Added Issue 454: Migrate to Ruby on Rails 3.

Thank you for your contributions!

May 2, 2011

We had a productive code sprint as part of the PDX11 Hackathon. Much of the work was carefully reviewing and improving contributions that were submitted recently outside of sprints. Some of the work was completed a few days afterwards.


Audrey Eschright, Reid Beels, Igal Koshevoy, Kevin Turner, Mary Anne, Ward Cunningham, Jacob Helwig, Bart Massey, Max Ogden, and Teresa Boze.


  • Added Plancast-based RSVP and attendees listing. Just add a Plancast machine tag to an event's tag list, e.g. "plancast:plan=41qe" to refer to the plan at
  • Added machine tags for use with ePDX. Just add an ePDX machine tag to an event's tag list, e.g. "epdx:groups=1" to refer to the group at
  • Added instructions to event form to describe how to use these tags.
  • Fixed exports to Google Calendar by truncating long description text that caused errors.
  • Added messages to "Add event" and "Import event(s)" describing appropriate content for the site. The text is specific to an individual theme, see themes/README.txt for details.
  • Replaced Vpim library with RiCal for parsing iCalendar data. Finally.
  • Fixed and improved event previewing to use same rules as event display.
  • Improved event form to display HTML tags allowed in formatting.


  • Investigated how to move the wiki and issue tracker off of Google Code.
  • Discussed an interactive "Calagator critic" on the forms that offers suggestions for improving content quality. These suggestions would we shown by the affected fields to encourage the user to follow them, but wouldn't be validations that would prevent the user from submitting the form. Examples.... It could look at the event title and description, and suggest tags. It could look at the length of the event's title and description fields, and suggest that the user add or remove content. It could look at the address and if it's more than 50 miles from the center of that Calagator instance's map (e.g. Portland, Oregon) it would ask the user whether locals would really want to travel to it. It could look at the URL and suggest filling it if it's not specified. It could look at the tags and suggest adding one if none were specified. It could look at the event time and suggest that the data entry might be wrong or a problematic time, e.g. if an event was imported with invalid timezone information and starts at 2am.
  • Discussed ways to improve importer to improve content quality by having the user get a edit form containing all the events that it's going to import. It should have controls to allow them to specify which events to publish, so they can be more selective about what they're adding. It will also have a way to edit all the events directly, making it more obvious what they're adding rather than hoping they'll view the event and realize it's incomplete.

October 30, 2010

We had a small, but productive code sprint at NedSpace Old Town.


Reid Beels, Audrey Eschright, Igal Koshevoy, Bryan Stearns, David Cato, Mary Anne Thygesen and first-time participant Todd Dombrowski.

IMPORTANT: To take advantage of the better searching now available in the master branch, you'll need to update your Solr index, e.g., run rake RAILS_ENV=production solr:rebuild_index


  • Issue 437: Fixed maps shown on event and venue pages, they're now zoomed out a reasonable amount. Problem was that Google changed the default zoom level. Solution was that we set a preferred zoom level to something more reasonable.
  • Issue 438: Added a tag cloud to the homepage. This shows users the popular tags on the system, lets them find events for them, and generally show off the kinds of events in the system.
  • Issue 439: Added progress status to rake data:fetch, which can take minutes to run, so that it's clear to the user that it's working.
  • Issue 440: Fixed gem dependency problems by specifying exact versions of known-good gems to use. The problem is that we allowed the system to load the latest version of some gems and these had recently changed their APIs in incompatible ways, thus preventing the application from starting.
  • Issue 441: Fixed searching so to support exact searches, better fuzzy searches and searches against text adjacent to punctuation and other non-alphanumeric characters.
  • Added more machine tags (e.g. to associate a Calagator venue with its FourSquare profile, or a Calagator event with its Upcoming counterpart). Refactored code around this for clarity and correctness.
  • Added sorting for tag-based searches and refactored related code.


  • Issue 434: Reviewed and improved a huge branch that replaces VPIM with RiCal. Switching to this new iCalendar parsing library dramatically simplifies the application logic and eliminates the need for many horrible workarounds. The code seems to be done, but needs more manual testing, specs and refactoring.

Thank you all for coming and helping out!

May 8, 2010

We had a successful sprint at Nedspace Old Town


Audrey Eschright, David Cato, Ed Phillips, Igal Koshevoy, Jim Agin, Jim M?????, Lance Albertson, Leif Warner, Mary Anne Thygesen, Reid Beels, and Yaroslav Kucheryavenko


  • Added machine tags
  • Added clickable tags
  • Replaced iCalendar importing with RiCal
  • Resolved Issue 354 "Trying to sort tag search does not work"
  • Resolved Issue 338 "Events should be searchable by multiple tags"


  • Closed Issue 407 "Event should have a reasonable default start time of day"
  • Closed Issue 253 "Cinderella events", replaced with Issue432 "Events that ended at 00:00 should not be displayed as part of that day on the homepage"
  • Closed Issue 426 "iCalendar import of multiple events should not create duplicate venues"
  • Closed Issue 334 "There should be a way to unsquash events"
  • Closed Issue 353 "Search with tag & order=date or with order=venue should not throw an exception"


  • Rejected Issue 383 "Specs should be written for the with_my_events branch"


  • Opened Issue 430 "Importing events from Upcoming should set the correct date"
  • Opened Issue 431 "Importing events from Upcoming should set the correct 'imported from' field"
  • Opened Issue 432 "Events that ended at 00:00 should not be displayed as part of that day on the homepage"

December 12, 2009

We had a small but successful code sprint at NedSpace Old Town.


Reid Beels, Audrey Eschright, Igal Koshevoy and first-time participants Maher Hawash and Steven Lindberg.


As of December 23, 2009 all of the following changes have been merged into the main Calagator code base and deployed to production:

  • Issue 416 "Event forms should have a 'preview'".
  • Issue 417 "Merge with_all_day_events_v2 branchand add Event::to_ical specs for multiday"
  • Issue 414 "Read the Upcoming API key from secrets file, else use a default."
  • Issue 409 "Can't use numeric tags"
  • Issue 413 "Export to Google Calendar no longer works"
  • Issue 318 "Homepage's events 'overview' should provide a 'more' link at the bottom"

Thank you all for coming and helping out!

February 21, 2009

We had a successful code sprint at Recent Changes Camp. We got lots of work done and spent time during the sprint and afterwards telling people about Calagator.


Lance Albertson, Reid Beels, Joe Cohen, Amy Farrell, Jesse Hallett, Igal Koshevoy, Leif Warner, and first-time participants Colin Curtin, Dhananjay Keskar, Bart Massey, Phil Tomson.


The following changes have been merged into the main Calagator code base and deployed to production:

  • Issue 380 "Merge with_theming branch" -- This makes it possible for people to run their own personalized instance of the Calagator platform.
  • Issue 375 "'s imported events should not contain excessive linebreaks" -- We also refactored a dozen duplicated methods in our code that formatted things like descriptions.
  • Issue 384 "Merge dependency changes" -- This eliminated many bundled libraries and moved them to gems, and upgraded RSpec. WARNING: This change broke the environment and it's impossible to run the app without making some extra, undocumented changes -- these must be addressed and the documentation fixed soon as part of Issue 381.


  • Issue 381 "Fix documentation for setting up the application"
  • Issue 382 "Improve documentation of with_theming branch"
  • Issue 383 "Specs should be written for the with_my_events branch"
  • Issue 385 "Provide widget for displaying Calagator events on another site"

Thank you all for coming and helping out!

January 31, 2009

Audrey, Reid and I had an impromptu meeting tonight. We went through the patches submitted at and since the code sprint. Now that we've tried this process out, we'll likely post public invites to future ones.


Thanks go to the following for submitting these patches: Jesse Hallett, Ben Kerney, Scott Becker, Igal Koshevoy, Reid Beels, Audrey Eschright, plus those that assisted with debugging, research and pair programming with the committers.


We accepted patches to close the following issues and deployed these to production:

  • Issue 362: Description should be parsed from current Upcoming (v4) hCalendar implementation
  • Issue 326: Tags should be squashable
  • Issue 363: Search-based iCalendar feed and file do not filter by query
  • Issue 168: Event start time should provide a default end time in the new event form
  • Issue 371: should run off the git repository, with appropriate deploys/rollbacks
  • Issue 364: 'Export to Google Calendar' option produces no events in Google Calendar
  • Issue 368: Link to venues dupe squasher in /about copy is incorrect
  • Issue 346: Site should have an Apple touch icon
  • Issue 355: Search results page should explain how the viewed results are sorted
  • Issue 367: Sorting search results by Location or Event Name should be case-insensitive


This session for building a new stable release went very well. In the past, we had many people committing finished and unfinished code into trunk, and then had to figure out how to identify streams of development, roll back individual commits or fix them, and there was much pain because each commit affected others after it, thus an error in one commit would cascade to others and often require immediate fixing. However, with the new model of using Git and having changes submitted as patches, it was very easy to understand what was being changed, and then either apply, tweak or defer the submitted solution. Also having multiple people participate in the discussion of accepting patches these made this process easier and more enjoyable.

Thank you for all the patches, we really appreciate it!


January 24, 2009

First anniversary code sprinters were: Audrey Eschright, Bob Langill, Igal Koshevoy, Jason Starlin, Jeremy O'Leary, Jesse Hallett, Joe Cohen, Lance Albertson, Morgan Senkal, Neil Shargel, Reid Beels, Scott Becker, Simon Chiang (visiting from Denver), Leif Warner.

We reviewed the new process for contributing to the source code. We discovered an issue with how patches are emailed. We reviewed some pending patches.

Reid spent hours helping out others, including figuring out how to convert Joe's advanced search branch from his computer and SVN to github and git. (Help from Lance.)

Igal, Lance, and Leif began work on porting theming support form OS Bridge to Calagator.

Scott and Reid fixed made tags squashable (Issue326) and submitted a patch. Enhanced event edit UI

Jeremy began work on exporting calendar information from Drupal to hCal.

Audrey, Jesse, and Simon worked on: (a) parsing the description from the latest iteration of Upcoming (v4) hCalendar implementation (Issue362), and (b) search-based iCal feed and file failing to filter by query (Issue363), and submitted patches for both issues.

Jason, Morgan, and Neil explored Calagator and began to configure Morgan's machine.

December 20, 2008

Huge thanks to our code sprinters that braved ice, snow, and howling winds of the Snowpocalypse: Steve Morris, Ben Hengst and Igal Koshevoy.


I had a long talk with Steve Morris of OTBC about his workflow and how we can make Calagator more useful to him. Many of the things that will help him may also be very useful for folks like Rick Turoczy and Amber Case that publish lists of selected events.

The "my_events" branch has a number of valuable features that we can use and expand upon:

A. MY PERSONAL EVENTS # User should be able to declare if they're planning to go to the event. The status can state that "I'm going", which is not an "RSVP" because Calagator events have no owners. # User should be able to see a list of events they've declared an "Are you going?" status for. # User should be able to subscribe to a feed of events they're planning to go to. # User should be able to provide tags and search keywords that they want to include and exclude events. E.g., highlight "Ruby" events, ignore "bacon' events. B. MY EVENT LISTS # User should be able to create their own named lists of events. E.g., Amber might create a list called "Amber's cool tech events". # User should be able to view a named list's events and use it as HTML, ATOM, XML, JSON and ICS. # User should be able to share a named list with others through a special URL. E.g., other users can then subscribe to iCalendar feed of Amber's events, or write an app to parse the JSON event data for the "Oregon Startups Calendar" list to display it on a website. # User should be able to add and remove a event to a named list of events.

A possible UI for adding events to lists and marking whether you're going could appear in the "show an event" sidebar like this:

        Are you going?
        [X] Yes / Maybe / No

        Add to list:
        [X] Oregon Startups
        [ ] OTBC
        Create list...


  • Issue 332: Reimport checkbox should mark a source for reimporting
  • Issue 40: iCalendar downloads and subscriptions don't respect filtering
  • Issue 335: Index and search should use render formats using common code

The solutions to Issue 40 and Issue 335 significantly improve the ease of interoperability for other applications that want to retrieve Calagator data by providing common HTML, ATOM, XML, JSON and ICS data generation and filtering.


We briefly discussed how we could help make contributors productive outside of sprints. The idea of creating simple, clear, well-documented tasks in the issue tracker that people could work on was suggested. This has since been implemented with the "simple" tasks at:


It's unclear when the next sprint will be given the weather and holidays.

December 4, 2008

Participants: Audrey Eschright, Igal Koshevoy, Joe Cohen, Leif Warner, Reid Beels, Bryan Stearns, new code sprinter Ben Hengst, Anselm Hook, and Amy Farrell.

We continued with our discussion of how to handle recurring events and resolving our issues with the VPIM iCalendar parser.


Igal gave an extended demo of his work with "libical_with_ruby", a fork of the C-based libical library with Ruby bindings and wrapper. This fork provides low-level one-to-one bindings of libical's C functions to Ruby methods, and a high-level object-oriented wrapper for providing easier, idiomatic Ruby access. Using these, it's easy to write Ruby code to parse a string of iCalendar data and access the components and properties within.

Unfortunately, although libical is well-written, it's hard to work with. It doesn't provide a way to access properties that aren't explicitly defined in the C code, which is a major problem because it prevents us from parsing popular non-standard calendars offered by Upcoming and others. It doesn't support VVENUE or VCARD adequately, which impedes our ability to create venues. It makes it difficult to get the GMT time for dates by demanding tricky backtracking. It will be a nightmare to compile bindings on Windows. Dealing with of these issues will require significant changes to libical's C code and these will likely not be accepted back by its maintainers, forcing us to maintain our own libical fork. Given how much effort this may all take, it was decided to reconsider alternatives.

We then split into teams:


Researched VObject: A Python-based library used by the Chandler Project. Easy to used, documented, and included tests. Provides easy access to unknown fields, offers sensible recurrence, parses VCARDs and VVENUES. All seems well ... except it's written in Python. Could be used if (1) ported laboriously to Ruby, (2) invoked as-needed via backticks, (3) run as a daemon and accessed via TCP/IP, (4) run as Java daemon like Lucene and accessed via TCP/IP, or (5) run as Jython application on Java and port current Rails app to JRuby so that it can talk directly to Jython. None of these approaches are quick or appealing.


Researched Runt: A Ruby Gem that provides a way to define and retrieve recurring event series. It may be a good way to for representing recurrence internally within Calagator. If paired with some library that can just extract the iCalendar data fields like the RRULE, the Runt library be used to add recurrence support.


Discussed additional ideas for the user interface and added an end date or maximum number of occurrences to Andy's mockup of a working a Calagator input widget for recurring events


We had a long discussion after leaving CubeSpace to compare the pros/cons of:

  • Building our own iCalendar parser
  • Fixing/improve VPIM
  • Finishing the libical bindings
  • Integrating with VObject

We arrived at the conclusion that we should make an effort to rework VPIM before pursuing the other alternatives further.

Many of our issues with VPIM may be due to our insistence of writing workarounds for its bugs and shortcomings, and thus we're layering workarounds for workarounds rather than just fixing or improving the code.

Reworking VPIM has many advantages:

  • It's Ruby code
  • Doesn't require any compilation
  • Will be easier to maintain
  • Does everything we currently need (at least with workarounds)
  • Could be extended to support recurrence and venues (Reid already did some of this in the past)

Therefore, resolving VPIM's issues may be faster and easier than any of the other alternatives we've identified. While we're not committing to sticking with it, we'd like to spend at least a session trying to make it work.

The effort we've put into libical, VObject and VPIM libraries WAS NOT WASTED! Trying to find the best way to parse iCalendar data is a hard problem, and we had to look into these alternatives to be able to adequately understand the effort required to get these libraries to meet our goals.


We spoke a bit about virtual code sprints and writing very complete ticket descriptions so that people could more easily complete tasks outside of sprints. The conclusion we came to was that if people describe these as blockers, then we'll pursue solutions specific to the requester's needs.


We'd like to have a code sprint on December 13th. Could try doing VPIM rework. Seems like there's growing demand for completing the "with_my_events" branch, which is mostly done other than for the specs, so this could be another focus.

November 15, 2008

Participants: Audrey Eschright, Igal Koshevoy, Joe Cohen, Amy Farrell, Leif Warner, Reid Beels, and new code sprinter Jeremy O'Leary (co-chair of Synergy)

We spent most of this day planning and researching how to provide recurring events, the last major unimplemented piece of v1.0.

Reviewed the iCalendar specification relating to recurring events. Discovered that the spec is quite involved and not something we want to implement ourselves if at all possible.

Reviewed how VPIM (library that Calagator currently uses) parses and creates recurring events, and it's poor to non-existent. It doesn't import EXDATE properties, creates an RRULE when none exists, does not expose details of RRULE objects, can't create RRULES for BY information (e.g. 1st Tuesday of the month). Given how many problems we've had with VPIM and how ugly the workarounds we've had to write to use it, hacking it to provide this support may be daunting and a poor investment.

we decided to spend time reviewing alternate iCalendar libraries that provide sensible support for parsing data, recurring events (including EXDATE and RRULE), locations and tags. We researched:

  • libical: Library written in C. Popular, used by Mozilla Sunbird/Lightning, Gnome Evolution and KDE Korganizer. Seems like a good choice because it's relatively easy to call C code from Ruby. Much of the rest of the meeting was spent research libical and how to access it from Ruby.

  • Darwin Calendar Server: Library seems to be written in Python or through bindings. Didn't investigate further.

  • Newer Ruby library: Couldn't find any new alternatives. Our guess is that very few projects need complete, compatible and sophisticated import AND export functionality, and this is why there are so few options, and why these are so primitive.

  • Other libraries: There seems to be a popular Perl library, but having to access a totally different language runtime will be obnoxious, e.g., we'd need to run a separate Perl daemon, setup inter-process communications using some protocol, etc. This would be a lot like the situation with acts_as_solr, except that we'd have to write it.

We added a new wiki page on RecurringEvents. This records the various specifications, issues and discussion for how to model recurring events in our system.

We also discussed with Jeremy the practices for getting CNRG calendars and events to work better with Calagator. (CNRG is the Community Non-profit Resource Group. Here is one of CNRG's daily digests ( ) which is a mix of event announcements, job announcements, internships, and general announcements.)

October 25, 2008

Participants: Reid Beels, Joe Cohen, Amy Farrell, Igal Koshevoy

  • Discussed (a) Calagator's recent spam encounters (things are temporarily under control), and ways of bolstering spam prevention, such as rakismet, captchas; (b) need for undelete.
  • Installed working development system on Amy's machine.
  • Upgraded Calagator to Rails 2.1.2
  • Reviewed ticket queue and re-prioritized issues, with the following having High priority: Issue199 (Improve the "Add an Event"' time selector); Issue254 (Google Calendar should be able to import Calagator feeds) (and related issues); Issue296 (Tags should accept non-alphanumeric characters); Issue152 (The system should display recurring events)

Igal and Reid improved the time selector by improving the default start and end time options.

Amy and Joe worked on Google Calendar issues. Amy found and fixed a bug in Calagator's creation of iCalendar files. As a result, when one exports an iCalendar file from Calagator, the file can be imported successfully by Google Calendar. Igal created specs for this fix.


  • Issue 199: New time/date picket for adding/editing events is easier to use and keyboard-friendly.
  • Issue 312: New blacklist seems to be holding off most spammers.
  • Issue 118, Issue 254, Issue 310: Fixed export to Google Calendar, which now works without errors or skipped events. Turns out the issue was line-endings.
  • Issue 156: Notification and validation errors are displayed with style.
  • Issue 305: Fixed bugs in acts_as_validated
  • Issue 304: Upgraded to Rails 2.1.2.
  • Issue 313: Deploy now clears out cached JavaScript and CSS.


  • Issue 311: We need to add more expressions to the blacklist.
  • Issue 306: We need to submit our fixes to acts_as_validated to its authors.

October 11, 2008

Participants: Reid Beels, Audrey Eschright, Igal Koshevoy, Joe Cohen, Leif Warner, Anselm Hook, Amy Farrell, and first-time participant Brian Felder

Added wiki-like versioning (Issue298) by: adding acts_as_versioned plugin; creating version (backup) tables for Event and Venue; worked on the UI for reverting

Igal worked with Brian and Leif to get development software installed on Brian's machine.

Igal, Amy, and Leif worked on Issue300 (Importing a source with an invalid hostname should cause a validation error) and added a variety of new flash error messages to differentiate various kinds of import errors. This process led to the (lengthy) discovery and fixing of a number of issues associated with importing from https:// urls, which Calagator was not handling properly.

Anselm and Joe worked on a possible UI for recurring events (Issue152).

September 20, 2008

This past Saturday was the 19th Calagator sprint, and the first one we've had since the big build up before OSCON.

We had a full house with eleven participants, including birthday boy Reid Beels, Ward Cunningham, Audrey Eschright, Igal Koshevoy, Joe Cohen, Gabriella Roth, Daniel Etra, Scott Becker, and first-time attendees Amy Farrell, Leif Warner, Ted Kubaska and Jeff Schwaber.

Some upcoming Calagator-related events were added or affirmed:

This sprint was very different than previous ones. Rather than coding, we decided in advance to spend the time writing text (which was MUCH harder than writing code) and discussing Calagator's future:

Wrote new text for the home page's "Hi there" section that introduces visitors to Calagator and how to use it.

Wrote new "About" page describing the project and its history.

Wrote new "Getting started" section describing the tasks that Calagator can help people perform. The text is written, but we still need to add some screenshots to clarify some items (ticket 292).

Wrote new "Get involved" section describing how people can become part of the project.

Watched Jeff Schwaber's demo of his prototype event registration system, which will be the focus of an upcoming code sprint.

Discussed sponsorship. Although some would like to add sponsorship opportunities to the site, the costs of running the site and paying for registrations are covered by Igal through Pragmaticraft, so there's no urgent need to seek funding, and the group can continue focusing on making the site better for its users.

Discussed how to credit sponsors and contributors. We'd like to add a section to highlight companies that provided us services, and individuals that contributed their time to the project.

Discussed how to interpret traffic to the site. Although there are progressively more hits to the site, it's already tracking almost all Portland-area tech events and Google claims 900 unique visitors per month, which may mean we're already reaching most of the people interested in such a site.

Discussed future of project in terms of how to support other kinds of communities. No conclusion was reached, but options discussed included:

  • Keep the site focused on Portland area tech events.
  • Make the platform easier to setup and write documentation so that other communities can run their own customized instances on their own.
  • Provide customized instances for other communities that we'll run for them in exchange for either an agreement, sponsorship or monthly fee.
  • Provide a fixed set of communities (e.g., Technology, Arts, Cycling, Investing, etc) where we create a limited number of fixed portals within the existing Calagator site. These portals would only be created if members of an interested community could promise to spend enough effort sharing events and promoting community building efforts to make sure that these calendars are successful.
  • Provide free-for-all communities where anyone can create a community calendar whose events are a composite of either cherry-picked events, or those with specific tags.

Although this session wasn't meant for programming, a number of issues were identified and fixes were deployed to production:

  • Issue 294 - Events filter form should have narrower fields and not list the time but only date
  • Issue 293 - Venue show page should use similar formatting to event show page
  • Issue 284 - Venue details should always show the 'Future events happening here' section
  • Issue 287 - Send/subscribe/export event(s) text should be clear and consistent
  • Issue 289 - Change second-level event menu entry from "Import Events" to "Import Event(s)"
  • Issue 291 - Import events page should be clearer about what it does and how it works

Thanks again to all those that attended. See you at the upcoming code sprints!


July 19, 2008

Today's code sprinters: Reid Beels, Joe Cohen, birthday girl Audrey Eschright, Igal Koshevoy, Markus Roberts.

The major improvements related to tagging:

  • Issue 211 (Add tags to events and sources) - Audrey, Markus, Reid completed adding tags to Events, including displaying Tags on each event's show page
  • Issue 242 (When exporting, Calagator should include tags)
  • Issue 243 (Search is (was) only using the title) - The biggest problem (consuming half a day) was debugging searches so that they work on Event tags; finally solved by adding "OR" to the search string. Searching now searches in all fields.
  • Added ATOM feed for custom search results.
  • Added ICS export for search results, and UI for search result feeds.


  • Issue 233 (Improve display of multi-day events) - We did a quick patch to make the display look like Calagator_overview_combined_Page_2.png. (We may make further changes after OSCON. Thanks to Bill Burcham and Garbrielle for their input. See the discussion at\_thread/thread/13bf2472970748c5
  • Joe updated and retagged all issues with labels (e.g., "Component-tags"), which makes it much easier to to set labels and find issues related to them.
  • We also took some time to discuss FOSCON and staffing the Portland Ruby Brigade booth at OSCON

July 12, 2008

Our all-day code sprinters today: Reid Beels, Joe Cohen, Igal Koshevoy, and new code-sprinter and new PDX resident Markus Roberts.

We worked on new features:

  • Issue166 - "Sources should have a UI" - Added basic list/edit/delete (Reid, Markus, Igal)
  • Issue221 - "Events and Venues should have tags" - Created backend and specs, and some UI (Reid, Markus)

And on the following issues:

  • Issue231 - "Events should use end_time instead of duration" - Done, but required resolving a 4-way collision that took most of the day. (Igal, Joe)
  • Issue220 - "MS Windows shouldn't fail URL tests" - Done. (Igal, Joe)
  • Issue228 - "Inputting new venue to Event edit shouldn't raise exception" - Done. (Igal)
  • Issue230 - "Migrations should run correctly on new database that doesn't have tag tables" - Done. (Reid, Markus)
  • Issue216 - "Improve performance of application" - Added action caching to dynamically-generated CSS, reviewed queries. (Reid, Markus, Igal)

Thanks for the good work!


July 3, 2008

Our evening code sprinters were: Brian Artiaco, Reid Beels, Joe Cohen, Audrey Eschright, and Igal Koshevoy.

We made a lot of progress towards implementing the back-end portion of the tags system.

Since the last code sprint, we've completed the following:

  • Issue31 - Finding duplicate by all fields should take into account NULL values
  • Issue207 - Upgrade production server to Ruby Enterprise Edition and Phusion Passenger, and rewrite webadmin tool in Sinatra
  • Issue223 - Events imported from Upcoming should not create duplicates due to venue normalization
  • Issue224 - Events imported from an Upcoming iCalendar feed should each get their own venue
  • Issue225 - Events imported from an Eventful iCalendar feed should have detailed venue information
  • Issue226 - Events should be imported from an iCalendar feed that uses Windows style end-of-line markers

There's no code sprint this Saturday, but we plan to have some more full-day Saturday and Wednesday lunch code sprints in the coming weeks in preparation for OSCON.

Thanks for the good work and enjoy the holiday!


June 21, 2008

Today's full-day code sprinters: Reid Beels, Joe Cohen, Audrey Eschright, Craig Fisk, Igal Koshevoy

We spent the morning prioritizing and re-organizing the Issues to identify the ones we want to complete for Milestone 1.0; marked some issues as fixed, won't fix; etc.

After lunch, we started to fix some of the higher-priority issues including:

  • Issue204 (The sort order of Event and Venue lists sorted by title should be case insensitive.)
  • Issue209 (Creating event with blank venue throws exception)
  • Issue205 (Export of an event using "Add to Google Calendar" fails for some sources of events)
  • Issue155 (Long Event Descriptions Foil Google Calendar (Reminder) Integration)

We also undid the fix to

  • Issue201 (Stop re-importing venue/event where geocoding changes venue attributes), and decided to solve this as part of fuzzy matching on import (Issue217 and Issue218).

June 18, 2008

Today's mini code sprinters: Reid Beels, Scott Becker, Joe Cohen We worked on Issue201.

June 7, 2008

The Calagator die-hards who used a gray day to skip the Grand Floral Parade: Scott Becker, Reid Beels, Michael Bunsen, Joe Cohen, Audrey Eschright, Igal Koshevoy.

The big news is that we can now search for events!

We finished and deployed the following:

  • Issue107 : Implement search for events (Reid, Audrey, Michael)
  • Issue186 : Improve text on import events page describing formats (Joe)
  • Issue189 : Fix bugs in acts_as_solr so that it works (Igal)
  • Issue188 : Switch server from Mongrel to Thin (Igal)
  • Issue190 : Write recipe for automated install of Java for production (Igal)

Progress was made on:

  • Porting to Rails 2.1, but stopped because there seem to be serious problems with how it handles timezones and it also breaks RSpec.
  • Porting to PostgreSQL, mostly in an attempt to see if it handles timezones better, but stopped because of Mac OS X problems.

Thanks for the good work!


May 24, 2008

The Calagator die-hards who used a good-weather part of the Memorial Day weekend: Audrey Eschright, Reid Beels, Joe Cohen, Craig Fisk, and Igal Koshevoy.

There was lots of discussion about coding priorities. Coding work included improvements in duplicate prevention and squashing. We created many new tickets, and blocked some old tickets to replect those priorities. Fixed Issues included:

  • Issue48 : Duplicate squasher should return you to where you were before squashing (Igal)
  • Issue140 : Source spec file should describe how importing multiple duplicate events should create just one (Audrey)
  • Issue158 : Importer should skip past events based on both their start and end time (Joe & Igal & Reid)
  • Issue165 : Venue's 'events happening here' should not list duplicates (Audrey)
  • Issue160 : Event filter-by-date should display events that start at 12:00am on the Start date (Audrey)
  • Issue161 : Event 'Get hCalendar Markup' should work with jQuery (Audrey)
  • Issue167 : Importer should skip previously imported squashed duplicates (Joe & Igal)
  • Issue173 : Footer's source code version display shouldn't complain when run on platforms without the command-line SCM tools (Igal & Joe)
  • Issue174 : Future event finder should be made into a common model method (Igal)
  • Issue175 : Venue show page should display the 'Future Events Happening Here' section only if there are matching events (Igal)

May 10, 2008

Today's attendees: Audrey Eschright, Reid Beels, Bryan Stearns, Igal Koshevoy, and new developer Ben Kerney.

Work included:

  • Issue121 (Bulk duplicate squasher should not display groups with only one member (massively refactored squasher to vastly simplify its code)) (Bryan)
  • Issue124 (Finish source reimporter task) (Igal)
  • Issue125 (Bulk venue duplicate squasher throws exception) (Bryan)
  • Issue129 (Fix portland_to_utc helper because it throws exceptions) (Igal)
  • Issue133 (Fix Mofo, it fails to import non-string nested fields like postal-code) (Igal and Ben)
  • Issue134 (Fix gcal_reminder, it throws exceptions on events without venues) (Igal)
  • Issue135 (Don't display old events on duplicate squasher) (Igal)
  • Issue138 (Fix specs so that they do the most exact matches possible) (Igal)
  • Issue139 (Fix tab highlighter, it stops highlighting when you drill down) (Igal)
  • Various fixes to specs and fixtures (Audrey and Ben)
  • All sorts of great UI work (Reid)

May 7, 2008

Because the April 28 code sprint was canceled, we scheduled a mini-sprint today. Our mini-sprinters were (in reverse alpha order): Bryan Stearns, Kevin Scaldaferri Audrey Eschright, Joe Cohen, Reid Beels

The coding included:

  • Issue95 (Add validation to Event email address) (Kevin)
  • Issue110 (Improve "Get hCalendar markup") (Bryan)
  • Issue116 (Add METHOD, UID, and DTSTAMP fields to iCal exports; works around bug in Outlook 2003 so that it can import ics files exported by Calagator) (Joe)
  • Issue117 (Duplicate squasher should not allow squashing object into itself) (Reid)
  • Issue119 (Titles of venues from Upcoming events should not include HTML escaped link) (Audrey)
  • Issue120 (Google Calendar shows incorrect iCalendar subscription title)(Audrey)
  • Issue122 (Importing events from one calagator instance to another creates bad venue data) (Kevin)
  • Issue123 (Item imported from link should point to external source instead of Calagator) (Joe)
  • Reid worked on a number of matters not in the Issue tracker.

April 12, 2008

Code sprinters: Ed Borasky, Reid Beels, Joe Cohen, Audrey Eschright, Craig Fisk, Bryan Stearns

Reid and Bryan worked on a number of issues relating to end time and event duration, including fixing bug that caused lack of end time to raise error; added white listing for event description; worked on problems with mofo microformat parser. Some of this work was related to getting mofo to parse our Atom feed for hCal entries. This now works, but we're searching for more example Atom and RSS feeds to test against (Issue96).

Audrey (with a number of people looking over her shoulder) improved the display of the Venue bulk duplicate squasher; added a rudimentary Event bulk duplicate squasher; added validation and fixing to the Venue and Event URLs; added a "Get hCalendar markup" link to the Event Show page; sanitized Events and Venues index and show pages.

Closed tickets include: Issue43, Add bulk duplicate squasher for eventsWIKI PARSE WARNING: unterminated '*'! Issue67, Create a bookmarklet to help users import events WIKI PARSE WARNING: unterminated '*'! Issue68, Add automatic linebreaks when displaying multiline fields (e.g., event description) WIKI PARSE WARNING: unterminated '*'! Issue77, Generate hCalendar code for easy copying to other sites. WIKI PARSE WARNING: unterminated '*'! Issue83, In Venue duplicate squasher, add show venues with a duplicate zip code WIKI PARSE WARNING: unterminated '*'! Issue84, Suggest validation for attributes WIKI PARSE WARNING: unterminated '*'! Issue90, Event and venue descriptions should be sanitized prior to display. WIKI PARSE WARNING: unterminated '*'! Issue91, Event without end times should not raise the "start time is after end time" error. WIKI PARSE WARNING: unterminated '*'! Issue46, hCalendar parser should be able to find events in atom feeds. WIKI PARSE WARNING: unterminated '*'!

April 9, 2008

Afternoon mini code sprinters: Reid Beels, Joe Cohen, Audrey Eschright, Don Park, Bryan Stearns

April 3, 2008

Evening mini code sprinters: Reid Beels, Joe Cohen, Igal Koshevoy, Sam Livingston-Gray

  • Issue44 (Write specs for the source importer's duplicate prevention system) Sam reviewed and improved these specs
  • Issue74 (Importing a bad URI causes a crash) Igal and Reid worked on this issue and determined that this was a Google problem related to the particular URI in the issue. We cannot fix this problem.
  • Issue75 (Change event model to use duration instead of end time) Reid worked on this issue. (Discovered that we can perform addition on Time objects, but not on DateTime objects.)
  • Issue76 (The Venue/Edit screen should allow directly setting the lat / long) Reid and Joe fixed this. The system should eventually allow setting latitude / longitude by clicking on the Googlemap.

April 2, 2008

Lunchtime mini code sprinters: Scott Becker, Reid Beels, Joe Cohen, Audrey Eschright, Don Park, Kevin Scadeferri, Bryan Stearns. (Kerry Finsand, Dan Mendell, Oliver Ortiz from NeutralSpace dropped by to see what we were doing and to encourage us.)

We identified these issues as ones that made sense to work on at a mini Code Sprint:

  • Issue47 (Sort and Filter by Source)
  • Issue48 (Duplicate squasher should return you to where you were before squashing.)
  • Issue51 (Show the year of the event). We closed this issue. The year now displays by default when an event list is generated. At some later point we will change this so that year is displayed only when context requires.
  • Issue66 (Add recurring checkbox to import page, save attribute in the Source model)
  • Issue67 (Create a bookmarklet to help users import events)
  • Issue68 (Add automatic linebreaks when displaying multiline fields (e.g., event description)

We also decided to close Issue53 (Home page display of recently added events should show only future events) because the problem addressed by the issue title was previously fixed. We opened a new issue re not importing or creating past events.

March 15, 2008


Thanks go out to our eight participants today: Anselm, Daniel, Igal, Joe, Reid, and new recruits Scott Becker, Kevin Scadeferri, and Bryan Stearns.

We contributed 1927 lines worth of patches to this open source project since the last release, including some of the trickiest code in the system. Further details:

Major changes to the application include:

  • Automatically eliminates duplicates when you import events and venues that are exactly the same at those already in the database, making it possible to repeatedly import the same source without creating duplicates.
  • Manually consolidate duplicate venues (/venues/duplicates) based on fields, making it possible to squash all duplicate venues by hand in seconds.
  • Provides Atom subscription feed of all events, complete with hCalendar markup and iCalendar VCS/ICS attachments to make it easy for users to add these to their personal calendars.
  • Displays human-friendly messages when a user tries to import a source without any events or whose URL is invalid, doesn't save these bad sources, and provides a form so the user can easily edit and resubmit the URL if they made a typo.
  • Etc.

All changes were tested and deployed to the production server.

Special thanks go to Reid for spending a lot of time before the code sprint building most of the bulk duplicate squasher system, fixing bugs, etc.

Research was also done today to:

  • Use geocoding to find a venue's latitude and longitude from its address.
  • Provide user interface and logic for manually handling non-exact duplicates during the import.
  • Find why Google Calendar sometimes fails to import our iCalendar feed.
  • Etc.

Procedural changes today:

  • We declared a 5pm code freeze when all new work needed to come to a conclusion. From then until the 6pm closing, we reviewed all committed code, wrote specs, refactored, and otherwise readied code for a production release. This worked great.
  • We reviewed most new members code either before it was committed, or soon after. This provided a good way to discuss code style, specs, and alternative ways to write clearer code.
  • We used a three-person team later in the day to tackle a really tough task, and they got through it a fraction of the time that a single person was able to do tackle a task of similar complexity earlier in the day, which proved the value of collaboration.

Thanks for all the hard work, solid code, and good lessons!


PS: Audrey, we miss you and hope that you feel better soon. :)

Bug Squashing

Anselm fixed Issue 34 (Sources should not be saved when no items are found).

Brian fixed Issue 35 (Source connection errors should be handled gracefully).

We looked at Issue 37 (ical subscription not working for google calendar) and found that behavior irregular (sometimes it worked, sometimes it failed, but with different errors). Because Google Calendar is in beta, we decided to put off dealing with this issue.

Igal fixed and refactored #find_with_duplicate_support code to provide a generalized way to use the #find command with additional features.


Anselm and Reid built an Atom feed (Issue 23).

Scott and Bryan completed work on the logic for Geocode to venues (Issue 41). (A UI still must be built.)

Igal, Kevin, and Reid built initial system to prevent import of exact duplicate events.

Daniel and Joe worked on a description of NotifyingUserOfDuplicates to notify users of potential duplicates and ask whether they should be imported.

March 2, 2008

Reid, Audrey and Igal: Thanks for staying up late again and committing all those fixes and improvements today! We contributed 1047 lines worth patches today. Major changes:

  • iCalendar export: You can now export the whole events feed or single events through iCalendar into your own personal calendar.
  • iCalendar import: You can now import multiple events from a single iCalendar feed, like from Google.
  • Import: You will now see a list of events imported as a clickable list.
  • Views: These look even better today.

March 1, 2008

Thanks to today's participants: Igal, Justin, Audrey, Chris, Joe, Reid, SamK. We contributed 1636 lines worth of patches to the app since last time.

Reid verified that OTBC calendar import works (Issue 17).

Reid showed us a wire frame (note: broken link) that he created for the calendar.

Reid worked on the Event Display page, including embedding hCard markup for venues

SamK created an Edit Event form.

Reid started writing code for the Event view, including getting it to write out the time and event span.

Joe created a revised description of the project to be put on the calendar home page. Once we begin automatic imports, this description should be revised to give instructions on how to get a calendar imported automatically.

Audrey & Chris fixed a bug which incorrectly created a venue for hCal events that lacked venues (Issue 10).

Audrey & Chris created an end time for events

Igal and Justin explored the Icalendar library and discovered some issues with its throwing exceptions when it found unrecognized keys.

Igal and Justin found a deeply embedded problem with the Icalendar library 1.0.2 in which it relies an a bug in an older version of Ruby.

Igal and Justin started exploring Vpim as a possible replacement for Icalendar, discovered that when Vpim finds a field it doesn't know about, it discards the field. Will research Vpim more.

Everyone watched the Portland Urban Iditarod. We had a great view. For some photos, see here.

Audrey & Chris improved event imports so that when an eventis imported, the source is saved and is associated with the event

Reid created Event and Venue views based on his wireframe

Audrey & Chris changed the event listing to show all upcoming events from soonest to furthest in the future.

Reid created an Event list that includes hCalendar markup.

Reid added active scaffolding for the source model, allowing viewing of saved sources at /sources/list.

Igal and Justin implemented the iCalendar parser and specs. The parser uses the Vpim gem and some heavy voodoo to fool it into handling venues correctly. The Vpim gem has been copied into the Rails project, so no one else needs to install it.


  • Tore out ActiveScaffold from the normal controllers, moved it to admin controllers in case we ever want it again -- e.g., you'll find the ActiveScaffold list of events at /admin/events
  • Created new controllers, actions and views that provide index, add, edit, update, and show. These use nice partials to generate the new/edit forms.
  • Added nice calendar selectors to the new/edit event form.
  • Reworked SourceParser so that each subclass gets its own label and registers itself dynamically.
  • Fixed Event::from_abstract_event, it no longer creates a Venue if there's no AbstractLocation.
  • Fixed /sources radio button labels, clicking them now makes the form select the associated radio button.
  • Added .gitignore so folks can use git-svn with the project.
  • Reworked tests broken earlier so that everything passes again.
  • Added migration to delete invalid venues. Added logic to make sure bad records can't be added in the future and that deletes nullify associations.
  • Don't display maps for venues without addresses.
  • Deployed and tested SVN r269

February 16, 2008

Thanks to Audrey, Igal, Reid, Joe, Anselm, Daniel, and our latest arrival, Mark Dilley, for participating in this weekend's code sprint. We contributed 1134 lines of patches to the app this time.

Audrey will post a higher-level update update here or on the blog, but here are the nuts and bolts of the changes:

  • Wiki content has been vastly improved, including a lovely new Index, Cards and so on.
  • Importing hCalendar events now creates associated venues, and there are some model specs to confirm that this works correctly. We now need to figure out how to keep the importer from creating duplicates, which is detailed in ticket #3 in Google's issue tracker.
  • Venues now have many additional fields that provide a richer way to describe the location and its features, all of which can be imported from hCalendar and soon other formats.
  • Events are now sorted by descending start time. Created ticket #14 "display events in sensible order" with details for future improvements.
  • Event and Venue records now have specific views if you click the "show" links, which also contain hCalendar and hCard data.
  • Menu bar on app has been restyled with colorful, stateful tabs.
  • Restructured SourceParser, broke out AbstractEvent and AbstractLocation which act as our intermediate neutral format between specific implementations like hCalendar and our internal Event and Venue records.
  • Improved webadmin daemon to handle own restarts and migrations for the Rails app.
  • Extracted hCalendar sample snippets out of specs and into stand-alone files in spec/samples and added "read_sample" spec method to easily read their contents.
  • Switched HAML/SASS portions of the app back to ERB/CSS. Although these are cool tools, we want to stick with a standard Rails stack to make it easier for contributors to jump in.
  • Fixed URLs listed on events. Many hCalendar events have garbage data in the URL field.
  • Added wrapper that only displays links if they're valid.

Anything else?

We ended up focusing on the location import stuff which proved to be more complicated than we had thought because of how mofo was dealing with the embedded hcards. A bunch of fields got added to the venue model (possibly temporary, none required) to handle that possible data that could come from hcards.

Two finished cards:

  • The system should create a venue record from locations on imported event
  • Create wiki page for email template

A couple of things that weren't on cards that got done:

  • I added a template similar to the event view template for venues. It uses hCard to represent the event.
  • I went with your suggestion and installed blueprint for the moment. I'll eventually advocate scaling it back to something simpler just because I don't like how it puts presentation code (column data) in the markup, but as you said, it's good for prototyping.
  • Slight css prettiness hacking ensued.

I also have the cards for:

  • the system should import iCalendar
  • fill in wiki page on event duplication

Igal took note of both of these before he left. I'll hold on to them until next time.

February 2, 2008

  • Document sources of calendar data

Dan and Alex (oh, I hope I got your name right) worked on documenting various Data Source Models ( They also migrated all our documentation from the mailing list over to the wiki:

  • Location recognition

We researched what kind of data is likely to be supplied in the location field of the hCalendar data, and discovered that Upcoming and other sites are using the hCard microformat. That may give us a head start on importing structured venue information.

  • iCalendar import

Coders didn't end up finishing the iCalendar import, because Igal and Sam found that we needed to refactor the import code to make it easier to process other formats besides hCalendar. However, they did complete that refactoring.

  • Website coordination/Blog

Audrey added more info to the main page so people have more obvious pointers to find out how to get involved. Joe Cohen and Selena wrote a blog entry encouraging hCal adoption. It was posted on Saturday! We also brainstormed some other blog entires, and have two more in the hopper, that should go up later this week. Selena added a flickr sidebar, to display all photos tagged with 'calagator'. Gabrielle made a list of folks to contact about adding hCalendar support to their event announcements.

  • Documentation of the "big ideas"

We made a whiteboard diagram and Anselm took a picture:

  • Other coding bits:
  • Audrey made the error message when Import fails more informative - Coders confirmed that multiple hCal events on one page are recognized - Several of us tested functionality and generated a few bug reports :)

January 19, 2008

Today several of us met during the Code Sprint gathering at CubeSpace to talk and work on the calendar.

Participants: Audrey Eschright, Selena Deckelmann, Igal Koshevoy, Reid Biels, Paige Saez, Daniel Etra, Anselm Hook, and Bill Burcham.

We spent the first part of our gathering discussing our goals for the project. We focused on our reasons for creating a new calendar system, and the user communities we intend for this to serve. We determined that many existing calendar services have barriers to entry such as required registration that limit usage in our community. Current calendars can also lack the quality of details we would like to provide. We felt that creating a model for aggregating events around a specific interest area is important, and something that existing calendars only partially succeed at.

We also talked about the different types of groups and cultures within our community, loosely labeling them as business, new media, open source, and a fourth group that we called the X-factor or newbies: people who don’t know they’re part of our community until they see what kinds of events and groups are out there. Not requiring users to register an account with yet another centralized system seems important to serving many of these groups, since the existing tools they use reflect a range of preferences for connecting online. We then split into pairs/small groups to work on specific tasks.


  • The existing group websites we examined can be imported much more easily with the addition of hCalendar markup for the event details. Selena and Daniel created documentation that we can share with event organizers ( We discussed the possibility of using a hCalendar generator to provide ready-made HTML to paste into websites and blogs.
  • A next step for encouraging hCalendar usage will be to contact individual groups who aren’t using a standardized calendar format, and tell them about our project.
  • Paige created a sample email template that can be used to structure event information, for organizers to cc to our system when they send out event announcements. Email seems to be the one tool everyone uses, and this would help with our goal of accessibility.
  • Igal and I set up a new Rails application, and added it to a group repository at The application now has a bare bones structure for adding and viewing events. We also decided that event venues were important attributes, and that combining information on venues across events would be highly useful, so users can now add and update venue information as well. We’re using a temporary view scaffolding system to allow us to add and edit information in the database. We’ll develop a more polished interface as we continue.
  • In order to begin pulling sample data from websites, Igal and Reid are creating an hCalendar event importer. This can also be used as a model for adding other calendar formats to the system.
  • Igal is going to set up our calendar program on a server where people will be able to try it out. Getting feedback early and often will be important to ensuring we’re meeting the needs of our users.
  • Selena set up a new blog at to help us connect with the local tech community as we continue working on this. Thanks everyone who came and participated today, and thank you also to everyone who has contributed to the discussion online. The diagrams and resources on the pdx-tech-calendar website were very helpful as we began work.

We’ll be meeting again in two weeks, on February 2nd, for another round. Please feel welcome to attend whether or not you program or write HTML. We worked on many things that everyone can help with, including brainstorming, researching, and planning. Or if you have other skills you’d like to contribute, but don’t know how to get started, email the list and we’ll help.


You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.