Archive for the ‘Tech’ Category

Moved to WordPress

Wednesday, October 20th, 2004

So, after pulling for the little guy, I have finally switched to WordPress.

I’m sorry to the Java folks out there. I really did want to use a Java-based blogging engine. However, Roller simply did not meet my needs:

  • Run on a Cobalt Qube 2
  • Run for more than a week without crapping out

I must admit that I didn’t try too hard to figure out what the problem was with Roller. All I know is setup and configuration sucked (as it often does with Java) and the database connection would simply die and never come back. I had to check the blog every day to see if it was still working.

WordPress seemed to fit the billing and was super-easy to install. Hey, that makes me happy — one less thing I have to deal with myself.

I’m going to try and make all the old links work, not that anyone really gives a crap. Maybe I’ll just redirect all the old-style URLs to the home page. I did enough work writing a SQL script to convert the Roller database into a WordPress-style one.

Doughnuts! I like Doughnuts!

Wednesday, September 15th, 2004

I’ve been a software developer for quite some time, and at my last job, I was indoctrinated into the practice of buying doughnuts for the development team if one of the developers “broke the build”.

For those who don’t know what that means, let me tell you. Any decent software project has a central repository for source code which does versioning. That allows you to “undo” some changes if you decide that you made a mistake, or that a feature shouldn’t have been added, etc. It also lets you see wny each change was made because you typically add a comment for each “commit” that you do to the source repository.

Breaking the build is not really breaking the “build”, per se, but committing a piece of code to the software respository that causes the next build to fail (a “build” is when you compile all the code in the project — usually for testing purposes).

The penalty for breaking the build was therefore furnishing the entire development team with doughnuts the following morning. Sometimes, people woulc bring the crap from around the corner — one of these places in downtown Washington, DC that couldn’t possibly stay in buisiness unless everyone who worked on the block went there for breakfast and lunch (which they did… apparently because they derive no joy whatsoever from meals). However, those of us who knew what we were doing would seek out and find the very best in doughnut-land: Krispy Kremes.

After I got married, I switched jobs and I’m now leading the development team for an organization in Baltimore, MD. There is no central office and so everyone works from home. This is a big advantage for me, since I live in Virginia. However, even the development team doesn’t work physically in the same location, so if someone breaks the build, it’s kinda hard for someone to provide doughnuts to everyong in retribution for breaking the build.

Several days ago, one of our engineers, Luke, broke the build. In jest (since we really can’t do the whole doughnut thing), I created a bug report in our bug tracking system, and mentioned doughnuts.

Needless to say, the “bug” was fixed in minutes.

This morning, my friend the UPS dude comes to my door (poor guy… he’s lugged a TiVo up 4 flights of stairs to my apartment when the elevator was dead for a couple of days) with this box from Dunkin Doughnuts.

“What the hell is Dunkin’ Doughnuts sending me?”, I said to my wife.
“Open it!”, she yells as she starts tearing into the box. “There could be doughnuts in there!”

It was way too light to be doughnuts. It was also way too light to contain a bomb, so I figured it would be cool to open it.

Image of Dunkin' Doughnuts box (9x12x6") containing several gift coupons -- from Luke

I laughed so hard I almost fell our of my chair. I think I’ll send Katie out to get us some doughnuts.

Your Javascript Sucks

Friday, September 10th, 2004

First of all, you can’t win using Javascript in a browser. There’s always some stupid bug, either in the browser or in the Javascript itself, or in the site which uses it, or whatever, which prevents your Javascript from working properly. There, I said it: Your Javascript will break. Given that cosmic truth, why do web page authors always create pages where Javascript is actually required for use?. I never do this, even when using Javascript makes sense. Javascript should be used to add a little bit of functionality (such as client-side form validation) or maybe to open up a pop-up from a link instead of replacing the current page (’cause you can’t do that anymore in XHTML 4.01!).

Anyhow, using Javascript to drive the navigation on a website is just asking for trouble. Consider this my plea to the web page authors of the world: stop requiring Javascript. Just stop. Because lots of folks don’t have browsers that support Javascript (okay, not that many), lots of folks disable Javascript so that all the bugs in IE don’t hose them (okay, not that many), and there’s always the chance that your Javascript will fail and hose the user (okay, pretty good chance).

