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.