Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles
(untagged)

Loclville Case Study

26 Apr 2013 1  
Loclville is a free Windows* 8 app that provides an easy-to-use virtual community notice board. This article covers that app's journey.

This article is in the Product Showcase section for our sponsors at CodeProject. These articles are intended to provide you with information on products and services that we consider useful and of value to developers.

Introduction 

Loclville is a free Windows* 8 app that provides an easy-to-use virtual community notice board. Developed by amateur app developer Zubair Lawrence, a Sr. Production Services Technician at Sony Pictures Imageworks, the app began life as a web site and was subsequently redesigned for the Intel-sponsored Windows* 8 & Ultrabook™ App Innovation Contest  hosted by CodeProject in fall 2012.

Visually inspired by classic cork pin boards, Loclville lets anyone post notices without the need to register, with users moderating the posts through a voting system. Central to the app’s functionality is the ability to set the geographical size of the community users want to interact with. The accessible design lets even the most reticent computer users easily engage with their local community online.

Loclville running on Microsoft Surface*.

The Loclville app is now available on the Intel AppUp® center  and the Windows* Store, optimized for Ultrabook™ devices running Windows 8, and is also available for the Google Android* and BlackBerry* mobile devices.

During development of Loclville, Lawrence collaborated with the originator of the idea for the concept and execution of the app, and with a graphic designer for the visual assets. Lawrence experienced numerous development challenges, many of which he encountered for the first time, from how to accurately manage the geo-localization inherent to the app’s core functionality, to programming for a touch UI on Ultrabook and handheld devices.

Approach

Lawrence approached the development of the app in two separate parts: the app side, which is the program that users download and interact with, and the server side. Each part had its own distinct development process.

JavaScript* and HTML5

Lawrence initially decided to use JavaScript as the main programming language for the app as one of the core technologies (the other being CSS3) for interactivity and animation in the HTML5 development environment. Based on this decision, he was ultimately able to reuse significantly more of the code and functionality from the web site than he originally thought possible, in addition to being able to keep the server-side calls.

Though Lawrence had reservations about using JavaScript and HTML5 after hearing other developers’ concerns about speed, he found that JavaScript was able to deliver fast performance depending on how the code was written. Lawrence’s early decision to use JavaScript as the main language for the app was ultimately justified, and he described it as one of the best choices he made.

AJAX

During the coding of the original web site, Lawrence relied heavily on AJAX, the collection of client-side web technologies—including JavaScript and XML—that facilitates asynchronous web applications. For app creation, AJAX delivered a number of efficiencies, including the ability to reuse the web site code, particularly on the server side.

The app was designed with API calls for the different features; for example, receiving posts or retrieving them from the drag-and-drop pocket feature. With one call, the app serves up all the posts for the area specified. The AJAX JavaScript-coded procedures from the site were reused for the app, which meant the app could more easily be completed within the project deadline.

Server

Lawrence first considered building the app using PHP on a Linux* server. However, concerns about scalability led him to experiment with, and eventually choose, the Azure* platform from Microsoft. Azure provides a virtual machine for each server, hence delivering a much more scalable server configuration with as many virtual servers as needed spread out globally through the platform’s distributed cloud solution. Windows Azure Mobile Services was employed for the push notifications, with all the images stored on the Windows Azure Content Delivery Network (CDN).

HTML5 Encapsulator

To create the desktop app, Lawrence Initially experimented with AppJS, the Intel AppUp encapsulator, and TideSDK, finding the latter a bit too complex and offering features he didn’t need. After these initial road tests, Lawrence decided to use the Intel AppUp encapsulator to build the HTML5 app, finding it to be an invaluable tool to quickly bring the app to the desktop.

Once the basic app was up and running, Lawrence discovered that he required greater location support. To achieve this, Lawrence switched to the AppJS solution, which offered the HTML5 geo-location features and the Mac* and Linux support he needed.

Store and Desktop

Lawrence also made an early decision to develop simultaneously for the Windows Store and for the desktop in order to maximize the audience potential. Because of its association with Intel, Lawrence thinks the Intel AppUp center gives consumers a higher degree of confidence in the apps, with the extra testing helping to ensure the safety and security of content. In addition, the fact that the Intel AppUp center is not restricted to only the Windows 8 platform helped the app reach a much larger audience than it would otherwise.

Development Challenges

