The rediscovery of Morniel Mathaway

An introduction to academic rumours, using the example of Michael Dummett’s imperfect recollections of the details of a science-fiction story.

The butler did it

How did the cliché of the criminal butler originate? There don’t seem to have been enough detective stories with this solution to explain it.

The missing XSAVEC

A debugging story.

Suicide on Junction Road Station

Interpretation and notes on the poem ‘Suicide on Junction Road Station after Abstention from Evening Communion in North London’ by John Betjeman.

The origin of ‘hobbit’

What’s wrong with the Oxford English Dictionary’s etymology of ‘hobbit’ and where did Tolkien really get the word from?

Hy, Zy, Hine…

A survey of scholars’ attempts to explain a mysterious phrase in Robert Browning’s poem ‘Soliloquy of the Spanish Cloister’.

Was ‘The Waste Land’ plagiarised?

Some people claim that T. S. Eliot’s poem ‘The Waste Land’ was plagiarised from Madison Cawein and from James Joyce. To what extent are these claims justified?

King Cnut and the tide

How did the story of Cnut and the tide change from its 12th century original into its modern forms? When did Cnut become proud? Who provided the flattering courtiers for him to rebuke?

Stack nomenclature

What’s wrong with the names ‘top’ and ‘bottom’ for the two ends of a stack?

Big-O proofs

Is there any benefit to be gained from learning to write big-O proofs in your analysis of algorithms class?

Homer’s Ithaca

Where is it, and why is this still a puzzle after nearly three millennia?

Keats, Hardy, and Lulworth Cove

Why did Thomas Hardy believe that John Keats had written the sonnet ‘Bright Star’ at Lulworth Cove in Dorset?


The role of coincidence in 19th century fiction.

The Three-Decker

Questions, answered and unanswered, about the literary ballad ‘The Three-Decker’ by Rudyard Kipling.

A man’s sentence

What did Virginia Woolf mean by “a man’s sentence” in A Room of One’s Own?

The Admiral Benbow

The probable location of the Admiral Benbow inn in Robert Louis Stevenson’s Treasure Island.

Cambridge Diss’d Clare 200 audax

A wintry expedition to Diss in Norfolk.

The stack of iterators pattern

A design pattern for implementing depth-first search in Python using a stack of iterators instead of recursion.

Visual C/C++ incremental linker bug

The Microsoft Visual C/C++ incremental linker sometimes fails to update the executable with the updated object code.

Cambridge Pork Pie 200 audax

A ride to Melton Mowbray in Leicestershire and back again.

Exact cover III

Using gadgets to translate combinatorial problems into exact cover instances, and how to avoid the gadgets using multiset covers.

Round trip

How I combined a parser and a serializer to achieve an elaborate no-op.

Plan to throw one away

How I had to write a JavaScript engine in two weeks.

Exact cover II

Solving and setting Sudoku problems in Python using an exact cover solver.

Exact cover I

Solving the exact cover problem in Python using ‘Algorithm X’.

Cambridge Four Counties 200 audax

A ride around Cambridgeshire, Bedfordshire, Northamptonshire and Buckinghamshire.

Cambridge Market 200 audax

A ride to Framlingham in Suffolk and back again.

A performance regression

A debugging story.

Emacs/Perforce integration: a retrospective

A look back at the first couple of years of maintaining the Emacs/Perforce integration.

The ping that wouldn’t die

A debugging story.

CTC ride to Lavenham

“Cambridge CTC is currently undergoing some soul-searching about the future of the Sunday all-day ride…”

CTC ride to Whitwell

“The wind was blowing at about 30 km/h from the southwest, and there was an intermittent light drizzle…”


“I was disappointed that Tidhar hadn’t been more daring. But maybe that’s too much too ask of any author in the current political climate.” A review of Lavie Tidhar’s 2011 novel.

The Quantum Thief

“Jean le Flambeur, gentleman thief, is sprung from prison by the beautiful Mieli, who persuades him to undertake one last job. Author Hannu Rajaniemi works hard to obscure the familiar outline of this hoariest of heist plots, by layering on the worldbling with a trowel.”

CTC ride to Braughing

