Category Archives: computer science

How I Spent My Sunday

I spent part of the weekend doing research on "The Damn Hell Server Upgrade From Hell." As a favor to some friends, I agreed to help them move their data from an old Win2K server to a new SBS 2003 server. Little did I know how complicated and entangled their system was, nor what a huge pain in the behind it would be to reconfigure the new server to match the old one. Making matters worse was that some of the software installed on the old server just can’t be found any more, and when it can, it seems to make SBS 2003 unstable.

So I’ve started looking into VMware’s newer freebie product, ESXi. For those of you that don’t know, VMware produces software that allows one to create virtual machines, or in other words, computers within computers. I’ve used some of VMware’s other products in the past, such as as their Converter utility, which can transform a physical server into a virtual machine. I’ve also used their other freebie product, VMware Server. Like ESXi, Server allows one to host multiple virtual machines on one physical system. Unlike ESXi, Server requires a full operating system install on the computer that will host the virtual machines. ESXi is integrated with a minimal operating system, so the resource overhead is much lower.

With that in mind, I resolved to perform a test install of ESXi, and then simulate the virtualization of a Windows Server environment. My old ePartManager server would play the role of the Damn Hell Server, and my old desktop would play the role of the virtualization server. But right out of the gate, I hit an obstacle in the form of this cryptic nastygram:

Unable to find a supported device to write the VMware ESX Server 3i 3.5.0 image to.

After swapping among several spare hard drives and motherboards, I came to the realization that ESXi doesn’t much care for IDE drives. To test this hypothesis, I ran out to Fry’s and purchased a 160 GB 2.5" SATA drive, which I planned to set to a different purpose after this test. As I supected, ESXi happily installed into the SATA drive. The Converter utility happily converted my test system into a new virtual machine on the ESXi server.

But after all that, I found another difference between ESXi and VMware Server. ESXi won’t grant virtual machines access to the host machine’s serial, parallel or USB ports. Apparently, the idea is that permitting this would complicate the use of VMotion, a utility that allows virtual machines to be moved automagically from one ESX server to another.

Unfortunately, one of the Damn Hell Server’s duties is to send faxes, so ESXi clearly won’t do in this case. A bit of wasted resources will have to be tolerated.


It’s a shame that the media has perverted the word hacker into a pejorative. The original meaning behind the word is a wonderful one. A hacker was somebody that loved to learn how things worked and used that knowledge to do new things, which they loved to share with other people. Sadly, somewhere along the line, a journalist who wasn’t quite clear on the concept (or just didn’t care) added the connotation of crime to the word, and there it’s stuck. It’s too bad, too, since there’s not really another word that means quite the same thing. But that’s just the evolution of the language, I suppose. Gay meant cheerful before it meant homosexual, after all, and now, to many people gay is nothing but a synonym for pathetic.

Anyway, I went to an Information Security conference this weekend. Calling it a hacker’s conference would probably give someone out there the wrong idea. But there were hackers aplenty. And they had lots of interesting things to say. I also vaguely recall a party of some sort.

And now to answer the question, did you learn anything useful?

Sure, although it would take a long time to explain, and after a few minutes of my trying to explain it, most non-geeks would probably lose interest. (Ah, geek— there’s another word that’s changed its meaning, from social misfit to expert in a technical field or hobby.) But if I were to sum it up in one sentence, that sentence might be: as long as there is sloppy code, there will be exploits. Or in other words, as long as there are hacks, there will be hacks.

Burning Down The House

Today, I allowed my system to update to Kubuntu 8.04. While I can’t say I’ve noticed any dazzling improvements yet (KDE 4.0 wasn’t included) there were a few hiccups and impasses. I believe these to have stemmed from the inclusion of Firefox 3.0b5. Looking back over the past few hours, I realize that I should have just rolled back to a stable version from the 2.x tree.

The first problem came when I opened Thingamablog and updated my feeds. I prefer to read some of a post summary, and if it interests me, I’ll open the whole post in my browser. None of the links would open. Firefox was not being launched. I had a similar problem the last time I updated. This time, the problem was still with libjdic, but it apparently wasn’t because I wasn’t using Sun’s JRE. The expected version (5) of the libstdc++ library wasn’t found (having been updated along with the rest of the system) and was no longer offered through Adept Manager (Kubuntu’s package management system.)

I decided I’d rather not go through torment and suffering of trying to locate and install a past version of the library (and its dependencies, and their dependencies, and— oh, look, I’ve cut through a load-bearing column!) Instead, I’d export my feed from Thingamablog (as OPML) and import it into Akregator, KDE’s feed reader. That part worked without a hitch. Even a few feeds I thought were dead came blossoming back to life.

It was easy enough to configure Akregator to open links in Firefox (since embedded video, etc. still has occasional trouble in Konqueror.) It was far from easy to get Firefox let me subscribe to feeds with Akregator. I could click the little orange RSS icon easily enough. I could tell Firefox to make /usr/bin/akregator the default handler for RSS feeds. But Firefox would just not launch Akregator or any other program I’d point to.

