You want to do spam forwarding on a separate machine

I've previously written about how weuse a different source IP address when forwarding spam-tagged email than when forwarding other email, so that userswho forward all their email can still get some of it. If you do this,it turns out that you really want to use an entire separate machinefor this, not just an IP alias on your main mail machine.

(We used a relatively small virtual machine for the purpose, ratherthan dedicating physical hardware to the job. If you really wanted to,


All syndication formats use XML

I am pretty sure that this isn'tthe first time that I've seen people be grumpy about Atom because it'san XML-based format. Unfortunately, I have bad news for such people;to put it one way, it's XML all the way down.

More directly, all syndication feed formats, RSS's many variants aswell as Atom, are XML-based (including the versions of RSS that arebased on RDF, since the RDF used is XML-based)


A building block of my environment: rxexec

I have a confession: I kind of like reading about how people have theirUnix work environments set up. In the spirit of sharing what I like, I'mgoing to write up some stuff about my own environment.

By now my personal Unix environment ishighly evolved, which is to say that it is extremely customized (andsomewhat littered with historical remnants). The customization rests ona whole pyramid of shell script tools and little programs so I am goingto talk about them one by one, starting with


The dividing line between supporting code and forking it

Suppose that you want to provide support for a bunch of open source codebut are not the primary author or maintainer. Inevitably you will haveto patch bugs and add features on your own in some way (and perhaps fixthe code to port it to your environment or whatever). This leads to aquestion: where is the dividing line between merely supporting the codeand actually forking your own version of the code?

To me, the dividing line is whether you can get your changes acceptedupstream and applied to the


Why XML is terrible for configuration files

There's a lot of things that get called 'configuration files', so I wantto be specific that I mean the sort of configuration files that have three primary uses : they'rewritten by people, used by programs, and later read by people who aretrying to figure out what the programs are set up to do. These are thekind of configuration files that XML is terrible for.

(There's a whole ecology of 'configuration files' that are generated byone program and consumed by


An 'email marketing' wish

One of my spam peculiarities is that I really dislike spam beingdelivered to me even if it's been tagged as spam and gets immediatelyfiled away into the far depths of the filesystem, never to be seenagain. Back when I was more actively involved in anti-spam stuff, Ispent a fairly large amount of effort not just recognizing spam butrejecting it at SMTP time; not just because it was the right approachwhen possible, but because I actively liked having that happen.Unfortunately, these days (


The remaining Unixes (and their manpages)

Because I was just looking this up the other day , here is my list of theremaining Unixes that are still alive and where to find their manpagesonline. Of these, the ones that I think matter significantly any more as Unixes are Linux, FreeBSD, OpenBSD, Solaris (maybe not for muchlonger) and perhaps MacOS X (depending on what you're doing).

The list:

  • Linux ( yes, really )
    It's a bit hard to find current Linux manpages online, although thereare lots

Reading the Oracle tea leaves for Solaris

(Disclaimer: I am currently feeling pessimistic about both the future ofSolaris and our future with Solaris.)

The big news lately is the combination of the fact that Oracleis now charging even for security patches to Solaris and rumors that Oracle will entirely end OpenSolaris support .So, what do these tea leaves suggest to me about the future ofSolaris and OpenSolaris?

My initial reaction is that the move to charging for Solaris 10 securitypatches effectively means the end of the free version of Solaris 10as a useful


How to listen on a socket in the modern IPv6-enabled world

Suppose that you are a fancy modern server program, and you want tolisten for both IPv4 and (if available) IPv6 connections. As it happensthis is a bit more intricate than you might expect, and it variesbetween systems.

To start with:

  • use getaddrinfo() with a NULL host, the port you want, AF_UNSPEC as the address family, and AI_PASSIVE and AI_ADDRCONFIG in the flags.

  • if the results don't contain any IPv6 sockets, you have

What Linux's getaddrinfo() is doing with IPv6 (on some versions)

I've previously noted that Linux's getaddrinfo() implementationdoesn't return IPv6 addresses by default if it doesn't think that yoursystem is IPv6 capable, or perhaps if your system has IPv6 disabled(this is most conveniently visible through the Python interface ). This behavior is more or less the same aswhat you'd get if you supplied the AI_ADDRCONFIG flag in the hints structure.

(To be specific, I have seen this behavior on Ubuntu 8.04