Evan Savage
Do things that matter.
Learn, think, and teach constantly.
Enjoy the process.
View the parts most relevant to you: use these tags to filter my CV.
Entries matching any of your selected tags will rise to the top.
back to top
Kinoma Create Hoedown!
Savage Internet
Jan 20, 2014 to Mar 9, 2014

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.

The source code for Hoedown! is available on github, though be warned that said code remains in a hackathon-ish state. You can see a time-lapse of us hard at work.

Toronto Unicyclists
Jan 1, 2014 to present

My current non-technical project is to learn to unicycle, which I'm doing with the Toronto Unicyclists. It makes a great complement to the sedentary, cerebral nature of my day job - nothing better than kinesthetic skill development to unwind after a long day spent coding!

So far, I've been making decent progress; I can remain balanced during regular riding, and have just started to get the hang of freemounting (i.e. mounting the unicycle without using a wall or other static object to keep balance.)

Savage Internet
Sep 9, 2013 to Sep 11, 2013

I presented at the Meeting of the Minds 2013 conference as part of a workshop on Chaos in Urbanism. At its root, this workshop was a study in contradictions: on the governance/policy level, how do you manage chaos generated by accelerating change?

My talk was about the idea of interactive governance, a form of leadership that places primary importance on near-immediate, continuous, and two-way communication with external entities. Digital natives take these qualities for granted, yet the same qualities remain partially or totally absent from our interactions with governments and other large, bureaucratic organizations. There's a cultural dissonance here, and it's not going away anytime soon.

You can listen to and/or read the talk here.

In preparation for the workshop, I also contributed a blog post on the global spread of technology and internet culture, drawing on examples from my travels in Southeast Asia.

ponder Contract Developer
Intel Labs
Sep 5, 2013 to present

ponder has much the same goal as datafist: to enable all self-trackers to get more value from their personal data, regardless of experience with statistics or programming. It is currently in development; this CV will be updated with a link when it goes live.

ponder uses Spring MVC as the web application framework, Thrift for communication with the API syncing service, d3 for visualizations, jQuery and bootstrap for UI. By far the largest challenge has been working with third-party APIs, which have quite divergent opinions on how to deal with time, data formatting, pagination, etc.

This project draws heavily on ethnographic research and visual/interaction design from the team at Intel Labs. I've slowly come to accept that, even in software engineering, many of the hardest problems are not engineering problems - and so it is with this project. Without the dedicated work of Dawn Nafus, Pete Denman, Lama Nachman, and several others, this project would not exist.

Travels in Southeast Asia
Savage Internet
May 30, 2013 to Aug 23, 2013

The ramblelust blog chronicles the travels of Valkyrie Savage and myself through Australia, Singapore, Vietnam, Cambodia, Malaysia, and Korea during the summer of 2013. We also have photos from the trip.

This trip was less structured than our massive bike trip, but no less fascinating. We ate all the food, couchsurfed as much as we could, rode a ramshackle 125cc scooter motorbike around Vietnam, hiked halfway around the Jeju Olle in Korea, completed a few quests from expedition!, got our PADI Open Water Diver certifications, and sweltered in the muggy heat. (We did a lot of sweltering, let me tell you.)

Savage Internet
Jan 11, 2013 to Jun 22, 2013

expedition! is a quest-based learning game, where the quests are knowledge-gathering tasks at specific locations. Valkyrie Savage and I built a functioning prototype, which is currently in invite-only mode. Some examples of quests from our early players:

expedition! uses node.js, PostgreSQL with PostGIS, redis, OpenStreetMap, bootstrap, and jQuery. We sidestep callback hell by using fibrous which offers a yield syntax similar to Python generators.

In the process, I also built int64-native, a native extension to node.js that offers an idiomatic JavaScript wrapper around uint64_t values. int64-native is available on npm and github

Apprentice Chef
Kitchen on Fire
Jan 1, 2013 to Dec 18, 2013

Through local culinary school Kitchen on Fire, I help run cooking classes for groups of 10-25 people. This includes preparing ingredients and demonstration recipes, setting up stations, aiding students during class, and cleaning up the kitchen afterwards.

