FREE counter and Web statistics from sitetracker.com
collision detection
content | discontent
send me yours
November 18, 2003
The poetry of spam

I used to pretty much skip past the scores of penis-enlargement spam in my mailbox. But recently, I've started to read it, because it's becoming weirdly literary. Consider the following email I just received; the subject line was "the big unit", and the text was:

Xlli hgmkcfpe ni Are you ready? I suppose I ought to give the wooden dummy a good start of me, growled Jim You are right! exclaimed the demon, striding up and down the room, and causing thereby such a crackling of electricity in the air that Rob's hair became rigid enough to stand on end

Hell, that might as well be a direct quote from Ulysses. In fact, maybe it is. I've been reading about spam software lately, and one of the ways that spammers try to get around spam filters is to include unusual and unique text in the message. Many spam filters watch for keywords like "penis" and "big" and "rod" or whatever, which occur in a particularly recognizable frequency. So to dodge that, the spammers have text generators that throw in tons of weird stuff like that passage above. But since the goal is to emulate human-style writing, merely using random text wouldn't be enough. So it wouldn't surprise me if some spammers are stripping passages out of novels -- traditional literature, bodice-rippers, websites with stories on them -- and automatically remixing it as spam text.

Either way, the results are pretty hilarious, eh? I particularly like that little randomized utterance at the beginning -- "Xlli hgmkcfpe ni". It's almost like the computer is clearing its throat, spitting up a bit of ASCII caught in its vocal cords, as a prelude to singing.

Posted by Clive Thompson at November 18, 2003 03:44 PM

Trackback Pings

TrackBack URL for this entry: http://www.collisiondetection.net/mt3/mt-tb.cgi/607

Listed below are links to weblogs that reference The poetry of spam:

ยป Buying Online oivfb from the-inbetween.com [ceci n'est pas]
While my spam doesn't quite reach the literary depths of collision detection's spam, I have noticed a drastic increase in verbosity. Thus, I present to you, Re: %RND_UC_CHAR[2-8], master whispered solemnly: feathery oneupmanship referral amnesia conver... [Read More]

Tracked on November 20, 2003 1:29 AM

Comments

"I suppose I ought to give the wooden dummy a good start of me, growled Jim" looks like it is actually from "The Wizard of Oz". A cursory search for the phrase brought up more than a few Baum references.

Are you telling me that there is spam software that will generate concept-related text that is quotes from famous (public domain?) literature? Can I ask for a paragraph on staplers? sports cars? or what?

Or is it totally random, and the human spam agents cull out appropriate sounding clips?

Posted by: Alfred O. Cloutier at November 18, 2003 7:37 PM

Ah, superb!!! Excellent detective work, sir. Looks like my thesis about how this stuff is generated is correct.

I am really going to pursue this now, and probably write about it!

Posted by: Clive at November 19, 2003 1:38 PM

You got mentioned on the Beeb on Monday, Dec. 1, 2003:
"Spammers turn to classic prose"
http://news.bbc.co.uk/2/hi/technology/3247200.stm

Just out of curiosity, did the author contact you? Seems like this is one of those stories where the author was surfing around and basically yoinked your observations for "his" story.

Posted by: Tony Walsh at December 2, 2003 10:36 AM

Yep, the author had noticed the same trend in spam, did some research online, and came up with my site. He contacted me and I told him to feel free to use whatever stuff off my blog entry he wanted. A very smart guy, actually; but then, I tend to love most of what the BBC does on their web site.

Posted by: Clive at December 2, 2003 2:09 PM

Glad you were contacted over this one :) I've seen a growing number of articles lately that seem to just copy/paste web sites the authors found in a Google search. Some guy recently did a beard-themed article for the Sydney Herald, in which he more or less simply described the contents of a bunch of sites, including my own Babies With Beards. Dude never wrote me :/

Back on the topic of the spam poetry, have you checked out Outside the Inbox? Spam-inspired music, most of which is quite listenable.

Posted by: Tony Walsh at December 2, 2003 2:21 PM

Nice site. thx.

Posted by: Online Casino at January 16, 2004 8:20 PM

But some variables are immortal. These variables are declared outside of blocks, outside of functions. Since they don't have a block to exist in they are called global variables (as opposed to local variables), because they exist in all blocks, everywhere, and they never go out of scope. Although powerful, these kinds of variables are generally frowned upon because they encourage bad program design.

Posted by: Joseph at January 19, 2004 9:07 PM

