Here is a partial list of software projects that I work on. Most of these are freely distributable, open source, with GPL licensing. Download links are provided when appropriate.
-
SnapPy
hyperbolic 3-manifolds
SnapPy is the quintessential research tool for topologists who study hyperbolic manifolds. It provides detailed information about millions of examples and the ability to analyze and visualize arbitrarily many more, with mathematically rigorous verification of many properties. SnapPy has been used and cited in hundreds of mathematical publications. It is actively developed in collaboration with Nathan Dunfield and Matthias Görner and runs on linux, macOS and Windows. The starting point for this project was the C computational kernel originally written by Jeff Weeks in the 1980's and now maintained in extended form by the SnapPy project.
SnapPy contains several components which are useful as standalone tools in a python environment. Source is available on Github
For more information and downloads, please visit SnapPy's home page.
-
Sage
a binary package for Sage on macOS
The Sage_MacOS project aims to provide a simple, streamlined macOS application which runs SageMath and can be installed by the usual process of dragging the application bundle to the /Applications directory.
- Source code for the build tools and downloadable disk images are available on
- Github
-
PE
character varieties of 3-manifolds
The PE module is a python module developed by me and Nathan Dunfield for use within Sage to compute and visualize PE Character varieties of 3-manifolds. The context for this is not trivial. Feel free to contact me with questions.
Available as source code only from Github. You will also need to build and install CyPHC which depends on PHC.
-
Gridlink
grid diagrams of knots
Gridlink is a graphical tool for working with grid diagrams of knots, whether to compute Heegaard Floer invariants, to play with Dynnikov's unknotting algorithm, or study Legendrian isotopy. It embeds C++ code for computing the hat version of HFK over the 2-element field which is an improved version of code originally written by Baldwin and Gillam. Gridlink has been cited by several papers on the arXiv.
Download the app and source code from Gridlink's home page.
-
Juliator
complex dynamics
Juliator is a toy application for viewing Mandelbrot and Julia sets for the usual quadratic dynamical system. This project was an experiment in sharing memory between processes - the images are drawn by a pool of artist processes running on different cores but sharing memory (no pickling). It is quite fast.
Source code (for linux) and a macOS application disk image are available on Github. (One of these days I should finish the Windows version ...)
-
Orbits
components of normal surfaces
Orbits is a python implementation of the Agol-Hass-Thurston algorithm for counting the number of equivalence classes of an equivalence relation on the set J = {1, ..., N} which is generated by gluing subintervals by isometries. This can be used, for example, to compute the number of components of a normal curve on a triangulated surface or a normal surface in a triangulated 3-manifold.
Source code is available on Github and documentation is on Read-the-docs.
-
Stash
keep track of your stuff
Stash is a tool for managing a collection of files with configurable metadata. The graphical interface allows importing, exporting, and viewing files and their metadata. For example, if you have a collection of math articles in PDF format then you might create a stash with metadata fields like author, title, and comments. You could import all of your articles into the stash so you could easily look up articles by author title or other attributes that you invent.
Documentation is available on read-the-docs and source code is available on Github.
-
Tcl/Tk
a great toolkit
We chose to use Tcl/Tk for the graphical user interface for SnapPy. We have never regretted this choice, and find the Tcl language to be well designed and pleasant to use (especially from within Python). But things became a bit dicy with the macOS port of Tk, due mainly to Apple rejecting apps because the macOS Tk ports written by the Tcl/Tk project were using the same private APIs which Apple had included in its own (very out of date) port that ships with the OS.
To address this, I began contributing heavily to rewriting the macOS port of Tk to bring it into compliance with Apple's rules, and fix both longstanding bugs and new bugs created by changes to the AppKit introduced with the newer versions of macOS. Eventually I became one of the Tk copyright holders. More details about this story can be found in Kevin Walzer's slide presentation.
My work on Tk was supported by a generous donation of equipment from the BitMover company founded by Larry McVoy. I am very grateful for their support.
Please visit the Tcl Developer Exchange.
-
querierd
make bonjour work on your home network
It is fairly common for mDNS service discovery to fail on home networks. One cause for this is that many routers designed for home use do not correctly implement the multicast protocol. Specifically, the protocol requires that one router be elected as the "IGMP querier". The job of the querier is to send a query packet to the multicast broadcast address every now and then; this query reminds the mDNS clients to rejoin the mDNS group before they are removed from the group for inactivity. Your home network may not have a querier. The symptom is that bonjour clients appear when first turned on, but then disappear after a while.
The querierd is a python implementation of an IGMP querier. By running it on a computer which is always connected to your home network you can ensure that your network has a querier to prevent bonjour devices from disappearing.
Source code is available on Github.
-
LLamar
LLMNR for unix
LLammar is a "pure python" implementation of Microsoft's LLMNR zero-configuration networking protocol for linux. It provides a command line query tool and a responder that can be run as a service. This is a good way to make your embedded linux device discoverable by Windows clients. LLMNR is a refreshingly simple way to implement service discovery on a local network, which deserves more attention than it gets.
Download the Python 3 source code from Github.