Sorting out DomainKeys and understanding its limits

Okay, first a disclaimer: most everyone talks about DomainKeys,but it is formally DomainKeys Identified Mail (DKIM) . Plain'DomainKeys' is the name of the earlier specification that was foldedinto DKIM.

Until I started digging into this in detail, I had the basic idea thatDKIM signed email header fields, crucially including the From: , inorder to assert that the email had been sent from a valid mail serverfor the sender's domain. In other words, I thought it was the messageheader


An observation from changing my password

I've changed my password at work, or started to change it at least (thiswill be an extended process). Doing this has reinforced some things thatI know but rarely think about, and exposed a surprising inconvenience inhow I do things.

The big thing is that you don't really remember how many machines youhave accounts on until you try to work out how many different places youneed to change your password. This is not really an issue for users (ifus sysadmins are doing our


A plan to deal with my feed reader problem

I have a feed reader problem, one that has long ago reached epiclevels: in practice, I'm not actually really reading feed entries.For years, Liferea has been telling me that I have thousands ofunread entries and I have been ignoring them. I think it's time todeclare feed reader bankruptcy (which is much like email bankruptcy ) and deal honestly withthe results.

(This will be a bit traumatic, because I'm somewhat obsessive aboutsome things. It hurts to consciously and


The laziness of a programmer, illustrated

At work, I have fallen into the bad habit of keeping a lot of iconifiedFirefox windows around, full of various things that I am going to readsometime (honest). As I've mentioned before ,I have all of these iconified windows very carefully placed andorganized so that I can find them again and keep track of them.

Naturally, this makes quitting and restarting Firefox kind of a pain.I have Firefox set to preserve all of the active windows and tabs overrestarts, but it doesn'


Finally understanding the attraction of AJAX

I'll admit it; I'm slow sometimes. For a very long time now I haven'treally gotten why people keep sprinkling AJAX over their web pages(partly because I assiduously use NoScript and so mostly don't seeit). Oh, I understood that you needed it to create actual applicationson the web and that it could be convenient for making vaguely friendlythings, but I didn't really understand it in the context of relativelyordinary web apps like DWiki .

But my recent thinking


Why Python's global is necessary

When I started out programming in Python, I didn't really like global . For a long time I considered it unaesthetic, annoying,and on the whole an irritating wart of the bytecode implementation . As I mentioned recently ,I have come around to a different view of global , and it goes likethis.

If you want to have both global variables and lexically scoped localvariables, you have to be able to tell whether a given name beingassigned to in a function is a local or a global variable at


I don't understand how net.ipv4.conf.*.rp_filter can work

First, the background. net.ipv4.conf.*.rp_filter controls some IPaddress source validation filtering done on incoming IPv4 packets. Ithas three values:

0No filtering is done.
1Packets are discarded if they come in on any interfaceexcept the one that a reply to the source IP would goout on.
2Packets are discarded if a reply to the source IPcould not be sent out any interface.

(A more formal description is in ip-sysctl.txt in


My avoidance of Python global variables

I spent part of today writing a quick one-off data conversion program.The core of it was a function that filtered items from a list througha number of things in order to sort them into the right category. Oncethe dust settled on all of the sorting needed, the function had quite alot of stock arguments, things that didn't vary from call to call in myprogram. In fact, an unwieldy number of them.

There are at least three vaguely Pythonic options for how to deal with


A Bourne shell irritation: no wildcard matching operator

Here is an irritation that gets me every so often: the Bourne shell hasno wildcard match operator that you can use in if checks and the like.You can do wildcard matches, but only in case statements.

(Bash has the [[ =~ ]] operator, but it uses regular expressionsinstead of shell wildcards. I know, I pick nits, but shell wildcards areoften simpler and they match what you use in other sh contexts.)

This comes up surprisingly often, at least in the sort


How many uberblock copies ZFS writes on transaction group commits

The ZFS uberblock is the root of the tree of ZFS objects in a pool(technically it is more a pointer to the root, but it's how ZFS findseverything). Because it is the root, it has to be updated on every ZFSupdate. Also, because it is so important ZFS keeps quite a lot of copiesof it (and has a clever 'copy on write' scheme for it, so that it is notquite updated in place).

Given the impact of writes on mirrors