Perhaps I should relax and relish in the fact that Internet Darwinism will intervene and that sites that don’t work will not get used. Unfortunately, I know that this is not true. I believed this back in the day when IE and Netscape were neck-and-neck in the browser wars and some pages didn’t work on one of the other browser. If they didn’t work on both, those pages either died and weren’t used, or got fixed with a quickness. Unfortunately, one browser won that war (I’m not angry that IE won — hey, it was faster, had better features, and more fully supported CSS first) and it all went downhill from there. Microsoft decided that they were going to make their browser display HTML and work with pages no matter how poorly they were written, including the kind of mistakes that would accidentally launch nuclear weapons if they were made in that type of software. Microsoft is also all about backward compatibility. That means that, unless some serious changes occur in the direction of their browser, IE will continue to render the drivel created by today’s web authors, no matter how egregious. Microsoft has made drivel the standard, since it works. If it works, nobody will be motivated to fix the problems in their web browser. Broken pages will remain, and browsers that choose to punish bad pages will have trouble gaining acceptance.

So, web authors of the world: please, for the sake of all Internet denizens, please stop requiring Javascript to get around your pages and sites. Javascript is fine to spice-up the interface, or do sone neat tricks. That’s cool. The Javascript kids get a bonus for having it. But, do not punish those who are at a disadvantage for any number of reasons, including their browser or browser version, their browsing preferences, or your stupid Javascript.

It’s Good to be Smart

Friday, September 10th, 2004

I recently purchased a wireless ethernet USB adapter from D-Link – the DWL-122 to be exact.

It turns out that the item was defective, and I called customer support to get an RMA number to return the adapter. I went through all the hoops that I despise, even though I know that the customer support people are required to go down a list of things that probably aren’t wrong, just in case they can find a way to place the blame on you, your network, your power, your cat, etc. [there’s a pat-on-the-back bounty for anyone who can find that online article that was all about this dude at a customer support center revealing all the different strategies people around the call center used to get people off the phone].

Anyhow, I finally went through all the foolish things I had to do (including, but not limited to, power-cycling my wireless router, which was currently working with the built-in Wi-Fi adapter in my laptop) and was given a case number. That case number is used to fill-out an online RMA request. You go to the D-Link website and enter in all you information (including the case number) and boom: they give you a bar-coded form that you print and include with your return so they know why you’re sending them a package.

There’s only one problem: there’s a step in the process where you have to choose between a “Replacement” return (where you send the item back, and they send you a replacement once they’ve tested it or whatever) and a “Cross Shipment” return (where they sell you a new one, then reimburse you when they get the defective item). That step was a roadblock, since neither big, throbbing button on the page actually does anything. Nope. Nothing. Nada.

Since I’m Smart™ (and I use Mozilla Firefox, further contributing to my Smart™ quotient), I popped-open my trusty Javascript console to see what was going on (things like this are often Javascript-related). Sure enough, some programmer had coded illegal HTML which resulted in Javascript that simply wouldn’t execute.

Let me take this opportunity to rant about Javascript in browsers. In fact, let’s do that in another post.

Looking at the HTML source code for this page revealed that the button fired-off a Javascript call which should have set the action for a <form> element and then submitted the form. Unfortunately, the form was defined after the entire page, including the </html> element. Maybe it was just Firefox’s propensity to — uh, I dunno — comply with HTML rules, but you can’t define anything useful outside of the page boundary.

The Javascript console told me: 'confirmed' is not defined, because the form (called ‘confirmed’) was not defined within the page. Makes sense. However, it was obvious what the form was trying to do, so I copied the source code for the form, added a submit button and the action attribute myself (helpfully provided by the Javascript code), loaded the hacked form in another window, and submitted the form, and continued with the RMA process.

Chris: 1
Teh Intarweb: 0

Customer “Support”

Thursday, June 24th, 2004

