Sunday, August 5, 2007

Dude, I Got a Dell!

I've been saying for years that if someone would just sell a Linux laptop with full hardware support out of the box, and no Windows tax, I'd buy it. I can't believe it was Dell that called my bluff, but there you are. Now I'm the proud owner of a Dell E1505N, and to my surprise, I really like the thing.

It's not particularly heavy. (It's heavy compared to my snow-white G3 iBook, with which I have a love/hate relationship, but that's an unusually light laptop. By normal laptop standards, the Dell is not heavy at all.) It runs a shade warm, but not hot. It's zippy, it's quiet, and the 3-D graphics run smoothly. (And that's with the Intel 950 GMA; I skipped the NVIDIA option to save money and so that I could stick with free drivers as much as possible. I use 3-D only for screen savers anyhow.)

The screen is big, bright, and gorgeous -- razor-sharp. I sprung for the 1440x900 display, and I'm glad I did. And I got the upgraded, 9-cell battery, which seems to be giving me at least 4 or 5 hours of battery life when sitting on the couch and surfing the Web. They managed not to make it feel or look cheap, and, importantly to me, the keyboard is spacious and has a nice clicky feel.

The nice part is how everything Just Works. The 3-D acceleration, the little scroll-bar areas on the trackpad, the volume and brightness keys, you name it. It even ships with some goodies I didn't expect -- FireWire and an integrated flash card reader.

For some reason, though, even though I got the 1440x900 display, the screen resolution is set to 1280x768 out of the box, and you can't simply increase it. Still, it was easy to find the fix on the Web, so I had that taken care of in minutes. (To save you the Googling, just "sudo apt-get install xserver-xorg-video-intel", then restart the X server.)

The only other thing that didn't Just Work was connecting to my wireless network, and that's not really Dell's fault. The wireless card works perfectly -- I mean, the drivers do -- but connecting it to my WPA2-protected wireless network was a bit of a pain, because WPA2 isn't supported by GNOME's network GUI tools. (Nor by KDE's, as I discovered when I installed the Kubuntu packages.) I don't mind that terribly; it was a fun learning experience for me, but it might be too much hassle for some people. If I'd had a WEP-protected or unsecured wireless network (not that there's much difference, given WEP's weaknesses), the wireless configuration would have been as easy as everything else.

And it cost me only about $1100, including tax and shipping. Displaying my usual flair for good timing, I dithered over buying it just long enough to miss the $200 introductory discount. But it was well worth it at full price; I'm very happy with my purchase. Dell more than earned their money.

The laptop comes pretty close to being a Grandma Experience -- that is, something you could buy for your grandma and expect her to get along without much help. At least, without needing more help than she'd need for another OS. The screen resolution and wireless issues I mentioned above are the only things I've found that don't make the cut, and even those might not be showstoppers. The stereotypical grandma doesn't know from screen resolution and isn't likely to have a particularly advanced wireless network setup -- and if she does, she's likely to be able to find and apply the fixes as well as I did.

My only other gripe is that you must manually restart wireless networking when you wake it back up from Suspend or Hibernate. Presumably, that will get fixed at some point, and it's not hard to work around it in the meantime. But, being used to Mac laptops, which get this (and so much else) right, it is a bit annoying. To be fair, I expect this isn't Dell's fault so much as it is Linux's -- and maybe there's an easy workaround; I haven't had the laptop long enough to go looking.

I won't quite say Dell knocked one out of the park with this system, but it's at least an inside-the-park home run. Despite a few quibbles, I really love the box and consider myself a very happy customer. Well done, Dell!

Alas, the E1505N apparently is no more; they seem to have replaced it with the Inspiron 1420N, which looks even better. Yep, I've got good timing, all right. Well, I might just have to buy that one next.

Monday, April 16, 2007

Claudius is Creepy

CLAUDIUS: 'Tis sweet and commendable in your nature, Hamlet,
To give these mourning duties to your father:
But, you must know, your father lost a father;
That father lost, lost his, and the survivor bound
In filial obligation for some term
To do obsequious sorrow: but to persever
In obstinate condolement is a course
Of impious stubbornness ....
-- Hamlet, I.ii

I must have read or seen Hamlet dozens of times before I grasped one of the implications of this passage. I've always seen the obvious one, that Claudius is attempting to distract Hamlet from his grief. (He goes on to literally promise him the kingdom, for Pete's sake.) It's not hard to see why Claudius, the murderer, doesn't want anyone -- least of all Hamlet -- dwelling on the murder of Hamlet's father. Move along, Danes; nothing to see here!

What I noticed only recently is something Claudius himself doesn't mean to reveal: his own casual, brutal attitude toward death. When he says airily that "your father lost a father," he as Hamlet's paternal uncle is speaking of his own father's death. And it means nothing to him. Death has never meant anything to Claudius, except lately as a means to an end.

More deeply, he's unconscious that death could mean something to other people. He's unaware he's revealing anything about himself because he's unaware that he's unusual -- practically sociopathic. No doubt the way he counsels his nephew Hamlet to experience the elder Hamlet's death, and the subsequent natural grieving process, is simply the way Claudius does it himself: you put on some black clothes, walk around pretending to look sad for a while, and then have a nice sandwich.

He's manipulating Hamlet, to be sure, but I think he's also genuinely puzzled by Hamlet's behavior. Why are you acting this way, kid? Don't you know this isn't how you play the game?

Claudius is creepy. Claudius is cold.

Friday, April 13, 2007

Wii: Blazing Angels: Squadrons of World War II

