Alan Dix on “Language and Action: sequential associative parsing”

Alan Dix on the difference between how humans parse language, and how machines do so — and associated impacts on interaction. Interesting stuff, as ever.

Strength in weakness: judo design

The bin purge continues: Strength in weakness: judo design. Alan’s a clever and interesting fellow.

Years ago I also read about a programme to strengthen bridges as lorries got heavier. The old arch bridges had an infill of loose rubble, so the engineers simply replaced this with concrete. In a short time the bridges began to fall down. When analysed more deeply the reason become clear. When an area of the loose infill looses strength, it gives a little, so the strain on it is relieved and the areas around take the strain instead. However, the concrete is unyielding and instead the weakest point takes more and more strain until eventually cracks form and the bridge collapses. Twisted ropes work on the same principle.

Interaction design and programming: “best to market beats first to market”

Here are some very interesting notes on a keynote by Alan Cooper (of “The Inmates Are Running The Asylum” fame) at the recent IxDA Interaction08 conference.

Quote dump:

I don’t think we ought to be emphasizing innovation; in our industry, it will happen. Innovation means invention, but in the minds of business people, I believe it has come to mean “success”. But innovation doesn’t mean success (holds up that original clunky MP3 player that failed–”this was innovative, but was never successful”).

Business people don’t often do best-to-market because they don’t know how–we need to show them. Many have industrial age skills. They view software as mass production. Best-to-market only happens through craftsmanship. It’s all about quality–it’s all about getting it right, not to get it fast. It’s measured by quality, not speed. It’s a pure measurement, and a delightful one. Craftsmen do it over and over again until they get it right. In their training, they building things over and over so they get the experience they need to get it right.

Programming is not an industrial activity. It is a unique activity that has a lot in common with pre-industrial craft, and yet has a lot of unique characteristics that I call “post-industrial craft”. Programs are made one at a time, and each piece is different. It’s not scalable and it’s not formulaic. There’s no magic bullet in pre-industrial craft. We can’t say we’re all going agile and everything will come up roses. It’s incredibly nuanced and takes years of study to get right.

Programmers are draftsmen. However, they are different than pre-industrial workers. They are self-directed and know better than managers what to do. They respect intelligence, not authority. You can’t tell them what to do, you can only coerce them. Their satisfaction comes from the quality of their work.

But there are no economies of scale is software production, all you can do is reduce the quality that emerges. There are simply no good management tools for software construction. There are no appropriate tools for accounting for the creation of software. There’s no way to track any given feature, functionality, or behavior to the amount of money coming.

… and it goes on from there to say (less clearly, alas) what interaction designers can bring to this conflicted situation. Food for thought.

Don Norman has the seventh sense: he sees buffers everywhere

Waiting: A Necessary Part of Life — Don Norman on buffers. I think this has possibly the best first sentence of anything I’ve ever read, ever:

Just as dirt collects in crevices, buffers collect in the interfaces between systems.

I’m impressed by the breadth of this. I like the idea that “interface” is a general and fundamental enough concept that the problems we see, and the mental models/tools for thinking about/solving them are essentially similar whether we’re talking about device usability, protocol design, or soft squidgy stuff involving only meat entities.

Problems arise at interface, any interface, be it person and machine, person and person, or organizational unit and organizational unit. Any place where two different entities interact is an interface, and this is where confusions arise, where conflicting assumptions are born and nourished, where synchronization difficulties proliferate as queues form and mismatched entities struggle to engage.

To the analyst, such as me, interfaces are where the fun lies. Interfaces between people, people and machines, machines and machines, people and organizations. Anytime one system or set of activities abuts another, there must be an interface. Interfaces are where problems arise, where miscommunications and conflicting assumptions collide. Mismatched anything: schedules, commuinication protocols, cultures, conventions, impedances, coding schemes, nomenclature, procedures. it is a designer’s heaven and the practitioners hell. And it is where I prefer to be.

Also worth a read: A Fetish for Numbers: Hospital Care.

