A bit about what life was like on Unix before shared libraries

If you look at it right, many MH commands are a relativelythin veneer over a large pool of shared functionality. For example,when you run show to display the current message there is a bunchof infrastructure that turns the concept 'the current message' into afilename for show to open, and of course this infrastructure is commonacross all MH commands that can work on 'the current message'. Similarbits of infrastructure, large and small, exist across a lot of what MHdoes (for example,


The tragedy of MH

At its fundamental core, MH is one of themost Unix-y mail programs going, because its two core ideas are that youshould put each message in a separate file and that each mail commandshould be a separate Unix command. Ignoring practical considerationsfor a moment, these ideas are utterly the right way to do a mailer onUnix because both of them let you leverage other Unix tools and shellscripting. Also, since MH simply uses Unix directories to representmail folders it has a natural way of allowing and


A Gnome 3 shell extensions failure

I really wish that the people who had written the Gnome 3 shell'sextension system hadstudied something with a good one, such as Firefox. Here is the problem:as far as I can tell, the Gnome 3 shell has no way to disable or enableextensions. Instead, all you can do install or remove extensions; allinstalled extensions are automatically enabled and the only simple wayto disable an extension is to remove it. This includes system-installedextensions.

(It's possible that editing an


One reason we install machines from checklists instead of via automation

I've been revising our install instructions for some OpenBSD serversrecently, giving me an opportunity to reflect on how we set up machineshere. Our general approach is to use a checklist of essentially cutand paste commands; I often go through a test run directly cutting andpasting back and forth. Given that we have the literal commands to runin the instructions, why not automate the install process by puttingthem all in a script?

Well, turn this question around. What would I have to do in order


Friendly 'noreply' email addresses

In yet another installment of me writing things aimed at people who willnever read them, I have some opinions on 'noreply' email addresses. Ihave these opinions because, of course, our mail system has its usualmodest pile of email attempting to be delivered to some of those noreplyaddresses.

(My real opinion is that you shouldn't use any sort of noreplyaddress at all. For a start, it's a terrible user experience .And apart from that, handling bounces is part of responsible


The 'key plus authenticator' pattern in web apps

As part of our account request system , I need to generate an unguessableURL for a particular account request. This is a widely solved problem,because it's a variant on session IDs; you generate a large randomnumber, encode it to ASCII somehow (base64 is popular), and put it inthe URL as the identifier of the particular object. When you get anincoming HTTP request you extract that portion of the URL and use it asthe key to do a database lookup to find the


An incomplete list of the ways around MAC address blocking

In an earlier entry I wrote thatthere were plenty of ways for someone with a banned MAC address to getback on your network. Since some people may doubt that, today I feellike running down some of those ways to emphasize how weak MAC-basedblocking is.

The straightforward workaround is to change your MAC address to somenew random one you made up (often you can just vary the last octetof the MAC address slightly), then register your 'new' machine fornetwork access. This works best


You need to hash web app session IDs

Up until very recently (in fact, today), I could confidently recite whatI thought was the best way to handle login sessions in web apps: everytime someone logs in, you pick a large random number to be their sessionID, give them a cookie with the session ID, and then store all of thedetails in your database under the session ID. When they come back, youget the session ID cookie, look it up in the database, make sure it's(still) valid


What I want out a Symbol type in Python

Back in OptionalArgumentsIssue , I wrote that special unique sentinelvalues were one of the cases where it would be nice to have a realsymbol type in Python (ideally including syntactic support). This raisesthe question of how such a type would behave and what sort of specialsupport it needs.

Unfortunately, what I really want requires language support. Withoutit, the best we can do is something like this:

>>> no_arg = Symbol("no_arg")>>> print no_

Gnome 3: I'm out

I've now had the chance to run Fedora 15 with Gnome 3 on a machine thatcould actually handle it, and I have to say: I'm out. It's clear thatGnome 3 is not going to be what I consider a usable environment, now orin the future, not unless the Gnome developers have a drastic change ofheart and orientation. Gnome 3 is full of decisions that work exactlyopposite to what I want, decisions that make things I do all the timeharder,