skip to the content



back to the top

Introduction

I enjoy programming and contribute to a variety of open source projects. Most of my contributions at the moment are bug fixes, although I hope to get involved in a larger project at some point soon.

Contents

Recent

My first foray into greasemonkey extensions. These are geared towards improving the debian mailing list archives.

Tab Killer

Tab Killer, an epiphany-browser extension that disables tabbed browsing.

Todo

screenshot

Just TODO it, a TODO list manager that balances simplicity and detail.

Doom

Some miscellaneous bits of code for reading and interpreting doom WAD files. lswad is a program that lists the contents of a WAD file (including any wasted space). wadfs is a filesystem interface for WAD files using the excellent fuse library. wad.c and wad.h are the shared bits of code for interpreting WAD files used by these two programs.

Grab the files individually from ./doom/ or use the URI as a darcs repository.

mediawiki

A ruby library for manipulating mediawiki installations: This is designed to help with writing wiki "bots" or automating large tasks. Here's an example of how it will be used (eventually):

#!/usr/bin/env ruby
require 'mediawiki'

host = "doom.wikicities.com"
page = "Heretic"
mw = Mediawiki.new(host)
p = mw[page]

p.links.
  reject { |l| ! /E\dM\d/.match(l.link) }.
  each { |l|
    p2 = mw[l.link]
    p2.categories << "Heretic levels"
  }
mw.commit

Grab the files individually at /code/ruby/mediawiki/ or use it as a darcs repository.

delicious

A small script to import your Mozilla bookmarks into the del.icio.us on-line, tag-based collaborative bookmarks tool, written in ruby: /code/ruby/.

Bugs

Collated bug reports and patches for various programs are available at the bugs page.

PWM Patches

I am writing some patches for the window manager. They are available on the PWM page.

WM

A Window Manager for the X windows system (and hopefully something similar for win32 afterwards, too). An attempt at demonstrating a window-management paradigm which I think takes the best of things from the classic approach and the paned approach used by ion.

DSAFilter

dsafilter is a script designed to filter Debian Security Advisory (DSA) mails. The end-goal is to have it bin DSAs which are not applicable to any of your machines, and to mail you once per-machine, so you can use your inbox as a todo list.

Examples

Some of the smaller programs I have written are most useful as examples of techniques and approaches to problems in programming. Some were written with this purpose in mind, others were actually useful for something.

libfaketime

libfaketime is a small, trivial library that lets you fake the system time on a POSIX environment, via the gettimeofday() system call:

$ date
Sat Nov 22 00:15:56 GMT 2003
$ LD_PRELOAD=./libfaketime.so.1.0.0 date
Mon Nov 10 09:57:53 GMT 2003

It came about because a friend of mine wanted to circumvent a time-based check in a binary for which he didn't have the source code. I called it libfaketime since that seemed to be the most appropriate name for such a thing. It may prove a good reference for people interested in learning how to hijack a system library via LD_PRELOAD, or write a shared library. faketime.tar.gz, 920 bytes. Only tested on Linux, public domain.

If you want something more sophisticated, which also overrides time/ftime, and allows you to set relative offsets, go to http://www.code-wizards.com/projects/libfaketime/, a library which basically uses the same approach but wraps all the time syscalls and is also called libfaketime.

Another useful LD_PRELOAD library is hidefile.

namekill

Kills processes matching a name (case-insensitive) supplied on the command line. Designed for windows NT/2000/XP but may work with 9x too (uses psapi). Compiled with mingw. Public Domain.

I wrote this in order to remove an annoying advert banner which Durham University public computers would display when you logged in.

C++ Lecture

At some point in the second year of uni, I had a C++ tutorial with 4 other people (my Software Engineering group-mates). We managed to go to the wrong room, however- and since we didn't know where we should have been, we decided to revise the topic ourselves.

Basically, I lectured the material to my group-mates, and my friend (who has asked to remain nameless, due to his poor handwriting) wrote it up on his snazzy tablet PC. The results are these notes on delegation, adaptors and decorators in C++ (c++_lecture.pdf).

Vapourware

I tend to think of a lot of things I'd like to write, but never get around to doing. I have started a website to let people combine such vapourware together (in the hope someone will do something), it's called halfcoded.net. Unfortunately at the moment that's vapourware, too. Here's a few other things I haven't done.

Theme

Theme would be a program which allows you to author a 'theme' for an abstract window manager, and then convert themes written for this abstract window manager into the configuration syntax of concrete WMs, using plugins.

Mandelbrot

I wanted to make a really high-resolution mandelbrot fractal poster whilst at Uni. To generate it, I thought I'd write a program. The plan was that I could make it output pure postscript, directly to the A0 plotters. More details are here.