Ryan Sandor Richards
Software Engineer - San Francisco, CA - sandor.richards@gmail.com
History & Overview
My interest in programming began at the age of ten when I wanted to make my own video games. At first I worked in QBasic but quickly started picking up other languages. By the time I finished high school I was proficient in C/C++, HTML/CSS/JavaScript, PHP, Visual Basic, and Java.
During my undergraduate at Michigan Tech I further honed my skills by learning computer science fundamentals, authoring a technical publication, and placing top 50 at the 2008 ACM ICPC world finals (47th, Michigan Technological University). Over the last few years I've been focusing a lot on front-end engineering and have primarily used a combination of JavaScript, Ruby, and PHP.
My major long term goal is to become a world class algorist. To that end I spend a great deal of free time studying algorithms and working on various mathematical/programming challenges. From this perspective, the qualities of my ideal employer are as such:
- Has tough algorithmic / engineering problems to be solved
- Employs bright and more experiences engineers, from which I can learn
- Has strong managerial leadership with a focus on transparency and empathy
Select Projects
Epoch
At Fastly I was in charge of building our real-time analytics dashboard. The dashboard displayed visualizations for a set of direct and derived metrics that were of importance to CDN customers (such as caching hit ratio, number of requests, backend latency, etc.). New data was posted every second, and the visualizations needed to smoothly translate from point-to-point.
I was very fond of d3 at the time, so I used it exclusively during my first implementation. Unfortunately, I found that d3 performed rather poorly for complex and persistent animated visualizations (sometimes using 100% of an entire core on my MacBook Pro). After experimenting with a few approaches I finally settled on using a hybrid of both HTML5 Canvas and d3. This allowed me to build visualizations that used as much of the core SVG functionality of d3 while giving raster graphics performance during animations and transitions.
Taking what I learned from my implementation, I built Epoch as a general purpose library which used the hybrid d3 / Canvas approach and released it as an open source project on Github. The project was featured by Github and quickly rose to over 3700 stars.
NES Breakout
My interest in programming was a direct consequence of playing video games on the original Nintendo Entertainment System (NES). For years, I had always wanted to make my own NES games, but finding information on how to do so was very challenging. In 2012 I decided to bite the bullet and learn 6502 Assembly along with basic NES programming. It took me a few months but eventually I was able to piece together enough information about the archaic system to build a simple breakout game which runs perfectly in an NES emulator.
While I had programmed in assembly many times before (TI-86, Mips, etc.), this was a particularly fun project because it took a lot reading and experimentation to figure out the quirks of such an old architecture. For instance, I had to write my own font and graphic utilities that would convert images into binary that could be included with the ROM for the game. The project also required that I build a slew of important assembly routines, including:
- String Printing - the NES doesn't have system libraries like stdio,
- Binary Coded Decimal Operations - to easily store and display scores, and
- 16-bit integer mathematics - the NES was an 8-bit system.
While not a great example of modern engineering work, this project will always be very near and dear to my heart.
Objection
Objection was my first serious attempt at writing a programming language. Written in C/Flex/Bison, I designed the language to be functional but use an familiar C-style imperative syntax. Over the course of writing the language I ended up implementing a variety of routines and structures, including:
- Recursive environments with custom hashing,
- A full library of built-in functions,
- Dynamically typed scalars,
- Abstract Syntax Tree data type,
- Full lexer and parser,
- et. al.
Work Experience
Fastly - Engineering / BD (Nov 2013 - Oct 2014)
- Authored Epoch, an open source charting library based on d3.
- Advised the Business Development team and took point from an engineering perspective on large partnerships.
- Continued to help with Engineering including font-end and API work.
- Interfaced directly with the Marketing team to build booth demonstrations and write technical posts for the company blog.
- Organized an "Introduction to Computing" class for non-technical employees teaching them the basics of binary numbers, computer architecture, digital logic, symbolic logic, set theory, and regular languages.
- Formal Speaking Engagements: ScotlandJS 2014 and OSCON 2014.
Fastly - Software Engineer (Jul 2011 - Oct 2013)
- Built Fastly's single page configuration application using Backbone.js + CoffeeScript.
- Designed and implemented a highly efficient real-time analytics dashboard using a hybrid d3 (SVG) + HTML5 Canvas approach.
- Advised on API design for single page apps (with a focus on performance).
- Built the Historical Statistics API using Sinatra.
- Built an internal and external facing Historical Stats dashboard with d3.
- Designed and implemented two websites including full API documentation.
- As the 4th Employee I was intimately involved with large portion of the decision making process for the company.
- Additional duties included marketing copy writing sales engineering support and hiring.
- Formal Speaking Engagements: ScotlandJS 2012 & ScotlandJS 2013.
Huddler - Software Engineer (Dec 2010 - Jun 2011)
- Primarily front-end engineering working in YUI2 and YUI3.
Scribd - Software Engineer (Mar 2010 - Jul 2010)
- Focused primarily on front-end engineering rails development and mobile applications.
FreeCause - Software Engineer (Dec 2008 - Mar 2010)
- Designed ajax-enabled web application for creating editing and publishing browser toolbars.
- Developed web-based content localization system.
- Single handedly developed white-labeling approach for flagship product.
- Wrote an API for handling web authentication and authorization for flagship product.
Michigan Technological University - Research Assistant (Dec 2007 - Nov 2008)
- Implemented mega-scale agent-based models using nVidia CUDA.
- Worked with Medical Doctors to create data-parallel versions of their models.
- Wrote a technical publication on my work.
- Helped draft grant proposals for the group.