As an exchange of services, it's not half-bad. I get to meet interesting people, eat tasty food, and refine my culinary knowledge at no personal financial cost. In exchange, Kitchen on Fire keeps its costs low, and is able to devote more of its spare resources to nutritional outreach programs for low-income families.

Savage Internet
Nov 15, 2012 to Mar 11, 2013

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. The 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.

Everything is HTML5 and JavaScript (including the favicon!). 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 makes use of HTML5 drag-and-drop and FileReader APIs.

You can watch a demo video, play around with a live version, or read my blog post about datafist. datafist currently requires Google Chrome.

Fluxtream Contributor
CMU Create Lab
Nov 14, 2012 to Dec 18, 2012

I contributed briefly to Fluxtream, a toolkit for gathering and viewing your personal data. My main contribution was to clean up the Backbone and jQuery code that managed the time pan/zoom controls, fixing several bugs in the process.

In a broader sense, this work foreshadowed datafist and ponder.

Quantified Savagery Blog
Sep 19, 2012 to Nov 14, 2012

I wrote a series of blog posts discussing several of my self-tracking experiments. Most of these are accompanied by code snippets and visualizations explaining my approaches to making sense of the underlying data, all of which is available on github. The blog itself is based off the excellent Octopress engine.

Visualizations for Quantified Savagery were built using d3, a JavaScript library for building interactive DOM-based visualizations. Most of the standalone analysis scripting was done in Python, with little bits of bash scripting sprinkled throughout.

I've since added a couple of posts to this blog, but most of my blogging activity here was confined to the end of 2012. It served me very well as a soapbox for my thoughts on personal data, especially in the post-Facebook time vacuum before I shifted my attention to more intensive engineering projects.

Bay Area Quantified Self Meetup Group
Jun 27, 2012

I prepared and delivered an 8-minute Ignite Plus talk on my experiences dealing with panic attacks through self-tracking.

Bakery Volunteer
San Francisco Zen Center
Apr 1, 2012 to Aug 27, 2012

I spent several early mornings at the San Francisco Zen Center's Green Gulch Farm, baking muffins for the Sunday lectures. You have to wake up early to work in a bakery. Like 4:30 am early.

Proximity Dress
Mar 18, 2012 to Apr 1, 2012

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.

The code for this project is available on Github.

Core Photos Engineer
Facebook, Inc.
Nov 1, 2011 to Sep 28, 2012

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 our 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.

Interactive CV
Sep 23, 2011 to present

I design, build, and maintain this online CV using Django, XHPy, and mootools. It uses a Jekyll-inspired compiled YAML/Markdown approach to make adding new entries simple.

You can click on any tag to filter my life experiences. My CV also comes equipped with a print stylesheet that is integrated with the tag system, so you can even print a customized version to suit your needs.

To top it all off, the code is open-sourced on Github.

Little Grand Canyon Marathon
Mar 1, 2011 to Sep 10, 2011

Having completed our crazy bike trip, Valkyrie Savage and I wanted a further test of our athletic prowess. We trained for six months with three to six hours of running per week. It paid off; we completed the Little Grand Canyon Marathon at 6000 feet elevation in just under six hours.

Here's proof. I took Valkyrie's last name after our marriage, so I'm listed under my birth name of Evan Stratford.

Move Fast and Say Things
Toastmasters International
Jan 1, 2011 to Sep 28, 2012

I completed the Competent Communication manual and earned second place in the District Table Topics Contest. I also served as VP of Membership for Facebook's Toastmasters chapter, Move Fast and Say Things.

Dec 22, 2010 to Jun 20, 2012

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.

Development releases are available on github; see PyPI for more stable versions.

Post-Graduation Bike Trip
May 15, 2010 to Nov 23, 2010

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 I'm hoping to iterate on it for future trips.

Undergraduate Capstone Open Source Projects
University of Waterloo
Jan 1, 2010 to Apr 30, 2010

I participated in a unique open-source projects course offered in collaboration with several universities worldwide. In partnership with Mozilla, I worked to improve vCard support in Thunderbird.

