Weekly spam summary on October 22nd, 2005

This week we received 11,880 email messages from 233 different IPaddresses. Our SMTP server handled 36,465 sessions from 4,042different IP addresses, down markedly from last week .

Overall connections are down slightly from last week : 210,400connections from at least 38,800 different IP addresses. This week, weonly hit a highwater of 22 connections being processedsimultaneously. Per day statistics:

DayConnectionsdifferent

One reason why I like Unix

; uptime 19:33:45 up 264 days, 12 min, [...]; ps -e -o start,comm STARTED COMMAND  Feb 01 init[...]  Feb 01 X  Feb 01 xterm  Feb 01 fvwm2  Feb 01 wish8.4  Feb 01 exmh[...]  Apr 12 ssh[...]

I don't think long uptimes are an exclusive Unix virtue; everyoperating system can


A gotcha with Python and Unix signals

Python likes to handle things through exceptions. As part of this, onUnix it does two important signal changes; it ignores SIGPIPE andcatches SIGINT . Each of these can make a Python program reportapparent errors where a normal Unix command-line program would justsilently exit.

This matters if you want to write a Python program that will play wellin an ordinary command-line environment, alongside things like cat , sed , and awk .

First, people expect that they can ^C a Unix command-line program


How ETags and If-Modified-Since headers interact

Part of the fun of writing programs that deal with HTTP is decodingthings like RFC 2616 to answer somewhat obscure questions about how various thingsinteract. Today's case is the following question:

When can your web server generate a 304 'content not modified'response if it receives a request with both an If-None-Match andan If-Modified-Since header?

If-None-Match and If-Modified-Since are HTTP request headers usedto implement 'conditional GET'


MSNbot (still) has problems with binary files

Dating back to our first experiences with msnbot,the MSN Search web crawler, I've known that it was kind of crazy aboutrepeatedly fetching large binary files. Since then, we have pointedthis issue out to MSN Search people more than once and switched to using accurate Content-Types .Recently we had a week of MSNbot not refetching those large binaries,so it looked like MSNbot had finally been fixed.

So much for that. Since 7pm Wednesday night, MSNbot has fetched 3.1gigabytes of various


Accidentally shooting yourself in the foot in Python

Recently, I stumbled over a small issue in Python's cgi module that is agood illustration of how unintended consequences in Python can wind upshooting you in the foot.

The cgi module 's main purpose is to create a dictionary-likeobject that contains all of the parameters passed to your CGI programin the GET or POST HTTP command. DWiki uses it roughly like this:

form = cgi.FieldStorage()for k in form.keys():  ... stuff ...

Then one


A Python surprise: exiting is an exception

Once upon a time I wrote a program to scan incoming mail messages duringthe SMTP conversation for signs of spam. Because this was running aspart of our mailer, reliability was very important; unhandled errorscould cause us to lose mail.

As part of reliability, I decided I wanted to catch any unhandledexception (which would normally abort the program with a backtrace),log the backtrace, save a copy of the message that caused the bug, andso on. So I wrote code that went like this:


Thoughts on Jakob Nielsen on weblog usability

I cannot resist pointing to Jakob Nielsen's latest column, Weblog Usability: The Top Ten Design Mistakes .If you're interested in usability issues, and anyone interested inmaking effective web sites had better be, his columns are usuallyworthwhile. (One of my embarrassments is that I haven't been readinghim much lately; I used to care about this quite a lot.)

I think that Nielsen's weblog usability issues, like a fair amount ofhis writing, are aimed at what I would


Another aphorism of system administration

If you haven't tested it, it doesn't work.

I got this from the Extreme Programming movement, but it's just asapplicable to systems and procedures as it is to developing software.(Remember verifying backups ? That's an instanceof this aphorism.)

This has an important corollary:

If you aren't checking it, it's broken.

For example, when you have a spiffy hardware RAID system you shouldmake very sure that you do indeed get notified when a disk


The Myth of Support (Part 3)

The big myth of support is that you can get it. Usually you can't.

Oh, there's no shortage of vendors who will take your money in orderto tell you how to fix known problems. And why not? It's pretty easy money. (The only tricky bit is figuring out which known problemyou're having.)

But this is the easy bit, so easy that we should call it by adifferent name like 'troubleshooting' .Real support is (also)