hpDJ: an automated DJ with floorshow feedback

Here’s a little gem for anyone else out there interested in dance music, DJ’ing, and computers: hpDJ: An automated DJ with floorshow feedback. Basically, it describes a system which allows one to define a “qualitative tempo trajectory” for a DJ set, then chooses tracks to fit the trajectory (the words “partial ordering” occur at this point, but that’s as close as we get to TCS), and automatically beatmatches/timestretches/mixes the tracks accordingly. Towards the end it considers the performance and “collaborative consumption as composition” possibilities, with genetic algorithms and the like, but the bit which impressed me the most was on the mixing, where the opportunities afforded by doing the job in software are recognised and made the most of.

However, because hpDJ operates in the pure software realm of digital signal processing (DSP), it is possible to create as many sweepable band-pass/cut filters as is desired for any particular cross-fade from one track to another. As with traditional hardware mixers, each DSP filter can have variables that control the degree of attenuation or boost, and its center-frequency. In addition to this, the shape of the DSP filter’s transfer function (e.g. the nature and rate of the fall-off or boost) and its bandwidth can also be under automatic control. Recording studios do have filters with these added controls, but such filters (known as a Parametric EQ) are too expensive to be built into each channel of professional mixing desks on a many-per-channel basis.

Thus, it becomes possible to specify hpDJ so that it analyses the audio frequency-time spectrogram for the incoming and outgoing tracks in the cross-fade, and uses a number of heuristics to determine how many DSP Parametric EQ filters are necessary and what their settings should be. This can be used to, for instance, selectively suppress the frequencies for a synthesizer melody-line in one track, attempting to make that melody “disappear” while keeping the bass-guitar and percussion elements in place during the cross-fade. By employing simple heuristics for detecting when one component of one track “clashes” with another component of the other track, such aesthetically unpleasant clashes (which may remain despite perfect beat-matching) could be automatically eliminated by hpDJ.

Note that this is all happening automatically (except maybe setting some initial loose parameters at the start) – very impressive.

Although this was published only in 2005 (I spotted it in this book on this man‘s desk), much of this was apparently done around 2000 or so. Thus, I wonder what goodies they’re cooking up in Bristol even as I type. Dave Cliff’s “inventor profile” page doesn’t really bring us up to speed, I feel… Aha! He’s moved to Southhampton.

Finally, I note that this is the first paper I’ve ever seen which opens with a Sisters of Mercy quote. Rock on.

“Intuitive” means “familiar”

Jef Raskin (12 years ago): “Intuitive” means “familiar” [raganwald]

His story of the Finnish teacher doesn’t surprise me. In my first job (ie in about 1995 or so) a colleague reported showing one of the admin girls a mouse (upon upgrading her computer from DOS to Windows), and her doing exactly the same thing: lifting the mouse up and waving it around in the air. You’d have a hard time reproducing this result now, I guess, because even someone who’s never used a mouse (think: your gran) has probably seen them used on TV, for example.

Click survey

Click survey – cool.

Searching for symbols via Google is hard

Hokay. Google is without a doubt the single most useful and successful tool ont’Internet, a marvellous success story and something most of us would miss deeply until the happy day it’s superseded by something Even Better. It’s fast, it’s got a nice simple interface, and most of the time it “just works” and gives you what you want.

Unfortunately, some of the time, it really doesn’t “just work” (for me, at least) and in an apparently non-fixable way. I usually hit this when I’m doing programming-related searches.

Read the rest of this entry »

wmii FreeBSD and xmms plugins (in ruby)

A few days ago I started using wmii, with Mauricio Fernandez’ ruby scripting magic, and oh it’s fun.

The status bar monitors that come in Mauricio’s code don’t work for me, however, because I’m running FreeBSD not Linux, and things like uptime and battery status get report differently. Also, there wasn’t any xmms control/monitoring. I have now fixed both of these problems, and invite others to partake of the goodness.

