Ryan Fox

Summary of Skills
Work Experience

Upverter - Senior Software Engineer, 2012 - 2018

  • Developed automated electronic design tools using geometry and graph algorithms in Python and JavaScript.
  • 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.
  • Assured code quality through rigorous code review and by annotating the JavaScript code base with static type checking directives.
  • Mentored more than 10 engineering student interns and 3 junior employees.
  • Contributed new features, bug fixes, and performance optimizations to open-source projects:

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.
  • Source: https://github.com/cephalon-sofis/warframe_api
    • (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 /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

  • 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.
  • Demos: http://rcfox.ca/ai-aquariums/


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.