Root of all evil

There’s no root of all evil these days. You’re supposed to create an EvilContextFactory to obtain an initial EvilContext, use that to get an EvilEnumeration, and then iterate through the EvilBindings in a thread-safe manner.

Dear Amazon

Please create the following Java MIDP application for my phone: When you run the application and take a picture of a barcode using the phone’s camera, it decodes the barcode, and adds the item to my Amazon wish list or some other Amazon list of my choice. If Amazon doesn’t carry the item, it should add an “unrecognized item with UPC code xxxxx” item instead. Thanks. P.S. Please don’t try to patent it.


J2SE 6 has some interesting new XML functionality called JAXB. Using JAXB, you can take an XSD file and compile it into Java classes. You can then add those classes to your project, create an Unmarshaler object, feed it some XML which meets the XSD, and it will pass you back a tree of appropriate POJOs you can mess with.The only problem is that the XML file my source application generates refers to a DTD which JAXB tries to load via xerxes, causing epic fail.

BlackBerry Curve review

In mid November, our contract with AT&T (formerly Cingular) expired. We switched to T-Mobile and got BlackBerry Curve phones. I was a BlackBerry skeptic for a long time. I didn’t think I wanted a phone with a full QWERTY keyboard. This changed when we looked at the phones available. It turned out that the Curve was only marginally wider than the average phone, perhaps a centimeter or so. It’s otherwise comparable to mid-range phones in size.


Dear Amazon, You’re so almost there with your new Kindle e-book. There are just a few minor details you need to fix to get me on board. First of all, you need Mac support, and preferably Linux support as well, both for content creation and for reading books. There’s really no excuse for not having reader support, as you have a working Mobipocket reader in Java that will run on Mac and Linux, you just haven’t taken the time to package it up properly.

Cleaning up bash customizations

One of the things I found confusing about bash was its startup scripts: there were so many of them. Eventually I snapped and sat down with a terminal and the man pages, and worked out how it actually behaves. Here’s a summary. File Interactive login Interactive non-login Non-interactive Remote shell /etc/profile A /etc/bash.bashrc A† ~/.bashrc B A ~/.bash_profile B2 ~/.bash_login B3 ~/.profile B4 ~/.bash_logout C BASH_ENV A On startup, bash executes any script labeled A in the table above, followed by the first script B it finds.

iPhone remorse?

As the reality distortion field begins to fade, people are starting to wake up to the iPhone’s shortcomings. I’ve been assembling a list of issues I’ve seen mentioned: No SDK. No Flash. No Java. No Bluetooth file transfer. No DIY MP3 or AAC ringtones. Although the camera takes 2 megapixel photos, the only way to get them out is to e-mail them, which resizes them to 640×480. No Bluetooth keyboard support.

Oh, well done Sun

You know how DST rules for the USA have been changed this year, and every OS needs patches? You know how Java doesn’t use the OS’s info, so you have to patch all your Java VMs separately? Well, it turns out that Sun’s “fix” was broken, in that it changed the behavior of the (deprecated) 3-letter time zones EST, MST and HST so that they now no longer reflect daylight saving time at all.


The excitement started a week or two ago when I discovered that my ThinkPad laptop’s internal cooling fan had stopped working. As soon as I did something graphically intense for more than a minute or two, the system would overheat and perform an emergency shutdown. Fortunately, I have a backup laptop. Unfortunately, the backup ThinkPad laptop had also developed a fault. The fluorescent backlight for the display was failing. The screen was a curious reddish-purple color, and very dim—unless I turned the brightness up, in which case the backlight stopped working entirely, and everything went black.

Nokia N800

I bought a Nokia N800. It’s an Internet tablet, about the size of a large PDA or a small thin paperback book; almost exactly the same size as a Nintendo DS Lite, in fact. It runs Linux. It connects via WiFi or Bluetooth. I bought it because I spend a lot of time reading web pages, PDFs and other electronic documents. In particular, my “killer app” was to be able to read the electronic edition of The Guardian with my morning coffee—ideally, in bed.