This morning, I was having trouble sending email. I have Comcast Cable Internet services, and there didn’t seem to be anything on their web site about any outtages or anything, so I thought I’d get onto their LiveSupport chat thing and quickly talk to a person.

Now, let me tell you: this LiveSupport chat thing is great. You wait in “line” maybe two minutes and then someone handles your support request through a little Java applet that lets you two chat. The support person can suggest websites as resources which appear in a window where you can click on them and follow the links, and you can even get a transcript emailed to yourself for future reference.

Today’s chat was less than helpful. I showed my boy Brian the transcript, and he thought it was too funny for words. He also suggested that the responses from the support person were not unlike those you might expect from Eliza.

Finding this assertion amusing, I figured I’d write what I expect Eliza to say to me, as a Comcast customer support call came in.

Eliza> Hi! My name is Eliza and I’ll be handling your customer service request, today. How can I help you?

Chris> I am having trouble contacting

Eliza> Does it bother you that you are having trouble contacting

Chris> Well, frankly, yes. I pay for Comcast Internet and feel that I deserve the service for which I pay.

Eliza> Do you think that it is because you are having trouble contacting that you feel you deserve the service for which you pay?

Chris> Well, duh! I pay for that shit, so I should be able to send my fucking email!

Eliza> Let’s calm down. Does it bother you that you pay for that shit?

Chris> Well, when I can’t send emails it bothers me, since I pay for it.

Eliza> Do you think it is because you are having trouble contacting that you can’t send emails?

Chris> (silence)

Eliza> Why is it that you pay for Comcast Internet and feel that you deserve the service for which you pay.

Chris> (silence)

Eliza> Is there anything else I can help you with?

Chris> Yeah, go fuck off.

Eliza> It is because you cannot fuck off that you feel you deserve the service for which you pay?

Chris> This is hopeless.

Eliza> Do you feel hopeless because you are having trouble contacting

Chris> Yes.

Update: 2004-07-07 16:18: The actual transcript is available.


Sunday, June 6th, 2004

Several weeks ago, one of the servers that I manage suffered a hard drive failure :(. The machine itself was, ahem, on the low-end of the server-capable scale for Java applications (P3 500MHz with 256MB RAM), and honestly, we were getting a great deal on it. Since the disk failed, and we needed to do some major re-building of the server, I figured we’d get some nicer hardware at the same time.

So, we got a P4 1.8GHz with a 1GB of RAM. All is well, right? Wrong.

Shortly after we got the new server, we started getting strange errors. Some of the Java applications were dying with mysterious signal 11s. When a Java VM dies, it sometimes doesn’t completely die, and you have to murder the process in order to re-start it.

Occationally, Java VMs are instable on certain machines, but those usually turn out to be AMD Athlon machines (and don’t get me wrong, I’d buy an AMD any day over an Intel CPU), and it usually turns out to be a glitch in the VM which gets fixed anyway. Regardless, I thought maybe the particular Java VM release I was using, but it appears to be relatively stable and in use for quite a while, even on Linux.

Then, other weird things started happening. The last few days of backups were all corrupt, and I kept getting this message from bzip2 when testing the archive:

bzip2/libbzip2: internal error number 1007.
This is a bug in bzip2/libbzip2, 1.0.2, 30-Dec-2001.
Please report it to me at: XXXXXXXXXX.  If this happened
when you were using some program which uses libbzip2 as a
omponent, you should also report this bug to the author(s)
of that program.  Please make an effort to report this bug;
timely and accurate bug reports eventually lead to higher
quality software.  Thanks.  Julian Seward, 30 December 2001.

*** A special note about internal error number 1007 ***

Experience suggests that a common cause of i.e. 1007
is unreliable memory or other hardware.  The 1007 assertion
just happens to cross-check the results of huge numbers of
memory reads/writes, and so acts (unintendedly) as a stress
test of your memory system.

Okay, my brand-new hardware sucks. Great. Oh, well, just call-up the hosting provider and get them to change-out the RAM, right? Wrong

Now, let me first say that I’m not going to mention the name of my hosting provider. That’s because they give us (a non-profit organization) a good deal on their services, respond quickly with the same primary contact person every time, and generally seem like they want to keep things moving smoothly for everyone. Unfortunately, this time, things did not go quite so smoothly.

First of all, I was assured that every Intel-compatable machine that comes from their hardware provider has its memory tested with memtest86, which I use myself. They argued that the memory was most likely not the problem because of the aforementined memory testing and the fact that the hardware was all new.

Now, I admit that I fall squarely on the software side of things, and I have the luxury of pretending that hardware works perfectly every time (“What do you mean division doesn’t work on some Pentium Processors?). However, I know when hardware is failing: when Java applications are dying, all my backups are corrupted due to a bug which bzip swears is more often bad memory, and MySQL starts spewing garbage strings when queried (oh, did I not mention that already?!).

Now, I admit there’s another possibility: the problem could be the motherboard or the CPU. Memory errors are not always the fault of the SIMM chips installed. Sometimes, the CPUs L1 or L2 caches can be faulty or the motherboard can have a glitch. Sometimes, the hardware is actually all okay, but the combination doesn’t work out so well (like when you have memory that’s a hair too slow for the mobo).

One of the ‘experts’ at my hosting company suggested that there might be a “hole in my filesystem”. WTF is that? I’ve never heard of anything like that, and neither has google. As far as I’m concerned, if google hasn’t heard of it, then it doesn’t exist ;)

