2017 - present
expedition! is a mobile augmented-reality game that connects players around location-based collaborative storytelling tasks: think Geocaching meets historical fan fiction. Currently in development; release schedule coming soon.
2016 - present
The Puzzling Madness of John A. Macdonald is a puzzle/scavenger hunt set in Toronto circa 1867. Players unravel a plot to undermine Confederation, using historical handbills, maps, and sites. As co-designer, I was involved with pretty much everything: initial research, puzzle design, playtesting, scriptwriting, casting, direction, costumes, props, website, marketing, social media outreach...it was a daunting task! The game was developed through 2016-2017, and will be opened to the public in summer 2018.
2014 - present
Jugger is a fast-paced international team sport that plays like a blend of capture the flag, fencing, and rugby. It enjoys relative popularity in Germany, but Valkyrie and I introduced the game to the Bay Area and Toronto. I'm actively involved with social media outreach, practice planning, coaching, and equipment building / maintenance for the Toronto club. My partner and I gave a presentation on the history of the sport at Nerd Nite East Bay and Nerd Nite Toronto.
2013 - present
Data Sense is a project with Intel Labs to make data analysis accessible to non-technical end users through interactive data visualization. It consists of a web application (Vue / d3, Spring MVC, MySQL) backed by a data-syncing service (Spring MVC, Thrift) and a data analysis engine (node.js, express). As the lead developer, I've built large sections of this architecture, and have been actively involved in feature development, bug fixes, and profiling / optimization. I also gave a talk on Data Sense at QS 2015. This project is a spiritual successor to datafist, albeit much more usable and performant.
March for Science Toronto was a satellite march of the larger March for Science movement. I co-developed our website with Valkyrie Savage, and also served as the primary media contact. The march itself was quite successful, with over 4000 in attendance, great local media coverage, and surprisingly smooth execution on march day.
2016 - 2017
Locatrix is an Android app for tracking your location and sharing it with friends, family, and co-workers. Unlike other location-tracking tools, Locatrix preserves your privacy by only revealing city-level location every 24 hours, and by never sending raw location data off the device. The app sends location updates to our web service (node.js, hapijs, PostgreSQL). This service also provides a web interface, through which users can embed iframe or image widgets showing their city-level location and/or timezone. To avoid sending location off-device, we run nearest-neighbor lookups against a quadtree index bundled with the app.
Doc Savage: Woman of Bronze is an Oakland-based puzzle hunt game tied to the city's unique history and architecture. It features letter locks hidden around the city, each unlocked by a four-letter word that the players must deduce from clues, riddles, and puzzles. I designed the game structure, puzzles, and narrative, and then organized and ran the game for 15 players as part of Valkyrie's graduation party.
Toroid is an interactive worldwide map of Tor nodes. It uses d3 and Leaflet for visualization, plus a simple cron job to retrieve an index of Tor nodes from the Onionoo API.
Using the newly-announced Kinoma Create hardware prototyping platform, Valkyrie Savage and I built Hoedown!, a unique game that we demonstrated at the Kinoma SXSW Trade Show stand during SXSW 2014. In Hoedown!, players are measured for different qualities using physical sensors. These measurements determine a character class for the player, which is presented to them in the form of a character sheet printed on a BERG Little Printer. Players then find other players from each of the seven character classes, with whom they complete small shared tasks.
2012 - 2013
I worked with Valkyrie Savage to design, build, and program Arduino-based electronics for her wedding dress. Using two XBee modules, an Arduino Fio, and an Arduino Lilypad with the XBee breakout board, we constructed a proximity sensor based on RSSI pin signal strength between the two modules. This sensor was used to illuminate a series of LEDs on her dress, providing a visual indication of our mutual proximity.
After spending a year with the Search Infrastructure team, I switched gears and moved to the Core Photos team. This horizontal role switching is highly encouraged at Facebook. I took a failing face detection/recognition system and rebuilt it for scalability, achieving 99.9% reliability and a tagging boost of 2%. I then worked with Lubomir Bourdev to build easily reusable detection/recognition components, making it easier to drive further improvements to our tag suggestion systems. The bulk of my time with Core Photos was spent driving a major initiative to migrate all photos-related data into TAO. TAO provides access to Facebook's social graph data via a simple API that abstracts away Memcache/MySQL. The migration required extensive planning, frequent communication both within and across teams, and broad knowledge of Facebook's codebase. When I joined Core Photos, several people had previously tried and failed to gain traction on this project. By the time I left, we had successfully migrated all photo tags and had a clear plan for completing the rest of the migration.
I built search for Facebook Groups, the first fulltext search product to use Facebook's in-house distributed graph search system. This was a full-stack project; I was responsible for everything from indexing to realtime updates to frontend development. After rollout, I maintained this product by managing a weekly push process, building dashboards, and working with teammates to resolve operational issues. I also improved search quality, using detailed query log analysis to prioritize fixes to the indexing process and UI. After that, I worked more closely with the Search Infrastructure team on improving our core graph search system. I automated index builds, making the process of pushing our 50 TB index quicker and more reliable. As part of the oncall rotation, I periodically managed that push process end-to-end. I instrumented our system to report a breakdown of CPU/network usage, allowing us to precisely target our optimizations at specific common queries and high-volume callers.
XHPy is a Python port of Facebook's XHP. It installs an import hook that dynamically rewrites code as it is imported. The parser uses Pratt top-down operator precedence, and is composed of a series of generators that stream the output of tokenize.
Valkyrie Savage and I biked from Copenhagen to Istanbul via Portugal, a distance of over 12 000 km in six months. On the way, we wrote daily blog posts totalling 150 000 words. Before the trip, I also put together a proof-of-concept handlebar cam, using ffmpeg to compile videos from still frames. This setup was unfortunately impractical for our trip, but it made for some fun test rides.