This is my personal fork of our Hackathon project. I am doing my own refactoring. I will do my best to keep this project and it's origin in synch as best I can, but they my diverge, so please see the original project also.
Whisper is an HTML5 web application targeted at the mobile platform. It leverages location awareness against a set of web services to allow users to create ad hoc study sessions through course-specific check-ins. Whisper plots on a map the user's coordinates along with the coordinates of other students who have checked in to a given course. When a user changes courses, the map is dynamically updated with any check-ins from their classmates.
Aspenware created Whisper as a prototype for the 2012 Pearson Hackathon. It is not production-ready code. This application has no test suite and most of the application has no code coverage.
We used the following technologies to develop Whisper:
- HTML5 geolocation API for determining the latitude and longitude of check-ins
- Google Maps APIs for plotting user positions on a map
- Cascading Styles Sheets level 3 for layout, styling, and visual representation
- Backbone JavaScript Library for object representation, user-driven events, data-stores, and asynchronous service calls
- jQuery JavaScript Library for basic DOM scripting
- Underscore.js JavaScript library for templating and utility methods
- ASP.NET MVC version 3 for development of the API tier
- Simple DB as the non-relational database for storage of user meta-data such as check-ins and geolocations
- App Harbor for application server hosting and dynamic scalability
- Github for source code management and versioning
The server-side implementation uses a traditional MVC design pattern where models represent domain objects and controller actions handle client interaction. We expose application APIs through RESTful routes and we express data through either JSON or XML, depending upon how Whisper consumes the service. The server-side APIs are client agnostic and Whisper may consume them using both native mobile applications and HTML5 RIAs.
The client-side implementation uses a model-collection-view paradigm that, like the server-side code, represents domain objects by JavaScript models which Whisper fetches and instantiates using asynchronous service calls. We bound data in the models to a single view using HTML templates, and we rendered new views by a router that intercepts changes in the browser's URL bar via hashes, initiated by actions like button or link clicks. This means that the browser's history captures the front-end's state and this history can be traversed using the forward and backward arrows.
- Rob Clark: Application design, styling, and layout
- Eric Bowen: Middle-tier development
- Adam Roderic: Client-side development
- Michael Filbin: Client-side development
Copyright (c) 2012 Aspenware Internet Solutions
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.