I prepared and delivered an 8-minute Ignite Plus talk on my experiences dealing with panic attacks through self-tracking.
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.
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.
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.
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.
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.
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.
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.
As a bootcamper,
cut down on expensive
I then joined the Search Infrastructure team and built search for Facebook Groups, the first fulltext search product to use our 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.
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.
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.
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.
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.
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.
I helped to organize weekly gym meets for traceurs in the Ottawa region.
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%.
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.
cross-domain communication techniques to implement client-side batching for
ad block requests. This was in the dark days before
reasonable adoption, so it
involved a good deal of hackery with
<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.
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.
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.
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.
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.
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.
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.
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.
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.