Summary of Skills
- Programming Languages:
- Primary: Python, C
- Version Control Systems: Git, Subversion, Perforce
- Operating Systems: Linux
- Editor: Emacs
Senior Software Engineer - Upverter, Toronto, Ontario
October 2012 - February 2016
- Electronic Design Automation Tools
- Self-declared "performance czar" - responsible for optimizing bottlenecks in the tools.
- EDA Software Interoperability
- Reverse-engineered the file formats of OrCAD, Allegro, Altium and Eagle design files to allow import and export with Upverter.
- Circuit Simulation
- Profiled and optimized the open-source NGSPICE electronic circuit simulator.
- Developed Verilog-A language parsers to automatically:
- Generate C libraries as NGSPICE circuit elements for simulation.
- Generate Upverter design components to build testbenches.
- Managed the team's code quality and complexity through rigorous code reviews.
- Mentored junior employees in the ways of software engineering and company culture.
Embedded Software Developer - Research in Motion, Waterloo, Ontario
September 2010 - October 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.
UAV Research Assistant - University of Waterloo, Waterloo, Ontario
September 2009 to January 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.
Electronic Speciality Engineering - General Dynamics Canada, Ottawa, Ontario
January 2009 to May 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.
Conceptual Hardware Designer - Research in Motion, Waterloo, Ontario
May 2008 to September 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.
Protocol Tester - Research in Motion, Waterloo, Ontario
January 2006 to May 2006
- Performed various protocol and system-level tests on the BlackBerry to ensure its behaviour conformed to the GSM and GPRS standards.
- Created new test cases through the in-depth study of the GSM and GPRS standards.
- Designed and implemented a database application to facilitate test case storage and retrieval using PHP and MySQL.
Co-Founder - Wired on Caffeine, Palmerston, Ontario
May 2003 to September 2003
- Founded and managed all aspects of said financial establishment.
- 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
Class of 2011
- Bachelor of Applied Science -- Honours Computer Engineering
Power Metal Ranker
2014 - 2016
- 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 /r/PowerMetal subreddit.
- Source: https://github.com/rcfox/Power-Metal-Ranker
- Demo: http://rcfox.ca/Power-Metal-Ranker/
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.
- Source: https://github.com/upverter/ADMS/tree/upverter
2010 - 2012
- 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.
Application-Specific Processor Instruction Set Extensions
Fourth-Year Design Project
- 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.
ECE 438 - Digital Integrated Circuits
May 2010 to August 2010
- Designed a domino logic, 4-bit, carry-select adder.
- Primary design goal was to optimize for maximum operating frequency, while staying within reasonable power and space requirements.
- Required minimum operating frequency: 2 GHz
- Achieved best-case operating frequency: ~4 GHz
- Schematic capture and transistor layout done in Cadence Virtuoso.
ECE 750 - Distributed Real-Time Software Systems
September 2009 to December 2009
- Implemented a real-time reaction time tester for the AVR ATmega169 microprocessor.
- Presented about methods for worst-case execution time analysis in real-time systems.
PSYCH 480 - Research in Computational Models of Reading Aloud
January 2008 to August 2008
- Designed and conducted experiments in order to find the optimal configurations of the models to best-predict human behaviour.
- Applied analysis of variance on the gathered data to qualitatively compare the behaviours of the models in each configuration.
ECE 457 - Applied Artificial Intelligence
September 2007 to December 2007
- Implemented artificially intelligent agents to perform the following tasks:
- Path-finding - Find the optimal path from point A to point B, using uninformed and informed searches, with an emphasis on A*.
- Game Playing - Play the game Conga, using Minimax search and Alpha-Beta pruning.
- Logic and Inference - Explore a partial-observable world, known as Wumpus World, quickly and safely using logical inference methods.
- Probabilistic Reasoning - Effectively play Poker, using Bayes' Theorem to make decisions on the probability of winning.
- Analyzed the performance of the agents, comparing the various methods used to solve the problems.
Skills Canada Robotics Competition
September 2004 to June 2005
- Drafted, programmed, and extensively debugged, instructions in PICMicro assembly language to receive signals from a radio controller and interpret them to move the robot around.
- Built the robot, physically and electronically, in cooperation with three other men, with occasional leadership responsibilities.
The Game Programming Wiki - http://gpwiki.org
August 2004 to March 2008
- Contributed five articles to the wiki about Java game programming concepts, such as using VolatileImages, and double buffering.
- Improved the usability of the wiki by streamlining the content and setting standards for displaying it.