So: wmii-freebsd@gimbo.org.uk.rb – a ruby/wmii plugin defining status bar monitors which work under FreeBSD.

And: wmii-xmms@gimbo.org.uk.rb – a ruby/wmii plugin defining an xmms status bar monitor, and some key bindings for simple control of xmms (play/pause; next; previous; forward 5 secs; back 5 secs; toggle shuffle; er, that’s it).

Status bar screenshot:

ruby wmii freebsd/xmms status bar monitors

From left to right: xmms monitor displaying track name, time elapsed, shuffle status (“>” is normal, “@” is shuffle); current master volume; the “-N-” is a standard plugin so I say nothing here; temperature and CPU speed; load averages; uptime (h:mm); battery status and time remaining; date/time.

Comments, suggestions, bugfixes, criticisms of my appalling ruby code all welcome.

wmii is better than ion

In August 2002, I started using ion as my window manager (and last year, upgraded to ion3). Today, I stopped using it.

ion beats the crap out of conventional window managers: placing and resizing windows is so tedious (not to mention 20th century ;-) ). It’s lightweight, maximises screen real estate, and has great keyboard support, all of which appeal to me. Until today, I’d have recommended it to anybody.

I did, however, have the following problems with ion: 1) Lua: yick and oh my god, yuck. What an awful language, but you’re stuck with it for configuration/control. 2) The documentation: there, but not very helpful. Too referencey, too automatically produced. 3) Tuomo (the author): sorry, but that is one surly gringo, and heaven help you if you disagree with him. None of these are killers (except maybe lua), but they’re the reasons I’m happy to leave ion behind.

Thus, introducing wmii, which is superficially similar to ion but has a number of features which really set it apart. The most important is its Plan9-inspired approach to control, which allows any language for configuration. You know what’s coming next? Ah yes, we can configure & control wmii using ruby [via the immortal _why].

There are other good reasons to use wmii, but that one is probably sufficient for me – and it speaks of a thoughtful and open design which can only bode well. The wmii codebase really is tiny, by the way – it compiled in no time at all. I started using it this afternoon and I don’t see any reason to stop: it’s easy enough to pick up, although I’ll be tweaking the config for the next week or so. Using Ruby – w00t!

Windows Vista shaping up to be a user _and_ security nightmare!

Microsoft Vista’s Endless Security Warnings

The feature is called User Account Protection (UAP) and, as you might expect, it prevents even administrative users from performing potentially dangerous tasks without first providing security credentials, thus ensuring that the user understands what they’re doing before making a critical mistake. It sounds like a good system. But this is Microsoft, we’re talking about here. They completely botched UAP.

w00t.

“Always on” password autocompletion in Firefox

A handy feature in most web browsers is the ability to remember usernames and passwords for sites you visit often, so you don’t have to keep typing them in – the browser just fills it in for you. Some sites don’t like you doing this, however. If the input tag of the password field contains the attribute autocomplete=”off”, that’s an instruction to the browser not to allow this handy feature for that field, so you have to type in the password by hand every time.

This is arguably quite a good idea, and reduces the chance that a user in an internet cafe will thoughtlessly click “remember” and partially open up their bank account to the next customer. There are some interesting thoughts on the topic here, but that’s not what this post is about.

What this post is about: the intranet at work is one of these security-minded sites that disables autocomplete, which is really really annoying (they also have a brain-dead policy on password expiration, but that’s another story). At certain times of year I have to use this site a lot – it forgets you’re logged in between sessions, and I find myself repeatedly typing the password.

Well, no more. Have I moved to Opera, which ignores autocomplete=”off” altogether? No, of course not – I’ve found a Firefox extension which does the job for me.

Introducing ketjap, which can apparently do a number of quite funky things but which in particular can rewrite tag attributes arbitrarily using a set of prevalue/postvalue rules. So I defined I rule which acts on input tags, on their autocomplete attribute, turning a prevalue of off into a postvalue of on. Et viola, it works. The next time I visited our intranet and entered my username/password, firefox offered to remember the password for me, and I gratefully agreed to its welcome proposal.