After a lot of fruitless hacking of Firefox’s FeedConvertor.js, I happened upon two new pieces of information. First was an Ubuntu bug report for Liferea, another RSS reader. The person filing the bug had the same issue as myself. The fix in this case was to install the firefox-gnome-support package.

The second useful piece of information was that Firefox sends an oddly formatted URL to the external program. Apparently it sends http:/// instead of the usual http://. Writing a small wrapper script to remove the extra slash solved that problem.

Phew… that was a lot of work just to work around the difficulties arising from an update. At least nothing really bad happened this time (such as automagically messing up the bootloader.)

When is BSD better than Linux?

When it gets the job done.

A few weeks ago, I needed to set up a mail server, pronto. A bigwig wanted the ability to send mail remotely, from his corporate e-mail account, without having to use the webmail system. Fine. It’s not my job to argue, it’s to make sure everyone else can get their work done.

While I could have set up a fancy VPN arrangement, I didn’t want to make things too complicated. Instead, I opted to set up Postfix with SASL authentication, which would only require a tweak or two to the user’s Outlook settings.

Since I was under a time constraint, I had to make do with whatever hardware I could scrounge up. I found an unused machine that seemed originally to have been a Linux-based firewall/router appliance. It had 512MB of RAM and a 300 MHz K6 processor. Not exactly a powerhouse by today’s standards, but certainly sufficient to relay an e-mail message now and then. So, I reformatted its mess of a hard drive and began installing Ubuntu. Unfortunately, after the install completed, the machine entered some sort of bizarre spin cycle of reboots. Something about this ancient hardware was throwing Ubuntu for a loop.

After a little bit of research, I realized that something was probably the CPU itself, and Ubuntu just wasn’t going to happen. Since I had already had FreeBSD running on some other pretty low-end hardware (almost identical, in fact) I figured it ought to work in this case, too. And it did.

Faulty Analogies

I am occasionally still asked about the differences between Linux and Windows. Oddly, I find that using terms such as free-as-in-speech, software monoculture, zero-day, design philosophy, proprietary, protocol, and computer usually leads to reactions such as blank stare, glassy stare, indifferent stare, or vacant stare.

Over time, I developed the following analogy. I can’t say for sure whether taking Vista into account would change it much, but I suspect not.

Windows is like an ultra-modern kitchen in a condo you’re leasing.

Your countertops, cabinets, and appliances are all done up in matching stainless steel. Your refrigerator not only dispenses reverse-osmosis water, ice cubes, and crushed ice, but also has a high-definition TV embedded in the door. Your cooktop has induction burners and a built-in grill. You’ve got a microwave oven with presets for every sort of food you can imagine, and also for dozens of types of food you can’t imagine. You’ve even got a talking cookbook that volunteers to make simple dishes for you.

Of course, your friends all have that cookbook, too, so your dishes usually end up tasting pretty similar. Sometimes, the cookbook isn’t even that helpful. For example, if you want to find out how to make an omelet, it might suggest a recipe for boiled water and present several tips on egg-cracking technique.

If you’d prefer a gas stove to an induction stove, that’s too bad. Because the appliances and the kitchen itself belong to the building management, they can’t be replaced until the management company is good and ready to do so, and even then, you’ll probably just end up with a fancier induction stove. You can, of course, paint the kitchen whenever you like and then pretend like everything’s new.

Suppose you want to make ice cream. You can’t just pour a bunch of milk into your stand mixer and then put the mixer into the freezer. First of all, the mixer won’t fit into the freezer. Even if it did fit, there’s no electrical outlet in the freezer to plug the mixer into. Even if there was, that arrangement still wouldn’t work all that well.

That leaves you with two or three options. Obviously, you could go buy an ice cream maker. Unfortunately, your choices there mostly fall into one of two categories. One one hand is an industrial soft-serve machine. It will churn out more ice cream than you could ever eat, and can also make any flavor of frozen yogurt. Of course, the price tag is rather steep, as it’s really targeted toward someone who wants to open an ice-cream parlor. On the other hand, you could get a cute toy designed to fall apart after a certain number of uses, something like the Snoopy Snow-Cone Machine. And shaved ice is kind of like ice cream, isn’t it? No? Well, that’s all right, since you don’t have to pay for the snow-cone machine unless you like the snow-cones it makes.

The third option is, of course, to go to the store and buy some ice cream.

Linux is like a well-stocked garage in a house you’ve inherited.

You’ve got a bewildering array of tools: hammers, screwdrivers, saws, planes, levels, and rows of things you can’t even name. There are even tools for building new tools when the ones you’ve got are awkward or tedious. You don’t have to do that very often, because most of the tools fit together. For example, if you’ve got a bunch of nails to pound, you can attach the hammer to the drill. You’ll want to make sure there are no non-nail objects– such as fingers– in the hammering area, of course. If you want to make sure that you only hammer nails, you can try attaching a magnet to the hammer, or a jig that only allows it to pound nails. You can plug the whole apparatus into a timer and have all your nails hammered in the background.