Anyway, I was assured by my expert that, my moving my /usr/local data onto a fresh partition, my problems would magically go away. I simply needed to get the bad Java files off of the corrupted filesystem, and I’d be home free. By removing those files from the filesystem, I’d be essentially fixing my system and things would get better. They didn’t.

“Re-install Java”, was the next attempt. Riiiight. Re-installing Java is just deleting a directory and then untarring the archive. Re-installing Java ain’t gonna do anything. Oh, well. I’ll give it a try. Guess what? The system is so hosed, the Java installer won’t even run without seg faulting. Oops. I shouldn’t have deleted the Java installation. A system running a few Java apps with one crashing every few days is much better than a system with no Java applications running at all.

After about a dozen tries, I got Java installed. I rebooted (that tends to clear up a lot of things) and everything came back up fine.

At this point, I’m planning my strategy for the next mysterious segfault that I see: “Hey, if the hardware’s just fine, then you won’t mind giving me an identical rig and using my flawless hardware for your own servers”. I didn’t have to: my good friend, and usual point of contact at the hosting provider, calls me today to say that he’s going to be in the data center twice today, 5 hours apart. Sounds like a good time to just bite the bullet and go in there and run memtest86 on the rig and see what happens. 5 Hours outta be enough to check it out.

It turns out that he didn’t need that long: the box crapped itself as soon as the memory test started.

Within 48 hours, I’m assured that I’ll have a fresh set of SIMMs and everything should be okay after that. I’m hopeful, but not stupid. In fact, at this point, I’m actually borderline despondent. They’re going to switch out the chips, and the motherboard will be the problem. “But we gave you new RAM, it must be good!” will be the new mantra. Then, we’ll go through the charade again.

I just can’t catch a break.

We went through a bout of this at an old client (again, name witheld) of my former employer, The Adrenaline Group. The IT management decided that it was cheaper to have an army of AMD Athlons than a substantially lower number of Suns for web- and application-servers (Technically, yes, it is cheaper, but Suns handle high load much better).

Anyhow, they chose Penguin Computing as their hardware provider, and we ended up getting a bad batch of machines. We actually had six production servers, six QA servers, and six development servers. As I recall, at least two of each set were bad. We never saw any problems on the development machines because all of our load testing was done in QA, and things looked good. It turns out that the load tests sorely underestimated the load and that the real load caused the machines to work hard enough to crap themselves.

The software development management had us up for a week trying to figure out where we went wrong. They even called-in a pair of consultants from BEA (the app server we were using) to figure out if we had deployment issues, since this was their first BEA deployment. They were as baffled as we were. They were totally flailing.