Software Engineering Intern
Facebook, Inc.
Sep 1, 2009 to Dec 23, 2009

I worked on the Site Integrity team, which prevents spam and fraud in real-time across all Facebook products. I developed an unsupervised learning system to detect spam across billions of user messages per day. This work resulted in a patent on the underlying classification and user feedback mechanisms.

I also optimized our generalized spam classification framework, reducing CPU load by 15% after identifying performance issues with gprof.

For a hackathon, I ported rQRCode to a C++ Thrift service and helped build out a demo product for social graph actions via QR codes. Three years later, this Thrift service is now being incorporated into Facebook's Japan-specific QR offerings.

CS 488 - Introduction to Computer Graphics
University of Waterloo
May 1, 2009 to Aug 30, 2009

I wrote a raytracer with randomized supersampling, Phong lighting, and support for implicit surfaces. For my final project, I wrote a procedural content generation engine to render interactive natural landscapes with fractal trees, rocks based on Catmull-Clark subdivision, and multiple-frequency Perlin noise textures.

You can see some screenshots from these projects on my old blog.

CS 452 - Real-Time Computing
University of Waterloo
May 1, 2009 to Aug 30, 2009

I worked with Ondrej Ruttkay to design and build an embedded microkernel based on Send-Receive-Reply message-passing for the ARM-based Cirrus EP9302. We then built an application for this microkernel to control Märklin model trains.

CBC Radio 3 Scraper/Downloader
Apr 3, 2009

CBC Radio 3 runs New Music Canada, a database for Canadian artists. Music uploaded there is freely available, and can be listened to through the player on that site.

Using Firebug and Wireshark, I reverse-engineered this player to get at the underlying audio file URLs. I then built a Python-based scraper for retrieving those URLs and populating metadata. With this scraper, I downloaded their entire selection of Funk and Electro. Finally, I loaded this collection into Quod Libet, using its automatic rating and rating-weighted shuffle plugins to discover my favorite content.

Meet Organizer
Ottawa Parkour
Jan 1, 2009 to Apr 30, 2009

I helped to organize weekly gym meets for traceurs in the Ottawa region.

Research Intern
Canadian National Research Council
Jan 1, 2009 to Apr 30, 2009

For this internship, I worked with the award-winning PORTAGE statistical machine translation system. I designed and built a module to cluster similar phrases, then scaled it to handle corpora with tens of millions of phrase pairs. I also implemented Xu-Zens-Ney bilingual sentence segmentation, reducing translation model training time by over 80%.

The phrase clustering work resulted in co-authorship on the paper Phrase Clustering for Smoothing TM Probabilities, which was accepted at COLING 2010.

National Novel Writing Month Winner
Nov 1, 2008 to Nov 30, 2008

I wrote In Silico, meeting the NaNoWriMo goal of 50 000 words in one month. In Silico envisions a near-future world with ubiquitous implantable computing devices. To stave off societal collapse due to widespread video game addiction, a shadowy consortium of government officials and industry leaders constructs the perfect antidote: a game whose purpose is to maintain public order.

Software Engineering Intern
Google, Inc.
May 5, 2008 to Aug 30, 2008

I worked with Google's AdSense team, using Javascript cross-domain communication techniques to implement client-side batching for ad block requests. This was in the dark days before postMessage() gained reasonable adoption, so it involved a good deal of hackery with javascript: URLs and dynamically-generated <script /> tags.

I also wrote a Google Spreadsheets widget for generating heightmaps as part of an internal Google Docs hackathon.

This was my first time down to the Bay Area, so I deliberately spent a week in San Francisco before starting my internship. I met a variety of curious characters in that week. The most curious was a blond-haired drunk who had spent the last few months roving between music festivals. He pulled out a newspaper, wrote "Everyone Lies" on it in thick gold marker, and offered me a half-cupful of vodka. The second most curious was a spindly hacker type who spent his evenings blasting original Pure Data compositions in the hostel common room.

I knew I'd come to the right place.

Visual Search Algorithm Developer
Idée, Inc.
Jan 1, 2007 to Dec 30, 2007

