Ryan Fox

ryan@rcfox.ca

Summary of Skills

Projects

Application-Specific Processor Instruction Set Extensions

Fourth-Year Design Project

  • Automatic system for finding processor instruction set optimizations, tailored to a specific application.
  • The initial goal is to optimize the ARM architecture for running the Theora video decoder.

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.
    • Target operating frequency: 2 GHz
    • Achieved best-case operating frequency: ~4 GHz
  • Schematic capture and transistor layout done in Cadence Virtuoso.

State Machine Image Processing Experiment

January 2009 to present

  • Applying the concepts behind regular expressions to find and process patterns in images.
  • The end-goal of this project is to define a language similar to regular expressions that can be used to match patterns in images, rather than text.

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:
    • Pathfinding - 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.

Game Programming

October 2001 to present

  • Currently developing an "RPG aquarium demo" where characters behave according to a goal stack.
  • Other projects include: Nintendo DS homebrew games, and Java-based roleplaying games.

Examples

Examples and demos of some of my projects are available online:

Work Experience

Embedded Software Developer - Research in Motion, Waterloo, Ontario

September 2010 - January 2011

  • Developed kernel drivers for the audio codecs in the Blackberry operating system.
  • Prototyped the implementation of new features for future versions of the operating system.
  • Created scripts to automatically generate 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.

Education

University of Waterloo, Waterloo, Ontario

September 2005 to April 2011

  • Bachelor of Applied Science -- Honours Computer Engineering