Ryan Fox

Summary of Skills

Work Experience

Senior Software Engineer - Upverter, Toronto, Ontario

October 2012 - February 2016

  • Electronic Design Automation Tools
    • Developed automated circuit design tools using Python, Javascript and 2D geometry algorithms.
    • 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.
  • Leadership
    • 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.

Software Tools Developer - Research in Motion, Waterloo, Ontario

September 2006 to May 2007, September 2007 to December 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.

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

AI Aquarium

2010 - 2012


February 2011

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.