Posts from March 2004.

Animated images in the Zen Garden

Ross Shaull’s Zen Garden design has a really, really nice touch: the animated images as the page loads. That’s fantastic. I wish I could think of a reason to use it, now.

Why Java annoys me

Put better than I could have
“You walk into Javahut, and ask to sit down. “I’m sorry,” says the person at the door. I’m not actually the hostess, I’m a Factory class that can give you a hostess if you tell me what type of seat you want.” You say you want a non-smoking seat, and the person calls over a NonSmokingSeatHostess. The hostess takes you to your seat, and asks if you’ll want breakfast, lunch, or dinner. You say lunch, and she beckons a LunchWaitress. The LunchWaitress takes your order, brings over your food, but there’s no plates to put it on because you forgot to get a CutleryFactory and invoke getPlates, so the Waitress throws a null pointer exception and you get thrown out of the place.”
As James Turner says later in the same article, “Java is a great language being destroyed by Rampaging Computer Science“. I concur absolutely. My Open University courses require Java coding, and it drives me nuts; I long for the clean simplicity of Python.

On change

How the Mac hath changed.
“One of the most effective ways to steal back precious time—and reduce the likelihood of repetitive strain injuries—is to stop reaching for your mouse. All that clicking, dragging, and scrolling can seriously add up over the course of a day—time better spent knocking back lattes at the coffee shop.”
—MacWorld, Panther Secrets Declassified

“We’ve done a cool $50 million of R & D on the Apple Human Interface. We discovered, among other things, two pertinent facts

  • Test subjects consistently report that keyboarding is faster than mousing.
  • The stopwatch consistently proves mousing is faster than keyboarding.

This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster.
People new to the mouse find the process of acquiring it every time they want to do anything other than type to be incredibly time-wasting. And therein lies the very advantage of the mouse: it is boring to find it because the two-second search does not require high-level cognitive engagement.”
—Bruce Tognazzini, Keyboard vs. The Mouse, pt 1

OK, OK, I’m being completely unfair, and MacWorld journalists aren’t the people defining the HIG at Apple at all. I know this. And maybe Apple are right and Tog is wrong: is OS X more popular than previous incarnations? It seems that way from here, but that’s because I hang about with technical people, a lot of whom have turned to OS X. Don’t know whether other groups of people have turned to it, or even turned away, and I’m bloody sure that most of the figures on this topic will be biased in one way or another.
I’m still not buying a Mac, though. :)

An icon passes on

Sir Peter Ustinov has died. Not only a great actor, raconteur, and all-round Good Chap, but a man who shook my hand in his capacity as Chancellor of the University of Durham. As Tom wonders, who will replace him?

Repurposing code

Gina Trapani built the ly detector, a bookmarklet which highlights adverbs on a page, basing the highlighting code on my searchhi and some work by Paul Ford. Paul then reborrowed the code for the Passivator, which flags adverbs and passive verbs. Seeing something I built get used in a totally different context like this is dead cool.

—–

SpamBayes and Mutt

So I got 400 spams the other day. This finally convinced me that my “just delete them, it doesn’t take long” policy doesn’t work. Something better is required. Now, I use SpamBayes at work (Windows shop, so I like the Outlook plugin), and thought I’d use it at home too. I use mutt as my mail client. So, here’s what I’ve done so far:
Installed procmail: apt-get install procmail
Got spambayes: download and unpack the archive into $HOME/src/spambayes
Created a sb_filter shell script that invokes SpamBayes’ filter:

#!/bin/bash
PYTHONPATH=$HOME/src/spambayes/spambayes $HOME/src/spambayes/spambayes/scripts/sb_filter.py -d $HOME/.hammie.db $*

Told procmail to filter my mail through SpamBayes, by putting in $HOME/.procmailrc:

PYTHONPATH=$HOME/src/spambayes/spambayes
:0fw:hamlock
| $HOME/src/spambayes/spambayes/scripts/sb_filter.py -d $HOME/.hammie.db

Set up keybindings for mutt: I use “s” to save the current message into a folder, and I never save spam into a folder, so I want to train any saved message as ham (non-spam). I bind “S” to mean “this is spam, so train it as spam and then delete it“. In .muttrc:

## Lower case s saves the message after training it as ham.

## Upper-case S deletes the message after training it as spam.

