Unsurprisingly, random SMTP servers do get open relay probes

One of the things I do with my sinkhole smtp server is run a copy of it on myhome machine. Unlike my office workstation, my home machine hasnever been an active mail machine; it has nothing pointing to itand no history of various (pseudo)email addresses that attract spam. Under normalcircumstances there should be absolutely no one with any reasonto connect to it.

Indeed, it doesn't attempts to send me any email (spammers mightplausibly try, say, postmaster@


It turns out that I routinely use some really old Linux binaries

With all of the changes that Linux has gone through over the pastten or fifteen years and with them all of the things that havestopped working, it's easy to wind up feeling that Linux doesn'thave a really good story about backwards compatibility. Certainlythis is true to some degree and I have various programs that havebroken over this time, sometimes to my significant irritation. Butat the same time it turns out that some parts of the Linux binaryworld have been remarkably stable.

How stable?


All of our Solaris 10 machines are now out of production

Technically we did the final migration of filesystems from ourold Solaris 10 fileservers to our new OmniOSones on Wednesday evening , but in ourview a migration is never really final until we've run the new thingin production for a while. Everything survived today without ahiccup, so we can now definitively say that all of our old Solaris10 fileservers are out of production. We haven't actively and fullydecommissioned them yet, in that almost everything is actually stillrunning and many of the old ZFS


Exploiting Python metaclasses to forbid subclassing and where it fails

Suppose, entirely hypothetically and purely for illustration, thatyou want to create a class that cannot be subclassed. Python isnormally a very permissive language, but as I mentioned in passing yesterday you can abuse some metaclassfeatures to do this. Well, to more or less do this; as it happensthere is a way around it because Python allows callables to bespecified as your metaclass.

While there are complex approaches with a single metaclass thathas a sophisticated __new__ , it's easier to illustrate


I wish Python didn't allow any callable to be a 'metaclass'

One of the things that any number of discussions of metaclasseswill tell you is that any callable object can be a metaclass, notjust a class. This is literally and technically true, in that youcan set any callable object (such as a function) as a class'smetaclass and it will be invoked on class creation so that it canmodify the class being created (which is one of the classicaluses of metaclasses ).

The problem is that modifying classes as they are being created is the least of


Your example code should work and be error-free

This is one of those cases where I'm undoubtedly preaching to thechoir, but one thing that sends me into a moderate rage is articlesabout programming that helpfully include sample code as illustrationsbut then have errors in the sample code. The worst errors are subtleerrors, things where the code almost works but occasionally is goingto blow up.

Actually, let me clarify that. It's common to omit error checkingin sample code and sometimes the demands of space and comprehensionmean that you can't really


Web ads considered as a security exposure

One of the things that reading Twitter has exposed me to is a numberof people who deploy browser adblockers as part of their securityprecautions. This isn't because they're the kind of person who'sstrongly opposed to ads, and it's not even because they don't wanttheir users (and themselves) to be tagged and tracked around theweb (although that is a potential concern in places). It's becausethey see web ads themselves as a security risk, or more


My current views on Firefox adblocker addons

I normally do my web browsing through a filtering proxy that stripsout many ads and other bad stuff, and on top of that I use NoScript so basically all JavaScript based things dropout. However this proxy only does http, so I've known for a while that as theweb moved more and more to https my current anti-ad solution wouldbe less and less effective. This led to me playing around withvarious options in my testing browser butnever pushed me to putting anything in my main browser.


Planning ahead in documentation: kind of a war story

I'll start with my tweet :

Current status: changing documentation to leave notes for myself thatwe'll need in three or four years. Yes, this is planning way ahead.

What happened is that we just upgraded our internal self-serveDHCP portal from Ubuntu 10.04 LTS to Ubuntu14.04 LTS because 10.04 is about to go out of support. After puttingthe new machine into production last night, we discovered that we'dforgotten one part


The technical side of Python metaclasses (a pointer)

I recently read Ionel Cristian Mărieș' Understanding Pythonmetaclasses (viaPlanet Python), which is a great but deeply technical explanationof what is going on with them in Python 3. To give you the flavour,Ionel goes right down to the CPython interpreter source code toexplain some aspects of attribute lookup. If nothing else, this isprobably the most thorough documentation I've ever seen of the stepsand order in Python's attribute lookups. There are even very usefuldecision tree diagrams. I