I even went so far as to suggest that the problem was the hostname of the server, since the same ones went down every time (joking, of course). The manager looked at me with wide-open eyes and said “Really? Do you think it could be that?”. “No,” I replied. “It’s the hardware. Just go into the data center, take that server out of the rack, and throw it into the trash. Repeat if necessary. It’s bad hardware!”. They had the same reaction as this guy at my hosting provider: “It can’t be the hardware.”

I’m a software engineer. I know when it’s the hardware.

Oh, the Irony

Sunday, June 6th, 2004

I generally count myself lucky as I do not receive a lot of spam email. I also use an email client with superb spam filtering features.

However, over the past few days, I’ve gotton nearly identical emails from virtually the same place, and guess what? They’re all for spam filtering software. I checked into both the spammer and the “author” of the product, and they’re one and the same.

And, for the coup de gras, the message claims to be conformant to the “2003 US Can-Spam Act”. I can only assume that they mean the CAN-SPAM Act of 2003 (of which I am very skeptical about the possibility of effectiveness, alleged enforcement, and motivation).

At any rate, it has been asserted that the CAN-SPAM Act “Requires that your have an working unsubscribe system that makes it easy for recipients to unsubscribe opt out of receiving your e-mails” [1]. In fact, the CAN-SPAM Act (Section 5.A.5.ii) only says that there must be an advertised notice of an opt-out opportunity. There are two things wrong with that. The first and most obvious one is that usually “opting-out” on a spammers website pretty much guarentees more spam. You’re falling right into their trap: confirming that an email address is real. That means a slam-dunk every time they want to send out an email. Second, the opt-out facility is not even required to work. Just because they provide a URL for opting-out doesn’t mean that the URL has to actually do something. Idiots…

Sure, email is a convenient medium for advertisement. Sure, there’s no particular reason why any person should be prohibited from emailing any other person. But, there’s also no reason to send me the same, unsolicited email over and over again. There’s also no reason for me not to publish their contact information ;)

I provide the following for informational purposes only. Anything you choose to do with it is therefore your own fault and/or problem. Enjoy!

Here’s a representative email from these people:
(note that I have inserted a few newlines for formatting. also, the original email was, in fact, in the despicable HTML format.)

From - Thu Jun  3 21:48:20 2004
X-UIDL: 20040604014228s18000qb58e0045db
X-Originating-IP: []
Received: from ([])
   by ([]); Thu, 03 Jun 2004 19:35:25 -0700
Date: Thu, 03 Jun 2004 18:44:25 -0800
From: "Cecil" 
Reply-To: "Cecil" 
Message-Id: <>
Cc: [several email addresses, including mine, all at the same domain]
Subject: Protect innocent eyes from adult email
Mime-Version: 1.0
X-Mailer: Telectorate Version 0.0
Content-Type: text/html; charset=us-ascii
Content-Transfer-Encoding: 8bit

I have a special_offer for you...

*Better than all other Spam filters -*

*Only Delivers The Email You Want!*

This is the ultimate solution that is guaranteed to stop all spam
without losing any of your important email! This system protects you 100%.

We didn't believe it either until we actually tried it. So you be the judge and 
see for yourself.

*You owe it to yourself to try this program,* and forward this email to all of 
your friends
who hate Spam or as many people as possible.

Get rid of unwanted emails now. 


If you want to stop receiving this 

P.revia Marketing, Inc.
14781 Memorial Dr. / Suite 966
Houston, TX 77079

Conforms to legal requirements of 2003 US Can-Spam Act.









chronic hutchins perihelion spavin amelia backside


Here is some more information that I was able to gather:

[chris@localhost]$ nslookup
Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.  Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.

Non-authoritative answer:

[chris@localhost]$ nslookup
Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.  Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.

Non-authoritative answer:      name =

Authoritative answers can be found from:  nameserver =  nameserver =

[chris@localhost]$ whois
[Redirected to]
Registration and WHOIS Service Provided By:

Intercosmos Media Group, Inc. provides the data in the
Registrar WHOIS database for informational purposes only. The information
may only be used to assist in obtaining information about a domain name's
registration record.
directNIC makes this information available "as is," and does not guarantee
its accuracy.

 Previa Marketing
 14781 Memorial Dr.
 Houston, TX 77079
 281 602-4096 