macro index s "|sb_filter <del>g -f > /dev/null\n<save</del>message>"
macro pager s "|sb_filter <del>g -f > /dev/null\n<save</del>message>"
color index red black "~h 'X-Spambayes-Disposition: spam' ~F"

macro index S "<delete-message>|sb_filter -s -f > /dev/null\n"
macro pager S "<delete-message>|sb_filter -s -f > /dev/null\n"
  1. Stop Mutt saying "Press any key to continue" after training set wait_key=no

And that’s it. I still have to delete all my spam, but now SpamBayes is learning what spam is. Once I’ve been doing this for a little while, I’ll alter my .procmailrc (as dictated on the SpamBayes site) to automatically file spam in a “spam” folder.

—–

How to write an application?

I need to write an application. But what should I do it in?

  • Python/PyGTK: Will be pretty much Linux-specific (yes, I know you can run Gtk apps on Windows, but it’s not really the way). Easy to design the application layout in Glade. Get all that ROX goodness, too.
  • XUL: Cross-platform. I get to build it in JavaScript, which is my other language of choice along with Python. Requires Mozilla (or possibly a free-standing GRE, if one exists?) I don’t know a lot about it.
  • Browser as Desktop UI: start a web server and a browser at the same time and serve web pages. I’m more experienced with web apps than desktop apps. Can get a pretty rich interface with proper DHTML. I’d have to implement a lot of it myself, though, and make sure it was cross-browser. Would be cross-platform (the server would be Quixote with embedded Medusa, which is nicely Python). I lose interaction with the desktop, though; you can’t drag-and-drop into a browser.
  • Python/WxWindows Cross-platform, and a proper desktop app (like Gtk) but I’ll lose the ROXness.
    Those are the ways I can write “desktop” apps, I think. (Yes, I know there are others. I don’t know them as well, or I don’t like them as much (if I use a widget set I want Gtk, not Qt, for example). Which of these would be best, and why?

Then I get back to work

‘Every time I design a site in CSS I hit the same wall where the logic works, the CSS and XHTML validate, and the display is perfect except in Browser X, where it is so bad I need to start over. Every time I hit that wall I curse Browser X and myself and the client and the W3C and Ben and J-Lo, just because.
Then I get back to work.

The cost of coffee

Tom rants about Costa Coffee. Hysterically funny, particularly “You give your order again, this time to a third member of staff who was trained this morning how to use the till.“. This is why I don’t buy coffee from shops, particularly shops transplanted from America.
Well, OK, the reason that I don’t buy coffee from shops is that I loathe the stuff. But I don’t buy tea from shops either.

Aq, sack, and back whack

Lugradio episode 3 is out. Go get it!

Redesigning thoughts

Got bored of the old design, did a new one. The old one’s still there; just switch stylesheets in your browser.
I’m not totally happy with the new one, for a couple of technical reasons and one artistic reason. However, there are some nice little tricks in it, I think.
Nice trick no. 1 is that the date, top right of the front page, is the date of the most recent post. It’s absolutely positioned up there, and that date is identified with the CSS selector div#blog h2.date:first-child. Naturally, this will only work in browsers that support such selectors.
Nice trick no. 2 is that the most recent post looks like a lead story, which is to say that it’s bigger than the others. Again, just standard use of CSS selectors, in this case div#blog h2.date:first-child + div.item (which means “selects any div element with a class attribute that contains the word item that immediately follows a h2 element with a class attribute that contains the word date and that is a first child that is a descendant of a div element with an id attribute that equals blog“, or in plainer (but less rigorous) English, “the post item that immediately follows the first date displayed in the weblog“, i.e., the first post). Blah blah blah browsers that support such selectors.
I am also, I confess it, childishly pleased at how different it is from the last one, given that I’ve just changed the CSS. Yeah, yeah, I know that this is the point, and I know the Zen garden demonstrates this every day and a lot better than I do, but it’s been some time since I’ve had two successive designs that were very different and where I was pretty pleased with both. Plus, Plato looks cool up there at the top, huh?
Stuff I’m not happy with:
You can’t make stuff really take on the irregular column look of a newspaper, because you can’t allow arbitrary lengths on the columns and still have a space-filling design. That’s why they’re all fixed length. Boo hiss to that, I say, but there is no way around it. I could, I suppose, work out one single space-filling design and then absolutely position stuff to get it, but that wouldn’t be a lot better than this and would be a shitload more work with a ruler, so I haven’t done that. Fixed-length columns aren’t good because they cut off longer posts, obviously, as well as making the design too regular (two rows of stories, rather than them all fitting in randomly).
There’s no way, as far as I can tell, using floats, to have any story at all appear on the left of the first story. So it has to be the leftmost. The design fudges this a bit by putting the metadata sidebar on the left so it looks a bit like a story, but that’s imperfect and fudgy.
You can’t apply float and position:relative to a thing to get it to be floated but then get treated as absolutely positioned for the purposes of absolutely positioning children relative to it. There is a p.comments paragraph at the bottom of every post (so on most posts it would be invisible because posts are longer than the allocated length, as above). I wanted it to appear below the post title but above the post text, like a byline. But you can’t do that; you can’t say “move it up by the length of the post” because you don’t know how long the post is. My intention was to put position:relative on the div containing a post, and then say “position:absolute; top:height-of-title; left:0” on p.comments, which would position it height-of-title px below the top of its nearest absolutely-positioned ancestor (which would be the post itself, because of the position:relative) and lo, that would look like a byline. But it doesn’t work; Moz doesn’t seem to recognise it as absolutely positioned, and so p.comments styled like that appears at the top of the page instead of the top of the post it’s in. Can’t think of a way of doing this without JavaScript, which is cheating (although I might do it anyway).
The “Regular Features” bit looks a bit pants. I wish I had one ounce of artistic talent.
I can’t have different columns be different widths without hardcoding the widths, which is dead fudgy again.
You can’t format a post into newspaper columns without doing something like the IHT’s JavaScript super-complex thing or finding a browser which supports the CSS3 multicol spec (none, as far as I can tell), so, dammit, I have to just live without it.
I can’t think of a way of putting a “More >>” thing at the bottom of posts if they overflow either, without using JS (which, again, I am thinking of doing).
I can see how to fix most of my problems (not the one about having the artistic ability of a glass hammer) with JS, I’m just not sure whether I want a huge blizzard of JS to run when someone loads the front page…
Addendum: I keep doing redesigns, and then you look back at old posts which say “done a new design!” and there’s no clue what that design was. So, new policy: all new designs get a screenshot stored away so I can marvel at them over time. This design’s screenshot, and the previous one.

Gnome ModemLights applet in Debian

I’ve just been setting up the Gnome modemlights applet on a Debian box.
To make it work, you need to set the preferences as follows:
Device: ppp0
Lock file: /var/run/ppp0.pid
Disconnection command: poff -a
and make sure that /dev/modem exists and is a link to your modem device.

Get out of jail (not free any more)

Our estimable Home Secretary has come up with something so unbelievable that I am left speechless. People who are wrongfully imprisoned will be charged for the food and lodgings they used while in prison. This is so totally fucking outrageous that I can hardly believe it’s even been suggested. It’s not bad enough that you get locked up for something you didn’t do, now you have to pay the government for the privilege? God almighty!

SimpleCDR-X

I was asked to make an audio CD out of MP3s. Now, I’ve never tried that. So, I thought I’d see what I had installed: “apropos record” showed up ’simplecdrxA CD Recording and Ripping frontend‘. So, I gave it a try. The interface isn’t any great shakes, but I clicked the “Add OGG/MP3/WAV” button, added some MP3s, and then hit “Burn“, and it did it. That’s it. I didn’t even have to tell it where my CD burner was or anything. It just worked. This is how software is meant to be. Big, big kudos to John Tobin for writing it.
He also makes some allusions to it using Glade, so I might, if I get time, redo the UI a bit and send it over as a patch.

—–

Dynamic dialup DNS services

There are plenty of dynamic DNS services like DynDNS around. Anyone got any recommendations as to which one would be best for a dialup Linux GNOME user? So my dad can have a constant name that points to his machine on every dialup, and I can ssh over without having to talk him through running /sbin/ifconfig in a terminal window. (“That’s sbin. No, sbin. S for sugar, b for…right. Sbin.“)

Get thinner with your iPod

David Birch is suggesting that we use the human body’s waste calorie output to power electronic devices. I think this is a stellar idea; I can get my body to generate calories to run my Zaurus, so it’s always charged, and I’ll get thin! Anyone see any problems with this? What’s that? OK, you at the back in the mirror shades?
The human body generates more bioelectricity than a 120 volt battery and over 25,000 BTUs of body heat.
Ah, right. We’ll take that under advisement.

Usability testing

Seth Nickell outlines why usability testing is not the be-all and end-all of usability. This is fascinating. I’d never really thought of this sort of thing before—that testing a web application has entirely different requirements from testing a desktop application, because websites have “learnability“, how much they encourage users who have never used the system before, as a much more influential criterion than do desktop applications. HCI aspects of the web are not the same as the desktop. I need to remember this.

—–

Mail client idea

Everyone in my mail client’s address book should get their own saved-mail folder, so mail from them goes into that folder by default (either on delivery or after I’ve read it). Can I do this in mutt? Can I do it in GUI clients? Is this a VFolder sort of job?

Over-zealous copy-editing

The LA Times ran a review of the opera Die Frau Ohne Schatten, wherein Mark Swed, the reviewer, referred to it as “an incomparably glorious and goofy pro-life paean“. And someone changed pro-life to anti-abortion. Oops! Gotta watch out for those global search-and-replaces, dude. LAObserved has more—I can’t help but wonder what Bill Walsh would make of this.

—–

Searchhi and Chinese

Someone mailed me to ask if searchhi could support Chinese, since apparently it doesn’t. I had to answer that I don’t know what I’d need to do to change that; is it some kind of Unicode thing? So I’m soliciting help from people: can anyone give me some pointers as to what I’d need to do here?

Desperate spam

Just received a rather, er, hopeful spam:
Your credit card will be billed at $22.95 weekly and free 3 pack of child [removed] CD is shipping to your billing address. To cancel your membership and CD pack please email full credit card details to dnsadmin@[removed].com Ready to enjoy all types of underage [removed]? We have the best selection for every taste! Click the secret link below and have fun…
(censorship done by me to avoid me getting on Google for that sort of search term)
Giving up on fake versions of your bank’s login page and viruses that steal you details and trojans that open your machine for sniffing, are they? “Please email full credit card details“? Is anyone stupid enough to do this?

Mail and news

I read mail, I read mailing lists, and I read Usenet newsgroups. I’m trying to decide on the best way to handle these three disparate entities. I’d like to use GUI clients to do these things while I’m sitting at my machine, but I need them to be accessible through text-mode clients as well, because I spend a lot of time sshed in.
Currently, I do the following:

  • Read mail in mutt. My inbox is the default @/var/mail/aquarius@, which is a Unix mailbox. My saved mail is stored in Unix mailboxes in ~/Mail.
  • Run inn as a news server, with suck to fetch new news to it from my ISP’s news server, and tin to read that news from localhost.
  • Subscribe a different address to mailing lists, and use groupie, an unreleased newstomail gateway, to turn those mailing lists into local inn-based newsgroups. I then tell tin that these local groups are mailing lists, and what the mailing address of each “newsgroup” is, and tin handles sending my responses to the list when I follow up a post in the “newsgroups“.
    The big problem here is that I don’t understand inn. So it breaks. All the time. I haven’t actually been reading any newsgroups for about four months because inn broke and I don’t know how to fix it. So, I want to overhaul all this, and I’m looking for suggestions. I need to move away from inn, and I’d like to move away from groupie as well (since it’s not getting any maintenance, although it’s done fine for the last couple of years (nice one Kam!)).
    Things I could do to solve all this (which are not necessarily mutually exclusive):
    1. Move my mail storage to Maildir, and use a GUI client and mutt to read mail. Poke my local exim installation to deliver into Maildirs rather than mboxes (should be doable with a forward file).
    2. Install leafnode and fetch as a news server. Grab news from my ISP with fetch and feed it to leafnode. Use any GUI news client and tin to read news.
    3. Move my mail to IMAP. Use any GUI mail client that understands IMAP and mutt to read my mail.
    4. Move my mail to Cyrus IMAP, and feed news into it using its news features. Send mailing lists to Cyrus too. This, however, requires an inn installation, so I don’t really want to do it.
    5. Move mailing lists to IMAP (if mail is IMAP). Either implement rules in Exim to deliver mailing lists to different IMAP mailboxes, or rules on the IMAP server to deliver mailing lists to different IMAP mailboxes, or rules in each mail client (both GUI and mutt) to filter mailing lists into different IMAP boxes.
    6. Move mailing lists to leafnode (if using leafnode) using MLGroups.
    7. Use a news2mail service to get all my news as mail. Problem: posting is awkward.
    Essentially, I have two clients (mail and news clients) and three things (newsgroups, mailing lists, mail), and I need to know where to read each. It’s pretty much possible to read them in any combination across the clients (I don’t want to read non-mailing-list mail in a newsreader), but I don’t know how best to do it. It might be nice to use just one client to read both mail and news, but there has to be two: a GUI one and a commandline one.
    I’m open to suggestions on all this stuff. How do you handle this problem? I suspect a lot of people don’t have the GUI/commandline requirement, which makes it a lot easier; you just say “I’ll read it all in Thunderbird“, or something similar.

Image Slicing

Dave Shea’s image slicing technique outlined in the latest ALA is absolutely bloody excellent. I had to read it a couple of times to fully get it (especially the overlapping-blobs bit) but it’s really viciously clever. I wish I could think of an excuse to use it, now!

Commental

I used to get emailed whenever someone posted a comment on my site. But that annoyed the hell out of me, and (a possibly more apposite reason) didn’t work all the time, for reasons I never really understood. But, I like to know when someone has posted a comment, so I can go and look. Now, I do have the list of recent comments at the top of the front page (I can get away with this because I’m not Jason Kottke or Wil Wheaton; I don’t get that many comments), but I don’t actually look at my own site that much. So, what I did was set up an RSS feed of my comments, and then subscribe to it in my aggregator. Now, when someone posts a comment, I get informed! And I don’t have to worry about emails, or configuring my SMTP server right.
Oh, and the recent comments list on the front page? That’s built by a script which parses the recent comments feed. Everything goes around and comes around.

—–

LUGRadio episode 2 recorded

We’ve recorded episode 2 of LUGRadio. It should be available in the next couple of days, once our excellent sound engineer has finished the edit.

—–

LugRadio, episode 2

The second episode of LUGRadio is now available—this time with even more ranting and humorous bullshit. Including a whole segment where I sound like I’m sitting in a metal bin because I had a sock over the microphone (don’t ask). Fear our l33t sound production skillz!
There are also forums in which you can let us know what you thought. We had something like a thousand people download episode one (which is amazingly high, loads more than I was expecting), so if you get listening now, you’ll be able to say “Oh, I was listening to them before they sold out and started doing big stadium tours and burning a million quid like the KLF“. Maybe. But it’s great, anyway. Get stuck in.

What I want from my Linux system

I need to build myself a new system. This one’s feeling the pinch a little; it’s got lots of configuration done that I’m no longer sure about. In my head is a list of stuff that I want my new software to do. I was going to write this list down on a piece of paper, but it occurs to me that I could put it here instead. Expect this list to change over time. This is probably not of interest to you, whoever you are, but I’m happy to hear comment and tell you why I don’t agree with it. :-)

  • All the applications I use as AppDirs, and the ROX Filer to manage them (the underlying libraries might be Debian, though, rather than RoxOS and LibDirs, because they doesn’t exist yet)
  • Patches to GTK to use ROX saveboxes rather than a filepicker
  • Zeroconf networking enabled as default, with Apache and so on declaring services
  • udev managing all my devices, and no static /dev
  • Something like Project Utopia, so when I plug my camera in it starts up my photo management application (whatever that is; I’m not finding anything as good as iPhoto for Linux; digikam is the best so far, but it’s KDE/Qt, and I’d rather be Gtk only (no Gnome, no KDE) if I can)
  • AppDirs available through ZeroInstall—possibly my own ZeroInstall repository which I’ll make available to the world, not that the world will be using it
  • Mail stored in Maildirs, not mboxes, so I can use a GUI mail client when at the console, and mutt when sshed in. It does not seem to be possible to have an inbox mbox at /var/mail/aquarius and mboxes for saved mail at ~/Mail and have a GUI mail client and mutt co-operate over them; the GUI clients steal the mail away and store it in their own structure. IMAP is too slow. So, Maildirs it is.
  • A decent GUI editor (which will probably be NEdit, since it’s good and configurable and scriptable—I just don’t like its Motif nature ‘cos it won’t fit with other stuff). I want something I can script easily and as powerfully as NEdit, is Gtk-based (_not_ Gnome!), already has Python syntax highlighting (and code hinting? might be too much to ask) and isn’t bloody Emacs or Vim. NEdit is top of the tree atm.
  • A working news setup, so I can read newsgroups, and a working mail->news->mail gateway so I can read mailing lists as newsgroups. Alternatively, since I’m not actually reading any newsgroups atm (broken news server, again), a mail client that handles mailing lists properly (threading, etc). I want a nice GUI one as well as mutt, though, so they both have to do this (mutt does, I know). Possibly an NNTP->mail gateway so I can read newsgroups as mailing lists? I am sick of inn breaking, and I don’t understand it to fix it.
  • Mozilla Firefox, working, and with patches so I get ROX saveboxes when saving things, and I can drag stuff from a Mozilla window to a ROX Filer window.

