Space 3D

Quickly generate procedural 3D space scene skyboxes in your browser with WebGL.

Space 2D WebGL

Quickly generate procedural 2D space scenes in your browser with WebGL.

Spaceship 2D

Create 2D spaceship diffuse, normal, depth, and position sprites with ambient occlusion through directed evolution.


Speck is a molecule renderer with the goal of producing figures that are as attractive as they are practical. Express your molecule clearly and with style.


I'm no longer actively maintaining this project.

Toothless gives native app developers what web developers have had for years: a user-friendly distribution system. Create a Docker container with your application, make it compatible with Toothless with a few lines in your Dockerfile, and push it to Docker Hub. Distributing your application is now as simple as posting a link.

Python Oculus VR SDK

This only runs on an outdated version of the Oculus SDK.

Cross-platform python wrapper for the Oculus VR SDK C API

TyroVR Pool

This only runs on an outdated version of the Oculus SDK.

A virtual reality pool game for the Oculus Rift built with node-webkit, THREE.js, CANNON.js, and node-ovrsdk.

Node Oculus VR SDK

This only runs on an outdated version of the Oculus SDK.

Node FFI wrapper for the 0.3.2 Oculus VR SDK C API

EON: software for long time simulations of atomic scale systems

Published April 8, 2014, Modelling and Simulation in Materials Science and Engineering

EON is designed for simulations of the state-to-state evolution of atomic scale systems over timescales greatly exceeding that of direct classical dynamics. States are defined as collections of atomic configurations from which a minimization of the potential energy gives the same inherent structure. The time evolution is assumed to be governed by rare events, where transitions between states are uncorrelated and infrequent compared with the timescale of atomic vibrations. Several methods for calculating the state-to-state evolution have been implemented in EON, including parallel replica dynamics, hyperdynamics and adaptive kinetic Monte Carlo. Global optimization methods, including simulated annealing, basin hopping and minima hopping are also implemented. The software has a client/server architecture where the computationally intensive evaluations of the interatomic interactions are calculated on the client-side and the state-to-state evolution is managed by the server. The client supports optimization for different computer architectures to maximize computational efficiency. The server is written in Python so that developers have access to the high-level functionality without delving into the computationally intensive components. Communication between the server and clients is abstracted so that calculations can be deployed on a single machine, clusters using a queuing system, large parallel computers using a message passing interface, or within a distributed computing environment. A generic interface to the evaluation of the interatomic interactions is defined so that empirical potentials, such as in LAMMPS, and density functional theory as implemented in VASP and GPAW can be used interchangeably. Examples are given to demonstrate the range of systems that can be modeled, including surface diffusion and island ripening of adsorbed atoms on metal surfaces, molecular diffusion on the surface of ice and global structural optimization of nanoparticles.

Space 2D

Procedurally generate 2D space scenes.

Planet Generator

Procedurally generate textures for 3D planets.


This only runs on an outdated version of the Oculus SDK.

A Linux/Windows websocket server and javascript library that allows you to use the Oculus Rift in 3D web applications and games.


A voxel world editor and explorer. You can edit the world by placing blocks manually, or by running scripts that you or others wrote to build structures automatically. After your world is built, you can share it with others to explore, or they can make a copy of it and edit it further.

Aegis Luna

Pyweek September 2013 entry.


A set of glsl shaders for rendering a voxel scene with a ray marching algorithm and a reference javascript library.

Conway 3D

Conway's Game of Life, in 3D, in Javascript.


A WebGL maze game built with Three.js and Box2dWeb.


Design and share voxel widgets, then construct your world out of them. An unsuccessful Kickstarter campaign.


A clone of the popular Mac OS program latexit for GTK/linux.


I'm no longer actively maintaining this project.

An easy-to-use encryption system utilizing RSA and AES for javascript.

Database of atomistic reaction mechanisms with application to kinetic Monte Carlo

Published July 7, 2012, Journal of Chemical Physics

Kinetic Monte Carlo is a method used to model the state-to-state kinetics of atomic systems when all reaction mechanisms and rates are known a priori. Adaptive versions of this algorithm use saddle searches from each visited state so that unexpected and complex reaction mechanisms can also be included. Here, we describe how calculated reaction mechanisms can be stored concisely in a kinetic database and subsequently reused to reduce the computational cost of such simulations. As all accessible reaction mechanisms available in a system are contained in the database, the cost of the adaptive algorithm is reduced towards that of standard kinetic Monte Carlo.


A touch typing trainer geared towards programmers and others that need to practice with all the symbols on the keyboard.

Optimization methods for finding minimum energy paths

Published April 2, 2008, Journal of Chemical Physics

A comparison of chain-of-states based methods for finding minimum energy pathways MEPs is presented. In each method, a set of images along an initial pathway between two local minima is relaxed to find a MEP. We compare the nudged elastic band NEB, doubly nudged elaseic band, string, and simplified string methods, each with a set of commonly used optimizers. Out results show that the NEB and string methods are essentially equivalent and the most efficient methods for finding MEPs when coupled with a suitable optimizer. The most efficient optimizer was found to be a form of the limited-memore Broyden-Fletcher-Goldfarb-Shanno method in which the approximate inverse Hessian is constructed globally for all images along the path. The use of a climbing-image allows for finding the saddle point while representing the MEP with as few images as possible. If a highly accurate MEP is desired, it is found to be more efficient to descend from the saddle to the minima than to use a chain-of-states method with many amages. Our results are based on a pairwise Morse potential to model rearrangements of a heptamer island on Pt111, and plane-wave based density functional theory to model a rollover diffusion mechanism of a Pd tetramer on MgO100 and dissociative adsorption and diffusion of oxygen on Au111.