I like games that let you play at doing things you've always thought about but would simply never be able to do in real life. This is one of those games. I'll never be a World War II fighter pilot (or so I assume), and getting a chance to sample that experience without all the icky noise and blood and danger and death -- you know, without all the reality -- was terrific. For me personally, this game was worth the purchase price for the "Battle of Britain" scenario alone: chasing a Messerschmitt squadron through the Tower Bridge? Awesome!

But I wouldn't expect most people to feel that way. For most people, this game would be a rental at best. It was repetitive and uninspired, and the Ice Canyon segment in particular was needlessly frustrating. If it hadn't spoken to my particular daydreams, I'd have quit well before finishing.

Wii: Rayman Raving Rabbids

Great fun. Didn't take me that long to complete it, but worth the money all the same.

I realized while playing it that I dislike, indeed I downright hate, games with sloppy control schemes. They drive me insane. Most of RRR's mini-games have a perfectly crisp, tight feel to the controls, but some deliberately don't. Specifically, there are a couple of warthog-racing games, and a flying game or two, where your mount has a sort of inertia and doesn't respond immediately to your input. That's on purpose; a galloping warthog doesn't turn on a dime. But I found it frustrating, all the same. Later on I relaxed and started consciously compensating for it, which helped.

Still, that was an aberration. Mostly, the thing was just plain goofy fun. My favorites were the first-person-shooter scenarios where you run around with a plunger gun and a chain, snaring and shooting rabbids as they jump you. Unlike most FPSs, your character follows a predetermined course through these mini-games -- you don't control your position or point of view, you just react as the scenario proceeds. It was great, but without putting it down in any way, I'll add that I'd pay real money for a true FPS with the same concept -- Quake Rabbid, if you will.

The rhythm games on each level, in which you shake the Wiimote and nunchuck in time with a series of songs (increasingly complex, of course), were also a lot of fun but were almost too easy to enjoy. Almost, but not quite. As it was, I enjoyed them tremendously.

Great fun.

Wii: The Legend of Zelda: Twilight Princess

While I admire this game's breadth, I'd have traded a lot of that breadth for a little more depth. To me, it seemed less a great epic, more a rambling assortment of individually shallow puzzles.

There's nothing inherently wrong with that; Rayman Raving Rabbids is a large collection of mini-games, and it's one I had a lot of fun playing. But unlike Rayman, the puzzles in Zelda aren't particularly fun. They just seem to go on, and on, and on, endlessly. (Fishing, for example, was just about as much fun as the real thing.) I got about a half or a third of the way through, found myself in yet another dungeon or temple or whatever it was, and just put it aside. And I haven't felt like picking it back up.

Shallow fun is OK (in all honesty, that's exactly what I bought a Wii for), but this is shallow non-fun. It's just tedious. There are lots of people who passionately love this game -- I think what they get out of it is the sense that they're inhabiting a huge world, following exciting (for them) quests through it. I understand that, but it still didn't float my boat. I didn't hate it -- I sort of wish it well; I had some fun playing it. But I don't really want to play it any more.

Thursday, April 12, 2007

Free Java Compilers for GNU/Linux

For some time, free Java compilers for GNU/Linux have been disappointing. (As with anything in the world of free software, I want to moderate my criticism: if you really don't like something, at least you can fix it, and besides, you should be only so rude about stuff you get for free.)

Where We Stand

The state of things as I see it is this:

CompilerSpeedWarnings/ErrorsLanguage Coverage
javacSlowLousyGreat (1.5)
gcjMediumGreatLousy (1.1/1.2)
jikesBlazing fastOutstandingGood (1.4)
ecjPainfully slowVery goodExcellent (1.5)

So each of these has at least one problem that will drive you crazy. Sun's own javac is slow and gives you the same error message ("unknown symbol") for practically everything. GNU's gcj supports only an older version of the Java language: no generics, no enums, etc. IBM's jikes, too, is falling behind on the language feature front, and is apparently no longer maintained, so that's only going to get worse. Finally, the Eclipse project's ecj is so slow, you can actually brew a cup of java every time you run it.

(Kaffe's compiler, by the way, is just plain hopeless.)

As a result, I wasn't really happy with any of these. For a long time, I stuck with jikes as being the overall best contender, but I was increasingly unhappy about its lack of support for generics, enums, annotations, and other new language constructs.

Finding a Better Solution

When I looked at the alternatives, I was least repelled by ecj. If only there were some way to make it faster ....

Happily, there is. A little investigation showed that the problem was in the JVM startup time. Ecj itself is written in Java, and thus it must start up a JVM every time it runs. So a native-code version of ecj has a chance of being the Holy Grail of free Java compilers: fast, with good feedback and up-to-date language support.

And there's even a way to produce such a thing: gcj. Gcj can't compile ecj itself, because ecj's own code uses language constructs that gcj doesn't support. But one of gcj's many nice features is that it can compile a .class file, or a .jar file full of .class files, to native code. After a bit of experimentation, I was able to compile ecj's .jar files to native code. The resulting compiler is about as fast as jikes, offers feedback almost as good as gcj or jikes, and supports the language as well as javac. It's a winner.


There are still some things I miss about using jikes:
  • Spell-checking. If you mistyped a symbol (a method name, variable name, class name, etc.), jikes offered reasonable alternatives. If you accidentally typed mystring.substrng(...), jikes would suggest mystring.substring(...). Its suggestions were nearly always correct, and the feature was a huge time saver. Ecj has nothing like it.
  • Jikes also behaved better when compiling multiple files. It correctly detected and compiled dependencies, didn't care if you specified a file more than once on the command line, and would compile file N+1 if file N didn't compile (more useful than you might think). Ecj does none of this.
Still, a natively compiled ecj is a really nice option, definitely the cream of the current crop.