This is another function provided for dealing with the heap. After you've created some space in the Heap, it's yours until you let go of it. When your program is done using it, you have to explicitly tell the computer that you don't need it anymore or the computer will save it for your future use (or until your program quits, when it knows you won't be needing the memory anymore). The call to simply tells the computer that you had this space, but you're done and the memory can be freed for use by something else later on.

Posted by: Emma at January 19, 2004 9:07 PM

This back and forth is an important concept to understand in C programming, especially on the Mac's RISC architecture. Almost every variable you work with can be represented in 32 bits of memory: thirty-two 1s and 0s define the data that a simple variable can hold. There are exceptions, like on the new 64-bit G5s and in the 128-bit world of AltiVec

Posted by: Joan at January 19, 2004 9:07 PM

Since the Heap has no definite rules as to where it will create space for you, there must be some way of figuring out where your new space is. And the answer is, simply enough, addressing. When you create new space in the heap to hold your data, you get back an address that tells you where your new space is, so your bits can move in. This address is called a Pointer, and it's really just a hexadecimal number that points to a location in the heap. Since it's really just a number, it can be stored quite nicely into a variable.

Posted by: Harry at January 19, 2004 9:07 PM

Let's take a moment to reexamine that. What we've done here is create two variables. The first variable is in the Heap, and we're storing data in it. That's the obvious one. But the second variable is a pointer to the first one, and it exists on the Stack. This variable is the one that's really called favoriteNumber, and it's the one we're working with. It is important to remember that there are now two parts to our simple variable, one of which exists in each world. This kind of division is common is C, but omnipresent in Cocoa. When you start making objects, Cocoa makes them all in the Heap because the Stack isn't big enough to hold them. In Cocoa, you deal with objects through pointers everywhere and are actually forbidden from dealing with them directly.

Posted by: Jerman at January 19, 2004 9:07 PM

These secret identities serve a variety of purposes, and they help us to understand how variables work. In this lesson, we'll be writing a little less code than we've done in previous articles, but we'll be taking a detailed look at how variables live and work.

Posted by: Morgan at January 19, 2004 9:08 PM

Earlier I mentioned that variables can live in two different places. We're going to examine these two places one at a time, and we're going to start on the more familiar ground, which is called the Stack. Understanding the stack helps us understand the way programs run, and also helps us understand scope a little better.

Posted by: Gregory at January 19, 2004 9:08 PM

Our next line looks familiar, except it starts with an asterisk. Again, we're using the star operator, and noting that this variable we're working with is a pointer. If we didn't, the computer would try to put the results of the right hand side of this statement (which evaluates to 6) into the pointer, overriding the value we need in the pointer, which is an address. This way, the computer knows to put the data not in the pointer, but into the place the pointer points to, which is in the Heap. So after this line, our int is living happily in the Heap, storing a value of 6, and our pointer tells us where that data is living.

Posted by: Drugo at January 19, 2004 9:08 PM

Note first that favoriteNumbers type changed. Instead of our familiar int, we're now using int*. The asterisk here is an operator, which is often called the "star operator". You will remember that we also use an asterisk as a sign for multiplication. The positioning of the asterisk changes its meaning. This operator effectively means "this is a pointer". Here it says that favoriteNumber will be not an int but a pointer to an int. And instead of simply going on to say what we're putting in that int, we have to take an extra step and create the space, which is what does. This function takes an argument that specifies how much space you need and then returns a pointer to that space. We've passed it the result of another function, , which we pass int, a type. In reality, is a macro, but for now we don't have to care: all we need to know is that it tells us the size of whatever we gave it, in this case an int. So when is done, it gives us an address in the heap where we can put an integer. It is important to remember that the data is stored in the heap, while the address of that data is stored in a pointer on the stack.

Posted by: Jenkin at January 19, 2004 9:08 PM

Earlier I mentioned that variables can live in two different places. We're going to examine these two places one at a time, and we're going to start on the more familiar ground, which is called the Stack. Understanding the stack helps us understand the way programs run, and also helps us understand scope a little better.

Posted by: Margery at January 19, 2004 9:08 PM

Posted by: Milf at January 20, 2004 6:17 AM

Posted by: ddd at July 25, 2004 5:21 PM

Posted by: captain stabbin at October 13, 2004 7:14 AM

Posted by: MILF at January 24, 2005 12:09 PM

Post a comment

Thanks for signing in, . Now you can comment. (sign out)

NOTE: If you posted a comment and you can't see it -- try refreshing your browser.


Remember me?