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 Session
  • 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

2013.
Massachusetts Institute of Technology. Cambridge, MA.
Our team of four programmed a head-movement-controlled web-messaging interface. I implemented the head tracking and integrated the real-time head position data with the UI and back-end that my teammates created.

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

2014.
St. Joseph's College. Patchogue, NY.
Represented Columbia University on a team of three that solved 8 out of the 9 problems.

2nd Place, Denison Programming Contest

2010.
Denison University. Granville, OH.
Represented Oberlin College on a team of three that solved 4 out of 6 ACM-ICPC-style algorithmic problems in Java.

2nd Place, Deis3D 3D Printathon

2015.
Brandeis University. Waltham, MA.
Our team of two built a prototype for a bluetooth braille keyboard in the form of a phone case. I soldered and programmed the Arduino electronics, while my teammate designed and 3D-printed the casing and keycaps to fit the phone and electronics.

3rd Place, "Just Another Kusto Hacker" Contest

2017.
Microsoft-internal. Redmond, WA.
The contest consisted of writing a query in the Kusto Query Language (KQL), which would output the words "Just another Kusto hacker" in a creative way. My query represented the message using steganography on the base64 encoding of emoji characters.

📃 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

Most of the proofs in this paper were produced by a theorem-proving program I made and optimized during the 2013 Columbia Math Undergraduate Summer Research Program.

Authors: F. Doria Medina, M. Jackson, J. Ruales, and H. Zeilberger
Journal: Journal of Knot Theory and its Ramifications (JKTR)

💡 Web Apps

EcuaCines

2012.
Displays showtimes for all major movie theaters in Quito, Ecuador. Showtime information collected automatically from each movie theater's website.
Uses HTML + CSS + JS + PHP (Laravel) + MySQL

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

2012.
Website for a hostal in Ecuador.
Uses HTML + CSS + JS + PHP

Andrew J. Churchill's Portfolio Website

2010.
Website for a music composer.
Uses PHP + ActionScript 3.0

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.
Uses ActionScript 3.0

Joaquín Ruales's Art Portfolio

2008.
My photography and design portfolio up until 2008.
I programmed a simple parallax effect on the front page, and used a 3rd party image viewer for the other pages.
Uses ActionScript 3.0

👾 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
    • 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.
  • Human Languages:
    • English - Fluent
    • Spanish - Fluent
    • Italian - Intermediate
    • German - Beginner