Most of my work on this page is largely prototypes and experiments. It skews towards educational tools because of my immense passion for this area.
This is an interactive article about visualizing high dimensional data by projecting it down into lower dimensions.
This was my first Explorable Explanation. I had learned this method of reducing data in a machine learning class at college. We knew how it worked, and could successfully apply it, but I never got a chance to really see how it worked.
I wrote this largely as a teaching tool. The teacher's guide highlights some features like how you can drag and drop new data directly into any diagram to create new examples on the fly. That way it can empower students to ask and answer their own questions or teachers to illustrate concepts on the spot.
A cyclic drum machine for experimenting with non-quantized grooves.
This was a class project. We were studying non-western musical traditions which were often thought of as cyclic patterns as opposed notes on a linear scale.
Unlike most of my classmates I did not have years of musical instruction and found it very hard to follow along and pick out the patterns just by ear.
I made this to make it easier to find the musical structure. I could literally see the patterns and understand the relationship between notes.
The 4D Geometry Viewer was my senior capstone project. It's a WebGL based viewer to help students develop an intuition for 4 spatial dimensional geometry.
It was designed to teach an Introduction to 4D Geometry class for non-math majors. It allows you to input objects as cartesian equations or a set of points defining a convex hull, and then see it projected down into 3D in addition to being able to take 3D slices of the 4D object.
It was a lot of fun to make this and learn about how our perception of a 3D world largely happens in our brains, not in our eyes. So there's no reason we can't learn to see 4D as well.
This is an Atom plugin for tracing variables inline.
It was an effort to teach systematic debugging. I noticed many beginning students spent a lot of time staring at broken code. Often just asking them "What do you think the values of each variable in this line are?" and confirming those guesses was enough to solve their problem.
Being able to seamlessly click and expose the values removes the friction from this process so that time is spent thinking about the problem and what information to gather.
An unintended consequence of this tool is that it also shows the flow of execution – you can see when a line runs multiple times or when lines are never reached.
An undergraduate research project to systematically study the occurrence of hybrids.
A hybrid is an individual that is genetically closer to a different species than it is to its own. These mysterious individual raise interesting questions about how species are formed.
It is still incomplete at the time of writing. My contribution was developing an algorithm to detect these hybrids in a given phylogenetic tree.
Pronounced eye-reen-a, as in, A.I arena.
This was a multiplayer game that won 1st place at CarlHacks. It's a space shooter where you write bots on the fly to battle each other. My initial goal was to make the process of writing great code more transparent. The audience would watch as the players designed and tweaked their algorithms in real time.
My second goal was to create a fun sandbox for thinking about AI that encourages playing the game, reflecting on your own thought patterns, and trying to write down those thoughts as code. The player can seamlessly switch between the AI bot and the human input mid-game.
A consequence of this fluid play is the ability to play as a unified augmented intelligence, for example, letting the bot handle precise aiming while you use your strategic judgment to decide when to shoot.