Summary of Skills
Secondary: C++, Perl, C#
Interested: Rust, Scheme, Prolog
Proficient with Linux, Git, Emacs
Familiar with Windows, Subversion, Perforce
Upverter - Senior Software Engineer, 2012 - 2018
Reverse-engineered other tools' file formats to allow users to migrate their data both into and out of the Upverter ecosystem.
Approaches to extract data included: mapping out the binary format of files, exploiting diagnostic tools, automating user interfaces, and using built-in scripting languages.
Extended and integrated ngspice (an electronics simulator) and ADMS (a Verilog-A transpiler) into Upverter to allow users to verify their designs.
Periodically profiled our code to find memory and run-time performance optimizations.
On a few occasions, I worked with the authors of third-party libraries to address performance issues in their code.
Mentored more than 10 engineering student interns and 3 junior employees.
Contributed new features, bug fixes, and performance optimizations to open-source projects:
Google Closure Compiler
Research in Motion - Embedded Software Developer, 2010 - 2012
Optimized audio-hardware drivers for power consumption and audio quality.
Created analysis tools to find potential memory optimizations in a memory-constrained DSP, enabling advanced features which had been previously deemed impossible to fit into memory.
Prototyped the implementation of new features for future versions of the operating system.
Created scripts to automatically generate C code for use in the build process.
University of Waterloo - UAV Research Assistant, 2010
Configured and compiled QNX and Linux kernels for PowerPC soft-cores synthesized on a Xilinx FPGA.
Researched and conducted experiments with high-speed, Gigabit Ethernet cameras.
Integrated the computer and camera systems into a remote-controlled air plane.
General Dynamics Canada - Electronic Specialty Engineering, 2009
Maintained design schematics using Mentor Graphics' Design Architect.
Automated several lengthy tasks using Excel macros, AMPLE and Perl scripts, reducing completion time from 8+ hours to around 30 seconds.
Recreated a prototype design which was originally developed in non-company-standard tools.
Research in Motion - Conceptual Hardware Designer, 2008
Designed and updated circuit schematics using Mentor Graphics' Design Architect.
Laid out printed circuit boards of conceptual BlackBerry devices using Mentor Graphics Board Station.
Researched and obtained new components for the conceptual devices, through vendor contacts and data sheets.
Assembled and debugged test boards and devices.
Research in Motion - Software Tools Developer, 2006 - 2007
Implemented a library in C# to ensure the integrity of calibration files and tests to be used in the manufacturing process.
Created a program to parse C++ structure hierarchies and generate C++ code to produce trees representing the hierarchies.
Designed an easily extensible library to parse data and graph the desired values, which could be called from many existing tools to give a visual representation of their output.
Rewrote the core functionality of a multi-threaded C++ program, which is used to interact with BlackBerry devices.
Extended and maintained engineering applications used throughout the company.
Wired on Caffeine - Co-Founder, 2003
Founded and managed all aspects of an internet cafe.
Assembled three computer terminals for public use on a high-speed Internet connection.
Designed and developed a program in Visual Basic to track sales, calculate change due and record tax information.
Conducted sales, assisted with technical problems and interacted with customers.
University of Waterloo
Bachelor of Applied Science -- Honours Computer Engineering, Class of 2011
Warframe API Python Library
By reverse-engineering the Warframe mobile app, I was able to make a library to interact with the game's internal API.
The library doesn't facilitate cheating, but it can be used to view hidden data about your account, and can allow automation of some tedious tasks in the game.
(A new GitHub account was created for this project so that it wouldn't be directly associated with my in-game account.)
Power Metal Ranker
Two songs are presented, the user selects which they like better. The results are stored in order, and two more results are shown.
As the list grows, songs from within the list are strategically chosen to minimize the number of comparisons in order to place new songs in their correct positions.
New songs to insert are drawn from submissions to the
ngspice / ADMS
Open-source tool for transpiling analog circuit designs written in Verilog-A into C code.
The C code is compiled and linked into ngspice, which can then simulate the circuit as if it were a native component.
The idea behind this project is to create a world, drop in some artificially intelligent agents, and then watch them build a town, start an economy, and raid dungeons.
Smaller experiments in world exploration, gathering and large battles were conducted in Perl.
A larger experiment involving collecting things to build complex items was started in C, but switched to Guile Scheme.
Nine-day joint effort between me and my friend Alex Williams.
To allow concurrent development, game was split into two parts:
Alex worked on the 3D graphics side, using OpenGL.
I worked on the backend, defining the mechanics of the game.
Application-Specific Processor Instruction Set Extensions
Automatic system for finding processor instruction set optimizations, tailored to a specific application.
Targeted the ARM7 architecture.
In our example case of an edge-detection program, our system found a new instruction that increased performance by 10% in simulations.