Below are the five most recent posts in my weblog. You can also see a chronological list of all posts, dating back to 1999.

I run some Internet services on my home Internet connection, mostly for myself but also for friends and family. The IPv4 address assigned to my home by my ISP (currently: BT Internet) is dynamic and changes from time to time. To get around this, I make use of a "dynamic dns" service: essentially, a web service that updates a hostname whenever my IP changes.

Since sometime last year I have also had an IPv6 address for my home connection: In fact, lots of them. There are more IPv6 addresses assigned to my home than there are IPv4 addresses on the entire Internet: 4,722,366,482,869,645,213,696 compared to 4,294,967,296 IPv4 addresses for the entire world (of which 3,706,452,992 are usable).

I am relatively new to IPv6 (despite having played with it on and off since around the year 2000). I was curious to find out how stable the IPv6 addresses are, compared to the IPv4 one. It turns out that it's very stable: I've had four IPv4 addresses since February this year, but my IPv6 allocation has not changed.


I've been trying to refresh my Haskell skills and Paul Callaghan recommended I read the paper "A History of Haskell: Being Lazy With Class", which I found (surprisingly?) fascinating. Three facts about Haskell that I didn't know jumped out at me:

  • The notion of Lazy Evaluation in a programming language was invented independently at least three times, but once here at Newcastle University by Peter Henderson (in collaboration with James H. Morris Jr of Xerox PARC). The paper was published as Technical Report 85 and the full text is available (albeit as an 11MB PDF of scanned pages).

  • Despite Haskell's popularity as a platform for formal computing science, the language itself is does not have formally specified semantics (or at least didn't when this paper was written, ten years ago)

  • When I was first exposed to Haskell, the worlds of functional programming and "real world" programming seemed far apart. (This perception was largely due to my own experiences, exposures and biases). In the time since, we've witnessed many FP concepts and ideas gain traction in that "real world", such as Lambda Expessions in Java 8. However, the reverse is also true, and Haskell's heirarchical module names are largely borrowed from Java's heirarchical package naming scheme.


I made a Doom map! Well, I actually made it over 10 years ago for Freedoom. A few months ago it was finally replaced, and so I thought I'd release it standalone. I took the opportunity to clean it up a little bit. You could consider it like a "director's cut". It's been a long time since I've done anything like this, and it was fun in some ways to revisit it, but it's not something I want to do again any time soon.


It requires a Boom-compatible Doom engine to play: Eternity, ZDoom, PrBoom+ are known to work.


After months of trying, I've finally got my hands on a Nintendo NES Classic Mini. It's everything I wish retropie was: simple, reliable, plug-and-play gaming. I didn't have a NES at the time, so the games are all mostly new to me (although I'm familiar with things like Super Mario Brothers).

NES classic and 8bitdo peripherals

NES classic and 8bitdo peripherals

The two main complaints about the NES classic are the very short controller cable and the need to press the "reset" button on the main unit to dip in and out of games. Both are addressed by the excellent 8bitdo Retro Receiver for NES Classic bundle. You get a bluetooth dongle that plugs into the classic and a separate wireless controller. The controller is a replica of the original NES controller. However, they've added another two buttons on the right-hand side alongside the original "A" and "B", and two discrete shoulder buttons which serve as turbo-repeat versions of "A" and "B". The extra red buttons make it look less authentic which is a bit of a shame, and are not immediately useful on the NES classic (but more on that in a minute).

With the 8bitdo controller, you can remotely activate the Reset button by pressing "Down" and "Select" at the same time. Therefore the whole thing can be played from the comfort of my sofa.

That's basically enough for me, for now, but in the future if I want to expand the functionality of the classic, it's possible to mod it. A hack called "Hakchi2" lets you install additional NES ROMs; install retroarch-based emulator cores and thus play SNES, Megadrive, N64 (etc. etc.) games; as well as other hacks like adding "down+select" Reset support to the wired controller. If you were playing non-NES games on the classic, then the extra buttons on the 8bitdo become useful.


One of the products I have done some work on at Red Hat has recently been released to customers and there have been a few things written about it:


Older posts are available on the all posts page.