Hi, I'm a software engineer and mathematician interested in machine learning, computer graphics, web application development, and applied mathematics.
During my last university semester, I was a TA for Computational Aspects of Robotics and I did research on Shape Completion Enabled Robotic Grasping using convolutional neural networks, which was accepted into IROS.
When not programming or playing with graphing calculators, I am generally found taking photos, hiking, or reading.
-
Spring 2016 – Present💼 Microsoft Software Engineer
-
Summer 2015💼 Google Software Engineering Intern
-
Fall 2014 - Winter 2016🎓 Columbia University Computer Science M.S.«Machine Learning» and «Vision and Graphics» Tracks. See coursework.
-
Summer 2014💼 Google Software Engineering Intern
-
Fall 2012 - Spring 2014🎓 Columbia University Computer Science B.S. (magna cum laude)«Artificial Intelligence» Track. See coursework.
-
Summer 2010🎓 Stanford University Summer SessionSee coursework.
-
Fall 2009 - Spring 2012🎓 Oberlin College Mathematics B.A. (Phi Beta Kappa)3-2 Engineering Combined Program with Columbia University. See coursework.
🏆 Programming Contests
1st Place, HackMIT Hackathon

4th Place, ACM-ICPC Regional Programming Contest, Greater New York Region

2nd Place, Denison Programming Contest

2nd Place, Deis3D 3D Printathon

3rd Place, "Just Another Kusto Hacker" Contest
📃 Publications
Shape Completion Enabled Robotic Grasping

Based on a single frontal depth image of an object, the algorithm uses a 3D ConvNet to infer what the whole object looks like, including the unseen portions. This allows it to plan more stable robotic grasps on it.
This work started as a class project for our "Deep Learning for Computer Vision and Natural Language Processing" class.
Authors: J. Varley, C. DeChant, A. Richardson, J. Ruales, and P. Allen
Conference: IROS 2017
On left-orderability and double branched covers of Kanenobu's knots
💡 Web Apps
EcuaCines

400 pixels

2010.
A web app for making and sharing pixel art online. As a challenge, I avoided using any third-party libraries for the front-end, so I implemented my own color picker, undo-redo feature, Breshenham's line and ellipse drawing algorithms, flood fill, and isometric cube tool.
Uses PHP + MySQL + ActionScript 3.0
💻 Other Websites
Personal Website
2015.
This website. I used Handlebars templating to make it simple to modify and add information to the page.
Uses HTML + CSS + JS (w/ Handlebars)
Oberlin College Library Website
2011.
Rebuilt the library website's main pages as part of the library's web team. Replaced outdated code libraries and coding standards and focused on making the site user-friendly and visually clean.
Hostal Vista Amazonas
Andrew J. Churchill's Portfolio Website
Movimiento Verde Estudiantil
2009.
Website for a student recycling group organized by members of my high school.
I used the Five3D 3D engine to program the carousel transition. Since that library could not handle 3d transformations of text, I converted the heading text into spline curves so that they could be rotated, and I hid the body text before each transition. I also designed the logo for the student group.
I used the Five3D 3D engine to program the carousel transition. Since that library could not handle 3d transformations of text, I converted the heading text into spline curves so that they could be rotated, and I hid the body text before each transition. I also designed the logo for the student group.
Uses ActionScript 3.0
Joaquín Ruales's Art Portfolio
👾 Other Projects and Experiments
Recurrent Neural Networks for Sentiment Analysis
2015.
Individual class project for Advanced Machine Learning. I ran some experiments using recurrent neural networks for binary classification of movie review sentiment using Theano. I then used a t-SNE embedding to visualize the word vectors that one of these classifiers learned during training.
Vocal Extraction From Monaural Music Using RPCA Decomposition
2014.
Group project for our Convex Optimization class. We used Robust Principal Component Analysis (RPCA) to separate a single-channel music audio file into instrumental and vocal audio components. This was possible because instrumentals tend to be low-rank and vocals tend to be sparse in the frequency domain.
PLATO Programming Language
2013.
Group project for Programming Languages and Translators. PLATO (Programing Language for Abstract Transformation Operators) is a programming language inspired by MATLAB, Python, Prolog, Java, and Ocaml, and designed for the direct manipulation of abstract mathematical expressions. In addition to being able to express basic number-theoretical algorithms, it can also also handle finite sets, groups, rings, and fields.
Tutorial: Curve Bounce in HTML5
2013.
A tutorial on how to program a circle bouncing on a mathematically-defined curve. Uses the numerical derivative of the curve to calculate the bounce angle.
Fractal Flame Generator

2012.
Individual project for Seminar in Mathematical Modeling. This program uses Iterated function systems to create a variety of fractals ranging from Sierpinski triangles to flame-like paintings, depending on the selected settings. Fractals are generated directly by your web browser.
Oberlin Class of 2015 T-shirt Design
2011.
My design won Oberlin's annual t-shirt design contest, so it was printed on the t-shirts that were sent out to every incoming first-year student of the class of 2015. The design features an albino squirrel in a ball chair atop a tree in Tappan Square. Next to the tree is a painted rock with the words "Oberlin Class of 2015." I wrote Euler's Formula in a tiny font on one of the branches as an 'Easter egg'.
AP Spanish Literature Magazine Layout Design

