## Experiments & Toys
Here you'll find a collection of prototypes, experiments & pet projects I'm working on.
### Web Mapping
I used to do & program [GIS](http://www.esri.com), make maps, and generally geek out about cartography and am having
a lot of fun right now playing with what's possible with modern web mapping frameworks.
- [Watch the Buses and Trains](bus): A simple web app that shows the real-time locations of Portland [Trimet](http://www.trimet.org) buses and trains.
> + On the back-end, I'm using [Python](http://www.python.org) with my favorite web framework [Flask](http://flask.pocoo.org/).
> An [Esri Shapefile](https://www.esri.com/library/whitepapers/pdfs/shapefile.pdf)
> of [Trimet route stop data](http://developer.trimet.org/gis/) was unprojected from State Plane ft to geographic
> using [QGIS](http://www.qgis.org) and then loaded into a [SQLite](https://www.sqlite.org) table with a custom schema.
> + On the front-end, I'm using the beautiful [Semantic UI](http://semantic-ui.com/) CSS framework into which I load a [Leaflet](http://www.leafletjs.com)
> map control. The map control is loaded with a base layer from [OpenStreetMap](http://www.openstreetmap.org/) centered
> on Portland, OR.
> + When a user zooms in on an area and clicks the 'Go' button, the app makes an ajax call to fetch the Trimet stops
> fetch the current location of buses and trains in that viewport using the [Trimet location API](http://developer.trimet.org/ws_docs/vehicle_locations_ws.shtml).
> When that callback returns, the location of the vehicles is updated on the map using a custom Leaflet marker
> with a [label](https://github.com/Leaflet/Leaflet.label) indicating the vehicle's destination.
> The next improvement I'll make will be to cache vehicle locations in [Redis](http://www.redis.io) so that I'm not
> making redundant calls to the Trimet location API.