Savage Internet
2017 - present
education
games
fullstack
mobile
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.
Savage Internet
2016 - present
education
games
physical
speaking
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.
Jugger Toronto
2014 - present
games
physical
volunteer
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.
Intel Labs
2013 - present
dataviz
education
fullstack
speaking
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.
M4S Toronto
2017
speaking
volunteer
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.
Savage Internet
2016 - 2017
fullstack
mobile
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.
Savage Internet
2016
games
physical
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.
Savage Internet
2014
dataviz
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.
Savage Internet
2014
education
speaking
I gave a talk at the East Bay JavaScript Meetup on the quirks and pitfalls of JavaScript's event loop, as well as on patterns (and anti-patterns!) for handling asynchronous tasks in JavaScript. Some of the material has been made obsolete by widespread ES6 adoption / tooling, but most of the discussion is still quite useful.
Kinoma / Marvell
2013
games
hardware
speaking
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.
Savage Internet
2012 - 2013
dataviz
education
datafist is an in-browser toolkit for visually exploring your personal data. Similar to Max or PureData, datafist offers a visual programming interface built around a toolkit of simple, composable operations. As you play around with these operations, the result is simultaneously visualized. My goal was to create a simple open-source tool to help all self-trackers get more out of their personal data, regardless of experience with programming or statistics. There is no backend; just clone the repo and go! It can handle files of up to ~20K data points quite easily. Visualizations are built on top of d3, with mootools as the base JavaScript library. It also makes use of HTML5 drag-and-drop and FileReader APIs for CSV file import.
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.
Facebook
2011 - 2012
fullstack
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.
Facebook
2010 - 2011
fullstack
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.