Projects

Most of this code now lives on GitHub. What follows is an annotated archive of things I’ve built over the years — each links to its own page, where the write-up and any downloads live together.

Useful Software

Things people might find useful, usually meaning that they work, are documented, and perform a definite task.

  • DBHash — A disk-backed hash implementation in Ruby designed for fast append and traversal operations.
  • BibGrep — A grep tool for working with BibTeX. Written in Ruby, and designed for easy filtering of one or many BibTeX files.
  • Wik — A single-file Wiki/workbench for maintaining directories of notes in Markdown format.
  • Wiχi — A LaTeX based document workbench, operating in a similar way to a wiki but with full bibtex/template/multiformat support. This was (and is being) developed to maintain working documents for my PhD.
  • NFreq — An ngram generation and comparison tool that runs in linear time, fixed memory and uses Sqlite3 as a storage format. Written in Haskell, it also comes with some handy ngram libraries.
  • NearNeural — Written during my undergrad, this is a Java neural net library written initially as a didactic exercise — it supports multithreaded backprop, multiple normalising functions and arbitrary net layouts. This was once used to run an OCR tool, and is quite usable for small tasks.
  • SmartSerif Beamer Theme — A simple, serif theme for beamer. Doesn’t look as bad as most of them out there.
  • InfoLab21 Beamer Theme — Now you, yes you, can pretend to be affiliated with Lancs.
  • Maize — A tool for learning agent-based AI (based around a maze solving task). Written with Carl Ellis for the Lancaster computing society.
  • SylWord — A Java tool to count syllables in words. Developed for Andrew Wilson for analysis of Welsh.
  • PHP File Listing — A file listing script used on this site. Simple, single-file, and has fully graceful client-side preview features.
  • JS TOC — A JavaScript table of contents generator that uses DOM manipulation to build a TOC.
  • SimpleRPC — A very simple and fast RPC gem for Ruby.
  • Blat — A highly parallel and aggressive Ruby wrapper for cURL, designed for sustained high-volume downloads.
  • LWAC — A system for downloading website data in a longitudinal manner for use as corpus data.
  • GraphColl — A tool for building and exploring networks of linguistic collocations (now LancsBox).
  • SCC Beamer Theme — A beamer version of the SCC presentation template.

Physical

From time to time I build random stuff. The only notable things are probably:

  • 6th Sense — A prototype device for adding a 6th sense to myself through neuroplasticity.
  • Solar Death Ray — The wonderful world of Fresnel lenses and sun.
  • Van de Graaff Generator — What every boy spends the summer after GCSEs doing. Generates around 7KV at a guess.
  • Pressure Cannon — Using this and a camera my brother and I were able to get a few high-speed shots using a sound trigger.
  • A Lego Turing Machine — A Lego Mindstorms implementation of Turing’s famous automaton.

Useless Software

Some of this is interesting, and most of it works, but it might be a bit lazily built or poorly documented. Please let me know if you use any of it or find it useful. Compile/run at your own risk, though feel free to ask how ;-).

  • NCurses Asteroids — An ncurses-based asteroids clone, written in C.
  • Responsive Text Generator — This generator reads a tagged CSV listing and produces a HTML file that displays only the most important text at any one time using media CSS rules.
  • ROmegle — A Ruby interface to the Omegle.com stranger-chat service.
  • CheerPaper — Changes desktop backgrounds according to the cheerlights synchronisation system.
  • JS brainfuck Interpreter — Now you can run brainfuck, slowly, in your browser!
  • Dix or Cox? — A quiz: can you tell two bearded didactic programmers apart?
  • The Vitriol Generator — A now-retired web app that fetched Daily Mail comments on any topic you liked.
  • ASM brainfuck Interpreter — Now you can run brainfuck, quickly, on your 64-bit machine!
  • Obfuscated tree of Vowels — A simple program to count vowels in an input string.
  • brainfuck Compiler — An optimising compiler written in Ruby. Currently only performs basic optimisations, but produces very fast code.
  • Haskeylogger — Written to learn bitwise IO. Reads a device file and outputs keypresses in realtime, with the usual Haskell benefits of having a fixed memory footprint and being about 10 lines of code ;-).
  • GaTSP — A genetic-algorithm based travelling salesman problem solver. Includes lots of insane things to seed the solutions based on radial paths and such.
  • LifeImg — A tool to generate a series of images corresponding to iterations of Conway’s Game of Life.
  • Ruby IRC lib — A heavily reflective IRC bot library designed to allow module/state loading and saving, as well as user auth and other basic tasks. Though quite advanced, and used for a few bots in the past, I’ve not got the knowledge of IRC to improve it further.
  • Anamnesis & A2 — Memory managers developed in C to keep a sub-malloc in limited space. Anamnesis keeps track of many memory links, and A2 manages a contiguous area of memory. One’s been used as a memory manager in John Vidler’s prototype kernel.
  • CSV Merge — A slow and memory hogging tool to merge CSV files. Works well enough if you have the RAM to cache one of the files.
  • Java Quine — The most useful program ever. Outputs its own source.
  • MandelNet — A network based mandelbrot point sampler in Haskell. Capable of arbitrary precision, at a speed cost.
  • Mandelbrot.hs — A Haskell and SDL mandelbrot/julia set renderer.
  • Lancs uni WiFi Auth — A set of bash scripts to automatically log into the Lancaster university wifi system. Could be adapted for others, no doubt.
  • Colliculus — A realtime video processing/stream processing system designed to construct 3D images and anaglyphs on the fly. Based on OpenCV and written in C++. NB: doesn’t compile right now :-(
  • NearOCR — My undergrad first year project, a Java OCR system based on neural nets and covariance statistics. Works fairly well for clean data, and might be handy as a learning tool.

Shoddy or Pointless Software

Even more stuff! I’m only going to quickly mention these; they are reasonable ideas but not big enough to list properly.

  • BigramMM — Ruby based word-bigram transition probabilities, used as a POS tagger with some success but not very polished.
  • Environment2D — A Java library acting as a middleman between the normal drawing libraries and AWT. This allows one to render to a theoretical plane then pass a view-window over it, like in conventional graphics work.
  • Java Manifolds — Non-affine transformations in Java. Very slow, but a decent proof of concept in the “non-euclidean viewport” realm.
  • Haskell Caeser Cipher — A toy to learn Haskell. You might want it to learn from, I guess.
  • averAge — Spiders a filesystem and calculates rudimentary statistics on the age of files.
  • The Deletinator — Spiders the web very aggressively/stupidly, sending HTTP DELETE requests to everything — does anyone still implement this? The answer is basically no.