The importance of numerical literacy

Via Slashdot comes a report of a new biometric airport security system for detecting'hostile intent' (their term). According to the Wall Street Journalarticle:

In the latest Israeli trial, the system caught 85% of the role-actingterrorists, meaning that 15% got through, and incorrectly identified8% of innocent travelers as potential threats, according to corporatemarketing materials.

The company's goal is to prove it can catch at least 90% of potentialsaboteurs -- a 10


Distributions: keep your hands off vi

Dear Linux distributions: if I want to use a freaky super-intelligenteditor I am perfectly able to fire up emacs myself, or even type ' vim 'instead of ' vi ' (honest, the extra letter is not too much for me totype). I want vi . You know, the simple and predictable thing thatsystem administrators like because it behaves.

As an aid to your planning, here is a minimum feature for any editorcalled vi :

When I paste things into an alleged vi in insert


The real Bourne shell problem

The Bourne shell's real problem for writing shell scripts is that itdoesn't have a real data structure for lists. This leads to puttinglists in strings, which leads to reparsing strings, which leads tohideous doom and all of those problems with filenames that havewhitespace in them.

(When lists are represented as strings, every string might be a list,so every time the Bourne shell expands a variable it must try to turnit into a list unless the expansion is specifically marked as not doingthat


Weekly spam summary on August 12th, 2006

This week, we:

  • got 12,152 messages from 212 different IP addresses.
  • handled 16,255 sessions from 790 different IP addresses.
  • received 124,287 connections from at least 41,964 different IPaddresses.
  • hit a highwater of 6 connections being checked at once.

This is down from last week . I don't expectit to stay that way, although I can hope that spammers take Augustvacations too. Speaking


An unhappy spam milestone

I have to finally admit it: I have stopped complaining about spam. Moreprecisely, I've stopped writing and sending complaints about spam to theISPs that they come from.

This is because I've pretty much given up hoping that a complaint to thetheoretically responsible ISP is at all worth my time and will produceany meaningful results. I am tired of writing more or less form lettersto tell ISPs that they have yet another phish spammer, yet anotherclueless free webmail provider spewing advance fee fraud, yet


A Bourne shell gotcha: redirection order

I was reminded of this by seeing it in a shell script recently: theorder that you do redirection in on a command line can be important.This means that the following two lines are not equivalent:

foobar 2>&1 >/some/wherefoobar >/some/where 2>&1

The first one sends standard error to wherever the current standardoutput is, and then sends standard output to /some/where ; the lattersends both standard output and standard error to /some/where .


A Bourne shell irritation

I was bitten by this today, so I am going to grump about it.Today's irritation with the Bourne shell is that the followingis illegal syntax:

echo hi &;

This probably looks peculiar and silly, so let me give a real examplethat is also illegal:

for i in *watch; do nohup ./$i >/dev/null 2>&1

So is ' ; ; ', and for the same reason: in the Bourne


Slashdot's tacit admission of failure

Slashdot has recently started running what it calls 'Backslash'stories, which have (as it puts it):

[...] some of the most interesting comments and exchanges on a handfulof yesterday's Slashdot posts [...]

To me, the most interesting thing about these stories is that they area tacit admission that Slashdot's comment management model is brokenand that a lot of people don't read the comments on Slashdot stories.If most people did regularly read Slashdot comments,


A problem in Python's implementation of closures

Python's implementation of closures for inner functions has a well knownproblem: you can't mutate the binding of capturedouter variables. In other words, the following code does not work:

def cfunc(a):  def _if(b):    a = a + b    return a  return _if

There is nothing in the semantics of Python that require this result.Unlike the case of writing to a global variable in a function, what the a variable refers to in the scope of _if is


A fun little regular expression bug

The problem with regular expressions is the same problem as computerprogramming in general: the computer will faithfully do exactly what youtold it to do, regardless of whether or not this was what you actuallywanted.

(The other problem with regular expressions is that they are a crappyprogramming language, not in power (they've got plenty of power) butin terms of being able to read and write them. (Okay, one of the otherproblems with regexps. There are more.))

DWiki had an