Modernizing It's All About the Pentiums

One of my favorite rap songs is Weird Al's It's All About the Pentiums. In some ways the exaggerative style of the lyrics have protected the song, and it has aged relatively well, given the subject matter, but even so there are some parts of it that just seem like they could stand to be modernized. Here are a few of my suggestions. (Note that I'm only listing the parts I suggest changes for. The full lyrics, if you don't know them, are available elsewhere.)

original lyric comments suggested revision
Defraggin' my hard drive for thrills While defragmentation is not entirely obsolete
as such, it seems a lot less relevant now than
ten years ago, and indeed there are much
geekier things one can do with a filesystem
these days than defragment it. Unfortunately,
tuning the filesystem parameters for
performance doesn't seem to fit the metre
here, so I had to go with something older,
older even than defragmentation, but something
all geeks still do from time to time.
Partition my hard drive for thrills
(or stet)
Installed a T1 line in my house While residential frame relay is still geeky
in general, T1 is no longer the same kind of
overkill that it was when the song was
written, and many ordinary consumers
have that much bandwidth from DSL or
even cable modem service. My revised
lyric, however, should be good for at
least ten years more.
Installed an OC3 at my house
Upgrade my system at least twice a day The first line here would have been fine
as it stands, except that changing the rhyme
makes the next line easier to work with.
This latter did not age well and is arguably the
worst lyric in the song. (The part about Y2K
was laughable within six months after the song's
release, and probably should not have been
included in the first place.) The line can't even
really be upgraded with a modern equivalent,
because there isn't one. PnP is a very bad
memory for most geeks, with no modern equivalent
really, and nobody is very much afraid of 2038,
most software having already been upgraded to
64-bit datetime values as I write this.
That makes this line a good choice to slip
in something that wasn't on most people's
radar when the song was written in the
nineties. Network security and reliability
seems obvious.
Social networking and user-created content are
another option, but security seems more
likely to still be an issue in ten years.
Threading and Unicode seem too technical,
managed code too likely to be taken for
granted in another ten years.
My battery backup is certified green.
I'm strictly plug-and-play, I ain't afraid of Y2K My generator's clean. My firewall is lean and mean.
You think your Commodore 64 is really neato No one could have predicted in 1999 that the
Commodore 64 would be cool again in 2007, but
the retro trend, among teenagers and gamers,
has really changed the flavor of meaning
this line carries. A small brand substitution
should restore the original sentiment.
You think your Packard Bell is really neato
In a 32-bit world, you're a 2-bit user Yeah, there is still a lot of 32-bit stuff
out there, but the cool CPUs now are all
64-bit, and the days of 32-bit software
are numbered. I wouldn't have revised the
song for this, and it may even be a little
ahead of its time, but since we're making
changes, this should be updated too.
In a 64-bit world, you're a 2-bit user

Wow, look at that. With only six changes (and most of them are very small changes, and two of them scarcely even necessary) a song from 1999 feels current in 2006. Given the subject matter, that's actually fairly amazing. It's hard to find a computer book from 1999 that's worth the paper it's printed on, so these lyrics really have aged quite well.

Book Series and Strange Titles

This morning I just happened to see this book, and it set me thinking. I realize, of course, that Visual Quickstart Guide is the series title, and so they kept it on this book so as to match the other books in the series. Nonetheless, the idea of having a visual guide to text-based markup standards is... funny. Well, it's funny to me. So this set me thinking about what other bizarre or oxymoronic titles there could be, if books on certain topics were published as part of a series with a poorly-matched series title...

  • sed and awk Visual Quickstart Guide

  • Brain Surgery for Dummies

  • Teach Yourself Patience in 21 Days

  • Tex: Quick & Easy

  • Emacs: The Missing Manual

Cleaning Up Digital Photos Again

We had a holiday open house at work again, and again we took photos, and again it's my job to put them in a photo gallery on the web. I'm still working on that at work (we took a lot of photos, and I have other things to do as well), but I brought one photo home because I thought it would make for a good demonstration of some of the techniques I use to clean up mediocre photographs.

