Why case independent filenames are a bad idea

People keep pushing the idea of case independent filenames (andmocking systems without them), but the whole idea has three bigproblems: case conversion is a lot more complicated than people think,locking a character set encoding into your OS damages its ability toevolve, and case folding is language specific .

The handy example of the last is Turkish (and Azeri). In Turkish, thecapitalization of 'i' is not 'I' but the dotted I (Unicode U+0130);the


Weekly spam summary on January 21st, 2005

I'm going to lead with the Hotmail spam numbers, because they continueto be catastrophic.

  • two emails accepted, both from spamlike Hotmail usernames.
  • 376 messages rejected because they came from non-Hotmail emailaddresses.
  • 134 messages sent to our spamtraps.
  • 17 messages refused because their sender addresses had already hitour spamtraps.
  • 5 messages refused due to their origin IP address (four for being inthe SBL and one for being sent from SAIX, which has an advance feefraud spam problem)

Please have stable ids for your feed entries

In both RSS and Atom syndication feeds, feed entries can have anidentifier element (optional in the case of RSS, mandatory in Atomfeeds). The entry ID is supposed to be permanent and stable, no matterwhat; things that process feeds use it to know what they've seenbefore and what they haven't.

This might seem like an unimportant picky thing, except thatLiveJournal just inadvertently gave everyone reading Planet Debian aglaring example of why it's so important. (And Planet Debian is


The limits of web spider tolerance

I have an important message for web spider operators: our generosityis not unlimited. In fact, it's probably running out.

There are a lot of web spiders out there, and many of these spidersdon't seem to be offering anything for free to the public. When youcrawl to build a private index, you're building a business in part off our resources, which you are using for free, and there is verylittle in this for us. To put it plainly, such spider


A Python length gotcha

Python calls the __len__ method on your objects to implement len() , and in a few other situations (for example, as one way ofiterating through the elements of a sequence-likeobject). Surprisingly, there's an under-documented restriction on whatyour __len__ can return: objects can't be larger than sys.maxint .

In fact, it's stricter than that: your __len__ method must returna literal integer. You


A portability gotcha with accept()

Today's excitement came from trying to bring a local network daemonfrontend up and running on a FreeBSD machine. It would spawn programswhen you connected to it, but they always exited immediately afterthey printed their greeting banner; it was as if they were seeing animmediate end of file.

FreeBSD's ktrace revealed that when the spawned programs went toread from standard input, they got an EAGAIN result. Fortunately I'vestubbed my toe on this one before: this is the exact symptom of yourstandard


Intel

The economics of CPU performance

Recently, Intel and AMD have been telling everyone who would listenthat single CPU performance is more or less all tapped out, and thatfuture improvements would come from various multi-* developments;multi-core, multi-processor, and so on. Ominous pronouncements haveemerged about how programmers need to bite the bullet and move to(highly) concurrent programming if they want their gravy train tocontinue.

When reading this sort of news coverage, it's worthwhile to rememberwhat sells CPUs and software. Namely:


Some words of wisdom for all ISPs

Vernon Schryver, in news.admin.net-abuse.email:

Spam complaints must be viewed like complaints from your neighborsthat your children or other pets have again wrecked gardens. Spamcomplaints are evidence of failures, and should be exceptionsinstead of part of the main anti-spam machinery.

(From Message-ID <95cqle $80v$1@calcite.rhyolite.com> .)


The danger of specific errno values

One of the things I've learned the hard way in writing Unix programsis that you should almost never expect to know all of the errno valuesthat system calls can return. In theory it's documented in themanpages, but in practice a manpage's list is never comprehensive.The safest thing to do is to assume that any system call can returnalmost any errno value.

The example I remember most vividly is that our SMTP server daemonused to carefully check the result of accept() . If


Weekly spam summary on January 14th, 2006

This week we received 12,785 email messages from 208 different IPaddresses. Our SMTP server handled 17,958 sessions from 984 differentIP addresses. Session volume is dramatically down from the levels of last week .

Connection volume is also down: 122,600 connections from at least44,760 different IP addresses. However, we hit a highwater mark of 50connections being processed at once on Tuesday, so we have had