Having got the first working version of the Picky Picky Game, I have naturally now pulled it apart again. I decided that now it is in a state where it makes sense to try to package up a version for Adrian to try installing, I better think about getting the module and package names right, since it will be harder to change them later.

I have reorganized my Python classes in to their own package pdc (designed to prevent name collisions with WWW-oriented packages by other people). I also changed some of the file names—so that ‘import httputils’ becomes ‘from pdc import www’.

There is now a proper unit-test suite for the www module (which has functions like urlDecode, urlResolve, and xmlencode). This is easier to do for this odule than the others, which tend to involve creating scads of HTML text which will be hard to check for errors. For the URL-manipulating functions, the unit tests turned out to be invaluable—there are a lot of corner cases that I only sorted out because I had tests for all of them.

Up until today my RSS feed has had one link per day, even though there might be extra (supplementary) articles on that day. If you look at the HTML page, the first article of the day gets the big heading with the date and suchlike, and the subsequent articlettes get smaller headings. Up until now the smaller articles were omitted from the RSS.

I have now tweaked the program that generates it so that these smaller headings also get links in the RSS data. At the moment they link to their parent item; this will change once I add HTML anchors to the headings so that they can link direct to those. Sorry for any inconvenience.

Last night I hacked the code that generates the archive web pages for my weblog (or whatever it is this site is) so that the headings of the supplementary articles also have link anchors. In the process I broke my RSS feed slightly—it got confused by the id tags. (while remaining technically valid according to the RSS validator). This has now been fixed, so that (a) all articles have an HTML link target and (b) all articles are linked to from the RSS feed.

Small objects of desire

I’have had a Palm 3 for some time (creaky old 2-MB model). I used to say that when I upgraded it, I wanted that to be next upgrade for my phone, as well. That product now exists in the form of the Handspring Treo, a compact palmtop with a phone built in, and Jo has one. Sadly Handspring don’t consider Grafitti an asset in a device aimed at non-Palm-users, so the 180g has already been air-brushed out of history in favour of its keyboard-sporting cousin. The problem is the Treo does cost rather a lot more than, say, Adrian’s entry-level Sony Clié, which is similarly compact and has a high-res screen. I really don’t know which I would prefer as the successor to my clunky old Palm 3.

Actually the fact is I don’t need to replace my disfunctional old Palm 3; I frankly don’t use very much, not the way Jo and Jeremy use theirs. Its main failing is not its memory size but its size—justa little bit bigger than pocket sized (unlike both the Clié and the Treo). I have admitedly upgraded my Alcatel Max DB phone (the same model that caused mpt so much confusion) for its smaller successor the 311, but that is still one of Virgin’s cheapest handsets and I only rarely use the thing. I have absolutely no need to upgrade either of them. Annoyingly.

Spent another dollop of time on the Picky Picky Game, moving code in to my www module. This is a slow process because I have decided that this module is going to have a complete set of unit tests (wwwtests.py). Writing tests after the fact can be a little depressing—it keeps digging up bugs (i.e., mistakes) you made when writing the function in the first place. The Extreme Programming gurus say this is why writing the tests first is psychologically important (as well as being important to their methodology) because you end the day successfully passing tests that failed earlier in the day, rather than not depressingly writing tests that either never get triggered or which show up flaws in your precious code.

Anyway, the upshot of today’s not particularly intensive work is that it does more or less what it did last week, but is maybe a bit more reliable than it was before.

In the process of getting the CGI scripts to work again after reorganizing the libraries, I have further refactored them my moving the request-processing code in to the Picky Picky Game library, leaving the CGI script to contain just a few configuration parameters and an invocation of the library routine. This style is not unlike that used by Joe Gregorio in his Well-Formed Web experiment.

There are various advantages to moving most of the code out of the CGIs themsevles—better information hiding, for example (which can be considered a security feature as well as good programming practice). It also allows the bulk of the code to be stored in byte-compiled form on disc, which might make processing requests a little faster.

I have created an experimental, pre-alpha, test-of-concept, categorically not finished or complete package that is a snapshot of the Picky Picky Game development so far (picky-0.1.tgz, picky01.zip). An enthusiastic web master with a Python-compatible server should be able to install this and make it go. What’s more, if this version can be installed, then future versions should also be installable (since I don’t intend to require any additional features). But don’t hold me to that... Your mileage may vary.