Location

One of the most significant development challenges Lawrence faced was ensuring the integrity of the individual user location data, which is critical to the proper functioning of the app. Drawbacks with the Global Positioning System (GPS) data alone include uncertainty over the age of the data—there is always a possibility that the user is many miles from the location where the last reading was taken—and whether the GPS was actually correctly locked on when the data was read.

Loclville screen layout on mobile.

During the early stages of development, Lawrence noticed inaccuracies in the location data, with data that were either imprecise or showed multiple locations. To remedy this, Lawrence implemented a hybrid process with which the app collects both GPS data from the devices itself and IP address data. These readings automatically update throughout the user session to ensure that positioning information is as accurate as possible and to guarantee the useful functioning of the app’s key distance radius features.

When serving up posts based on a user’s specific location, the server first receives a request for a post, and then compares the latitude and longitude coordinates of the requester with the latitude and longitude of the posts in the database. The posts within the defined radius are returned (Figure 1).

Figure 1. Sample code used by the Loclville app that establishes the distance between sets of latitude and longitude coordinates.

Touch and UI

Because Lawrence had no prior experience implementing a touch UI, understanding the different requirements related to menus, screen size, button size, and positioning on-screen was challenging. Lawrence used a responsive design approach, designing in such a way that the app or web site provided an optimized viewing experience across a wide range of different devices and screen sizes. Using this approach, Lawrence was able to ensure that the app serves up the appropriate UI for the device it’s running on, delivering a high level of legibility and straightforward navigation, with a minimum amount of resizing, panning, and scrolling required from the user.

Loclville running responsively on a variety of different screen configurations.

To determine how the UI should respond, the app queries the pixel size of the screen and the device itself, then uses those conditions to decide how to draw the UI and adapt to any changes. If the user rotates the screen of the device—for a tablet or smartphone, for example—or if the web browser window is resized, the app responds and adjusts the UI accordingly.

The original Loclville web site featured bold and simple buttons and menus that helped facilitate a relatively straightforward transition to smaller screens and touch controls. Tweaks were made to the drop-down menus and some of the links in order to optimize them for touch. These modifications included making buttons more finger-friendly by ensuring enough separation between them to help prevent accidental presses.

Adapting to smaller screens also involved repositioning some of the menus to make better use of the limited space available. The Distance, Categories, and Post buttons were moved to a footer menu, and posts were changed to be shown in a list view, making it possible to show more in a smaller space. Because of the overall simplicity of the layout, Lawrence decided against implementing any specific changes related to flipping between portrait and landscape views on a phone or tablet. The overall result of the optimizations is an app that is well adapted to multiple devices and screen sizes.

jQuery

Another challenge that Lawrence faced was that he needed to make jQuery work in a Windows 8 JavaScript app. Unlike the desktop version of the app, the Windows Store app had to meet code compliance requirements, which meant porting the jQuery library to allow it to work with the Windows Store version.

Figure 2 below shows the code implemented in the app for porting jQuery to work in the Windows 8 JavaScript app.

Figure 2. Sample code from the Loclville app for porting jQuery.

Testing 

Beta testing the app was an informal process, conducted primarily by collaborators, their friends, and by the users themselves. After each set of changes, Lawrence released a new version of the code, and then proactively gathered feedback from users regarding its functionality, usability, and bugs. Lawrence said the testing was the most difficult part of the development process, noting that users often behaved unpredictably when using the app, making the testing both very important and challenging.

An example of unexpected behavior occurred when users were asked to input their address, a vital piece of data for the proper functioning of the app. Lawrence repeatedly saw an error stating that the app was unable to find the address. He eventually realized that the input question was ambiguous, causing users to enter their e-mail address, which naturally would not permit the app to pinpoint their physical location. The implementation of automatic geo-localization of the users using GPS and IP address data provided the solution.

Lawrence used a touch screen Ultrabook device for testing to ensure the integrity and proper functioning of the touch interface alongside the traditional mouse and keyboard controls.

Feedback from reviews has also proved useful on at least one occasion for identifying and fixing a bug, although Lawrence has been frustrated by the one-way nature of the communication with reviewers. The lack of ability to reply means there is no way to respond directly to let a reviewer know that a bug he or she discovered has since been fixed.

Metrics