Actually, I was a little confused at first, because I looked at the page source, expecting ketjap to have changed that, but that’s not what happens – it seems it alters firefox’s interpretation of the source on the fly, leaving the source untouched. Neato in extremis.

Now I invite members of the public to point out the page in Firefox’s preferences where I could have just ticked a box to make this happen. ;-)

Gimbo tries Evolution and is put off by silent failure

I use mutt for email, but I’ve been toying with the idea of moving to Evolution. I can work very quickly in mutt, but I’ve been wondering about going graphical for a while, and I’ve heard good things about Evolution recently so I thought I’d give it a try.

Well, it’s OK, but I’m not completely convinced. There are a number of little things, but here’s what really bugs me…

I have a local spool mailbox with 74 messages marked for deletion, and, well, they’re just sitting there, marked but undeleted. How do I get rid of them? The “File->Empty Trash” menu item works in other mailboxes (eg an IMAP one), but these guys are refusing to go. This would be merely mildly annoying were it not for the thing that really worries me: it fails silently. I click “Empty Trash”, and nothing happens – no error dialog, no status message, nothing written to stdout.

Another one: I select “Help->Contents” to get some help and… nothing happens. No help, no error dialog, nothing to stderr, just another silent failure. This is probably, I guess, because I’m not actually running gnome. But if it’s not going to work, it shouldn’t be on offer. We can do better than this, people.

Silent failure is always a really bad sign because it makes debugging (and thus fixing) so much harder. The fundamental reason why I use Unix rather than Windows is that it puts me in control, and when things go wrong, I can usually track down the errors and fix them. You have to be choosy about the software you use, because a hell of a lot is crap and doesn’t actually help you, but there’s enough which does it properly to make the effort worthwhile.

Unfortunately it’s starting to look like Evolution isn’t one of them, which really surprises me given the people I’ve heard positive testimony from. :(

So, I might perseverse, or I might give GNUMail.app a try, or I might just stick with mutt because it does rather rock. Any other suggestions?

Oh yeah: another reason I like the look of Evolution is for its calendering. I have yet to find a decent calendaring app, which just astounds me. Sunbird looked half decent for a while but then switched from nice open iCalendar format to some stupid binary format, and (here’s the clincher) no longer even runs on my system. It doesn’t start, and it does so silently.

Why is so much software so bad?

Update, a few minutes later: aha, it’s “Folder->Expunge” to clear the deleted messages. I wasn’t seeing failure, I was just asking it to do the wrong thing. Still, this does raise the question: why does “File->Empty Trash” work in the other mailbox? And the help still fails silently. Pah. ;-)

Why the Sony Ericsson w800i sucks

GOD DAMN it!

I used to own a Sony Ericsson k700i and it was a great little phone except that it really sucked in that it only had capacity for 100 text messages. Never mind it had 64Mb or so for photos and music – 100 short messages is all you’re getting, buckaroo!

Well, I upgraded recently to the super shiny w800i – this is the Walkman branded thing, and it’s a very very nice phone. Great interface, great camera, records sound, blah, blah, blah. Oh yeah, and it’s got a little stick in the side which gives it a memory of 512Mb. Half a gigabyte. Double the memory of the laptop I’m typing on right now, in fact.

The bastard thing has just cheerfully told me “Text memory over 95% full – delete some messages now?” No you fucker! I don’t want to delete some messages now!!! Your memory is empty you stupid piece of shit!

Apologies for the swearing but god damn it I’m angry. I mean, I knew the salesman with the Toni and Guy haircut had no fucking clue what he was talking about when he said it didn’t have this text/sms memory limit problem, but all the same, I really thought they’d have sorted this stupid stupid bug out by now. There is absolutely no excuse for this kind of shoddy programming in a product this advanced.

GaaaaaaaaAAAAAAAAAAHHHHHHHHHHHHHHHHHHH!!!

/me goes and kills someone