## Code

When not spending time writing scientific software and data analysis/visualization tools for my various research projects I also like to dabble in a few fun things on the side. Below are brief descriptions for a few small projects that I've made available on my GitHub page. More detail can be found by following the links.

### LaTuXiT

A simple utility for producing PDF and PostScript LaTeX typset equations for use in figures and presentations. LaTuXiT builds an equation library and uses metadata, written as comments in the PDF and PostScript files, to match against existing equations in the library. This allows the user to make changes to an equation, such as correcting mistakes, or modifying the output color.

### TaskFarmer

A simple task farmer for running serial tasks with mpirun. TaskFarmer enables many simulations to be run within a single mpirun allocation, hence ensuring 100% utilization of the cores for the duration of the wall time. This is useful for running many short tasks on a small number of cores, or to avoid resource wastage when individual tasks have markedly different run times.

### LibVMMC

A fast and versatile C++ library to implement the "virtual-move" Monte Carlo (VMMC) algorithm: a method for approximating the dynamical evolution of systems of strongly interacting overdamped particles. The library is intended to make VMMC accessible to a wider audience, for whom the time required to code the algorithm poses a significant barrier to using the method.

### LibSLSM

A C++ implementation of a stochastic level-set method (SLSM). Unlike traditional level-set optimisation methods, which use a steepest descent approach, SLSM updates the level set using a stochastic differential equation. The addition of thermal noise enables the exploration of design space during the optimisation process. In situations where the objective function is non-convex, this allows for the possibility of escaping local minima and converging to the true global optimum. See the paper for further details.

### Rectify

Rectify uses a Monte Carlo algorithm to converge towards a target image by applying a random sequence of rectangular black or white brush strokes to a canvas and blending them with the current pixels. Images produced by rectify have a somewhat ghostly, impressionistic quality.

### Flux

Like rectify, flux also uses a Monte Carlo algorithm to converge towards a target image. This time the initial canvas is a randomization of the target and the algorithm evolves by attempting to swap, at random, pairs of nearest-neighbor pixels. Flux produces striking, high constrast images, the pixels of which appear as if they are being manipulated by a magnetic field.