Your neighbors with similar garages have developed some very elaborate contraptions, and most of these neighbors stopped by with copies of the blueprints to these contraptions when you moved in– just being neighborly, of course.

The problem there is that quite a few of the blueprints require you to stop and refer to another set of blueprints, which themselves require you to stop and refer to yet another set of blueprints, and so forth, until you suddenly realize that you’ve somehow cut through a load-bearing column and your entire garage collapses on your head.

But as long as you manage to avoid chopping through load-bearing walls without taking adequate precautions, you’re free to swap out just about anything in the garage: lights, cabinets, benches, appliances, even the walls and floor. You can make all of those things right th
ere in your garage.


First up is a collection of retrofuturisitic artwork from Eastern Bloc popular science magazines. Even though I don’t believe I’ve seen any of these pieces before, many of them seem strangely familiar. The sensor antenna or weapon aimed at a distant galaxy, the tree within a bubble within a frozen waste, the astronaut with the raygun.

Next, we have a cartoon that I think about now and then. I first encountered a slightly different version of in an old computer science textbook. (How old? It had a few pages on core memory.) Some of the artist’s embellishments are good additions, particularly the easy chair suspended from the tree, and some I agree with a bit less (perhaps I’d switch "as documented" and "as supported".) But the lesson remains the same: the customer wants a tire swing. She wants to go forward, backward, left, right, and around in circles. She does not want to hold the swing and run back and forth, no matter how many seats it has. And while a stationary seat beneath a moving tree may be a clever solution and an impressive engineering feat, it’s kind of like a whistling dog story. Like a whistling dog, it’s astonishing that the thing can whistle — but it doesn’t actually whistle very well.

And speaking of which, Toyota has unveiled a violin-playing robot. Does it, I wonder, have a MIDI interface?

Off with her query string!

Q. There is this one query that I need to stop from going to the default page on my website (index.php). It doesn’t do anything but I have my reasons! I have looked everywhere and no example I found has worked for me. Help me, Obi-Wan Kenobi!

A. Obi-Wan? That’s a name I haven’t heard in a long time. *roll eyes* As it turns out, one way that you can accomplish this is with Apache’s mod_rewrite. If one wishes to entirely remove the query string "plugh=xyzzy" from queries to "" this technique seems to work:

# match the forbidden query
rewriteCond %{query_string} plugh=xyzzy
# redirect without the query string
RewriteRule ^(.*) [R,L]

Tip of the day

I discovered that if you are running Thingamablog 1.1b on Ubuntu, and it won’t launch Konqueror or Firefox when you click on a link in the RSS pane, that could be due to your Java environment. Launch Thingamablog from a shell:

$ java -jar thingamablog.jar

If it says something like this when you click on a link:

Exception in thread Can't load IA 32-bit .so on a IA 32-bit platform.

Then you should find out if you’re using the free Java clone:

$ ls -la `which java`

If that shows a symbolic link to somewhere like /etc/alternates, then this is indeed the case. When I removed the free (as in speech) Java clone and replaced it with Sun’s (free as in beer) Java, clicking on links produced the desired result. The linked pages open in Firefox, rather than Konqueror, but I can live with that.


I don’t know who this Paam person is or why PHP was expecting her, but it apparently has something to do with $. Doesn’t it always? After consulting the following post, which was quite helpful, I discovered that I needed to put $ before my db. Apparently $ really is the root of all evil.

When you’ve stopped scratching your head or falling about laughing and calling your mates in to view the screen (’cos you can’t pronounce the words) just make sure that all your variables have their $s in tact! Googling for it will come up with interesting etymology when you have the time.

I’ve just had the expecting T_PAAMAYIM_NEKUDOTAYIM error

The world of tomorrow!

Here’s something I’ve wanted to see ever since my days on the wrong side of the food service counter: a "vending machine" interface to a fast food restaurant. This one has a point-and-click interface (or perhaps it should be called a "see-and-paw" interface, as it uses a touchscreen) that even a five-year-old could use…well, a five-year-old with a credit card, anyway.

Self Serve

This particular machine was installed at the Jack-in-the-Box in Murphy Canyon. According to the San Diego Business Journal, these kiosks were installed in three San Diego locations in December. That two were installed at this particular location isn’t surprising, as the Jack-in-the-Box headquarters and test kitchens are only minutes away.

This has to be a win-win solution for customers and restaurants alike. The customer can place an order exactly as desired, with no possibility of miscommunication due either to an inattentive cashier or an inarticulate customer. The computer’s digital voice is always unflinchingly polite and it never will come in with a hangover, nor will it get irritable at the end of its shift or chat with its friends when it should be working. I assume this will mean that restaurants in the future will all be impeccably spotless, as the remaining employees will have no excuse not to clean the tables and restroom. Unless, of course, the excuse is that they have a self-cleaning restroom. But why stop there? Why not have self-cleaning booths? Of course, periodically heating the entire dining room to five hundred degrees does pose some interesting challenges, but nothing that a little ingenuity can’t fix.