“There was a hard frost overnight, and although the sun was shining, it was just a couple of degrees above zero…”

Completion colours

“At this point, if you are used to the way strings work in most programming languages, you ought to be asking yourself, how does this work?

Completion annotations

“Interactive completion works poorly in the case of changelists and jobs, because all you get when you type TAB is a list of opaque identifiers that give you no help in choosing the item you want.”

Five whys

“When confronted with a problem, have you ever stopped and asked why five times? It is difficult to do even though it sounds easy.”

The Bug

“It is stressful to know that something is wrong in your code, but not to know what it is or how to find it, and to have it hanging over your head day after day as you fail to make progress towards solving it. This nightmare scenario is the driver behind Ellen Ullman’s 2003 novel The Bug.”

Software inspection and the Heartbleed bug

Systematic use of software inspection could have fixed the Heartbleed bug without having to find it first.

“Double Dutch” audax

Around the fens in a north-easterly.

Password purgatory

I’m seeing what it’s like to try to follow “best practices” for password management, but I find myself wondering if these practices are really suitable for human beings?

DIY 200 audax to Wendover

Across the Chiltern Hills and back.

“End of Hibernation” audax 2014

A ride round the Suffolk downs, with snow and hail.

A localization failure

Google Maps has not been properly localized to the UK, so it’s useless for finding your way about rural Hertfordshire and Essex.

Emitremmus 2013

“It was all good fun until we hit the turn at Saffron Walden…”

Drawing square triangulations

Drawing the triangulations of an oriented n×n square using only lines joining the 4n integer points around the edge of the square.

Shrinking SVG

Generating smaller Scalable Vector Graphics (SVG) from Python.

One in three?

Despite the claim appearing in a BBC headline, it’s not the case that one in three journeys in Cambridge is by bike.

Scalable vector triangulations

Generating Scalable Vector Graphics (SVG) from Python.

Square triangulations

Computing the number of ways to triangulate an oriented n×n square using only lines joining the 4n integer points around the edge of the square.

User options considered harmful

The desire to add a user option often indicates that you have skimped on a important piece of usability work and are trying to put off doing it.

Software archaeology and technical debt

It doesn’t take long to reach a ‘mature programming environment’ in which complexity is overwhelming and change is expensive and error-prone. We’re all programmer–archaeologists now.

The tabular method

Dynamic programming is an important technique for writing combinatorial algorithms. But the name sucks!

Circular logic

Truth tables, graph colourings and a surprising sequence in Project Euler problem 209.

Language-oriented programming

“Languages are not just for describing algorithms to computers: they are for communication with other people.”

Emacs/Perforce integration: back from the dead

I’ve forked the abandoned Emacs/Perforce integration, and started fixing it. In particular, it no longer hangs Emacs when it can’t connect to the Perforce server.

Bogus foreign keys in Django

Handling bogus foreign keys in legacy databases in the Django web development framework.

CTC ride to Buntingford

“It was chilly out: just barely above freezing, and there was a cold north-easterly wind. Just the kind of day on which it would have been nice to sit in a warm house…”

Great North Road

“This down-to-earth milieu reveals the presence of shackles on the imagination.” A review of Peter F. Hamilton’s 2012 novel Great North Road.

The last lousy bug

A debugging war story: “Bug 142 was especially mysterious because it happened after the program quit running…”

The Hydrogen Sonata

“A bitter exercise in cynicism and disappointment.” A review of Iain M. Banks’ 2012 novel The Hydrogen Sonata.

By Light Alone

“Malthusianism is a topic that many science fiction writers have tackled, but the genre can not be said to have come out looking particularly good.” A review of Adam Roberts’ 2011 novel By Light Alone.


“Unlike in the Roman Empire, on the planet Cyteen the slaves cannot even dream of freedom.” A review of C. J. Cherryh’s 2009 novel Regenesis.

Cambridge audaxes

On Sunday 2nd September I organized three audax rides with the support of CTC Cambridge.

Big Bike Ride

201.2 km around the fens in the rain.

CTC ride to Hatfield Forest

In which we get lost on National Cycle Route 16.

Just Ride