My work with Idée was diverse. I developed a toolkit for evaluating high-dimensional Approximate Nearest Neighbor algorithms. I then worked with a designer to build and release Idée Labs, a Pylons-based web application featuring visual search across millions of images. I also collected feedback on the PHP-based internal operator interface, implementing requested fixes and improvements.

I learned Python in a day, then used it to build database migration scripts. My next Python project after that used Amazon APIs to scrape millions of book covers, allowing us to identify thousands of infringing uses of client images in those covers.

For the last couple of weeks, I researched methods for matching images against user sketches, implementing a prototype algorithm based on curve extraction and Hausdorff distance.

Mathematics Tutor
Mathematics Undergraduate Office, University of Waterloo
Sep 1, 2006 to Apr 30, 2010

Outstanding students are invited to provide paid tutoring services for freshman and sophomore Mathematics courses through the Mathematics Tutorial Centre. I tutored hundreds of students over four years in Linear Algebra, Calculus, and Combinatorics.

Quality Assurance Co-op
Slipstream, Inc.
May 1, 2006 to Aug 30, 2006

I worked with several other co-op students to double automation coverage of manual testing procedures. As part of this, I helped develop an XPCOM extension bridge between Mozilla Firefox and IBM Rational Robot.

This XPCOM bridge was a gloriously terrible hack made necessary by the QA team's insistence on using Rational Robot. I created a Javascript XPCOM component for sending data to a DLL built by another member of the team, enabling us to pass browser state to Rational Robot.

Leadership Team
STEP - Sustainable Technology Education Project
Sep 1, 2005 to Aug 30, 2010

STEP educates the public about sustainable technologies by raising funds towards renewable energy projects on the University of Waterloo campus. More information on their existing projects can be found here.

I organized on-campus talks by leading experts in renewable energy and sustainable design, developed administration tools for the STEP website, and helped promote STEP at community events.

Bachelor of Mathematics, Honours Computer Science
University of Waterloo
Sep 1, 2005 to Aug 30, 2010

I achieved a 90% major average and a 89% minor average in Combinatorics and Optimization while gaining two years of work experience through the University of Waterloo's co-operative program. In recognition of my outstanding academic record, I made the Dean's Honours List for the Class of 2010.

Computer Science AB Advanced Placement Examination
Neuchâtel Junior College
May 1, 2005

Since NJC didn't offer a Computer Science course, I taught myself all required material for the 2005 Computer Science AB. I received the highest possible score on this examination.

Even though this wasn't accepted by the University of Waterloo as credit equivalent, it gave me a powerful headstart in their freshman year courses.

Habitat for Humanity
Neuchâtel Junior College
Mar 23, 2005 to Mar 30, 2005

I travelled to Beiuș, Romania where I helped to finish construction on two homes during a one-week build.

For the first house, I operated the circular saw. The foreman would request lengths to cut, I would measure and cut them. After a while, he started coming back with these pieces, telling me that they were too short. I cut them again - and soon he was back again with the same complaint.

A couple of iterations later, I suspected something was amiss. As it turns out, our rulers were not quite identical. Since there were no more rulers, I instead corrected for the difference. There were no more complaints.

$25 000 CIBC National Scholarship for Computer Science
University of Waterloo
Feb 1, 2005

This scholarship is awarded to applicants with outstanding scholastic standing, strong interpersonal skills, and entrepreneurial spirit.

This provided me with an awesome opportunity to further my many passions, both technical and non-technical. To CIBC, for helping to fund my education:

Thank you.

project: electronic
University of Toronto Schools
Apr 15, 2003 to Jun 25, 2004

For my Graduation Project at the University of Toronto Schools, I recorded and produced a full-length CD of original electronic music. While learning to use MIDI sequencers and multitrack compositional software, I also led recording workshops for younger students. Aside from the musical composition, I designed the insert and disc art and sourced short-run production houses.

I was obsessed with recording technology, and I'm eternally grateful to John Fautley for enabling this obsession. If I ever quit software to become a successful recording artist, I'll have him to thank.

back to top