A means of implementing computer science.

Benchmarking the Pyret Language

Integrates benchmark.js into the Nodejs-based framework of the Pyret Language.

2048 Cubed

Takes the ridiculously popular tile-sliding game into the third dimension with WebGL graphics (thanks to THREE.js).


While researching at ICERM (check the blurb on the math page for more info), Pat Hooper lent my group a Java application he had written the prior summer to visualize ray propogation in periodic tilings of the plane. While researching, I added additional functionality to the Java application. More recently, I decided to port the whole thing to Javascript, using Raphael.js for the graphics.

This Website #exciting

You're already here! Many thanks to Bootstrap, Sass, and Jekyll. Have a look at the source repo if you wish.


Git is fantastic. It's really helped me branch out.


Worked for the company in the Summer of 2016 as a software development intern.


Worked for the company in the Summer of 2015 as a software development intern.

Members First, Inc.

Worked for the company in the Summer of 2014 as a development intern. Created dashboards housing data-visualization widgets, wrote SQL functions to amalgamate data, wrote JavaScript which interacted with Google Charts and Google Maps APIs, contributed features to a NodeJS application.

Models of Computation CS051

Finite state automata, regular languages, Turing-recognizability and completeness, computational complexity classes (P,NP,PSPACE, etc).

Logic for Hackers CS195Y

Used modeling tools and proof assistants (e.g. Alloy, Z3) to model systems and programs, and to prove properties thereof.

Distributed Computing through Combinatorial Topology CS2951S

Analyzed distributed and concurrent computing with topological tools.

Programming Languages CS173

Explored the principles of modern programming languages by implementation in Pyret.

Computational Topology CS195H

Used Matlab to investigate various topological phenomena. Examples: computing homotopies, homology groups.

Intro to Computer Systems CS33

Used C and Assembly to learn about systems: storage, cache, processors, threads, etc.

Computer Science: An Integrated Introduction I, II CS17, CS18

In the first semester, used Racket and OCaml to learn recursion, higher-order functions, testing, and some algorithms and analysis thereof. In the second semester, used Java and Scala to learn object-oriented programming/design patterns, data structures, and dynamic programming.