Recommendations

Aquarion invites us to proffer some recommendations and disrecommendations, so:
A movie
Nothing immediate here. I haven’t seen many films lately.
A book
Recommendation: Anything by Colin Dexter; I’m currently revisiting all my Morse books, and I’d forgotten how good they are.
Disrecommendation: The Little Friend, by Donna Tartt. While nothing was going to live up to The Secret History, TLF is incomprehensible pants with which I found it impossible to empathise. A big disappointment.
A musical artist, song, or album
I have also rediscovered the excellence of the first Rage Against The Machine album. Just listening to it brings back all that white-hot rage that I used to feel, and still do feel sometimes, when I think about Big Corporate taking over the world or the government screwing the citizenry. Superb stuff.
No disrecommendations: name your own least favourite music.
A weblogger not on my blogroll
Recommendations: Daniel Davies, over at Crooked Timber. The reason he’s not on my blogroll (well, in my RSS aggregator) is that his weblog is pretty much discontinued and his Crooked Timber posts don’t have a separate RSS feed.
Disrecommendations: there are an awful lot of really popular webloggers that I don’t like at all, but I don’t want to name names; it would just be meaningless abuse on my part.
What I should have for dinner
Spaghetti bolognaise. S‘what I’m having; I’m cooking it now. It’s lovely; my mam’s recipe.
A website
I don’t really read any websites other than weblogs, these days. Things like Debian Weekly News are essentially a weblog.

