Ryan Fox
ryan@rcfox.ca
~
https://rcfox.ca
~
https://github.com/rcfox
Work Experience
Octopart (Altium) - Senior Software Engineer III, 2019 - 2020
Implemented a new backend API for both internal and third-party access to Octopart's vast amounts of data using Go and GraphQL.
Seemlessly integrated data from partners' APIs to allow for real-time updates to Octopart's dataset.
Set up infrastructure instrumentation for better monitoring and analysis.
Mentored newly graduated engineers in software design and idiomatic programming and infrastructure practices.
Upverter (Altium from 2017) - Senior Software Engineer, 2012 - 2019
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:
ngspice
Discourse
Google Closure Compiler
poly2tri.js
python-suitcase
Poppler
Produced thorough documentation and training on Upverter's internal design after its acquistion by Altium in 2017.
Research in Motion - Embedded Software Developer, 2010 - 2012
Optimized QNX audio hardware drivers written in C 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.
Created scripts to automatically generate C code for use in the build process.
University of Waterloo - UAV Research Assistant Co-Op, 2010
Configured and compiled QNX 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.
Developed firmware in C to read from an infrared sensor and relay the data to the main computer.
General Dynamics Canada - Electronic Specialty Engineering Co-Op, 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.
Research in Motion - Conceptual Hardware Designer Co-Op, 2008
Drew schematics and circuit boards for new BlackBerry prototypes using Mentor Graphics Design Architect and Board Station.
Selected parts and designed a power supply for a LCD backlight.
Research in Motion - Software Tools Developer Co-Op, 2006 - 2007
Wrote and maintained a multi-threaded tool in C++ to load signed code onto several BlackBerry devices simultaneously during manufacturing.
Created C# libraries for use in manufacturing testting procedures and internal operating system development.
Created a program to parse C++ structure hierarchies and generate C++ code to produce trees representing the hierarchies.
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.
Education
University of Waterloo
Bachelor of Applied Science -- Honours Computer Engineering, Class of 2011
Projects
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:
https://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
Experiments in writing goal-oriented aritifical intelligence for characters in a video game world.
AI tasks involved world exploration, resource gathering, and battles.
Written in Perl, C, and Scheme.
Demos:
https://rcfox.ca/ai-aquariums/
NineDayGame
Nine-day joint effort with a friend to create a 3D roguelike game using C++ and OpenGL.
Features a turn scheduler with non-uniform action costs, and a domain-specific language for designing in-game combat abilities.
Source:
https://github.com/NineDayGame/NineDayGame
Application-Specific Processor Instruction Set Extensions
Created a system to dynamically analyze programs running in an ARM7 simulator to find common patterns of instructions executed.
Based on a the results, new instructions could be added to the simulator to batch the common instruction patterns into a single instruction.
In our target case of an edge-detection program, our system found a new instruction that increased performance by 10%.