These are some programs I have written which are generally suitable for public consumption. The C programs work on Linux and (most likely) OSX, and probably Windows if you can get the libraries in the right place.

Surfaces with boundary, scl, etc


A program to compute with surfaces in free groups and free products of cyclic groups. Scallop now contains the (improved) functionality from scallop, scylla, trollop, gallop, and scabble. Scallop requires GMP and GLPK, and supports using Gurobi as a linear programming solver.


A Gtk+2.0 (graphical) application which allows you to manipulate fatgraphs, mostly fatgraphs coming as output from scallop, which is included with wallop. Note the included scallop is the older scallop, which only computes in free groups.


A gtk and opengl C program which allows you to interact in real time with the computation of 3d scl norm balls in B_1^H.


A C/C++ program which uses the same theory are scallop to compute a 2d slice of the scl norm ball in the space B_1^H. Note you may need to use the -m option to avoid some rigor problems more evident with scabble than scallop (see the readme). Requires GMP and GLPK. See scallop above.


A C program which implements the algorithm described in "SCL, Sails, and Surgery", By Danny Calegari. The algorithm is, except in very special cases, way slower than the one in scallop, so this is probably useful only if you want to really understand the paper.

Dynamical systems


Schottky draws limit sets and many other things for 2-generator iterated function systems. This project is joint with Danny Calegari and Sarah Koch, and the program is joint with Danny Calegari.


A JavaScript implementation of the shottky program


Angle explores the space of linear circle actions.


A JavaScript implementation of the angle program.


A program to numerically find periodic orbits of rational functions. It also draws Julia sets.


A program to mess with rotation numbers.

Surfaces and curves on surfaces


A program which computes and draws minimal positions for loops on surfaces. Note: the algorithm of this program is suspect on closed surfaces.


An online version of branched.


Shine displays embedded surfaces in 3D, finds hyperbolic structures on them, and draws hyperbolic geodesics. This program can output .eps and .svg files which essentially duplicate the standard blackboard pictures of curves on surfaces. Deprecated in favor of shine.js, below.


A javascript version of shine; partially working.


A program to draw rays on the sphere minus a Cantor set and act on these rays by homeomorphisms.



A C program which generates the integer hull of a rational polyhedron. It implements the algorithm described in "Theory of Linear and Integer Programming" by Alexander Schrijver, especially as explained in these course notes by Rekha Thomas at UW. ihull uses lrslib and Normaliz.


An example cryptogram decoder program written for Math 2b (probability and statistics), which demonstrates using Bayes' rule to score potential decrypts of a cryptogram (and try to find the best one).


A script which takes a 2 dimensional CW complex as input and outputs a (homeomorphic) simplicial complex. This can be handy for using Sage to check homology, etc.