Here are some past and current projects, mostly in chronological order. Some are work related, some for school, and many just for fun.

From July 2015 I have worked at Epoch Labs, Inc., as a software developer. We develop high performance distributed systems, using low level languages, crash-only software techniques, and state of the art distributed algorithms to deliver fast systems that make efficient use of resources. We’re a small company, and my responsibilities have ranged from database utilities to high performance CRC routines to performance benchmarking to test infrastructure. Watch out for us in the future: we do high performance distributed systems right.

During the years 2010-2015 I worked in the field of low-dimensional topology. Mathematicians in this field are interested in 3-dimensional spaces called manifolds, and the field has very close connections with knot theory. There are also important applications to physics, chemistry, biology, and computer science. You can read more about my work in low-dimensional topology here.

My collaborators and I have been interested in applying techniques
from low-dimensional topology to data analysis. Most recently, Jesse
Johnson, Doug Heisterkamp and I have developed the concept of a *tree
position* for a weighted graph. Details are in our paper Thin tree
position, but the idea is to apply
simplifications to a tree associated with a weighted graph until no
more simplifications can be performed. The resulting tree can be used
for many things, including clustering. In the paper An application
of topological graph clustering to protein function
prediction we show that an algorithm
based on a previous version of the tree position algorithm performs
well on a task in proteomics. My portion of this work was done in
Python and can be seen here.

During the years 2010–2012 my colleague Itamar Gal and I worked on several projects related to persistent homology. Check out some of our code (in C++) at github.

I rank in the top 1% of Kaggle.com participants. Kaggle hosts data science competitions, and I have used numpy, scikit-learn, and custom software to solve several of their challenges in my spare time. (I haven’t had time to do much data science stuff recently; the last competition I participated in was in 2014. I’m still in the top 1% as of the beginning of 2016, but don’t take that to mean much!)

In our paper PhysicsGP: A Genetic Programming Approach to Event Selection, Kyle Cranmer and I apply genetic programming techniques to the problem of discovering interesting events in data from a particle accelerator. We show that our method performs on par with the neural network techniques that were in use at that time (circa 2002).

I wrote a simple AOP system for Python in 2003 using the metaobject protocol of Python. It’s a great exercise in programming, including a DSL for specifying pointcuts. (Its performance is lacking, however.)

In 2012 I published a book on Sequences and Series and another on Limits in Calculus for Amazon Kindle devices. One of my goals for the project was to make the math look pretty. This turned out to be very difficult to do! The book is written in LaTeX. In order to render it to a format usable by the Kindle, I used a modified version of plasTeX, the Calibre ebook reader, and custom software.

Based on ideas in the book **Indra’s Pearls**, Stephen McCaul and I
wrote software to create videos showing off limit sets and orbits of
Kleinian groups. These objects are important in many branches of
mathematics, but more importantly, they’re just plain beautiful.
Here’s an example, created in 2005.

Stephen McCaul and I investigated the Andrews-Curtis conjecture, a famous conjecture from combinatorial group theory. Based on code we wrote together, I developed a highly optimized breadth first search which includes a perfect hash function on group presentations with bounded relator length in order to fit a hash table in several gigabytes of RAM. The code is in C.

I wrote this software to examine a conjecture of Zeeman, which says
roughly that the product of a contractible 2-complex and the interval
is collapsible. (It is specialized to 3 dimensional complexes.)
Unfortunately, all I found out is that there are *a lot* of ways to
collapse a 3-complex. The code was originally in Haskell, then in
Python, and finally in heavily optimized
C.

The field of multiagent systems studies how individual agents can
collaborate to solve problems or model phenomena. In our paper
*Agent Collaboration and Social Networks*, Henry Hexmoor and I
investigate a simple scenario where a group of robots need to push
boxes to certain spots on a grid. We managed to show some pretty
boring things: for example, when the robots work together, they can
get all the boxes to their correct spots faster. (Duh.) But there
are some more difficult, subtle problems that our work sheds light on.
For example, if a robot is trying to maximize their own number of
boxes pushed, whether or not they join a group might depend on such
factors as the size of the group relative to the total number of
robots.