Grant Petersen’s book is addressed to a readership that have no idea how to cycle and for whom the only role models are professional bicycle racers and people who have something to sell them.


In his final novel Fiasco, Stanisław Lem returns to one of his idées fixes, the impossibility of meaningful contact with aliens.

Method combinations in Python

Using Python’s class introspection to implement a non-standard method combination.

A credo for critics

“Bad reviews are a basic fact of literary life, you might have thought…” Some thoughts on the reaction to Liz Bourke’s review of Michael J. Sullivan’s fantasy novel Theft of Swords.

The hidden dangers of cycling

A reprint of ‘The hidden dangers of cycling’ by A. Shadwell, M.D., first published in the National Review of 1897.

Law-breaking among cyclists: perception vs reality

The public perception of law-breaking among cyclists, how this arises and persists through cognitive biases, and some consequences for campaigners.


A review of Adam Roberts’ 2003 novel Polystom: “Easy travel to other planets has been one of the dreams of science fiction—perhaps the dream. But everything we’ve learned about the universe has only made it clearer that this dream is an illusion.”

The Clockwork Rocket

All right-thinking people are aesthetic relativists, and for us this means that there’s a lacuna in most reviews: who’s to say, for example, that “characterization” is an appropriate yardstick to judge the work under examination?

A foolish consistency

We all know why literature should be consistent—to help our willing suspension of disbelief—but might there be positive literary effects from an artful application of inconsistency?

Five minute foreshadowing

What links J. J. Abrams’ 2009 film Star Trek with Christopher Tolkien’s History of the Lord of the Rings?

Emitremmus 2011

An autumn ride from Stevenage.

Tour of Britain

In which we go to Bury St Edmunds to see the start of stage 7 of the Tour of Britain.

Planning the Cambridge 200

I volunteered to run a 200 km audax in September 2012, and it’s never too early to start planning the route.

Python has no precedence grammar

A surprising fact about Python: it cannot be expressed by an operator precedence grammar.

Theo Jansen’s Strandbeest

Theo Jansen is a Dutch artist who, for the last couple of decades, has been building increasingly elaborate kinetic sculptures that he calls strandbeesten (beach-animals).

Turning circles

Using vector geometry to compute a turning circle. Plus a Javascript/canvas demo.

Dabblers welcome

A response to Iain M. Banks’ unsatisfactory opinion piece, ‘Science fiction is no place for dabblers’.

Three novels by Adam Roberts

Brief thoughts on Salt (2000), On (2001), and Stone (2002).

Cambridge 300 audax

To Wymondham in Leicestershire.


A review of Adam Roberts’ 2007 novel Splinter. At the same time, the narrative does its best to assist in the denial: instead of a science-fictional examination of the catastrophe, the story heads off into middlebrow psychological territory…

iOS location tracking

The hidden location-tracking feature in iOS 4, with some maps to illustrate the accuracy of the recording.


A review of Adam Roberts’ 2006 novel Gradisil. Merely pastiching the surface features of this genre won’t by itself produce something that’s recognizable as ‘hard’ sf to the aficionados.

CTC ride to Horseheath

In which we visit the largest Roman burial mounds in northern Europe.

“Double Dutch” audax

The fens of Cambridgeshire, Norfolk and Lincolnshire.

Four novels by Adam Roberts

Brief thoughts on Land of the Headless (2007), Swiftly (2008), Yellow Blue Tibia (2009), and New Model Army (2010).

CTC afternoon ride to Ickleton

A short ride with daffodils.

Surface Detail

A review of Iain M. Banks’ 2010 novel Surface Detail. “Any long-running science-fictional series ends up suffering from … the accretion of incompatible details to the point where it becomes impossible to imagine a consistent universe to which they could possibly belong.

River of Gods

A review of Ian McDonald’s 2004 novel River of Gods. “I would have liked a bit less of the ontological mystery and the big sf ending: I would have been quite happy to carry on with the tour.

“End of Hibernation” audax 2011

A ride round the Suffolk downs, with March winds and tractors.

The Devil is an Ass

Post-processing a critical edition of the Ben Jonson play for Project Gutenberg Distributed Proofreaders.