There is one important unresolved issue, the ‘EAGAIN’ problem, which I decided to put to one side for now. I hope to use this snapshot to test the problem in different environments.

For some reason there are a lot of comic-book adaptations of H.  G. Well’s War of the World:

Alan Moore and Kevin O’Neill, League of Extraordinary Gentlemen II
A retelling of Wells’s story in a Victorian-era world where every fantasy tale (set on Mars or otherwise) is true simultaneously. Incredibly baroque tripods.
Ian Edginton and D’Israeli D’Emon D’raftsman, ‘Scarlet Traces’, Judge Dredd Megazine issues 4.16 to 4.18 (September to November 2002).
Set a decade after the War of the Worlds, London has been rebuilt with Martian technology. The resulting hybrid tech has to be seen to be believed. The web site linked to above has all the DVD-style extras, including production sketches, deleted scenes, and making-of documentary. Since the strip was originally produced for on-line presentation, some of the cut scenes are animated!
Alan Davis and Mark Farmer, Killraven
The set-up is once again a decade or so after the Martian invasion, except this time the Martians won and humanity has been reduced to scavenging in the ruins and performing in the gladiator pits. Cue an escape of scantily-clad gladiator slaves. Some message-boards state this is a revival of an old Marvel character (and the name does sound familiar), but I cannot find an official Alan Davis, Mark Farmer, or Killraven web-site to link to.

I have a nagging feeling that there was another one I was going to put in this list, but if so its name escapes me for the moment... :-)

Yesterday (the 23rd) we made a point of waiting for the post to arrive before going in to work, but to no avail. When we returned home we found yet another of those cards telling us a parcel was waiting for us at the depot in Sandy Lane West. Since I was taking a day’s holiday on Christmas Eve, I set off to pick up the parcel.

Cycling to the depot would be straightforward enough if it had occurred to anyone to add a few directional signs along the route. You start by cycling up Cowley Road past Temple Cowley. This is a steeper climb than I remembered, and I soon got very hot. The intersection at Temple Cowley is a little intimidating—in order to get to the off-road cycle lane you have to move in to the middle lane (since the left lane is left-turn-only). The off-road path takes you to the Ring Road roundabout, and crossing the road on foot takes you to the cycle+dog path that parallels the Ring Road. This is an ideal shared cycle path: broad, flat, and only sparsely populated with pedestrians. The first left would be Tesco’s megamart. Skipping that you come to a confusing dip-under-the-road junction with something labelled Barns Road. You need to go up on to this main road and thereby cross the Ring Road. Another off-road cycle path now appears, but ignore it; it is leading you away from a mini-roundabout which you want to use to turn right on to Sandy Lane West. The home stretch! The trick here is to not look out for the Royal Mail Consignia sign, because all you will find at the Reception window there is a hand-written sign telling you to go back two places to the Nuffield Industrial Estate. Once you go down there the Enquiries office is reasonably well signposted. Annoyingly there is nowhere to park a bicycle. (This is Oxford, after all!)

Even more annoyingly, there was also a piece of paper in the window saying they were closing the office an hour an a half early today. So the journey was all for nothing.

Could they have prevented this? Yes, by telling me the modified office hours on the card they stuck through my letter box. This card is completely generic, probably printed in the millions at some central printers. Too bad they don’t produce a local version for each Post Town so they can have the address printed on them (we have received these cards with no address on at all in the past). Too bad they don’t have a special Xmas Season version of the card giving their reduced opening times. Given that December must account for a disproportionately large fraction of displaced domestic parcels (as opposed to parcels for business addresses), this would seem a logical measure to me.

On the other hand, is it worth fucking over people like me for the sake of a measly hour and a half extra holiday? Surely that office needs at most two people present (one customer-facing, one fetching parcels), so paying them enormous overtime would not break the bank, right?

My Alleged Tarot 2002 project has been stuck with an ersatz dealer for far too long (since August, in fact). I have now added to the JavaScript used for the dealer so it takes a question and converts that to a seed number, rather than requiring the querent to supply their own. Entering the question corresponds to the shuffling of the deck that you do in a tarot deal in real life.

Other Months

Article Archive by Month