News: 2004 -

So, this weekend, I went over to Wicrosoft

11/21/2004 - The modern Site Directory and jumptables now work in all browsers. I wrote a C++ program that parses an easily editable file into a single table. When updating the Site Directory or a jumptable, I run this program to generate a new table. SSI is still used to automatically color and delink the currently selected cell in the Site Directory.

I started off by writing a C++ CGI program to dynamically generate the Site Directory and jumptables. Compared to dynamic generation, static generation makes it slightly less convenient for me to update my website. However, static generation avoids the need to call one or two CGI programs every time a page is served. It's also more secure.

I also believe that I now avoid triggering IE6's quirks mode. I don't believe that this affects anything on my website yet.

11/15/2004 - Unfortunately, the clever Site Directory implementation that I released yesterday worked on IE6 only. I have fixed this; the Site Directory now works with IE6, Firefox 1.0, and Opera 7.54. I suspect that at least two, and perhaps all three, of these browsers are rendering valid XHTML 1.1/CSS 2 incorrectly. I use SSI to serve browser-specific content, as I have identified one thing that works for IE6, one thing that works for Firefox 1.0, and one thing that works for Opera 7.54. Hilariously, each version of the Site Directory is valid XHTML 1.1/CSS 2.

If your browser's HTTP_USER_AGENT mentions Opera, my website serves the Opera version of the Site Directory (this is agnostic to whether Opera is trying to impersonate IE). Otherwise, if the HTTP_USER_AGENT mentions MSIhe IE version of the Site Directory is served. Otherwise, the Firefox version of the Site Directory is served. Hopefully, this last version will work with all other browsers.

Eventually, I would like to find valid XHTML 1.1/CSS 2 that works on all browsers. The current situation is hacky and brittle - but at least it works in the major browsers that people seem to use. If the Site Directory doesn't work for you, please let me know. I will make an attempt to support all modern browsers that are capable of rendering my desired result.

I might break down and use a CGI script that reads a top-to-bottom-then-left-to-right data file and emits a left-to-right-then-top-to-bottom table; this would be guaranteed to work in all browsers, and would emit valid XHTML 1.1/CSS 2.

11/14/2004 - I have massively reorganized the Site Directory. Before, categories were listed vertically on the left, and links within each category were listed horizontally on the right. The result was messy. Each link was surrounded by vertical bars, but that didn't clearly separate links, nor did it strongly associate each link with its category. Having each page deactivate the link to itself was good, but presented insufficient feedback as to the current page's location within the Site Directory.

Now, categories are listed horizontally on the top, and links within each category are listed vertically below. My modern table coloring clearly separates the links while strongly associating each link with its category. Each page still deactivates its own link and now highlights its own cell.

Interestingly, the new Site Directory consumes less vertical space than the old Site Directory, but gives significantly more vertical space to each link. I have also converted the jumptables of my modern pages to the new style; the new jumptables tend to consume more vertical space, but it's definitely worth it.

I think that the new Site Directory and jumptable style is a vast improvement over the old situation. The new style is all over usability like cats on yarn. It's a pleasant bonus that the new style is prettier.

Indeed, I realize that the categories suck. This is a side effect of the problem that I've been struggling with for over a year. Most of the pages of my website are old and decrepit, and revising everything is a long, slow process. Deal with it.

So, it's been over a month since I last updated the website. Part of that time was spent working on the new Site Directory. It looks simple, but it's powered by Server Side Includes and Cascading Style Sheets evil. Like my other modern tables, the Site Directory is automatically colored. This makes adding, removing, and moving links very easy. Unlike my other modern tables, it has a ragged bottom. It turns out to be surprisingly annoying to achieve this. An unmaintainable solution which I first tried was to lay out the cells left-to-right and then top-to-bottom, which is the normal table order. I had to use blank cells in order to achieve the ragged bottom. What makes this solution unmaintainable is that cells are grouped by row in the source, not by column. (The blank cells suck too.) There's no way in XHTML 1.1 to say "please lay out my tables top-to-bottom and then left-to-right". Then I tried using a separate table for each column. This worked, but resulted in the borders between columns being two pixels wide instead of one. Relative CSS positioning isn't a maintainable solution, because the second table would have to be positioned one pixel to the left relatively, the third table would have to be positioned two pixels to the left relatively, and so forth. In the end, of course, I discovered a maintainable solution. Each column is a separate table, and I use a right margin of negative one pixel to make it seem like the separate tables are in fact a single table. I won't even describe the SSI evil that powers the automatic coloring.

I've also spent a lot of time moving from Caltech to Rackspace. The change should have been seamless for readers of my website. My E-mail was somewhat broken during the transition, but it's better than ever now. My E-mail backlog is also pretty large. I really do read all of the E-mail that I receive, but sometimes it languishes in my Inbox, especially when it contains suggestions for the site that I'm not ready to address yet.

I'm working on a new page of science fiction reviews. I really hate to upload an incomplete and totally unreadable page, but certain people on IRC have been harassing me to release the new Site Directory. Remember my ultimate goal: eventually, everything won't suck.

I hate blogs for a couple of reasons. First, most people are fundamentally not interesting. Second, blogs are a very poor way to organize information. Now, I realize that my news posts tend to be pretty bloggy, and for that I apologize. While I think my views are pretty interesting, I don't think I'm all that interesting myself, and my news posts are definitely not organized. That said, I'm now going to describe some things that I've been doing recently.

Naturally, I bought Halo 2 on Launch Day through Amazon, along with the Halo 2 Soundtrack and The Art Of Halo: Creating A Virtual World. Microsoft held a Halo 2 tournament, which I competed in with my friend Ryan "Uller" Myers - we advanced past the first round, but got shut down in the second. Despite what some people have said, Halo 2 has a good ending, although the campaign is a little on the short side. Comparing Halo 2's length to the original Halo's length is difficult because the Library made Halo seem a lot longer than it was. To those who loved Halo but hated the Library - you'll love Halo 2 even more. Go buy it!

I bought a Segway! I ordered the Segway HT i167 from Amazon on 10/18/2004, and it arrived on 10/26/2004. I've joked about naming it the "Out Of Band III". I ride it from my apartment to Microsoft and back every day, and I've taken it to the Redmond Town Center a couple of times. (Next, I'm going to see if I can get to a nearby Safeway.)

The people who say that the Segway is "pointless and useless" are ignorant fools. In fact, the Segway is so fucking cool. Walking up to Microsoft involves marching up a huge hill; it takes me about 22 minutes to get from my door to the front door of the building in which I work. Even when it's freezing cold, I arrive overheated and tired. (And when it's unreasonably warm out, walking is even more miserable.) It takes me 9 minutes to get to Microsoft on my Segway, and I do so in comfort and style. Now I'm no longer tied to the bus schedule; although I can ride any bus in the county for free, the buses stop running on the weekdays before 6 PM, and don't run at all on Sunday. That's a crock.