Encapsulation is not always right

In object-oriented programming, encapsulation is sometimes a bad idea, and motion planning and collision are areas where this is particularly likely to be the case.

Using the Autodesk FBX Python module on 64-bit Macs

A bug report (mostly so that other people who encounter the problem can search for and find the workaround).

CTC ride to Waresley, West Perry, and St Ives

In which we meet the St Neots half marathon.

Daylight puzzle

In which I reveal my lack of understanding of astronomy and spherical trigonometry.

Indentation advice

Supposing, just supposing, that you actually wanted to make your dots line up vertically in Emacs, how would you go about it?

Hauxton 200 audax

“A baptism by wind and rain…”

London Sightseer audax, 2010

“Carrying our bikes up the stairs was the hardest bit of the ride…”

CTC ride to Barkway, Ardeley and Royston

“How can I put these keen new riders off the club, I thought to myself? How about taking them down the muddiest lane in Hertfordshire?”


A review of Greg Egan’s novel Zendegi. “An entertaining but rather slight novel that places Egan’s usual concerns—transhumanism, uploading of minds, the morality of artificial intelligence—in a democratic Iran in the early and mid twenty-first century.

Manifold: Space & Origin

A review of Stephen Baxter’s novels Space (2000) and Origin (2001), the second and third books in the Manifold trilogy. “If you’re looking for serene contemplation of disaster and suffering, Baxter’s your man.

CTC ride to Stradishall, Lavenham and West Wratting

“… we were glad to make an extra stop at Clare for ice cream…”

CTC ride to Haverhill, Clare and Ashdon

“It was a tough ride on my own in the heat…”

History of level 24

A finished game, with smooth gameplay and polished graphics, gives little evidence of the many twists and turns along the path of development. Here, in twenty-four screenshots of level 24, I show some of the trials, mistakes, and modest triumphs from the development of Floe.

CTC ride to Hinxworth, Old Warden and Gamlingay

“The selection of destinations made route-setting quite a challenge.”

CTC ride to Stradishall, Clare and Stetchworth

“After tea our luck ran out and we were caught in one last thunderstorm.”

John Sturrock is an idiot

The translator of Notre-Dame de Paris gives the impression of not having read his own book.

Hexes by Stick Insect

Girls, interrupted: Listener crossword 4080.

Sine Qua Non by Shackleton

Symphonic Movement: Listener crossword 4079.

The Fragmentation of Reality by Lavatch

Sixteen choices: Listener crossword 4078.

The Undertones? by Schadenfreude

Clashing lines: CAM 59 crossword.

Forced Entry by Mr Lemon

Several ways in: Listener crossword 4077.

Labour by Elint

Out on a limb: Listener crossword 4076.

“End of Hibernation” audax 2010

A 207 km audax ride from Haslingfield to Stowmarket, Sudbury and back, 2010-03-21.

Square-bashing by Arden

Left and right: Listener crossword 4075.

Printer’s Devilry by Qid

A temporary marking slug: Listener crossword 4074.

Quartet by MynoT

Ancient wisdom: Listener crossword 4073.

The Isolated Word by Ten-Four

A self-descriptive puzzle: Listener crossword 4072.

Five Dots by Franc

Sense, reason, and intellect: Listener crossword 4071.

The Glady Marsh by Salamanca

Chercher la femme: Listener crossword 4070.

Conversion by Samuel

A knockout puzzle provides a tough fight: Listener crossword 4069.

364 263 by Xanthippe

A carte blanche with modified entries and a numeric code: Listener crossword 4068.

Packing the “S” tetracube

In how many ways can you pack 54 “S” tetracubes into a 6×6×6 cube?

Rentokil by Jago

Tricky manipulation required: Listener crossword 4066.

Packing the “T” tetracube

Can you pack 54 “T” tetracubes into a 6×6×6 cube? Solutions, discussion, and generalizations.

Saturn’s Children

A review of Charles Stross’s 2009 science fiction novel Saturn’s Children, with analyses of the problems with the narrative voice and some of the flaws in the world-building.

Absolute Friends

A review of the 2003 novel Absolute Friends, in which John le Carré contrasts the Cold War and the War on Terror through the viewpoints of the two spies of the title.

