The Conference Delta API

So I haven’t been blogging a lot, mainly because I have been busy, both at work and on the side.  During DevLink I had an idea come to me for a new project, which would test me in many of the new technologies that Microsoft is developing, specifically: Azure, WebAPI, and Windows 8.

In recent years, many conferences have begun exposing a REST API listing their session and speaker information.  Conference-goers have been encouraged, and have done so with remarkable results, to create smart phone apps to negate the need for attendees to use paper to find sessions.  While these apps have been largely impressive, they tended to suffer from one major flaw: load.  Whenever someone opens their app they generally have to download all of the latest data to ensure that any changes (as happen frequently at conferences) are taken into account.  With so many developers accessing the API load times can be extended, so much so that people tend to fall back on using the physical medium.

The project is designed to address this shortcoming as well as provide me a chance to dabble with Microsoft new Windows 8 platform.

The Poller

To address the load issue it is necessary to provide an API which can, along with providing the latest conference information, provide changesets which detail, simply, what data has changed.  These would be smaller packets.  To facilitate building these changesets, I created a Azure Worker Role which is designed to poll an API every so often and determine what has changed, if anything.  This data is then stored in a SQL Azure table.  The next step was to provide a way for users to access these changesets, along with the latest information for the conference.

The Delta API

So, in what I call a Proxy Pattern (I am sure it has a more formal name), I am creating a web instance to sit in front of another instance.  For the current implementation 4 things will be provided by this proxy API: Speaker information, Speaker Change information, Session information, and Session Change information.  This is a simple WebAPI which can return the data in JSON or XML format, depending on what the consumers asks for.

The Push Service

So one of the central features in Windows 8 and Windows Phone 7 is the MPNS (Microsoft Push Notification Service).  By utilizing this proxy approach I can allow for Push notifications about conferences changes to be pushed to subscribers.  I am also thinking, I can notify when a session is about to start, as a reminder.  I am hopeful that should my pilot of this system prove successful I can extend the push notifications to Apple and Google (via UrbanAirship, most likely).

The Clients

Because the DeltaAPI provides the data in JSON and XML formats, I could write a client for ANY platform, but as I carry a Windows Phone and I will be buying a Surface, I am targeting the Windows platform.  I am looking for other developers who would be interested in developing for Apple or Android platforms.  At the moment, I am working on the Windows 8 client application having finished the Delta API, Poller and Azure deployments.  I expect the Windows 8 client to be completed by end of week.  I am trying to do this ahead of a critical date for this project with respect to the pilot.

The Pilot

At the moment, I am awaiting the release of the CodeMash session selections (I may be one of them).  Once the API is released I intend to target it and begin building the data.  It will require some code changes as DevLink (which I used as a model) provides different information than CodeMash.  I am looking for anyone interested in developing apps for Apple and Android as I will simply not have time to address these platforms.

So there it is, its ambitious and part of a much larger goal I have for distributing conference data.  I am hoping for a solid pilot at Codemash this year.


Leave a Reply

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

You are commenting using your 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 )

Connecting to %s