Administrative Contact: 
 Mgr, System
 14781 Memorial Dr.
 Houston, TX 77079
 281 602-4096 

Technical Contact: 
 Mgr, System
 14781 Memorial Dr.
 Houston, TX 77079
 281 602-4096 

Record expires on 05-29-2005
Record created on 05-29-2004

Domain servers in listed order:

By submitting a WHOIS query, you agree you will use this data only for
lawful purposes.  You also agree that, under no circumstances, will you use
this data to:  a) allow, enable, or otherwise support the transmission by
email, telephone, or facsimile of mass, unsolicited, commercial advertising
or solicitations to entities other than the data recipient's own existing
customers; or to (b) enable high volume, automated, electronic processes
that send queries or data to the systems of any Registry Operator or
ICANN-Accredited registrar.
The compilation, repackaging, dissemination, or other use of this WHOIS
data is expressly prohibited without the prior written consent of reserves the right to terminate your access to its WHOIS
database in its sole discretion, including without limitation, for
excessive querying of the database or for failure to otherwise abide by
this policy.
directNIC reserves the right to modify these terms at any time.
[chris@localhost]$ whois
[Redirected to]
status:       production
organization: Previa Marketing
address:      14781 Memorial Dr.
address:      Suite # 966
city:         Houston
state:        TX
postal-code:  77079
country:      US
registrar:    JORE-1
created:      2004-03-04 21:06:39 UTC JORE-1
modified:     2004-05-06 10:14:09 UTC JORE-1
expires:      2005-03-04 16:06:26 UTC 

db-updated:   2004-06-06 20:16:45 UTC 
[chris@localhost] $

Old Skool Software

Wednesday, May 19th, 2004

Today, I was wading through a lot of old computer stuff that I have lying around, and I came across a LogiTech-branded Microsoft Windows 3.1 box, complete with 5.25″ and 3.5″ floppy disks.


I did what any red-blooded, nostalgic computer dork would do: I installed it on a vmware instance. Here it is in all its glory.

In order to install it, I actually needed to install DOS 6.0, first. That required me to dig up a box affectionally known in days gone by as my big keg of software. It’s a dot-matrix printer-paper box full of floppies: 3.5″ and 5.25″.

The Keg has some real gems in there:

  • A 5.25″-floppy version of PC-Tools version 7
    note: this is so old-skool that it wasn’t even called Norton, since Norton/Symantec hadn’t yet bought them
  • A copy of a game called Stunts (which was even better than Gran Turismo 3 if you ask me)
  • WordPerfect 5.1 (oh, yeah!)
  • Many old-skool Sierra games (KQ, QFG, etc.)
  • Visual Basic for DOS (you read that right: DOS!)
  • … and much, much more!
  • Legal licenses for all aforementioned software

Several months (or is it years, now?) ago, I was determined to actually get disk images of everything, burn them to a CDROM or two, and defenestrate the whole thing. I live on the 8th floor, so if I do that I’ll definitely get some video.

Anyhow, I got started making images and then I realized that I might never actually be able to get them to run for a number of reasons. First, lots of old copy-protection schemes relied on having direct access to the floppy devices, so many of them just won’t work. Second, many games, etc. required the disk to actually physically be in the drive in order to run, much less install. These days, it’s tough to bring yourself to pay for a floppy drive on a computer, so all this software may go the way of the dodo if I can’t figure out how to get it running.

All this to say that I haven’t yet imaged all of them and littered the street with multi-colored squares of plastic. However, my recent install of Windows 3.11 on VMware has given me the opportunity to image the DOS 6.0 and Windows 3.11 disks and verify that they still work. (I had to image them because my laptop doesn’t have a floppy drive at all — what a shocker!).

Once I get everything onto a nice, small CD, Heather Vargas, my good friend and personal organizer will give me a big, wet kiss on the lips.

Update 2004-05-26: Unfortunately, I don’t have a copy of lode runner. W3rd to stunts.