How the anti-cycling lobby poisons public discourse

How anti-cycling propagandist Edmund King of the AA promotes negative stereotypes of cyclists in order to blame them for their own deaths and injuries.

CTC ride to Wilburton and Ely

“It was a day of attrition…”

Why I hate FaceBook

Eight reasons why FaceBook sucks for serious discussions.

Paying for postcodes

An appeal for the Royal Mail’s Postcode Address File to be freely licensed to individuals and not-for-profit organizations.

Using html5lib to resolve relative URLs

Python code for translating relative URLs in HTML source into absolute URLs suitable for syndication.

Is Robin Lustig prejudiced against Japanese men?

A criticism of Robin Lustig’s absurd and offensive explanation for Japan’s low fertility.

Ingleborough and Whernside

A walk from Ingleton to Ingleborough, Chapel-le-Dale, and Whernside.

Emacs 23

Emacs 23.1 was released on 2009-07-29. In this review, I describe some interesting and useful features of this release, and give some historical background to multilingual support in Emacs.

The fractal dimension of Mellon Udrigle

The BBC programme Coast bravely tackled the fractal nature of coastlines but missed the historical origins of the subject in Lewis Fry Richardson’s statistical study of warfare.

Commuting and health in Cambridge

While taking part in this study (run by the MRC Epidemiology Unit at the Institute of Metabolic Science) I amused myself thinking about possible sources of bias.

Advanced Photo System

A brief history of the Advanced Photo System and some photos I took using it.

CTC ride to Hare Street

“After tea we split up…”

Cycle tour to Warsash and Staines

A cycle tour from Cambridge to Warsash and Staines and back again, with photos and some discussion about how I planned it.

BNP press office on mixed-race marriages

An e-mail exchange I had a few years ago with “Dr. Phill Edwards” of the British National Party.


A ride with the Cambridge Cycling Club suffers a visit from the puncture fairy.

Pillars of the community

Some comments on the sabotage of the Étape Caledonia and the lorry driver who nearly killed Boris Johnson.

CTC ride to St Neots, Keysoe, and Caxton

“We were a few minutes late setting off, which was my fault because I rather incompetently tightened some loose spokes in my back wheel…”

Improving road safety

A look at the National Audit Office report Improving road safety for pedestrians and cyclists in Great Britain. “You can see that the normalized figures are not nearly so flattering to the UK. Is this just plain incompetence, or a deliberate attempt to mislead?

Manifold: Time

A review of Stephen Baxter’s 2000 novel Manifold: Time. “Baxter completely lacks control over his material in this novel. He has potentially powerful themes and ideas, but handles them so inconsistently that they lose all their power.”

Roberts on Incandescence

A commentary on Adam Roberts’ review of Greg Egan’s novel Incandescence in Strange Horizons.

Colliding balls

Several approaches to implementing a system of colliding balls, ranging from quick-and-rough to painstaking-and-slow.

Snow preparedness

The cost of and responsibility for snow preparedness: “it’s not just a matter we can leave to government, we all have things to do.

Validating XHTML

A program to allow you to run your XHTML document through the W3C validator and step through the errors and warnings conveniently in Emacs, and a brief discussion of why someone might want to do this.

Apple Mail crash: “bad external relocation length”

A serious crash in the Apple Mail application, with some analysis and a possible remedy. “It’s a bit worrying that the entire world can make my mail application crash just by sending me some junk mail.

User interface asynchrony

Implementing a match-making user interface for an ad-hoc wireless networked video game shows us that a user interface needs to be able to run asynchronously with respect to the implementation.

Super Paper Mario

A review of the 2007 Nintendo Wii game Super Paper Mario by Intelligent Systems, directed by Ryota Kawade. “Super Paper Mario has two significant innovations. One is graphically and conceptually spectacular, and was hyped in the game’s advertising, and is somewhat of a failure. The other is subtle, little commented on, and a big success.

ISA decision-making

If you have a debt and some surplus income, under what circumstances should you pay down the debt and under what circumstances should you invest in an Individual Savings Account (ISA)?

Einstein and Eddington

A review of the BBC/HBO television drama, with particular attention to the accuracy of the depiction of the science. “If these stars on this photographic plate of the eclipse overlap with the comparison plate, Einstein’s theory is wrong and Newton’s theory holds. If there is a gap between the two images, then the sun’s gravitational field has shifted the stars’ position, and we have a new theory of gravity.

Crash II

A look at house prices in November 2008. “The first figure attempts to suggest where the bottom of the current crash might be by comparison with the bottom of the last crash.

Anatomy of a manufactured controversy

How a harmless piece of advice to the staff of Bournemouth Borough Council was inflated by The Telegraph into a nationwide cultural crisis.

Quest for the 2m cycle lane

Some bullshitting by a Cambridge City councillor prompts the question of whether any of the cycle lanes in Cambridge meets the official recommended width anywhere along its length?

Why doesn’t Google Maps use OpenStreetMap?

OpenStreetMap has better coverage of Cambridge than Google Maps. Google Maps combines mapping data from many sources. Why doesn’t it make use of OpenStreetMap?

Financial crisis: Northern Rock’s balance sheet

Like every other fool with a blog, I’m trying to understand what caused the financial crisis. I start by looking at the collapse of Northern Rock in some detail and trying to work backwards from there. What happened to this bank?

Database state

A letter to David Howarth MP, asking him to work to defeat Home Secretary Jacqui Smith’s proposal to create a government database of telephone calls and e-mails.


A review of Incandescence by Greg Egan. “In a genre dominated by fantasy dressed in a spacesuit instead of a wizard’s robe, Greg Egan stubbornly sticks to extrapolations from the physics we know. He rules out from his fiction faster-than-light travel or communication, or spaceships that couldn’t possibly be fueled by any form of energy we know. This self-denying ordinance deprives him of the props and conventions of the genre: no galaxy-spanning empires or interstellar wars for Egan.”

What commuter cyclists can’t learn from Chris Hoy

I demolish an absurd article about cycle commuting from the BBC.

Fourteen years of e-mail

Counting and graphing e-mails. With a digression on non-standards-conformant mail user agents and how to use Perl to parse their non-conformant Date headers.

How deep is your build pipeline?

Discussion of video game build pipelines and the development difficulties that they entail.

Constant, qualified, and less attemptable

The const type qualifier in the C programming language, and the consequent impossibility of implementing some common operations in a type-safe way.

Make my day

The trouble with the build tool make is that because it uses file modification dates to determine whether a dependency has changed, it often rebuilds targets unnecessarily.

Royston audax

The 2008 Royston audax: a short ride (as audaxes go), of 107 km, from Royston to Longstanton via Chrishall and back via Gamlingay.

Newlands valley watershed

An account of a walk I did back in 2002, from Little Town in the Newlands valley in the Lake District, to Buttermere, and back. (In the form of a map with mouseover text.)

Three times is a pattern

Three cases in which a motorist hit a cyclist, there was CCTV or eyewitness evidence, and yet the police took no action. “The message that cyclists are getting loud and clear is that the police are not interested in protecting them from assault by motorists.

Multi-way mortgage calculator

There are many thousands of mortgage calculators on the web that compute the monthly payments based on the capital sum, interest rate, and duration. But this one lets you compute any of these four values based on the other three.

None of the above

A merciless nitpicking of the 2006 Edexcel GCSE Science: Physics P1b exam paper. “This paper covers waves, electromagnetic radiation, astronomy, cosmology, and seismology, and features some really, truly, horribly poor questions.

Megalotropism is the key insight

A review of Matter by Iain M. Banks. “The book initially appears to be about the political and military conflict between two humanoid civilizations. But a kind of pull-back reveals that this conflict is a small event taking place in a corner of a much vaster canvas, like two colonies of ants fighting over a mound of earth in a city park.”

Paper Mario

A review of the 2000 Nintendo 64 game Paper Mario by Intelligent Systems, directed by Ryota Kawade. “Paper Mario is deliberately designed to be an RPG for beginners, and after playing it I can glimpse what people see in proper RPGs.


A look at house prices in December 2007. “I’ve been wondering about what the UK housing market crash is going to look like, and how far prices might fall.

Smallest possible transparent PNG

A detailed look at the encoding of bitmap images in the PNG file format, leading up to the discovery of the smallest possible transparent PNG, only 67 bytes long.

Smart quotes in Emacs 22

Smart quotes mode, a minor mode for Emacs 22 that makes it convenient to type ‘smart’ “quotes”.


A publishing scam using misleading bibliographical data to fool Amazon customers into thinking that a study guide might be good substitute for a real textbook.


Why rules can’t tell us how to make good video games; we need understanding of their purpose and effects as well. With an extended digression on neoclassicism and John Dryden.

Stars, I have seen them fall

A tongue-in-cheek look at the metaphors in A. E. Housman’s poem starting “Stars, I have seen them fall…” and whether they really make sense.

Zendoku puzzle generation

The technical challenges involved in implementing a sudoku puzzle generation algorithm on a handheld video game console, and how the developers at Zoonami solved them in the production of Zendoku for the Nintendo DS and Sony PSP.

Murder in the cathedral

An analysis of the dispute between the Bishop of Manchester and the video game developer Insomniac over the use of Manchester Cathedral as a setting in the game Resistance: Fall of Man.

Zendoku tactics

Tactics and tips for winning at Quest Mode in Zoonami’s Zendoku, a video game for the Nintendo DS and Sony PSP. With lots of diagrams.

The Python Challenge

The Python Challenge is a website of puzzles compiled by Nadav Samet. The puzzles are a mixture of riddles, codes, and programming challenges, with the Python language being a recommended tool. Here are some of my notes and solutions.

Relational macros

A C programming language technique for embedding relations (tables of data) into programs in a way which is easy to check, safe to update, and requires no tools other than the C preprocessor.

Powers of two

Bram Cohen poses a programming question for job applicants: it’s easy to solve by searching but how can you be confident that you’ve searched far enough? Trying to answer this question leads to interesting mathematical analysis.

PSP loading times

Why video games on the Sony PlayStation Portable take so long to load, and what game developers can do to reduce loading times.

Mechanics spread over too much game

Why are so many games based on movies no good? The answer lies in the time and effort required to perfect each game mechanic.

Juno in Hades

Commentary on an extract from the television series Miracle Planet II, portraying a collision between a small planetoid and Earth, of similar scale to ones which occurred during the “late heavy bombardment” of the Hadean era (about 4 billion years ago).


It’s common and convenient to represent relational databases in the form of spreadsheets, especially using Microsoft Excel. But it’s surpisingly hard to carry out relatively simple database operations on such spreadsheets. This article explains how to implement simple selects and joins as Excel formulae.

The puzzle structure of Ocarina of Time

The structure of the puzzles in the Nintendo 64 video game The Legend of Zelda: Ocarina of Time. With diagrams and maps.

Type inference for Python

A sketch of a type system for the typeless programming language Python. The system would allow a limited form of type inference that would detect some type errors at compile time.

The errors of Christminster

A study of the errors found and fixed during the development, testing and release history of the adventure Christminster, together with a suggested categorization of defects in adventure games.

Statement coverage for Python

A tool to support statement coverage testing for Python. It accumulates coverage data over many runs, generates coverage reports, and annotates Python source showing which statements have been covered.

Statement coverage for Python: design and analysis

Lists the requirements for a statement coverage tool for Python, describes some issues in design and implementation, and compares with other statement coverage implementations.

Can we ship yet? Using Perforce fixes to measure product quality

How to use Perforce to efficiently measure the quality of a product in a software development environment where there are many branches, customers, and product versions. Presented at the Perforce User Conference 2001.


A text adventure game set in the ancient university town of Christminster. A telegram from your brother Malcolm, a teacher at Biblioll College, draws you in to investigate the mystery of his disappearance, the history of the college, and the ambitions of the scheming Doctor Jarboe and Professor Bungay…

The Magic Toyshop

A text adventure game on the theme of toys and puzzles. Looking for a birthday present for your niece Isabelle, you wander down a dim Victorian arcade and come across an old toyshop, with a peeling rocking-horse behind a grimy window…