2009.
I designed the layout for the 2009 edition of Bifurcaciones de mentes ("Mind Bifurcations"), the yearly literary magazine published by my school's AP Spanish Literature class. The first sentences of the books we read throughout the school year frame the pages. I also wrote a few of the stories inside the magazine.
3D Fractal Tree
2009.
This program uses spherical coordinates to generate a different 3D fractal tree each time you reload the page.
3D Space Invader Ball Bounce
2008.
A bouncy ball inside a Space-Invader-shaped container. This was originally meant to work with WiiFlash so that the tilt of the Space Invader was controlled with a Wii remote, back when cell phones didn't commonly have acceleromenters.
Vector Hollow Prism
2008.
Having no easy way of making a variety of geometric shapes using the Five3d ActionScript 3D library, I created my own function to do it. It can make regular prisms, pyramids, and truncated pyramids, with the possibility of hollowing out the 3D shapes with an inner radius. I also made a tool for playing with this new code with immediate feedback, so that it would be easy to find the parameters needed to make a certain shape.
Maze
2006.
My first web game. Test your reflexes and hand steadiness as you guide your mouse pointer through twelve labyrinthine levels and one final speed challenge. Stop/play music with the left/right arrows. You can skip up to three levels by using the spacebar. Cheat codes are shift + number keys on an English keyboard.
📚 Coursework
-
Columbia University M.S. in Computer Science
- Fundamentals of Speech Recognition (COMS 6998.004)
- Seminar in Animation and Geometry Processing (COMS 6998.002)
- Deep Learning for Computer Vision and Natural Language Processing (EECS 6894)
- Bayesian Models for Machine Learning (EECS 6892)
- Advanced Database Systems (COMS 6111)
- Advanced Machine Learning — Misc. Topics (COMS 4772)
- Bayesian Statistics (STAT 4640)
- Advanced Computer Graphics (COMS 4162)
- Introduction to Computational Learning Theory (COMS 4162)
- Computer Networks (COMS 4119)
-
Columbia University B.S. in Computer Science
- GPU Computing (COMS 4995.004)
- Digital Geometry Processing with Discrete Differential Geometry (COMS 4995.001)
- Advanced Machine Learning — Convex Optimization (COMS 4772)
- Machine Learning (COMS 4771)
- Computational Aspects of Robotics (COMS 4733)
- Computer Vision (COMS 4731)
- Natural Language Processing (COMS 4705)
- Quantum Computing (COMS 4281)
- Physically Based Computer Animation (COMS 4167)
- Computer Graphics (COMS 4160)
- Probability and Statistics (SIEO 4150)
- Parallel Programming (COMS 4130)
- Operating Systems (COMS 4118)
- Programming Languages and Translators (COMS 4115)
- Advanced Programming (C/C++) (COMS 3157)
- Partial Differential Equations (MATH 3028)
- Number Theory and Cryptography (MATH 3020)
- Translation Seminar (WRIT 3336)
-
Stanford University Summer Session
- Technology Entrepreneurship (ENGR 145)
- Introduction to Artificial Intelligence (CS 121)
-
Oberlin College B.A. in Mathematics
- Seminar in Mathematical Modeling (MATH 397)
- Theory of Computer Science (CSCI 383)
- Information Theory (MATH 345)
- Group Theory (MATH 327)
- Foundations of Analysis (MATH 301)
- Introduction to Algorithms (CSCI 280)
- Programming Abstractions (CSCI 275)
- Differential Equations (MATH 234)
- Linear Algebra (MATH 232)
- Multivariable Calculus (MATH 231)
- Discrete Mathematics (MATH 220)
- Computer Organization (CSCI 210)
- Principles of Computer Science II (CSCI 151)
- Principles of Computer Science I (CSCI 150)
- Introduction to Cultural Anthropology (ANTH 101)
- Topics in General Chemistry (CHEM 103)
- Poetry and Prose Workshop (CRWR 201)
- Technique and Form in Fiction (CRWR 120)
- Economic Development (ECON 209)
- Principles of Economics (ECON 101)
- Environment and Society (ENVS 101)
- Information, Knowledge, and the Internet (FYSP 155)
- Modern Physics (PHYS 212)
- Electricity, Magnetism, and Thermodynamics (PHYS 111)
- Mechanics and Relativity (PHYS 110)
- The Study of Behavior (PSYC 100)
- Piano (PVST 51)
- Writing to Learn and Participate (RHET 105)
🎁 Misc.
-
Programming Languages:
- Java
- C++ (incl. Eigen)
- Python (incl. NumPy, SciPy, Theano)
- MATLAB
- JavaScript (incl. jQuery, Angular, Underscore.js, Math.js, Numeric.js)
- ActionScript 3.0
- PHP (incl. Laravel)
- SQL
- KQL (a.k.a. Kusto)
-
Tools:
- Eclipse
- Sublime Text 3
- Visual Studio
- Git
- /\b(?:Regular Expressions|RegExp?)\b/
- Adobe Photoshop
-
Teaching Experience:
- Teaching Assistant (held office hours, graded assignments and exams) for:
- Computational Aspects of Robotics (COMS 4733)
Fall 2015 and Fall 2014, Columbia University - Parallel Programming (COMS 4130)
Fall 2013, Columbia University
- Computational Aspects of Robotics (COMS 4733)
- I was a one-on-one tutor in Math and Computer Science while at Columbia University and Oberlin College.
- In High School, I coached a group of four students for an interscholastic Math competition and taught an extracurricular class on ActionScript programming.
- Teaching Assistant (held office hours, graded assignments and exams) for:
-
Human Languages:
- English - Fluent
- Spanish - Fluent
- Italian - Intermediate
- German - Beginner