Here's a sample of what a section of the original photo looks like. This is how it came out of the camera. (Click the image to see a full-size version. Notice how grainy it is.) As I've said before, the ideal thing would be to take better photographs in the first place. A camera that just does better in low light would be good, for instance. In this case, it also might have helped to take the photo in a different part of the building, but I wanted a photo of the punch stand, and it was set up in just about the darkest part of the library, barring a closet. (The building is an old Carnegie building, and this is the part they barely touched when they remodeled in 1990, because it's near the beautiful historical dome. So no lights were added. It looks fine when you're standing there, but it's not so good for photographs.)

Also, I might have gotten slightly better results if I'd moved closer and used less zoom, but I had to take the shot when I could get it, because there were cookies on the table, and most of the time I'd have gotten shots of several people's backs. So this is the photo I've got to work with. Oh, here's a scaled-down version of the whole thing. This is, again, mostly just like it came out of the camera, except for being scaled down.

The image is a bit dark, so naturally the first thing I did was to take the levels tool and lighten it up. I discussed this step in more detail before, so I won't belabor it again now. The result looked like this.

The image is easier to see now, but if we stop here we've almost done as much harm as good, since the poor quality of the image is also now entirely too easy to see. The image is blotchy with apparently random blobs of strong color -- green, blue, red, purple, ... ick. Scaling down will help (click the image to see how much worse the full-size version is), but I'd like to clean it up a little if possible before I scale it down. So I thought maybe I'd try a despeckle filter. Despeckle is designed for much milder damage than this, but I thought I'd see what I could make it do.

I tried adaptive and/or recursive despeckling, but on an image this bad they scarcely have any impact at all, so ultimately I had to turn off those options. This is unfortunate, because it creates blur, but when an image is this badly speckled, a little blur can actually be better than the alternative.

So this is a sample of what I managed to get out of the despeckle filter. It's a bit disappointing, and if I were a real graphics artist I could probably have tweaked the numbers a bit and got something slightly better, or known which other filter to use and how to apply it, but I'm just a network administrator trying to wear an extra hat, so this is what I managed.

I was tempted to scrap it at this point.

However, I've learned that when you're trying to clear up artifacts, like speckles, from an image, sometimes what doesn't look so good on its own can be useful in combination with the original image, by using one of the various layer blending modes. Of course I had run the despeckle filter on a separate layer that was a copy of the previous image, so by changing the blending mode and adjusting the opacity, maybe I could salvage something yet.

I tried several different blending modes, but I'm only going to show you the ones that I thought worth keeping. Here it is (on the left) with the despeckled image in overlay mode with an opacity of 65%, over the (non-despeckled) lightened image. And here it is (right) with the despeckled image in screen mode with an opacity of 33%, overtop of the version with the 65% overlay, overtop of the lightened image.

The screen and the overlay have different effects, and in this case the one was effectively muting some of the speckles out of one part of the image, and the other was de-emphasizing the speckles in other parts of the image, as well as making the image overall lighter. So I combined those effects, and at this point I did my first scale-down, to 1536x1235 (a factor of the original size), using of course the bicubic interpolation. I also cropped the image slightly, which got rid of the big white thing at the left (which is actually the edge of a rectangular pillar, which is really pink not white, but nevermind).

I hadn't noticed originally, because of the other issues that the image had, but by now it was obvious that I was going to have to do something about the man's red eyes. Generally what I do in cases like this is take the lasso tool and select the most egregiously red parts of the eyes, copy, paste, make it a separate layer, desaturate it, and then turn down the opacity until it looks as close to natural as I can get.

If you want to get elaborate you can also recolorize the eyes, especially if you know what color the person's eyes are supposed to be, but in this instance, especially at this scale, I didn't deem that step necessary. Gray is good enough here.

Finally, I brightened the image up a little using the technique I discussed before, lightened that back up a bit (using levels), noted that the effect was still too strong, turned down the opacity on that layer (letting the previous, unbrightened version show through partially) until I thought it was about as good as I was going to get, scaled it down (bicubic interpolation again) one last time to 512x412 (a factor of the previous size), and this is the result:

Okay, it's still not a terrific photo, but compare it to the original:

A is for apple

A is for apple, B is for ball, C is for caterpillar sitting on a wall.
D is for doggy chewing on a bone, E is for eggnog that you drink all alone.
F is for farctate, G is for Grog, H is for helicopter flying in the fog.
I is for Igloo, J is for Jam, K for kalamari, and L is for lamb.
M is for mnemonic, N for networking, O is for a few people running everything.
P is for pituitary, the size of a pea, Q is for quaffing, R for rascally.
S is for slapstick, comedy that's dumb, T is for tungsten, U for ultimatum.
W is for Wabbit, X for XYZZY, Y is for yoghurt, Z for Zenity.
Now I know my ABC vocabulary. Next time maybe you will sing the song with me.

Book Review: The Age of Turbulence: Adventures in a New World

One of the things various people have said over the years about Alan Greenspan is that he tends to underestimate his own influence. Reading his book, I think I'm seeing that too. For example, in the introduction, he relates how after 9/11 he made a speech that put a brave face on things, saying that the economy had become resiliant to shocks, but he didn't fully believe it and didn't expect he was fooling anyone. Then he turned out to be right: the economy recovered relatively quickly. It's obvious to me that at least part of the reason the economy recovered so quickly is because Greenspan suggested that it would. People believed (correctly, in my opinion) that he was the leading economics expert in the world, and so when he made positive statements, that gave people confidence, which generally has a lifting effect on the economy. Another example: barely a page later, he relates that after a meeting with lawmakers, he went home thinking all he'd done was reinforce what the lawmakers were already thinking, but the press acted like it was his agreement that made the whole thing happen. Well, it probably was. Apparently the lawmakers in question actually believe that the Chairman of the Fed is some kind of expert on economics, and if he agrees with what they're thinking, that gives them the confidence to go forward with it, and if he has reservations (as at the previous meeting) they hesitate (as they did). So now when out of retirement he comes out with a book saying that we are now living in a world with a "global capitalist economy that is more flexible, resilient, open, self-correcting, and fast-changing than it was even a quarter of a century earlier", people are going to believe that, too, and they're going to behave accordingly. I wouldn't have been very surprised if in the wake of the book's publication the economy surged up a bit: Greenspan just said a bunch of positive things about the economy, so let's all go out and do stuff with money. (It didn't work out that way because there were other forces at work, some of which I mention below...)

The historical narrative in the first half of the book is fascinating, not because I wasn't familiar with the basic events (I lived through and remember most of chapters 5-11), but because the perspective of an economist lights things up just differently enough to show up some things (trends, causes, and generalities) that I'd not been aware of before. Greenspan is a much better writer than I would have expected, and his story is compelling.

After going through the economic history of the last several decades, the author goes on to explore the economic issues that are currently facing various parts of the world, and the cultural and political issues that have important implications for economic policy and development. This is interesting material, as well, though of course much remains to be seen regarding how history will bear out his predictions.

Reading this book has raised in my mind some questions.

First, why is the short-term federal funds rate the only lever that the central bank in the US has to effect monetary policy? (I'm not saying, necessarily, that there should be other levers; I'm asking the question because I don't know the answer.) Greenspan indicates that the Fed was aware of the risk to the economy posed by the "irrational exuberance" of the dot-com bubble but was unable to do anything about it. Indeed, they briefly attempted to control the rising stock prices but found their measures ineffective and possibly counterproductive over the long term, so they left off trying. We can't fight market forces, they concluded. So then we had the dot-com bust and several years of pretty hard times for the IT industry, which had an impact on the entire economy. Not much later the Fed again saw a sudden inflation in another market they cannot effectively oversee, the real-estate market. There was nothing they could do about it, and when the bubble popped the housing market deteriorated quite significantly. The results include a credit crunch and the bankruptcy or collapse of a number of major lenders, especially in the subprime market (i.e., creditors that lend to normal people who don't have the 20% downpayment and other resources needed to get the best interest rates). A lot of first-time home buyers have been foreclosed, as I understand it not so much because of wrong that they've done as merely because the market now cannot support the loans they were offered during the real-estate boom. The home (which is the collateral) is not worth the outstanding loan amount, so if they can't make a payment they're stuck: there's no basis for an extension, and they can't sell their way out. This sort of thing is obviously not good for the overall long-term health of the economy, but what could be done about it? Are there additional levers that could (if Congress were so inclined) be granted to the Fed to assist them in more effectively smoothing out short-term economic forces and promoting the long-term health of the economy? And if so, what would be the other consequences of giving the central bank these additional powers?

Price controls obviously are NOT the answer. Just about all modern economists take it as an axiom that if the markets get too far out of touch with reality they will eventually correct themselves, and it is these market corrections that cause all the problems. The sorts of controls that characterize central planning (socialism and especially marxism) are only good for forcing markets further out of touch with reality, which invariably causes more problems than it solves, as Eastern Europe discovered.

However, the role of the central bank, primarily, is to control macroeconomic forces, most especially the value of money. (This is why we call it monetary policy, after all.) Controlling inflation (and deflation, if that becomes an issue) is very clearly within their mandate. But if the inflation occurs because of a situation in a market over which they have little or no influence, how can they control that inflation and keep the value of the currency stable? Besides the stock market and real estate, what other markets are there that the Fed cannot readily influence? What dangers does our economy face in the future? Just for instance (and purely *cough* hypothetically, ahem), what if labor becomes significantly overvalued? What kinds of havoc would the resulting market correction wreak?

A Word About Standardization

If you pay any attention at all to what people in technical circles (especially programmers) are saying, you will be familiar with the concept of standardization: everyone agrees to adhere to a particular standard, or the standards published by a particular body, and as a result everybody's stuff works together. To hear some of the zealots talk, virtually everything about computers, and especially software, should be standardized.

But that's not really necessary, or even a good idea.

What should be standardized in computers and software is exactly analogous to what should be standardized in the physical world. Specifically, it is not the things themselves that need to be standardized, but the connections and interactions between the things. This is equally true whether the things in question are kitchen appliances, part of your household plumbing, audio equipment, or computer applications.

Electrical and electronic equipment varies tremendously in terms of how it works inside and what it accomplishes, but it all interacts with other systems -- specifically, the power grid -- in pretty much exactly the same way. Setting aside for the moment what happens when you travel overseas, and heavy industrial equipment that runs off weird stuff like three-phase, normal stuff all runs off the same voltage (err, one of two voltages) and the same cycle of alternating current and plugs into one of a very small number of outlet styles. (Most things in the US plug into the same one style of outlet, but there are additional special styles for electric stoves, clothes dryers, and certain kinds of lighting. Other countries may have different exceptions. But even the exceptions are standardized: all clothes dryers in the US, for instance, plug into the same kind of receptacle.) If a device needs something different, the manufacturer includes (either inside the thing or along with it) a power supply or plug-pack that effectively makes the differences go away, or it runs off standard-form-factor batteries that can be recharged in a standard charger that plugs into a standard outlet. You can go to any store and buy any electric device for any purpose by any manufacturer, and it may do all kinds of weird stuff on the inside, who knows, but its interface with the power grid will be the same as for every other device. It doesn't matter if it's a computer, a blender, or an electric nose cleaner. You buy it, you take it home, you plug it in, and it Just Works.

Which brings me around to software.

Some things are pretty well standardized already. Network connectivity, for instance, is pretty much locked into TCP/IP. IPv6 has been coming for ten years, but at this point I am not convinced it will EVER replace IPv4, and there are no other contenders at all. There are some new application-layer protocols (e.g., BitTorrent), but these mostly are related to kinds of applications that were never standardized in the past. As far as things that have been around for a while are concerned (e.g., email), the standards are firmly entrenched. (The idea of an email-sending program that doesn't use SMTP has been tossed around in theory on a number of occasions, but trying to get anybody to use one is like trying to sell a life preserver that doesn't float.) The last time I can think of that established protocols were ditched in favor of new ones was when telnet and rcp gave way to ssh and scp. Even there, technically, telnet is still in use as a platform that other protocols (such as http and smtp) stand on top of.

Another place where things need to connect has to do with data. Internally, when a program is working with data, it can use whatever data structure it wants, whatever makes the programmer's job easiest. Nobody cares what structure the program uses internally, except for the people who maintain the program itself. But when the program goes to export the data and store it somewhere (in a file, in a database, wherever), now you have to consider the possibility that the user might also want to work with this data using other programs, and so you need a standard file format.

Programs that don't consider this possibility can end up creating data that the user can't ever do anything else with, and that severely limits their usefulness. There are lots of examples, but I'm going to pick on Microsoft Publisher in particular. Everything I say about it, of course, also applies to any other software that doesn't support any standard formats or other mechanisms for data interchange.

If Publisher could export its publications to a widely-supported format like PDF (or Word document format, or anything else that's widely supported), then people who wanted to send their flier or poster or whatever by email would have a way to do so. Better still, if it just used a standard format in the first place, then the user wouldn't have to go through the extra step of exporting: they could just attach the thing and send it. But Publisher can't do that. It only saves in one format: Publisher format. Nothing can open its files except Publisher. So if a user creates something in Publisher and asks me, "How do I send this to [someone]", there's only one answer I can give them: "Well, first, instead of Publisher, you have to create it in a program that supports a standard file format." Users do not like this answer, because it means the work they've already done has to be thrown away, but there's nothing to be done about that: Publisher simply does not provide for data interchange. (Copy and paste can be used to extract limited portions of a Publisher document, mostly the text, but that is usually not what the user put the most work into and is most eager to preserve.)

I call software like this Dead End Software, because there's no outlet: any data you put into it is trapped there, and there's no way to get it out. I strongly recommend against using such software for anything other than quick one-off work. (By "one-off" I mean something you're never going to need to refer to later, e.g., a Wet Paint sign. Even there you want to be careful, because a lot of times you think you won't need to refer to something later and then it turns out that you do.) It's a black hole, a final resting place for your data. Avoid, avoid, avoid.