Here is a list of pet programming projects. Let me know if any of them suffers from bit rot.



Simtic (C/Linux) is a text-based, dead-simple tic-tac-toe game with an AI that uses minimax search.


Quicksilver (Haskell) is a program that generates two mods for the real time strategy games Rome: Total War (2004) and Medieval II: Total War (2006) from the game studio The Creative Assembly. The qs command line program generates the quicksilverRTW and quicksilverM2TW mods from the game data sources. If any of the sources cannot be found or have a SHA-1 checksum mismatch, nothing is generated.

While interesting from a developer’s perspective (it being written in Haskell, perhaps the only such Haskell tool in existence in the Total War modding community), if you are an actual player of either of these games, you should check out the actual mods that qs generates. For either one, use 7zip to extract everything into your game root directory, and run the mod with the included .bat file. Both have been tested to work with the game binary from Steam.



ZTile (Haskell) is a library for dealing with square or hexagon tiles in a game map.



Auca (Haskell/Linux) watches for file modifications and executes a given external command. The name comes from a contraction of “auto” and “call”.


cabal2pkgbuild (Haskell/Arch Linux) is an Arch Linux wrapper around cblrepo which lets you generate PKGBUILD files from Hackage packages.


Floop (C/Linux) is a PRNG that writes to STDOUT. Its main purpose is to generate random bytes to wipe a disk, before using it as an encrypted medium.


Nox (Haskell/Linux) comments/uncomments text from STDIN and prints the result to STDOUT. The name comes from “no x”, where x is a chunk of source code that you’d want to comment out.


Panxor (Haskell/Linux) can perform a numerical XOR against an arbitrary number of hashes of arbitrary length in base 2 (binary), 8 (octal), 10 (digital), and 16 (hexadecimal). It is primarily meant to be used on top of a hashing utility like sha1sum; the idea is to combine all of the SHA1 hashes of the files of concern into 1 single hash by XOR-ing them all together; this way, as long as the number of files and filenames in question don’t change, you can instantly tell with a single hash whether something has changed in between. From this use case, it is like a poor man’s git commit hash.



Simple, stupid indentation. The kakapo is a species of parrot in New Zealand; intelligence is not its strong suit.

  1. The manual, provided here as a convenience, can be generated from a cloned git repository of the development sources if you have TexLive installed on your system.