Thesis: any server push technology inevitably breeds spam

Consider various server push technologies, where things come to youinstead of you having to seek them out: email, instant messaging,voice over IP phone server, and even text messaging on cell phones.All of them have spam problems (generally growing).

This is not a coincidence. Any server push technology will get overrunby spammers, because server push inherently gives them access topeople and is thus very, very attractive. As a consumer of server pushtechnology, your only recourse from the onslaught is to hide


The problem with browser minimum font size settings

Long ago, when I griped about Slashdot's redesign ,Oscar del Rio left a comment suggesting that I use Firefox's minimumfont size setting to cut this off. This isn't an approach that I likefor a relatively simple reason: I'm willing to have some text set small,just not the main text.

I want websites to be able to set less important things in small fontsizes, but I don't want them shrinking down the text I'm actually hereto read


Most world-editable wikis are doomed

The Linux iSCSI project keeps itsdocumentation in a world-editable wiki. I should really say kept,because it's hard to find much usable documentation in the wiki at themoment; most of the pages are overgrown with wiki spam. Some pages havehad a thousand edits in two days , all of them spam. All of this makesthe project's wiki an unfortunately excellent illustration of why mostopen wikis are doomed.

The problem is that there are just more spammers out there automatingtheir attacks than most


The downside of distinctive hostnames

Recently a co-worker pointed out that the downside to giving machines distinctive hostnames is that users become attachedto them, and when you introduce newer, better machines the users don'tmigrate to them. Once I thought about it, this made sense; after all,by naming things we make them distinct, and thus no longer quite sogeneric and equivalent.

(At this point I am tempted to think thoughts about brand loyaltyand the distinctiveness of brand logos.)

One contributing factor is that with many generic


A simplified summary of Python's method resolution order

Crudely summarized, method resolution order is how Python decides whereto look for a method (or any other attribute) on a class that inheritsfrom several classes. Python actually has two; a simple one for oldstyle classes and a rather complicated one for new style classes.

(Technically, method resolution order applies even for singleinheritance classes, it's just that they have a very boring one.)

With the old style class:

class Foo(A, B, C):    pass

Python will look up


A note about the ordering of mixin classes

In Python, when you have a class that inherits from both a primary classand some mixin classes (for example, if you're using the SocketServerstuff ),it's conventional to declare your class's inheritance list with theprimary class first:

class Real(primary, mixin1, mixin2):    ....

However, an important safety tip: if your mixin class overrides methodsof the primary class, it has to be first . Failure to observe thissafety tip can cause head


My zeroth law of compromised machines

If you can't find anything wrong, you haven't looked carefully enough.

The immediate corollary is also important:

If you can't find anything, the intruders are still there.

The leading cause for not finding anything wrong on a machine youknow is compromised is that you haven't detected the rootkit thatis hiding things from you.


Fixing Python's string .join()

The thing that has always irritated me about string .join() is that itdoesn't stringify its arguments; if one of the things in the sequence tobe joined isn't a string, .join() doesn't call str() on it, it justpukes. This is periodically annoying and inconvenient.

It recently occurred to me that this can be fixed, like so:

class StrifyingStr(str):  def join(self, seq):    s2 = [str(x

The quick overview of DiskSuite failover

Solaris 8 DiskSuite does failover on disks (logical or otherwise), notfilesystems or partitions. Solaris then gives you up to seven partitionsper disk (technically you get eight, but DiskSuite takes one for itsmetadata); you then use these partitions as the building blocks formirrors, stripes, and filesystems.

Disks are grouped together into metasets, and one machine in yourfailover cluster owns each metaset at any given time and is the onlymachine allowed to do IO to any of its disks. As a consequence,


Getting around LiveJournal's new minimum page width

LiveJournal recently started forcing at least some pages,such as the default style for individual entries , to have a minimum width.Worse, the forcing is done in such a way that text is wrapped to thewidth even if your browser is narrow, which makes the pages prettyunreadable. I noticed this change right away, because they picked aminimum page width that was somewhat larger than the width my browser isbasically fixed at.

Today I got irritated enough to do something about it. First I had tofind what