|
Blog-style online journals allow public commentary on each entry. This
asynchrous exchange of text clips encourages a micropayment-like form of
interpersonal interaction, a heap of short comments in response to a bloggy
update. In some journals, any distress or sentiment on the part of the author
results in a hail of unarticulated comforting intentions, often expressed as a
single word: *hugs*.
After seeing this play out over and over, the unsatisfied aftermath, and the
often smarmy sweetness of the *hugs*ers, I made a little joke about how even
typing out the word *hugs* was too much effort, and that the wave of the future
was one-click *hugs*ing. To redeem my mouth-written checks at the bank of ass,
I wrote a simple perl cgi which associated counters with names, and allowed
anyone to put a button on their web page which would increase their *hugs*
count.
While I was writing the graphics generation part, I made it slightly more
interesting for myself by making the font of the counter select one of ten
different versions of each numeral, randomly. I quickly drew a bitmap font of
10 versions of 10 numerals. That's 100 drawings. To do that quickly, you have
to draw fast. They look like about 3 seconds apiece, in MS Paint or something.
I threw in some happy faces and mr. doinksquirt to make it cutesier, and then I
deployed the counter in my web-journal-thing.
I got a few chuckles. Some of my friends put *hugs* counters in their pages.
A few one-click hugs were exchanged. The counters scrolled off the bottom of
the rolling journal pages and I forgot about them. A year passed.
One day, my webserver went unresponsive, and had to be rebooted. I made a
comment about imaginary angry hugs counter users in my Livejournal,
Javina asked about it, and I posted a link to the EZ hug setup script, which
I hadn't made public, out of apathy. She posted the EZ-hug generated code on
her page (which includes a link to the EX-hug setup script), and the next few
days I spent dealing with server instability, rebooting it several times. I did
not recognize the portent.
7 days later, I was trying to copy some files off the webserver, and it was
just dragging along, like a seagull trying to steal a baby walrus. I had
a terminal open with a shell, and managed to complete a couple of commands,
typing them in and waiting for the text to appear two or three minutes later.
The first showed a server load of 205. That's 205 processes waiting to execute,
on average. The next showed the culprit: 150 http processes. At 1.1 Mb each,
more than I had memory to support. The server was trapped, swapping information
in memory to disk and back, causing slowdown, causing more http requests to
queue up, never getting ahead. Why was I getting so much traffic??
After isolating the machine from the network with firewalling maneuver X,
aka "unplugging the network card", server load eventually came down to a level
which allowed me to shoot trouble. One look at the access logs revealed the
culprit: hundreds of hits per minute from a unrelated series of IPs! I was
under a DOS attack! Or no, wait. They were all to the hug increasing
script.
Dumping the *hugs* database revealed 3 users with far higher *hugs* counts
than any other, in the several hundreds of thousands range.
Cross-checking showed that it was indeed these users that were being hugged by
the gatling huggers. Agent logs also showed that no human was clicking on that
hug button. Not one, but SEVERAL people had written programs and scripts (in
java, shell, python, and what is probably a C library) which did nothing but
hit the hug script many times a second. My hastily designed perl script could
not keep up.
Fortunately, I could track them down, as most people were using their
livejournal user name as their *hugs* ID. Many of those who had perpetrated a
huginator left a comment either hinting at it or explicitly stating so in their
target's comment section. I replied with a short explanation of why this would
result in terrible repercussions, and got apologies, promises not to do it any
more, and that kind of good stuff.
Unfortunately, the *hugs* button code was spreading like wild cherry kool
aid on a shag rug, through the livejournal populace. New huginators were being
written every day. I had to disable the script and put up placeholder graphics
and pages while I re-engineered the system to withstand abuse.
Tomorrow: The second wave, logmania, and feeding the funny
programmer
*HUGS* TOTAL!
give
andr00 more *HUGS*
Get hugs of your
own
|
|