Standards-compliant government

The Department of Health hve redesigned their website. It’s all CSS-based styling, and they have a writeup on what they did, including a note that it’s based around the DotP CMS built by the office of the e-Envoy. Kudos, the government!

—–

Names to faces

This weekend, Dunstan Orchard opened up his house to five visitors: myself, Jeremy, Jon, Andy, and Richard. So we drank a lot, and ate rather exceptionally well (and who’d have thought you could make a pizza base from shortcrust pastry? I’ll be trying that one) and did weird activities.
For example, what were you doing at 1am on Sunday morning? I bet you weren’t in a field turning your companions into angels. Or at least, if you were, it was of your own choice and I bet that your feet weren’t as cold as ours. And, if that wasn’t cool enough, I got to see the Cerne Abbas Giant again, upon which many predictable remarks were made, and I got to impress bewilder everyone with background knowledge about whether it’s Helith or Hercules or Nodens or Oliver Cromwell or just some guy with a big dick.
I learned many things this weekend. For example, I learned that people who take good photos do so by taking a lot of photos, all the time. I was under the impression that great photographers would just be walking along the street and see something that looked great, and whip out the photo to immortalise it forever on film a big JPEG. Not so! At first, I thought that perhaps great photography had been reduced to the Shakespearian Monkey technique of just taking pictures of everything and throwing away all the crap ones. However, this is also not so: there’s something of both. I wish I had the artistic ability to notice stuff that would look cool; the guys took pictures of gravestones, of cherry blossom, of grass, and I’d never even think to try that. This, I suppose, is why I’m not a very good designer!
I also learned that loads of people have Macs—at least, loads of people who are designers have Macs. Having seen a couple up close and personal this weekend, though, I’m not revising my current opinion, which is that they seem pretty cool and look very pretty but they’re not worth the money and I’ll stick with Linux. I want a nice light laptop to carry around all the time, though.
More learning experiences: the first stage of finding out about stuff is still to Google for it, but the second stage is to IM someone who might know. I’ve got half a dozen people in my IM friends list, so I shall be adding to that—if you run IM stuff and don’t mind being contacted, let me know!
Oh, and I learned about Dunstan’s dog, Poppy, who is very amusingly hyperactive, but also repugnant and malodorous at times; Dunstan doesn’t mind this (being, as he is, anosmic), and about a neat idea for another bit of Javascript weirdness which I shall write as soon as I get a chance.
Great bunch of guys, especially when they look like angels. Thanks, all.