To gather Loclville user behavior metrics, Lawrence implemented the open-source analytics tool Piwik*, which gathers data including the app version (for example, browser, Android, iOS*, or Windows 8), the user’s city, whether the user clicks a post, the link clicked to leave the site, and the session length. Lawrence also gathers his own data from the app, including number of posts, user location, and growth and usage patterns.

Lawrence analyzes the data to determine where users are coming from and then offers direct support to those within that locality by creating specific posts, with the goal of helping users grow the community.

Next Steps

Some of the features that Lawrence is considering implementing in the future include:

  • Localization. Making the site available in languages other than English, although which languages and when this feature will be available have yet to be defined.
  • Monetization. The ability to pay to post commercial offers and information. This feature will be based on the same rules of user voting, thus encouraging only content with real value to users.

               

                Promotional offers in the Loclville mobile app.

  • Family filter. Placing more power in the hands of the individual user, as opposed to the community, regarding what content a user sees; for example, providing the ability to filter profanity. This feature would also potentially include the ability to prevent unregistered users from posting pictures. One related challenge is finding a way to filter in multiple languages, a problem that Lawrence is still working to solve.
  • Social media integration. On-screen buttons that allow users to directly share Loclville content through a chosen social network such as Facebook*.
  • Near Field Communication (NFC). Functionality to allow users to share posts by touching two devices together using NFC technology.

The next major planned update for Loclville is version 3.0, which is currently scheduled for release in September 2013.

Conclusion

Outside of the core coding process, Lawrence cited the following points as important to consider when creating apps:

  • Touch is important, but developers shouldn’t ignore the mouse and keyboard. Apps need to be user friendly for both types of user interface.
  • Awareness of screen sizes and orientation is crucial. Apps are now expected to run on more devices than ever, from the 10-inch screen of a Microsoft Surface* and 13- or 14-inch Ultrabook device screens to even a 30-inch desktop screen. With tablets and Ultrabook convertibles, developers also need to be aware of the different design demands of landscape and portrait layouts, and develop accordingly.
  • Take the time and effort to submit apps to both the Windows Store and the Intel AppUp center because the potential audience is huge.

Despite the concerns he heard regarding the use of HTML5 and JavaScript as an app development platform, Lawrence firmly believes that the combination of HTML5 and AJAX technologies was the right choice, and he plans to continue using a similar workflow for subsequent apps.

About the developer

A 2009 Masters graduate of the Savannah College of Art and Design in Georgia, Zubair Lawrence started programming as part of his Visual Effects degree course and rapidly developed both a strong affection and a clear affinity for it. He has since developed his coding knowledge and abilities beyond the Python* programming that was part of his course, becoming a competent self-taught application programmer.

In June 2011, Lawrence joined the CodeProject independent developer community (http://www.codeproject.com) using the moniker Helix Ten and continued to code avidly in his spare time even after joining California-based Sony Pictures Imageworks* in January 2012. In December 2012, Lawrence successfully entered the Loclville app into the Intel-sponsored Windows* 8 and Ultrabook™ App Innovation contest hosted on the CodeProject web site. Lawrence complements his professional work at Sony Pictures Imageworks with coding in his spare time, including ongoing support and updates to the Loclville app and web site.

Helpful resources

One of the most valuable resources for Lawrence during the development of the Loclville app was the development community on CodeProject, the site that hosted the Windows* 8 & Ultrabook™ App Innovation Contest. During development of the app, Lawrence interacted frequently with the community members, and he still visits the site frequently. The Intel HTML5 Encapsulator was invaluable in allowing Lawrence to bring the app to the desktop quickly, with a great deal of documentation and videos available to support the development process. Lawrence cited the documentation available on the Intel AppUp center as a vital resource during the app submission process, describing it as being very clear and thorough.

Portions of this document are used with permission and copyright 2012 by CodeProject.  Intel does not make any representations or warranties whatsoever regarding quality, reliability, functionality, or compatibility of third-party vendors and their devices. For optimization information, see software.Intel.com/en-us/articles/optimization-notice/. All products, dates, and plans are based on current expectations and subject to change without notice. Intel, the Intel logo, Intel AppUp, Intel Atom, the Intel Inside logo, and Ultrabook, are trademarks of Intel Corporation in the U.S. and/or other countries.  *Other names and brands may be claimed as the property of others.  Copyright © 2013. Intel Corporation. All rights reserved

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here