« November 2004 | Main | January 2005 »
Google News: For the want of a colon
I knew things were bad over there, but I hadn't realised quite how bad:

Maybe it's always been the news organisations that have been orchestrating the insurgency, masterminded by John Simpson from his darkened lair inside a hollowed out BBC Television Centre, like that deal in Tomorrow Never Dies where Jonathan Pryce tries to take over the world from the newsroom with nothing but a keypad and some hammy acting. My money had always been on Murdoch, but I guess not.
December 21, 2004 // link // comments (0) // trackback
Meme and my shadow
Why does whether something's true or not matter so little to people, that they'll put so much else above it?
There's a meme that has particular currency right now. It's not terribly important what it is. I'm sure as hell not going to try to refute it, because trying would be an exercise in futility; genuine memes are as vast and unstoppable as the tide. It's actually something very trivial: a clip and/or a transcript of what purports to be a real episode of a British children's television programme that's an exercise in lewd double entendres.
About a month ago a friend sent me a link to a web-page that's one of the meme's main carriers. She was slightly cautious, though - and bless her for that. A paraphrase of what she wrote to me was: 'Have you seen this? Is it true?' I wrote back and explained that, well, a small part is true, but in a crucial sense it isn't. Flash forward to yesterday, and a well-trafficked blog which passed on the very same meme whole, with no such scepticism. A quick web-search revealed that it's already spread across a huge swathe of blogdom, mostly intact, but without the tiniest drop of critical thinking.
I'm not heading towards any great insight here, because I have none, and I have none because I don't know that there's anything to say beyond that meme propagation is just such a fundamental part of who we are as people - as psychologically fundamental as genes are biologically fundamental - and yet there's not much that makes me feel less kinship with others, because I don't grok the urge to blindly propagate. Just don't get it. Truth has scarcely ever mattered as a reason to propagate, and often its absence helps: rumour, superstition, pseudo-science. Yeah, I'll say religion too - or perhaps theism, which isn't quite the same thing - and not ask permission for that.
And yet truth does matter, but in a glibly superficial way. In the case of the kids' TV programme meme, truth is central, because, funny as the text might be out of context, the very heart of the meme is the claim that the programme is/was real, and was broadcast to millions. It confers a jaw-droppingness, a subversiveness, a letting-in-on-the-joke. Otherwise it's just a string of childish jokes with no substance. Perhaps the letting-in-on-the-joke is the key here. By propagating such things we share secrets, and by doing so make connection with others. We want the power of making them laugh, too, and of having handed down knowledge as if from a great height.
All that matters for that to happen is that the recipient also treat the meme as if it were true. Why should they not, since doing so endows them in turn with the power to let others in on the joke? And so it goes, this pyramid scheme of inclusion, with each of them the pharaoh of their own sub-pyramid. In fact, perhaps it's best not to look too deeply into the truth of the thing, should it turn out to be nothing but dust, and the power be lost.
Perhaps truth is so rarely a part of powerful memes because it's so rarely what we want to believe. The genuinely scientific mind, which strives for truth (rather than 'Truth') above all, and risks finding what's disquieting, discomforting, unsatisfying, is a heroic thing indeed. Of course, the truly scientific mind is the one which has no such comforts to be taken away. We're all some way short of that, however, but some far more than others.
The small fact which draws the sting of the meme in question here is that the lewd programme wasn't written to be broadcast, nor was it ever broadcast. It was made by the TV company as an entry for an industry contest to find the funniest outtakes of the year, not to screw with the kids' heads.
But, shhhhh, that's not nearly so interesting, so let's not go there.
December 18, 2004 // link // comments (0) // trackback
Pattern and Variation
(Some odd notes, which should be a longer and more thoughtful piece.)
If I ever write a (very slim) book about programming, I'll probably call it "Pattern and Variation", because the vast majority of what it means to effectively convert a problem into a representation using code is: first of all, the identification of pattern, where it exists; and then, the identification of where there needs to be variation from that pattern. That's a huge amount of what programming is, in a nutshell. The complexity of code is like the complexity of a fractal. It's only apparent complexity, which arises when simple structures are combined many times over.
Often, the best way to approach a problem is also in that order: pattern, then variation. What's the same about things, and then what's different about them. Prolog can be such a good way to illustrate this, precisely because predicates are often defined using a single recursive case (the pattern), and a single base case (the variation), so syntactically the division couldn't be clearer. For example, here's the canonical recursive bit of member/2:
member(X, [_|T]) :- member(X, T).
What this does is identify the pattern which serves as the foundation for the algorithm: in order to check whether something is a member of a list, in theory we'll have to check every item in that list, one by one. It says, in effect: something is a member of a list if (but not only if) it's a member of the list after we've removed the first item. So the pattern involves moving down the list, one item at a time. It might just as well be an iterative moving, but in this case it's recursive.
And here's the canonical base case:
member(X, [X|_]).
What this does is identify the variation from the pattern that we've set up so far. The variation states that if the thing we're looking for is the first item in the list we're searching, then we've found it, and have succeeded. (Yes, the base case tends to come first in any clause database, but that's a procedural wrinkle, not a principle.)
Pattern, then variation. The pattern sets up a strong foundation for the algorithm - a wash of colour which serves as the background, if you like - and then the variation adds necessary detail. Or the pattern defines the scope of the algorithm (to search all of the items in a list, for example), then the variation defines its purpose (to find one particular item). Often, the same pattern applies generally, and only the variation changes. For example, any search of an unordered list must involve the pattern of checking every item, one by one. So the foundation is exactly the same. The variation merely identifies exactly what thing we're looking for. The first odd number in the list:
member(X, [X|_]) :- number(X), odd(X).
Or the first string that's a palindrome:
member(X, [X|_]) :- reverse(X, X).
Or any of a million other variations.
I'm not a bad programmer. Not great, but not bad. One of the ways I'm not bad is that I think I can see pattern quite easily, and I think that's a complete prerequisite for competent software design. More than that: a programmer doesn't need to merely be able to identify pattern; they need to enjoy pattern, to find it seductive and aesthetically pleasing. This is because code which is entirely pattern-based is a kind of ideal, a perfect model of a perfect solution to a perfect problem. Variations are typically wrinkles in the fabric of the algorithm, to be smoothed out wherever possible. The better the programmer is at seeing pattern, the more he'll be able to minimise the presence of variation. There should be just enough to get the job done, but absolutely no more than that. Each tiny bit of unavoidable variation from the background pattern should cause the competent programmer - after he's fought against its unavoidability for a while - almost physical discomfort. It should be an affront to his pattern-identification skills.
There's another reason why variation should be minimised, and it's a practical rather than aesthetic one: by their very nature patterns apply generally, and variations apply specifically. The more variation exists, the more specific cases exist, and specific cases: increase the complexity of code; and decrease the efficiency of the code syntax. For example: here's the complete canonical member/2:
member(X, [X|_]).
member(X, [_|T]) :- member(X, T).
Two clauses, of roughly equal complexity. If we imagine that the list we're searching is a thousand items long, and that the thing we're looking for occurs only once, if at all, what happens is that the first clause - the variation - fires only in the single case in which we find what we're looking for (that's a maximum of once per search), and the second clause - the pattern - fires every other time (a mean of at least 500 times per search, even assuming that the thing we're looking for is always in the list). So 50% of the code is used about 99.8% of the time, and 50% is used about 0.2% of the time. That's an odd imbalance.
Things get worse the more variations there are from the underlying pattern. Imagine we're looking for either a prime number or a palindrome:
member(X, [X|_]) :- prime(X).
member(X, [X|_]) :- reverse(X, X).
member(X, [_|T]) :- member(X, T).
Now, the pattern, which will still fire something like 99.8% of the time during a search, accounts for only 33.3% of the code. As we add more cases, the general pattern, which applies most of the time, gradually becomes overwhelmed in the code by the specific variations, which hardly ever apply. The result is code complexity, in which problems can arise specifically because the complexity mostly resides in code which hardly ever applies. In general this makes coding mistakes easier to make, and harder to detect.
To be sure, variation is necessary, but pattern is the ideal, and variation a necessary evil which should be resisted at all costs. The first defence against proliferation of variation is, of course, effective identification of pattern in the first place. The more an algorithm can be defined using general patterns - and patterns which are truly representative of the problem - the less variation from those patterns is necessary.
Perhaps you can see where I'm going, and why good programmers are often slightly odd creatures. We love pattern. We see it, and appreciate it. It makes us happy. As for myself, I might joke occasionally about being on the borders of Asperger's - and only joke about it, because I don't honestly believe that I am - but I can't pretend that I don't have tendencies in that direction. My emotional well-being comes from simplicity, order, pattern. My ability to deal with variation from pattern is a function of how well my need for simplicity, order, pattern is being met. In life as in code.
December 10, 2004 // link // comments (3) // trackback
The Eight Steps
(Fiercely redoubling my efforts to be trivial. Ithangyou.)
So last night I heated up a frozen sausage lasagna for dinner*. It was perfectly deelish, but I couldn't help but be struck by the instructions on the back of the cardboard container thingy. See, the instructions had eight steps. To be sure, the final instruction amounted to, 'divide up the lasagna with cutlery of your choice, place in mouth, chew, swallow and digest' ('What?! You mean I don't pour it into my shoes and squelch around all day? What kind of cockamamie set-up is this?'), but that's neither here nor there. There were eight steps, and the manufacturers clearly believed that this level of complexity of both preparation, and description of preparation, was entirely necessary. F'rinstance, I didn't merely have to wrap the container in foil; I had to wrap it in foil shaped like a tent. This was part cooking, part origami.
I'm really a child of Marks & Spencer, so this took me aback a bit. Until I'm convinced otherwise from personal experience, I'll consider the good people of M&S to be the world leaders in food preparation for the reasonably affluent but pathologically lazy middle classes. No way would they consider an eight-step preparation algorithm for frozen lasagna to be acceptable. Three would be fine. Four, tops. Any bright young thing who came to them with an eight-step frozen dish would be given, ahem, the cold shoulder.
Douglas Adams once wrote a character who'd been sent mad - the particular nature of his madness being having come to the conclusion that the whole of the rest of the world was mad - by having bought some toothpicks which had instructions on them. This might not be too much of an exaggeration for satirical effect. The eighth step in the frozen lasagna algorithm was, verbatim: 'cut, and serve'. Perhaps this is just me, but I kinda assume that when I've cooked food I won't simply pour it down the garbage disposal, and that in order to put the food into my mouth, to facilitate ingestion into my body, I might need to divide it somehow into smaller pieces. My mouth just isn't that big, yanno?
The eightness of the algorithm is probably also a consequence of the relative rarity of basically good quality pre-prepared food in the US that's intended to be heated/cooked at home - the niche in Britain that M&S pretty much invented, then widened and perfected. If you're a lazy eater in the US, there's almost certainly a good basic diner not too far away that'll fill you up for a few dollars. Not so in Britain, where eating out is still a relative luxury for most people. So the lazy-food market has been honed and polished by M&S (and others) until it gleams. Complex meals off the shelf. Whole dinner parties in cardboard and plastic, the preparation streamlined almost to the point of '50s futuristic kitchen utopianism. And a good deal of pride in the culinary prestidigitation which pulls a basically home-cooked meal from little boxes, after waving over them the magic-word instructions which amount to: 'Heat and eat, already. You know how this works. Go on, shoo.'
*Memo to the world: It's not lasagna if it don't got no meat.
December 8, 2004 // link // comments (2) // trackback
Separation and marriage
For a few days I've been idly casting about for some appropriate way to mark the fact that this is the one-hundredth post to my little blog. A hundred doesn't seem so many, but it amounts to about one every other day over a period of seven months, and I find that the posts have become longer and more structured than I'd really intended them to. More like little essays than stream-of-consciousness babble. I suppose I should just get used to the idea that structure is my kink, like my kink, and much as I might try to work against it, it's just who I am.
Today, I find that I have a subject, and it's so much better than I might have hoped for. Tomorrow, two friends are getting married, a long way from here. Far enough that where they are it's already the day of their marriage. Far enough that I can't be there. Two other friends were married earlier this year, and, despite the fact that their wedding took place a short drive from where I grew up, I also couldn't make it. I'm angry and frustrated about both of those things. I doubt my presence would have mattered much to either occasion, but it matters to me that I couldn't, and can't, be there to express in person how much the occasions matter to me. Sometimes to just be one of the crowd is the most important thing.
I might blame the fact that we're mostly broke at the moment, or that work is pressing, but neither of those things would matter at all if distance weren't an issue. We live - perhaps me more than most people - in a world whose scope and dimensions have been completely rewritten by the 'net. I can chat casually with people on the other side of the globe, post poorly-thought-through blah for thousands to read. And yet, when it's really necessary to be somewhere, sometimes the 'net just reminds us that things haven't changed in function since I'd have had to catch a horse-drawn coach for several days to travel across my own country to watch a friend marry. The 'net offers a simulated sort of presence, the effect of which is to appear to shrink the world, but in simultaneously appearing to expand that part of the world to which we believe we have access, it can offer a false hope. We can fly across continents in hours, but now the edges of our empires are so much further away. To attend a friend's wedding is as much an undertaking for me as for an Austen heroine - though perhaps easier on the crinoline.
So I'm sad and growly, but not so much, because in the end my not being there is the absence of a trivial footnote, and also because, in each case, the couples owe their meeting to the 'net. If ever you hear anyone scornfully portray the 'net as an escape from real life, know that they're either blusteringly covering up their ignorance of what it means, or they're an idiot. Most likely both.
Have a wonderful journey, J. and V. May it only ever bring you closer together.
December 7, 2004 // link // comments (0) // trackback
Yes, but which bits aren't Incredible?
There's definitely something wrong with me. No matter how dazzlingly good I found The Incredibles to be, what's left in my memory are the things that I reckon are flaws. And it's hardly the film's fault, because there's nothing that doesn't have flaws. It's me. I measure things backwards from perfection. Or, rather, my own whiningly arrogant and hardly objective idea of what perfection would be. Start with an A+, and then start cynically subtracting.
So never mind that the film's design is a bullseye amalgam of Ken Adam, Frank Lloyd Wright, and a kind of hyper-suburban '50s America. What I'm left with is a feeling that the pitch-perfect humdrumness of the alter-ego lives, and the equally pitch-perfect showy grandiosity of the evil baddie's island lair, are then reverse-trumped by the blandness of the cityscape which serves as the setting for the climactic battle. The design goes from stylised small to stylised huge, but then to an underdesigned rectilinear emptiness. Just when the story should get vast, it gets small again.
Never mind that most of the character design is delicious: Mirage drips with Veronica Lake vamp; Gilbert Huph is Droopy in dead-end middle-management. What I remember is that, halfway through the film, Edna Mode storms away with things so completely that the rest of the film is an exercise in waiting in vain for her to return. She leaves a small Edna-shaped hole, just as Anthony Hopkins's barnstorming Hannibal Lector leaves a big hole in the second half of The Silence of the Lambs.
And never mind that there's plot, action and reversal of fortune enough to give Aristotle the heebie-jeebies, the final battle - essentially a retread of a foreshadowing battle we've already seen - just isn't big enough or fraught enough. Not nearly enough is at stake, nor do we worry enough about the outcome. It's like a controlled bonding exercise for the newly restored and newly Incredible family, when it should be about Saving The World Against Impossible Odds.
So don't mind me. Technically it's breathtaking, and a big step up in scope and ambition for Pixar. They're way ahead of anyone else in the field. You'll have a wonderful time. I had a wonderful time.
In fact, it's perfect. Almost.
December 1, 2004 // link // comments (0) // trackback
Because not every post needs to be a thousand-word bloody essay
Run, don't walk, along to Weebl's Stuff, and download The Weebl Advent Calendar (scroll down to 26th November), because we all need more silliness in our lives than we think. And because there's nothing like waking up at 2am to disturbingly odd sounds coming from another room in one's apartment, only to realise that it's nothing but Potatoes.
Then drag your knuckles along the floor to KongisKing.net, to see the frankly wonderful little production diaries that Peter Jackson is sending to this fan site. It's like getting the DVD extras before the film's come out.
December 1, 2004 // link // comments (0) // trackback
