BookMyne is a mobile application for the Apple iPhone which allows for library patrons to search their local library, lookup account information, find libraries where ever they are across the globe, and get reading recommendations from multiple popular sources, including GoodReads, New York Times, and Novelist.

Most of the interesting work I did for this project revolved around electronic resource integration, finding a library, reading recommendations.

Finding, Downloading, and Reading eBooks/Audiobooks

Finding a Library

There are four ways to search for a library in BookMyne
  1. Nearby search (using GPS and specified distance)
  2. Address Search (shows libraries near to the address using Google's geocoding API)
  3. Name Search (find library by its name)
  4. Map Search (using Google Maps + pin clustering)
The first three are pretty common place and were relatively trivial to implement.  Map Search became an issue because, as BookMyne grew, so did the number of public libraries.  Eventually, the UIMapView became unusable because the pins took a very long time to load and, until the user zoomed in, was impossible to select a library.

So, clustering to the rescue.  I looked a bit into k-clustering and even implemented a bit of that algorithm at first, but found the performance to be unacceptable for the mobile platform.  Instead, I used a technique I gained from working with 2D grid-based games.  

Here's the video:

Reading Recommendations:

Reading Recommendations were less technically impressive, but was still an interesting component to design and develop.  Product Management wanted something that was like a game, but also functional.  The middle ground was this UIPickerView that would work similar to the Urbanspoon application.

The main issue was content.  We had a few different sources to choose from, but in the end stuck with Goodreads and New York times.

The reading recommendations come in three parts.  The Category (Awards, Popular, Social), the Sub-Category, and the Book list (in a hierarchy, respectively).  A generic interface was designed to allow any feed that provided a list of Sub-Categories and a list of Books to be used for the Recommendations engine, which made plugging in other sources that matched that format trivial.  

Here's a quick demo: