Live editing a running Pong game
Some random Sunday fun: a live Pong game where you can enable/disable the lines of code driving it. Fun for at least a few minutes.
Some random Sunday fun: a live Pong game where you can enable/disable the lines of code driving it. Fun for at least a few minutes.
One of the projects I’m working on this year is an interactive fiction engine built in a wiki interface. The game engine uses a markup similar to wikitext, with a helpful UI to simplify building world elements. The player interface is a webified version of a z code type of game, supporting MUD features for authors who want it.

A SVG mock-up for “thwarter”
I use Inkscape to mock-up user interfaces. It’s a good starting place as it’s quick, vector-based, and it uses text (SVG plays nice with Subversion). I sketch the interfaces directly in Inkscape now, skipping paper prototypes for everything but the earliest concept sketches. I sometimes take the vector drawings to completion too, polishing them, and dissecting them later with the Gimp for HTML templates.
Notice that the editor mockup has no icons or colours. It’s a habit I’ve developed over the years, limiting my thinking in terms of highlights instead of worrying about the details. I get bogged down with details early on, so I have to force myself to sideline the distractions until later. I limit mock-ups to 10-20 minutes too, to avoid getting sucked in to trying to perfect ideas early. The time for polish comes later, after I can prove the utility in the approach.
I am also careful while building the prototype not to get too lost in the details. The purpose is to test the viability of the interface and the initial approach. So far, I’ve discovered that I need to be able to parse the wikitext in both client and server, as well as parsing the NL text from the game interface on the server. I’m considering externalizing the parsing rules (via regex or similar) so it can be shared between Javascript and PHP, so I can provide a rich UI and storage. This complexity is a good discovery to make in the prototyping stage, as it gives me lots of time to consider alternative–and hopefully simpler–approaches.
Another test of the prototype is to see if CodeIgniter is a good fit. I’ve been pleasantly surprised so far, and have found it an extremely comfortable framework. I’m also looking at hosting needs (AWS, Slicehost, Dreamhost), considering how DNS and DB partitioning will work, and what sorts of load might be put on the system. Some of this thinking is early, so I have to try not to get stuck in it.
Next up, I’m going to start to prototype the game play interface and expand the schema. The game implies a great deal of state, something that I want to be careful to contain simply. I’m siding on partitioning the games in their own databases (or tables), especially for the live game states. A live game will have large multipliers of the number of locations, their states, by the number players and their time in the game so far. At a small scale it won’t matter, but thousands of players multiplied by hundreds of locations (and dozens of states each, dozens of variables per state) becomes a large persistent data problem.1
History is fun. Where does the variable naming convention of using i, j, k, l, m, and n for loop variables come from?
In Fortran, all variables starting with the letters I, J, K, L, M and N are integers by default. Fortran refers to this as “implicit typing”. (This may be the source of the long tradition of using “i”, “j”, “k” etc as the loop indexes of “for loops” in many programming languages—few of which have implicit typing). However, it is questionable as the root source. Why were I, J, K, L, M, and N integers in Fortran as opposed to A, B, C or X, Y, Z? One posed explanation is that I and N are the first two letters of Integer. Fortran’s source of inspiration is very likely that mathematicians have been using use i, j, k, … to denote integers for hundreds of years — for example as the Index Variable in Summation and Product. – Wikipedia on Sigils
A few good reasons why every developer should play nethack. I’d like to add that every developer should take a look at the code, as it’s a great example of some of the cooler unixisms.
An extension to mobile Safari that makes tabbed browsing easier. It’s a clever use of bookmarklets and iconic hovering menus that is just plain old fun to use.
Details on Opera’s Wii-remote browser API. Do funky stuff with the Wii-mote from within the Wii’s Opera browser.
Some analysis of HTTP header oddities out in the wild. A longish list of interesting HTTP header fields and guesses at their purpose. My favorite pseudo-header?
X-Subliminal: You want to buy as many games as you can afford
Which is even based on RFC1097.
Bubbl.us, a fun web2.0 mind mapping tool that shows some UI promise (thanks John).
An interesting take on the 3 kinds of software developers. If you’re ever asked, “what kind of developer am I?”, be wary if they’re a perpetually intermediate developer (they won’t like the answer). Purgatorio is no fun.