Going up to Microsoft uses very little charge (about 20% to 30%), and coming back uses virtually no charge, because of the huge hill and regenerative braking. I charge the Segway in my office - it uses a standard power cable, exactly identical to a PC's power cable. The first time I went to the Redmond Town Center - which is about two or three miles away, I think - I wasted some time exploring the local park trying to find a shortcut (it turns out that there isn't a shortcut). This wasted some charge. I went all the way up to Target (which is the furthest store from my apartment) and rode the Segway inside. It's extremely maneuverable. Unlike a bicycle, you can easily come to a complete stop or move very slowly on a Segway. A bicycle occupies a lot of space and has a large turning radius, making it impossible to use in a store. But a Segway occupies only slightly more space than a standing person and has zero turning radius. Target's aisles are nice and wide, and I had no problem getting around. I bought leather gloves there, because my hands were freezing when exposed on the Segway's handlebars.

Then I traveled back and stopped at Borders. There, I charged the Segway for an hour while I shopped. When I had checked out and was ready to leave, I met a man in a wheelchair who was charging from the same outlet in the cafe. Before getting the Segway, I never realized how important it is to have outlets available to the public in stores.

The machine is extremely stable, and its construction screams quality. I had one close call with an SUV as I was going up to Microsoft for the first time - the woman couldn't decide whether to stop or to go. The SUV didn't touch me, though, whereas I was actually hit by an SUV while walking to Target earlier (which I mentioned before). The Segway is safe. People who claim otherwise are either ignorant or lying. Now, I am very careful when I approach intersections. I lost balance on the Segway once while trying to ride it over ridiculously bumpy gravel (the sidewalks on the way to Target are under construction). That was stupid of me - the Segway doesn't make me invincible. Now I understand how the machine behaves, and I'm not likely to try that again. I wasn't injured, however - I just stumbled, and the Segway blinked red and powered itself off. In comparison, I got a nasty scrape to my head and completely mangled my glasses when I was at Caltech and was riding my bicycle back from Target. (I mangled the frames, but surprisingly didn't scrape the lenses, which I was able to reseat in crummier, older frames.)

I voted in the presidential election; it was raining heavily that day, so I held an umbrella while I took my Segway up to the voting place. And what do I have to show for it? That's right! Four more years of an evil, oil-loving administration. Joy.

The Segway is certainly first-generation technology. There are a number of improvements which could possibly be made. While I'm extremely happy with my i167, I can't wait to see what Segway comes up with next. The most obvious improvement would be increased battery capacity. The Segway's 19 pounds of NiMH batteries are good for about 8 to 12 miles. If Lithium-Ion or Lithium-Polymer battery technology can be made durable enough, the Segway's battery capacity could be tripled. Doubling the weight of the batteries would also be an improvement. I'd like a digital speedometer and odometer, but I'd take improved battery technology first.

I'll be the one to save us all.

10/11/2004 - I have started a libnuwen FAQs section, which I will be adding to as I receive more feedback.

10/10/2004 - libnuwen documentation is now available. And there was much rejoicing.

I have had entirely too much excitement in my life during the past month. My apartment got shot up. While I was sleeping, a bullet entered my apartment from an adjoining apartment, went through my open closet door, took a giant chunk out of the wooden door frame, and went into the closet wall. It lost enough energy penetrating those four things that it stopped in the wall and did not enter the bathroom. (Had it continued on its merry way, it would have shattered my bathroom mirror.) I had never called 911 before, but I considered this sufficient reason to do so. The cops came and determined that the bullet really did come from outside my apartment, and found the guy responsible. This other resident claimed he was drunk and remembered letting the gun off. Uh huh. Anyways, that bastard is gone now, at the request/demand of the management, and has been charged with reckless endangerment. I haven't heard anything else about him, and have no grudge against him in particular, but I have this thing against high-velocity objects penetrating my living space. Fortunately, I was asleep in the living room at the time. If I had been awake and getting a washcloth, the bullet could have gone through my neck. That's my favorite neck too.

I am happy to report that I have finally fixed what I called the Fucking IE Problem! While configuring Apache 2.x to perform mass virtual hosting through URL rewriting, I found that IE became unable to download files from virtually hosted websites. Rewriting to was a workaround (for unknown reasons), but it was ugly because it was reader-visible. I have since determined that putting BrowserMatch MSIE force-no-vary in the Apache configuration file completely solves this problem without the need for a reader-visible URL rewrite. Header unset Vary is a more aggressive fix. Apparently, IE gets confused when a Vary header is emitted, and certain types of URL rewriting can cause this header to be emitted. I don't know whether this is Apache's fault or IE's fault (I think it's both their faults); I'm just happy to have it fixed.

Unfortunately, I am currently suffering from what I call the Fucking Outlook Problem and the Fucking WMP10 Problem. In the former, Outlook 2003 SP1 hangs when I leave it running overnight and manages to lock up my entire system. In the latter, WMP10's volume resets to maximum whenever I seek, whether in an AVI or a DVD. Gar. I really should move to Reason soon, since it's all constructed and everything. I'm hoping that the fresh installation of XP will magically make these problems go away. I've just been too busy to move to a new personal computer.

I have discovered that bash lacks reverse-menu-complete. Yet cmd.exe supports Shift-Tab. Furthermore, bash 3.0.0 does not play nice with my uber colored prompt. Grrr.

I invite you to take a look at this open source crap. The moronic authors of this gunk obviously know about the STL, yet they insist on implementing a shitty imitation of it. They don't understand what RAII is, and they don't care. Their claimed "additional features" are already provided by the STL in a far more general, faster, and more usable fashion. It's like they took a beautiful painting, tore it down from the wall, shoveled manure over it, and then claimed that the end result was superior. I hate manure.

I love my non-nuclear oven, which I have been using to bake frozen pizzas. NUCLEARATING THE NUCLEARATOR!

I received the third Amethystium CD, Evermind. The songs on it are good and I've put them on my iPod (which is named Shekondar), but I like the Odonata and Aphelion songs more. I haven't mentioned my iPod since buying it back in April, but I'm definitely still using it. It's one of the greatest quality of life improvements I've had in a long time. I listen to it while walking to and from Microsoft. I also charge it from the wall at my desk, so I can listen to it while I work. It's just so awesome having all of my music always available.

I continue to read science fiction; you wouldn't believe how many books I've accumulated that I have to review. I'll be working on this next.

I am told by my friends that I need to update my website more often. Hmm.

9/13/2004 - I have updated the website's CSS to make blocks of code look super nifty. Check this out:

// A block of good code.

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;

I can also apply different coloring to a code block to mark it as a bad example:

/* A block of bad code. */

#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;

/* (This code is actually good C, but C is crummy.) */

I can also make code or commands mentioned inline stand out. For example:

I can even nest code blocks in order to point out small errors lurking in otherwise good code blocks or commands. With a third highlight color, I can point out how to fix those errors. For example:

// A block of good code with two errors.

#include <iostream>

int main() {
    cout << "Hello, world!" << endl;

// A block of good code with the fixes highlighted.

#include <iostream>

int main() {
    std::cout << "Hello, world!" << std::endl;

My new CSS also gives my new tables a flat, clean look. For example, see the Rating System page. Previously, I simulated the exact look of default table borders on Internet Explorer 6, because that was what I was used to. This looked pretty crummy in other browsers, but what did I care? Now I realize that overuse of 3D effects was a hallmark of the Win9x era. Looking at the default table border style, it really does feel ancient. The new style looks much better, and users of other browsers should definitely rejoice.

Internet Explorer 6's nonconformance increasingly irritates me as I learn XHTML 1.1/CSS 2. Oh, I could do so many cool things, if only IE6 supported them. I cleverly use SSI to automatically color my tables, because doing that by hand is unmaintainably hard. If I had CSS3 available, I wouldn't even need to use SSI, and the code that I write would be so much nicer. I have to perform yet another hack to make nested code blocks look good. Mlar. I hate nonconformance to standards so very much.

While I was cleaning up the website's CSS, I increased the spacing between lines ever so slightly. You wouldn't believe how much time can be sunk into such a minor issue. Perfecting the tables and code blocks took a long time as well. As far as I can tell, the default CSS line-height in IE6 is 1.2. The standard requires the default to be named normal, which it is, but it only recommends that its value should fall between 1.0 and 1.2 inclusive. I used to use 1.3, and now I use 1.4. There should be no further increases, because I'm happy now. I will not make my website resemble the increasing trend of artsy, useless sites which have huge line spacings and narrow columns, as if pages lost value with every word they put on the screen.

I also took the time to tweak many other things. The result should be that my pages look good under a very wide range of conditions. I try to be agnostic to browsers, text sizes, fonts, and resolutions. Previously, my CSS used to set text to black; I was apparently under the impression that this was required when I set the background color. I was mistaken about that, as setting the foreground color is not required for my CSS to validate. I removed the CSS that set the text to black under the assumption that the vast majority of users will not have changed their default text color from black. If a user did change his default text color, then he probably meant it, so I shouldn't go require him to override my CSS to get his desired result. Of course, if a user set his text to a very light purplish color, my site will now be unreadable to him unless he takes further measures, but I consider that to be a "you asked for it, you got it" scenario.

I am increasingly mindful of accessibility. I consider my website to be quite readable in text browsers. Screen readers should have few problems, though I cannot test this myself. I am also aware of color blindness, and I try to avoid conveying critical information by color. Unfortunately, the difference between the light blue "good" code blocks and the light red "bad" code blocks is probably invisible to a monochromat, but that is a graceful degradation - the text inside will still be extremely readable. Also, the red-blue difference should be visible to people with the most common type of color blindness, red-green.

The star ratings are really the only other place where I convey information via color. With the new star ratings, there are images with the same number of stars that differ only in the coloring of the last star. This might be confusing even to readers with fully functional vision, but after much thought I could see no better solution. The images have alt text for When All Else Fails.

I convey information via an image in my "signature" at the bottom of every page, but it has alt text that says the same thing. All of my other images are either merely illustrative or the content themselves. I guess I should work on my explanation of suffix trees, but that page needs revising anyways.

Importantly, my website works with arbitrarily large text sizes. I hate fascist websites that specify dimensions in fixed pixel units, because that breaks things when the reader's font or text size are different from what the writer was using. I run into this problem myself because I force fonts to be Verdana and I ignore small text sizes. This breaks fascist websites, but the alternative, allowing websites to specify crummy serif fonts and microscopic text sizes, is worse. I especially hate when line-height is specified in fixed pixel units, because then lines of text run into each other. Such fascist websites are hateful to people with low vision, especially seniors.

One caveat: while I am more or less resolution agnostic, and you will never see idiotic "best viewed at" notices, I run 3200x1600 myself, and usually view my own website at 1600x1200. I have no sympathy for people who run 800x600 or 1024x768, and I will not specifically accomodate them. My website may develop blasted horizontal scroll bars at such resolutions. On the other hand, that should hardly ever happen except when I present large images side-by-side, and the text itself will not overflow. I suppose I should be more diligent about checking things at 1280x960.

Interestingly, my CSS file used to be 3 KB and 3 pages long; now it is 2 KB and 1.5 pages long. Whee!

See Undisclosed Propensities, Part 2 from Penny Arcade.

"Did I tell you about Ryan? I guess he's into managed code."
"Oh, really? Does he do garbage collection or intermediate languages?"
"Oh, Jesus Christ. You too? Why do you know this shit?"
"Managed code is the wave of the future."
"Everyone but me has gone fucking nuts. I'm the eye of the goddamn storm."
"It must be so terrible for you."
"My vast intellect does provide some comfort."

My Internet woes continue; I am not able to get a T1. If I only lived across the stairwell, it would have been possible, but running new phone lines to my current apartment would require more extensive exterior modifications than my apartment complex's property manager wants. I don't blame him; I blame motherfucking Verizon and their fascist policies.

I looked into upgrading my residential DSL to business DSL, mostly because I hate having my outgoing port 25 filtered. I tunnel right through the filtering, but that's annoying. So I talk to Verizon's incompetent customer service, and I'm told that if I want to upgrade residential DSL to business DSL, I have to cancel the former, wait 12 days, and then order the latter. I asked, can't you just flip a switch? And then this goofball tells me, "There is no flipping of switches". That's a verbatim quote, I swear.

Oh yeah, and I got hit by a car two days ago. The twentieth century's fucking Oil Age is out to get me.

Who can say where the code goes? Where data flows? Only time.

9/7/2004 - libnuwen is released! I will write more documentation soon.

I have updated the Links page. I now use Server Side Includes to make maintaining and updating the page easier. Broken links have been fixed when possible and culled otherwise. Also, I have added a number of links that I've been accumulating for quite some time now. Judging from my E-mail, all anyone ever looks at on my website is my blasted origami polyhedra page. In the months to come, that'll all change. (Then again, I've said such things before.)

Permit me to recount one of my often-told stories, so that I can provide sufficient context for something else. The first trance song I ever listened to (and liked) was Grid II (Trance Mix) by The Cynic Project. This was back in September 2000, if I remember correctly - four years ago! I had somehow received a free CD from (I completely forget how) and was browsing through the songs on it. I only liked one of them, but that was enough to introduce me to Over the years that followed at Caltech, I got a lot of music by metastable exploration. That is, I first found all of The Cynic Project's songs that I liked (basically everything without vocals), and then tenatively branched out to similar artists. This was how I found Oxygenial, Kooz, and Raymond Wave ("big" artists with lots of songs I liked), as well as a number of other "small" artists with only a few songs each that I liked.

One of the latter, Amethystium, had a single track I really liked: Arcane Voices, a combination of trance and Gregorian chanting.

As an aside, let the reader beware: While I am capable of appreciating fine distinctions in many things, such as how much I like a book, or how elegant code is, I have no such rich vocabulary for music. Anything electronic without vocals that I like, I call "trance", unless it comes from a game, anime series, movie, or so forth. Hard trance, melodic trance, progressive trance, electronica, new age, psytrance, techno - it all blurs together for me.

Anyways, back to Amethystium. Now it's four years later, and the world is changed. imploded, a horrible tragedy. I've been trying to pick up the pieces by tracking down artists. Some, like Silent Infinity, have vanished into the bit bucket, but with others I've been more successful. I found Amethystium's independent website,, and on the strength of that one song I liked, I bought their two CDs from Amazon: Odonata and Aphelion. I've been listening to the 25 songs from them combined, more or less nonstop, for the last few weeks. At first I listened to Arcane Voices again, and then I discovered that I really enjoyed Ad Astra, and now I basically like everything. So I highly suggest you do the same, and buy these two CDs.

I just noticed that there is a third Amethystium CD scheduled for release in October. I'll definitely be buying that one. Discovering new music is a very slow process for me, mostly because everyone else has almost no taste whatsoever, so their recommendations are usually worthless. (I did discover Chicane on the strength of someone else's recommendation; it's so fun to be metastable.)

And now, some random annoyances:

Wrt web design, my goal is mastery. I try to make my website internally consistent (ha!) and consistent with what my ideal of a website is. As Jakob Nielsen says, a simple user interface is not boring. I don't play stupid games with links, like making them a different color or fucking up their underlining. Because my pages are fully connected through the navigation table, getting from any page to any other page is easy. I don't make the path to a page mysterious. And I will never do anything to oppress users - no ads, no splash pages, no popups (no links opening in new windows, for that matter), no redirections on external links, and no bletcherous URLs are to be found here.

Of course, my website isn't perfect. I'm still fighting the battle to make my content up to date, and to make my navigation table make sense. I try to eliminate everything useless, though there are still places where I repeat things, or have stuff that serves no real purpose. I'm working on making the deep browsing experience just as good as the shallow browsing experience - I'm kind of worried about this issue. I admit to writing my pages from a perspective of the reader looking at everything in the navigation table. On the other hand, my pages tend to be highly self-contained (it's funny how little internal linking I do; I noticed this when converting the SHTML extensions back to HTML). Given self-containment, it's just a matter of making each page skimmable, and I think proper use of jump tables helps significantly in that area - if people notice them hiding under the navigation table, which may not be the case. Because I refuse to break content up into multiple pages, I reduce navigation complexity.

8/23/2004 - My cat, Peppermint, died of natural causes on July 26. She was about 12 years old. I didn't learn about this until yesterday because my parents didn't know how to break the bad news to me.

When I was 9 years old, one of my father's coworkers found a stray cat who had recently had kittens. He gave the kittens away, and my father got one - probably because my sister and I had been harassing our parents for quite some time to get a cat. It's hard to believe that Peppermint was around when I was in elementary school. When I was at Caltech, I generally disliked returning to Colorado because I had to leave my computer and mighty Internet connection behind, but I always got to see Peppermint, and that made the journey worth taking.

She was a good kitty, and we gave her a good life. What more can a stray kitten ask for than to find a warm house with limitless food and drink, to find people to harass or ignore at will, and to die in her sleep in her cozy bed at a decent old age?

Stephan And Peppermint, October 1992 Stephan And Peppermint, September 2003
Stephan And Peppermint, October 1992 Stephan And Peppermint, September 2003

I miss her terribly.

Peppermint, May 2004
Peppermint, May 2004

8/17/2004 - I went on another Borders book-buying spree, and picked up an anthology of SF short stories because it contained a new short story by Vernor Vinge and for no other reason. The other short stories were mostly unremarkable, but Vinge's story was spectacular. I later discovered that it is available freely online. You should go read "The Cookie Monster" by Vernor Vinge immediately, I'm not kidding. It's that good. I'll write a full review soon.

Two weekends ago I went to a movie theater and saw I, Robot and Spider-Man 2. (It's kind of neat having a movie theater that I can reach without a car. I suppose that was true at Caltech too, but I never walked to that movie theater by myself.)

Before I, Robot started, there was a projector ad for the Penny Arcade Expo. It was a reasonably mind-bending experience, like the reality of the Internet started to blur into the unreality of the mundane physical world. I also saw the Halo 2 teaser, or trailer, or whatever you call it (the one with, yeah), which was pretty impressive to see on a large screen.

24 frames per second is abominable. I want 100, god damn it.

So yeah, I, Robot. While I will not be sucked into doing a full review of the movie, I'll say that it was pretty good, and better than I was expecting. I liked Bicentennial Man more, but I think I'm in a small minority there. Hopefully, I, Robot's success will spawn more, and better, movies based on The Grandmaster's works. (Can you say Peter Jackson's Lord Of The Rings-esque Foundation quintilogy? I knew you could!)

I, Robot isn't based on any specific short story, but that's okay. Susan Calvin in the movie is way more elegant and beautiful than she has any right to be, but I'm okay with that too. My problem with the movie (and here comes some spoiler material) is that it doesn't treat the Three Laws with enough respect. One part of the film that I really enjoyed was when the obsolete robots try to save Will Smith's character, crying "Human in danger!". That had the perfect Asimovian tone. Allowing an overly narrow interpretation of the Three Laws to be behind the bad guys was okay too. But implying that a robot had to be made free of the Three Laws in order to be "good" wasn't okay. It could have been handled in a much more clever fashion. Asimov himself rarely bent the Laws, and he never had to invoke a robot utterly free of them.

Furthermore, upon later reflection (after I left the movie theater), I was annoyed that Alfred Lanning had to go to such lengths to commit suicide via a robot. Within the Three Laws, it's incredibly easy to do so. First you order the robot to break the window, because you merely wish to examine the broken glass, or some such excuse. Then you order the robot out of the room and jump.

These are pretty hardcore, purist objections. I suppose most people have no problem with such things, which is why the movie has been so successful.

Spider-Man 2 was good. Probably better than the original Spider-Man. I vaguely worry that its ridiculously inaccurate portrayal of fusion will lead to public fear of the technology when we finally get fusion reactors that produce more energy than they consume.

Unfortunately, last weekend was consumed by moving furniture and assembling furniture. My hands hurt. However, soon I'll be able to put Reason and Northy on a nice desk.

My portable air conditioner, the Haier HPAC9M, works extremely well. I heartily recommend it, as I am currently perched on top of a metal folding chair, which I have hereby dubbed The Frozen Frone.

Still working on getting that T1. A Verizon tech (hilarious, isn't it) had to come out and hook up the T1 line to my apartment's phone box. Then a Covad tech came and told me that I have only one pair of phone wires going into my apartment, and the T1 signal cannot coexist with a dial tone. Fortunately, my apartment's property manager will allow Covad to install a second phone line, which should happen Real Soon Now. Had that turned out to be prohibited, I was looking into getting a dreaded cell phone. Thankfully, that was not the case, so I can remain free of blasted human contact. Also, I was all happy about setting up Direct Suck with Verizon. My phone bill is now automatically deducted from my checking account. I wasn't looking forward to canceling what I had just set up. I should never have to pay bills myself, really. The stupidity of our financial system is overwhelming.

There are now thirty Weasel Commandos. It may be the case now that attaining that exalted status is easier, and the rewards are greater, but now that elite corps interferes with my work less. Perhaps it's ridiculous, but damn it, it's my bit of ridiculosity. (In imitation of someone else, naturally.)

8/10/2004 - I've updated the Rating System page and significantly expanded the table there. I now have explicit low and high versions of the five, six, and seven star ratings, which will make it easier for me to write reviews. Before, I attempted to impose a total ordering on anime and fiction, creating low and high ratings as a side effect. Now that I have more bins at the high end, I don't need a total ordering anymore (which is basically as bad as a percentage system, if not worse). Imposing a total ordering was very difficult and time-consuming.

The updated page includes an explanation for every rating, as well as how each rating corresponds to some kind of recommendation, or lack thereof. The ratings apply to anime, fiction novels, nonfiction books, and whatever else I choose to review in the future. I've been encouraged to review the television series and movies that I watch, but I don't think that'll happen any time soon. I've got too much else to do!

8/4/2004 - I have implemented some SSI magic that automatically colors table cells in a neat pattern. See the Rating System page for a good example. The magic allows me to easily add, delete, or move columns and rows around without having to worry about getting the coloring right. Unfortunately, the SSI directives are somewhat verbose, but it's the best I can do without moving the entire website over to XML/XSLT.

8/3/2004 - I have removed the mostly useless creation dates from the page footers. They will be replaced with marginally more useful updation dates. For example, the Index & Plan used to say "Created August 14, 2000.", which meant virtually nothing. Though it has existed for a long time, it's also the most current page on the website. Now it says "Updated 8/3/2004.", which actually means something. Thanks to SSI magic, the updation dates will be appearing on the pages that I edit from now on. I figured it would be misleading to add such dates to pages I haven't updated yet.

8/2/2004 - I'm now living in Redmond, Washington! Since my last site update, I have been extremely busy. One moment I was a senior going about my usual routine, doing familiar things in a familiar place with familiar people. And then everything changed in an instant. Now I'm establishing new routines and finally getting settled in, though I'm far from finished.

My parents had driven from Colorado to California to help me move up to Washington. When I originally came to Caltech, we drove from Colorado to California in the family Buick LeSabre with a U-Haul trailer attached. I say "we", but my mother actually drove, while I listed to The Cynic Project's Grid II endlessly. Then I spent 4 years of accumulating stuff: lots of books, two 21-inch monitors, a large computer, a behemoth computer, and the like. So this time around, we got an entire U-Haul truck, in addition to the Buick. On 6/11/2004 I graduated from Caltech, and my housing contract expired on 6/12/2004. That afternoon we finished loading up the U-Haul truck and the Buick (this time, "we" consisted of my mother, my father, and myself), I said goodbye to the best room I ever had at Caltech, and we were off. (My second Avery room was most triumphant because it was on the first floor, had Ethernet, had air conditioning, lacked ants, and I got to stay in it for over a year.)

Upon arriving in Washington, Microsoft provided a temporary apartment and helped me to find a permanent apartment. I really don't know how I could have done this without Microsoft's assistance, and I shudder to think of what moving all the way to New York would have been like. Since then, I've been trying to put my life back together the way it used to be, or even better. I got a bank account set up, with a credit card attached. At Caltech, I used the credit union there, but I couldn't write checks myself, and I didn't have my own credit card. So, my financial situation has definitely improved. (Or has it? I shouldn't be allowed to walk into a Borders bookstore with a credit card of my own.)

I also spent quite some time learning how to get around this place. When I lived in Avery House, I was a 5 minute walk away from Jorgensen, the CS building. I was a 15 minute walk away from Target, Borders, and Ralph's (the grocery store in Pasadena). Now I'm a 20 minute walk away from Microsoft, and the way there is all uphill. (Fortunately, the sun is behind me in the morning going to work, and in the evening returning from work.) I need a bus to get up to the Redmond Town Center, and even then it's a 25 minute walk to Target. Along the way there's a Borders, a Safeway, a McDonald's, and other useful places, but having to take a bus there and back combined with walking for at least 50 minutes makes going to the Redmond Town Center a big occasion. (Perhaps this is the only thing keeping me from spending all of my money at Borders.) More annoying than the fact that the bus doesn't stop directly in the Redmond Town Center is the fact that it doesn't run at convenient hours: it stops around 5 PM on weekdays, around 7 PM on Saturday, and doesn't run at all on Sunday. I'm a staunch opponent of getting a car, so my transportation situation is worse off than when I was at Caltech. One bonus, however, is that Microsoft provides free bus passes to their employees; I just show the back of my Microsoft badge to the bus driver, and I'm golden. (They told me the wrong thing at New Employee Orientation when they said that the bus pass is only for getting to and from work; the receptionist whom I got the pass from, as well as Microsoft's website, confirmed that the pass is good for getting around the entire county.)

I don't have an air conditioner right now, but I've ordered a 9000 BTU portable model. We'll see how well that works.

I now have my very own washer and dryer, so I can finally fall asleep while doing laundry without anything bad happening. Yay!

The most serious regression has been my Internet connectivity. I spent two horrible weeks without any Internet at all thanks to Verizon's evil and incompetency. First off, I don't need cable television, and I refuse to get cable Internet. But if I want DSL at my apartment, I must go through Verizon. What determines whether you can get DSL and how strong the connection is is your distance from a thing called the DSLAM, which is usually, but not always, at the Central Office (CO). The law states that Verizon has to allow other companies (e.g. Speakeasy) to provide DSL from the CO. However, Verizon is not required to open up their DSLAM to competitors when the DSLAM isn't at the CO. And, of course, that's the case for my apartment. The DSLAM that serves my apartment is connected to the CO via fiber, over which no DSL signals can pass. Thanks to this wonderful bit of stupidity and cowardice, Verizon has a DSL monopoly. And they provide craptacular service: supposedly 192 KB/sec down, 48 KB/sec up. They don't even offer multiple plans; I get to take it or leave it. (Business DSL is the same speed, but with a static IP. I didn't bother.) It gets worse, though; in actuality, I get 80 KB/sec down and a mindbogglingly abominable 13 KB/sec up. Combined with a dynamic IP, and the fact that Verizon blocks outgoing connections on port 25, I'm so angry I could strangle kittens. It took me those two weeks to figure out that I had to go through Verizon and to finally set up service with them. (In fact, not knowing anything about this sort of IT gunk, I didn't get the real story which I present here wrapped up with a little bow - my friend Ryan Myers figured out the DSLAM stuff later. All I knew was that Verizon could give me service and Speakeasy couldn't.)

I am currently working on getting an actual T1 line to my apartment. This should happen in the next couple of weeks, if everything goes well. Verizon's stunning incompetence cost them about eight hundred dollars a month; I was ready to get a T1 through them until they told me they wouldn't give it to me. Covad, however, is all too happy to take my money. Good for them! Fuck you, Verizon.

Now, for things more related to the website. I am currently looking into colocation. nuwen does approximately 30 GB of traffic per month, and I believe I've found a colocation company that provides what I need. is now my website's official name. Attempting to go to will take you to my 404 page. ( will break entirely at some point in the future, but not just yet.) If you used, shame on you; that was my local copy of the website, never intended for public viewing (though most of the time it was identical to the copy on nuwen).

How long is going to last? Forever, essentially. The same goes for my E-mail address.

I've converted all of my pages back to having .html extensions; since I can make Apache parse such files for Server Side Includes, there's no reason to expose uglier URLs to users. If you attempt to reach a .shtml file, the URL will be magically rewritten. (And no, I'm not going to change my mind again. Had I known about this Apache magic in the first place, I would have never changed all of the extensions.)

While moving to Redmond, I read and reread the first five Harry Potter books. Now I can't wait for the sixth, argh. While stuck without an Internet connection, I played through Star Wars: Knights Of The Old Republic; my first playthrough took 33 hours. It's really an excellent game, almost as good as Deus Ex. (KOTOR's gameplay is probably better than DX's, but DX has a superior story, and so wins overall.) I played as the Jedi Knight Theresa, though I never quite managed to max out her light-sidedness. (If you do, your character is shown standing in a really spiffy beam of light.) It wasn't until my second playthrough as Darth Roger that I noticed what they did to the first person view through the droids; it's a hilarious nice touch. I played as Darth Roger for only 8 hours before moving on to other things, though.

I also played through The Chronicles Of Riddick: Escape From Butcher Bay. It's also a really good game; there's just something about acquiring shanks and shivs, as well as killing other prisoners for money, that's just incredibly intoxicating.

I'm now co-submitter of C++ Library Defect Report 475. Oooh, shiny.

I updated my microautobiography - it's slightly funnier now - but I haven't gotten to the gargantuan version yet.

I finally watched Full Metal Panic Fumoffu, which I now need to review. I've also read like a hundred fiction books since I last updated my reviews, and I wish that I were making that number up. The reviews will be the next thing I update, really.

Reason, my second self-built personal computer, is finished. I want to slap a GeForce 6800 Ultra in it, but otherwise everything is great.

Northwood, my first self-built personal computer, is about two and a half years old now. It has aged remarkably well. For a while, I thought it was becoming increasingly decrepit, as I couldn't play DVDs in Windows Media Player 9 without that program crashing every 30 minutes or so. This sucked, because I really like WMP9 for video, and I hated having to use PowerDVD, which sucked but wouldn't crash. Worse, XP Pro would frequently get hung, almost wedged. This tended to happen when I launched a new program, especially Internet Explorer, especially from my special middle mouse button shortcut. The mouse cursor would move, but I couldn't bring up the Taskbar. Sometimes I could get Task Manager up, which showed that no process was eating up the CPU. Some of the time, after hitting the WinKey and Ctrl-Alt-Del enough, I could get the Start Menu to appear, after which my program would launch and the system would return to a usable state.

At first I thought that the problems were simply caused by bit rot, but it didn't seem right to me that my beloved XP Pro should start to behave like 98 SE after two and a half years. In fact, both problems turned out to be Not Microsoft's Fault. (Whether they were Not My Fault is debatable.) The Fucking WMP Problem, as I liked to call it, was caused by the ancient version of PowerDVD that I was running (2.55). WMP can't play DVDs by itself; another program capable of playing DVDs must be installed for WMP to gain this ability. (This is Not Microsoft's Fault either, and the reason for it is the same reason that the Xbox isn't capable of playing DVDs without a special dongle; there are evil licensing fees involved.) The ancient PowerDVD was buggy in such a way that it caused WMP9 to crash, but wouldn't crash itself. I uninstalled PowerDVD and installed the ASUSDVD that came with Reason's GeForce FX 5950 Ultra. ASUSDVD is simply a rebadged PowerDVD, but a modern version. Now I can play DVDs in WMP9, and it's rock solid. In fact, I can fullscreen them without horrible resizing artifacts (which I used to experience). Yay!

The Fucking XP Problem, as I liked to call it, was apparently caused by crummy video drivers. I installed the latest NVIDIA drivers, ForceWare 61.77, and the problem simply went away. The corresponding Release Notes mention a significant resolved issue, "Windows XP: nView Desktop Manager causes Response Time Logger to use 98% of CPU resources". I have no clue what this means. Extensive Googling turned up nothing on this Response Time Logger, and my coworkers at Microsoft have never heard of this thing. But the issue sounds suspiciously like it was behind what I was experiencing, and it seems to be completely cured now. Certainly I haven't experienced the Fucking XP Problem since upgrading. (It was a rather random thing before, unlike the Fucking WMP Problem which happened with surprising regularity.) Thank the Lord God Of Earth And Erna that NVIDIA fixed this bug, whatever it was.

Even though Northy is now restored to usability, it's still two and a half years old, which is why I'm eager to switch to Reason soon. That should hold me for at least a year, until I build Demerzel.

I plan to work on the website for an hour each day, so that I can make its reality finally match my vision for it. You'll see.

6/11/2004 - I have graduated from Caltech with the degree of Bachelor Of Science With Honor in Computer Science. The harrowing down-to-the-wire tale of that journey is best saved for another day. I am now moving to Redmond, and I hate moving.

My E-mail will be up during the move, but I will be more unresponsive than usual until Northy gets set up again.

And she shall reign forever in science.

6/2/2004 - So, here's the news:

I have been hired by Microsoft!

I start work in about a month as a Full Time Software Design Engineer working on Outlook. It's amazing to realize that I didn't even know C exactly four years ago.

I had applied to the CS PhD programs at eight graduate schools, as well as to two fellowships. I was accepted by:

I was rejected by:

I also applied to Google for an internship, and was rejected. Don't worry. I'm keeping track of everyone who has ever rejected me, so that I can make fun of them in my Turing Award Lecture. And I'm going to make fun of MIT twice.

This is the culmination of over half a year of work. Not only did I have to complete and mail ten grueling applications, I had to walk to the nearest United States Post Office while it was raining and my umbrella was shattering, take the GREs, get thirty-two separate recommendations from professors, fly out to Colorado and back during a freak snowstorm, fly out to the Right Coast and back (not to mention drive around there with my father), write several versions of my resume, fly out to Washington and back alone (the first time I've ever done that), and go through the intense Microsoft interview.

As a result, I've gotten to know planes and airports better than I ever did before. I used to fly to Colorado and back during winter break and summer, but I've never flown so much in such a short amount of time.

The interesting part of this is that I didn't contact Microsoft; they found me, through the crummy C++ page that I've been meaning to massively revise for quite some time now. Am I ever glad I put up the crummy version so long ago! The Microsoft interview process is well designed. First you send them your resume and they schedule a short phone interview with you that takes about half an hour. The phone interview is nontechnical, and as far as I can tell, it's used to screen out obvious losers. At the end of the phone interview, they told me immediately that they wanted to do the second interview. Ryan "Uller" Myers, who I met online and who works at Microsoft, says that a couple of days passed after the phone interview before he was told that they wanted to see him for the second interview.

The second Microsoft interview is the intense one. They fly you up to Redmond, Washington and put you up at a hotel. On the interview day, you walk in and fill out an application form which is pretty short. I hate forms, but the Microsoft application form didn't annoy me. Maybe I had just gotten used to forms after all of the graduate school applications. I was pretty nervous after filling out the form, and I tried to put myself at ease by closing my eyes for a while. (The only other real interview I had ever done - Target and FedEx don't count - was the MIT undergraduate interview, and we all know how that went. Bastards.) Then you start by talking to the Human Resources person that they've assigned to you. They tell you what to expect from the rest of the day and they throw some more nontechnical questions at you. Both my phone interviewer, Jennifer Graham, and my second interviewer, Mindy Honcoop, were really nice. I felt a lot better after Mindy interviewed me, probably because I got to talk about Systems Software Research Is Irrelevant. Then the technical interviews start.

Traditionally, I never prepare for anything - before a standardized test (SAT I, SAT II, ACT, GRE) the only thing I'll do is take the example practice test that they give you for free. Microsoft was no different. I'm aware that there are books with example Microsoft interview questions and advice for the interview process, but I didn't read any of them. They did send me Microsoft Visual Studio .NET Professional, which I installed shortly before I left. I figured out how to compile Hello World in their GUI (which is extraordinarily crummy, by the way), but that was irrelevant, since you never sit down at a computer during the interview. All of the programming questions that they throw at you, you demonstrate on whiteboards. And I love whiteboards.

The whole interview lasts about eight hours, and they take you around from interviewer to interviewer. Each session lasts about an hour, and they throw brainteasers and programming problems at you. I remember being given four brainteasers, fewer than I expected. Three of them (ball balance, cheating husbands, and look and say) I had already seen before. In fact, the ball balance problem was on one of my homework sets in CS/EE/Ma 129a Information And Complexity. I had seen the look and say sequence back in high school, when I was learning conceptual math deeply. Of the four brainteasers they threw at me, the only one I thought was unfair was the look and say sequence, since you either see it or you don't, and if you don't see it, unbounded amounts of cleverness (e.g. repeated differencing) are unlikely to reveal the solution. Fortunately, I had already seen it, but I bet that if I hadn't, it would have stumped me.

The one brainteaser that I hadn't seen before was an extremely clever one, and I eventually solved it (with some assistance). I won't reveal what the "Hundred Prisoners Problem" is here, but I will tell you what it is if you join my IRC channel ( #beyond). Yes, that's a cheap trick to get smart people to join the channel.

The programming questions were interesting. All of them were very reasonable. (I don't remember the faces or names of my interviewers well, but I do remember the questions!) The only question I didn't like was "x ^= y ^= x ^= y", as that violates the sequence point rule in C and C++. I tried to tell my interviewer that, but I don't think he was sufficiently convinced. Anyways, I was able to solve the question - I just didn't like that particular macro.

They told me the results a couple of days after the interview. (I flew out on Thursday, April 22, interviewed on Friday, April 23, and flew back on Saturday, April 24. I heard the results on Monday, April 26.) It wasn't until a few days ago that all of the paperwork was signed and completed.

So, here I am. I'm now 21, graduating from the big dawg of universities, and going to work for the big dawg of software companies.

Recently, I have been struggling to graduate, because I must pass Ch 3b Experimental Procedures Of Synthetic Chemistry. It's been three years since I've taken chemistry, and four years since IB Chemistry HL. I'm really bad at chemistry now. For a while, my passing Ch 3b looked dicey, but now I think it's a lock. I busted out 15 hours of lab work in one week (the usual amount is 6) to make up some missed labs, and I just turned in the third and final report. I need a D in the class to graduate. Maybe I'll surprise myself and get a C. (Oh, how the mighty have fallen.)

It's not so much that I hate experimental chemistry in and of itself. It's got tubes and vacuums and reflux condensers, and I get to accurately weigh out and measure things. In contrast, programming involves virtually no physical interaction. What I don't like are schedules. My lab sessions were 8 AM to 11 AM and 1 PM to 4 PM on Wednesdays. 8 AM is an ungodly hour at which to do anything. After missing several lab sessions, I rotated my schedule by 12 hours, so I'd wake up at midnight, do lab, and fall asleep shortly after lab finished. I'd have liked the class much better if I could have gone in at any time I wanted for as long as I wanted. I also don't like prelabs - that's what the notebook they hand out is for! I also don't like writing up reports. And to think that my declared major used to be chemical engineering.

libnuwen is currently at version nuwen::suffix_tree memory consumption has been decreased. bwtzip2 shouldn't be too far off now. TranscendForum is rapidly coming together.

A word of warning: procmail violently misbehaves if a regular expression starts with a backslash. Use an empty set of parentheses to work around the problem.

Whatever the best is, I'll learn it, and learn it in days not years. And when that best is suddenly obsolete, I'll learn whatever new thing gets thrown at me.

5/16/2004 - I have ordered all of the components for my new computer Reason. I'll be constructing it soon. Eventually I have to get around to updating the appropriate webpage; Reason's final spec differs significantly from earlier versions of it.

I finally broke down and installed Deus Ex: Invisible War. However, it won't run. I have never before bought a computer game that simply wouldn't run. DXIW hangs with a black screen and crashes when I try to Alt-Tab back to the desktop. Since my video card (5800 Ultra) is certainly capable of playing the game, and I was able to run the hideous demo, I don't know why the full game crashes. I figure I'll try to install it on Reason. Eventually.

I also finally got around to reimplementing part of bwtzip as nuwen::suffix_tree in libnuwen. I made significant changes and improvements to the code, and also vastly expanded the set of services provided by my suffix trees. Out of 597 lines of code, I had made 4 compiletime defects, all of which were easily fixed, and no runtime defects. I was rendered incoherent for quite some time after the code compiled and the tests finished. So far I haven't identified any more defects in the code, either. I did add a test that at first didn't work, and then didn't test what I wanted it to test, but both were easily fixed. I don't think incorrect tests count.

Furthermore, nuwen::suffix_tree consumes 39 N space (not counting the input itself), and this rises to 43 N when doing a suffix sort. I think bwtzip was at 50 N, so this is a clear improvement. I timed both suffix tree construction as well as suffix sorting, and compared to bwtzip, libnuwen is about as fast at the former and significantly faster at the latter. I have some ideas for further improvements that I still have to implement.

I applied to Google for an internship this summer and they rejected me. They didn't even send me the gift just for applying that they promised to send. Bastards. They should be aware that I'm keeping track of everyone who's ever rejected me, so that I can make fun of them in my Turing Award Lecture. That'll show 'em.

I should mention that something very cool is happening, and that I do have some excuses for not updating the site recently. I can't reveal what this cool thing is yet, but I will be able to soon. Let's just say that it involves a young man being reunited with his kittycat after four long years. Come to think of it, I took a few good pictures of Peppermint the last time I was in Colorado, but I haven't put them on the site yet. I also have a reasonably good picture of myself, except that I no longer wear my huge glasses. I really need a digital camera.

Gully Foyle is my name
And Terra is my nation.
Deep space is my dwelling place,
The stars my destination.

4/18/2004 - I bought a 15 GB iPod from the Caltech Wired a few days ago. It's pretty neat. Naturally, it didn't take me very long to find a bug in it, but it's still a reasonably nice piece of hardware.

The bug that I found goes like this. Sporadically, the Music Quiz game will stop working, reporting that no songs were found, even when the iPod is full of playable songs. The solution to this is to reboot the iPod, or in iPod terms, "reset" it. Unlike "restore", which is equivalent to a complete format and must be done with an attached computer, "reset" can be done by pressing a few buttons on the iPod and preserves all data and settings. The Music Quiz game usually works after a "reset".

My Audigy has a FireWire port, which I had never used until now. With it, I can transfer my songs to my iPod at about 10 MB/sec, and I can charge it too. iTunes sucks for ID3 tag editing, however, and organized ID3 tags are very important for the iPod, since it has no concept of folders.

So, I've found that I really like ID3-TagIT 3.1.0. It basically does everything I want - you can nuclearate all ID3v1 tags, mass remove/set ID3v2 fields, and (most importantly) fill in ID3v2 tags based on the filename. Of course, it can do a whole lot of other stuff, but that's just what I wanted it to do.

I also tried Mozilla Firefox. Alas, within minutes I had identified seven regressions with respect to Internet Explorer. Sorry, Mozilla Firefox, but you're not ready for prime time - not if you can't even do what Internet Explorer does.

4/12/2004 - My life continues to conspire against me, ensuring that I never have enough time to work on my website.

My E-mail address has changed. It should now be stable for approximately a decade. My old E-mail address will continue to work until I graduate, but it is now deprecated. My new E-mail address is now correctly displayed on every page of my website.

The canonical URL for my website is now Of course, goes to the same place, but is more verbose. will work until I graduate. I have updated things so that if an HTML page is requested, the correct SHTML page from is returned. Also, the 404 page is now served from

I figured out a while ago how to have HTML documents parsed for Server Side Includes, making my HTML to SHTML switchover useless. Honestly, I'm too lazy to switch back now, since both work. Even if I did, I'd have to support the SHTML URLs forever, which would be the exact opposite of the current state of things.

Regarding my Orson Scott Mlar rant, I received one response from a religious zealot, and one response from a sane person. I can't quite understand why religious zealots would be reading my website, of all things. It should be noted that I am well aware that Orson Scott Card doesn't live in Utah.

I am, however, proud to report that I have finished my new MinGW distro.

This represents at least dozens of hours of painful, painful work. It includes gcc 3.3.3 and boost 1.31.0, among other things. A full manifest is provided in the archives. I will be creating a dedicated page for the distribution, as well as an introduction to C++, in the near future (but remember the aforementioned conspiracy against me).

2/26/2004 - First, read the essay "Humpty Dumpty Logic" by Orson Scott Card.

Then, try to contain your seething rage. Resist the urge to rip cute fluffy baby kittens to shreds with your bare hands. Also try to resist the urge to order a thermonuclear strike against Utah. The former is just plain mean, and the latter won't do you any good if you don't have nukes yourself. If you do have nuclear weapons at your command, that's a different story! (Don't worry, Kim Jong Il. Knock yourself out. We won't mind, really. Nuke any state as long as it's Utah.)

Sure, Orson Scott Card writes some decent science fiction. That doesn't make him, say, a good person. In reality, he's a reactionary, homophobic, psychotic, hatemongering religious zealot. That's not the good kind of zealot who wields psionic energy blades for the defense of Aiur, that's the bad kind of zealot.

It's safe to say that I have now lost whatever respect I might have had for Orson Scott Card as a human being. He can keep writing more Enderverse novels, and I'll keep reading them, as long as he keeps them free of his homophobic views. I can then pretend that they're written by Orson Scott Mlar, a completely separate person with whom I'd be comfortable standing in the same room, without fear that he might try to eat cornflakes out of my skull.

It should also be noted that Scientology is no longer my least favorite religion. Even a little bit of religion is bad, just like a little bit of being on fire is bad, but radical Mormonism is like standing under a Saturn V at liftoff.

No, wait. Standing under a Saturn V would be cool. Let's say, standing under a Soviet N-1 moon rocket while it lifts off/explodes. Yeah, that's it.

It strikes me how very different Orson Scott Card is from Isaac Asimov. It seems that more people have read Ender's Game than Foundation (the former currently has an sales rank of 929, versus 6,504 for the latter). And far fewer people have read much of Asimov's excellent nonfiction, like his Doubleday essay collections. Even fewer people than that have read Asimov's autobiographies, even though he wrote about as many as W.E.B. Du Bois. It's a pity, really, because Asimov's autobiographies show what a really excellent person he was. Asimov wasn't just a good science fiction writer - he loved science and rationality, and since he was the best writer the English language has ever seen, he was able to communicate his perspectives clearly. I felt a great sadness when I reached the end of I. Asimov, since that covered the end of Asimov's life. Contrast this wonderful exemplar of humanity with the horrible monster that Orson Scott Card is. I'm sure Card would have something nasty to say about Asimov's death (it is now known that he died from AIDS, which he contracted during open heart surgery), probably ranting about how wicked, immoral homosexuality is to blame. And as usual, Card would be blatantly wrong.

Now, if you will excuse me, I've got to go look up Kim Jong Il's phone number.

1/14/2004 - I'm finally done with my applications! (updated 3/1/2005)
Stephan T. Lavavej
This is my personal website. I work for Microsoft, but I don't speak for them.