The Technical Details Of Our YAPC::EU app
Paul Zolnierczyk (@paulish29) & Nate Robison (@ntrobison)
october 5th, 2016
YAPC::EU recently hosted their annual Perl Conference in Cluj-Napoca, Romania, and Infinity Interactive is proud to have partnered with them in releasing the YAPC::EU mobile application on iOS and Android. Today, we’ll cover some of the technical challenges we faced in creating this app, which we built on the foundation of the Open Source project that provided a similar app for Xamarin Evolve 2016.
Show Me The Schedule!
The basic functionality of any conference app is to provide up-to-date schedule information, so that an attendee can make decisions about which sessions to attend. To meet this requirement, we needed a source of data that was updated in real time and accurately reflected the schedule displayed on the YAPC::EU website. Fortunately, the ACT software used by the conference provided an iCal feed of the schedule. We were able to use this standard data format without any interruption or interference to the way YAPC::EU operates, while also getting real-time schedule updates for our app.
The iCal Giveth & The iCal Taketh Away
RFC 5545 — Do You Speak It?
Unfortunately, there were some inconsistencies with the YAPC::EU iCal
feed regarding compliance with the relevant RFCs
(2445 and
5545). More specifically, the
provided iCal file didn’t conform to the spec for certain fields:
ATTENDEE
, COMMENT
, and ORGANIZER
. We did find some existing .NET
libraries that implemented iCal parsers, but we weren’t able to use
them due to this lack of conformance; they all required strict RFC
5545 semantics.
Time To Get Close To The Metal?
We considered writing a quick-and-dirty Node app to parse the iCal and re-serve it as JSON, which the mobile app could then pull in directly. Although this was a theoretically viable solution, we decided that it involved too many moving parts. It would be another hosted app that could go down, would need to be monitored, would complicate deployment plans, and so on.
Sometimes You Just Gotta Say, “Parse It!”
The only “easy” option left, the one that didn’t involve another
service piece, was to manually parse the iCal file ourselves in the
backend of the system. While it didn’t adhere strictly to the
RFC 5545 standard, the iCal
file did follow the structure for the most part. This allowed us to
read the file line by line looking for tokens such as LOCATION:
or
DESCRIPTION:
to map to our event objects. In addition to a
line-based parsing approach, we also had to account for multi-line
event descriptions. Some descriptions didn’t correctly provide the
newline character (\n
), and other characters weren’t properly
escaped. In the end, our DIY approach ended up being beneficial, as we
were easily able to handle these inconsistencies as we discovered them
We used the Azure Scheduler to trigger a new iCal file fetch-parse cycle once an hour, so that any schedule changes would be pushed live to the mobile application. Later, after the event was actually underway, the organizers asked us to bump up the frequency to every 15 minutes to better accommodate their schedule changes. (They were dynamically rescheduling talks based on projected attendance to make the best use of their conference space.) Azure Scheduler made this as easy as pushing a button.
More Than Schedules
Info About The Sponsors
Tech conferences generally depend on sponsors to help make them happen. Naturally, we wanted information about the YAPC::EU sponsors to be in a prominent location within the app. We didn’t have a chance to coordinate a standard way to exchange data about the sponsors with the organizers of YAPC::EU. Instead, we manually extracted the data from the sponsor list on the YAPC::EU site and added it to the app. We ordered the sponsors by their tier: the highest tier sponsors were displayed first, and we went down the list from there. We also linked to the sponsors’ web pages and, where possible, to their Twitter handle.
Official Hashtag Timeline
YAPC::EU also had an official hashtag: #yapceu2016. The Xamarin Evolve app that we had based the app on already had support for displaying the Twitter timeline for a particular hashtag, so we updated that functionality to use the YAPC::EU tag. Exposing the official hashtag timeline within the app meant that users could easily follow it without having to track a new hashtag in their usual Twitter feed.
Azure
Application Backend
The existing Xamarin Evolve app backend that we used as the basis for the YAPC::EU app backend was designed to be used and hosted on Azure App Services. This made it very easy to deploy and scale for usage. During development, the Azure free tier was more than ample for our demands. Once the app was ready to go live, it was a matter of flipping a switch to move to the paid tier. This ensured that we would be able to handle any and all increases in traffic as the app was used by the conference attendees. As already mentioned, the Scheduler provided an easy means of running recurring jobs. All in all, Azure provided a scalable and stable back end with a minimal investment of both cost and time on our part.
Monitoring
Along with the monitoring available to us via Azure, we also use an external third-party tool to monitor the backend. An issue within the Azure network could take down both the site and the Azure monitoring service. We set up Pingdom to query an API endpoint that made a very lightweight database query. This exercised the entire application stack and validated that the backend was not only up, but also responding to requests in a timely fashion.
App Stores
Apple App Store
Recently Apple made changes to their review process which have
significantly expedited getting apps approved and into the store.
While it once took four to seven days for review and approval, in most
cases, it now takes 24 hours or less. We are very happy to report that
this was indeed the case for us. If you’re wondering what the
difference between a Xamarin deploy and a Xcode iOS deploy is, there
isn’t one! Both platforms yield an .ipa
file that you submit to the
app store for review. We did have one app rejection due to overusage
of Apple iCloud storage, but that was quickly resolved once we
optimized app icon sizes.
Google Play
Deployment to the Google Play store was extremely straightforward and
quick. The Play store doesn’t have a lengthy approval process and thus
apps can be live within a few hours. Xamarin makes it very easy to
export the .apk
file and sign it as needed for a Play store release.
Once uploaded we were able to release a beta version to some users to
test directly from the Play store. The Play store also made the switch
from beta to release version trivial.
Conclusion
The most challenging piece of this conference app was importing the iCal data into the application. Importing data that comes in a standard format usually isn’t a challenge, but incomplete compliance with the RFCs caused some obstacles that forced us to consider alternatives. While this was an unexpected challenge, we recognize that many conference software systems don’t support any kind of structured data export, and so we’re grateful that we were able to get the schedule data as we did. In an ideal world, conference software systems would offer up a variety of format options for exporting data, such as JSON, XML, CSV, and/or XLS. In a perfect world, that dataset would also contain all the relevant metadata about the conference, such as details about sponsors, venue location and maps, WiFi information, and the conference Code of Conduct, all in one place. All in all, it was a lot of fun to work on and we’re extremely happy to hear the attendees and organizers of YAPC::EU found the app useful and a part of their daily conference experience.
Update: The YAPC::EU::2016 apps are no longer available on iOS or Android. Please check out the other iOS and Android apps we’ve created with Xamarin.
Tags: technology csharp xamarin