Speaking of finishing things, I just finished playing Jade Empire, Bioware's latest epic RPG. It's very good, albeit not great.

The RPG gameplay is the same as Knights of the Old Republic and other Bioware games: multiple choice dialogue, a party of characters you interact with, and choices between good and evil. The big gameplay innovation is the real-time combat system, an entertaining action combat thing like Prince of Persia or Ninja Gaiden. It mostly works, although it is awfully simple.

The best thing about the game is that it's set in a faux Ancient China. The æsthetic is well done, very beautiful, and refreshingly different than the usual RPG fare. I particularly liked the way Chinese philosophy linked into the story, very different from the usual chivalry-tinged stuff.

The other thing that worked well was the NPC characterization. In previous games I never really cared much about the rest of my party, I think because I didn't find their backstories interesting. But in Jade Empire I found them quite compelling, particularly Sky, the man driven to avenge the daughter captured by slavers. Despite the conversation trees being very simple (and nothing approaching KotOR2's influence system), the NPC interaction was good. The romance plots are well worked too, including various alternative options.

I've had enough of Bioware-style RPGs for awhile.

  2005-05-28 02:43 Z
There's a great feeling of accomplishment at the end of May, at the end of the mainstream TV season. All these shows finished! If by "accomplishment" you mean "done sitting on my butt passively starting at mindless entertainment". But I'm done with The Amazing Race, and Survivor, and Desperate Housewives, and Lost, and 24. That was five hours a week, heavy responsibility.
  2005-05-27 15:29 Z
Java is the language for building large web applications. One reason Java is better than C is that it's garbage collected, making programming easier. But garbage collection isn't free, it can have significant overhead.

Web applications have a simple memory allocation pattern. An HTTP request comes in, some work is done in a thread over a second or two, and then you're done. Unless you're using session objects heavily (and you shouldn't), at the end of a request there's really nothing more in server memory than there was at the beginning.

This simplicity suggests a better memory management strategy for web applications. Allocate all objects in a zone specific to the HTTP request. Don't bother reclaiming memory during a request; when the request is done, just drop the entire zone at once. Poof. This won't work if you need to reclaim some of the working set during a request, but I think that's unnecessary for many apps.

I wonder if anyone's done this? It'd be easy enough to code in a C web application framework. Impossible in Java unless you can modify the JVM. Python sort of implicitly does this, since it collects most objects as soon as they fall out of scope.

Update: thanks to Tim for pointing out Apache does this in its C code.
  2005-05-26 15:59 Z
Bleep, the online music store for Warp Records, is awesome. DRM free MP3 for cheap and convenient.

I just went there to get the new Autechre release Untilted and was surprised to see Bleep is now selling FLAC as well as MP3. FLAC, if you don't know, is a lossless compressed format. Giant files, but "perfect quality" for the audio nerds. $10 for the album on MP3, $14 for FLAC. Honestly, high bit rate MP3 is fine for me. But it's nice to have the option.

BoingBoing notes that Bleep will also be selling XviD for a new video collaboration between Chris Cunningham and Aphex Twin. I'd probably never buy this video if I had to get a physical object, but I'll definitely buy a download.

  2005-05-24 16:03 Z
Microsoft ClearType is good software. It's a font rendering option in Windows XP that makes things look better on LCDs. Between laptops and good desktop LCDs a lot of folks have LCDs. So go ahead, turn on ClearType! And get the tuner while you're at it.
The technology is surprisingly straightforward. LCDs are made up of lots of tiny red, green, and blue pixels. ClearType uses that structure by doing subpixel rendering of fonts, so instead of drawing a white pixel where you'd expect it draws a blue pixel next to a yellow one, which still looks white. You can see it above in the colour fringing; at normal resolution on the LCD it looks right. It reminds me of the old Apple ][ colour hack where they fit 6 colours per pixel in 1.14 bits.

Microsoft's implementation is quite robust. I was particularly impressed when I rotated my LCD 90 degrees and it still did ClearType, only in the Y axis. Still, Windows typography has a way to go. Apple's font rendering is still head and shoulders above anyone else's. I'd love to read an article that explains exactly why text looks so beautiful on a 12" Powerbook.

  2005-05-19 15:57 Z
It took me 72 minutes to drive 33 miles home today. That's 28 miles per hour. 31 miles are on the freeway.


  2005-05-19 02:55 Z
FlickrClient.py is good software. It's a Python library for the 68 methods in the Flickr API in 48 lines of code. Such parsimony! Here's the nut of it:
def __getattr__(self, method):
  def method(_self=self, _method=method, **params):
    _method = _method.replace("_", ".")
    url = HOST + PATH + "?method=%s&%s&api_key=%s" %
          (_method, urlencode(params), self.api_key)
    try: rsp = xmltramp.load(url)
    except: return None
    return _self._parseResponse(rsp)
If you're not familiar with Python, what's going on here is a bit of metaprogramming genius. The __getattr__ makes it so that FlickrClient.foo() automatically means "invoke the Flickr API call foo", for any API call. The method() code builds a URL out of the Python method name foo and the parameters the method was invoked with, then does a GET to Flickr. Because of the consistent naming of the Flickr REST API this all works like you'd expect.

Parsing the response data is done by passing the Flickr XML to xmltramp, a quick and dirty Python XML binding that does what you want. The _parseResponse() method (not shown) does error handling in four lines.

I love how simple and Pythonic this is. Data is loosely typed. API calls are built dynamically. Everything is so abstract that the library code doesn't even have to be updated when new API methods or datatypes are added to Flickr. Clean, simple, perfect for scripting. It's about the exact opposite of SOAP and WSDL where you typically use thousands of lines of generated code to call the service. The WSDL approach gives you strong typing, which can be helpful, but can also be a dual edged sword.

  2005-05-15 19:59 Z
I've never really minded the New York Times login. I only do it once a browser and the content is good enough it's OK. But yesterday I went to login and was told "we've changed our system and your login nelson@santafe is no longer valid". To their credit, they did have an easy path for changing my login, but why the change at all? Who decided email addresses weren't valid logins?

My biggest problem with all the sites I log into is remembering my username. It has to be unique, but different sites have different restrictions. Am I Nelson (not unique), or NelsonM (ugly), or NelsonMinar (too long for some), or nelson@monkey.org (contains punctuation), or nelson+foo@monkey.org (plus is often not accepted)? By contrast I can usually use the same low security password on all these sites, because passwords have fewer restrictions and don't have to be unique.

I realize I'm repeating myself, but this whole thing about having thousands of accounts on different websites is really stupid. I should use bugmenot more.

  2005-05-15 16:54 Z
I'm kind of late to the party, I guess, but I'm still not understanding Yahoo 360. Every once in awhile I find a link to a blog post there. Like in this Make:Blog article, which links to what sounds like an interesting post. So I click on the link, and what do I see? "To access Yahoo! 360° Sign into Yahoo!". I'm supposed to log into Yahoo to read a freakin' blog article? Oh well, nevermind.

Am I missing something?

Update: Jeremy was kind enough to write and say this login request is a bug, that the blog post should be private public. I'm glad I misunderstood and this isn't on purpose!
  2005-05-11 15:11 Z
I finally finished Knights of the Old Republic 2. While I liked how ambitious the gameplay and writing was, I ended up being deeply disappointed by the missing content, particularly at the end.

Apparently there's some fantastically epic story about Malachor V, the Sith training at Trayus Academy, and the triumvirate of Darth Traya, Darth Sion, and Darth Nihilius. And some cool side plots involving HK-50 droids, G0T0, Bao-Dur, and Atton or my Disciple falling in love with me. But the only way I know this was planned out is because people scraped some of the missing bits off the game image. When you actually play the game, what you get is a horribly rushed sequence of barely coherent events capped off with some deliciously epic writing that barely makes sense.

And the most ambitious part of the game design was neutered. There's a complex system where you interact with the characters who join you, try to gain influence over them. You could tell the game was being designed so the end depended heavily on whom you influenced through the game, a brilliant idea. Alas, an idea that is totally absent in the actual ending.

I feel cheated, like reading a novel that's missing 80 of the last 100 pages. If they had the same number of hours of content, just more coherent, it would have been great. They were just too ambitious on too tight a schedule. I wish more reviewers would punish game publishers for rushing things out the door before they're ready.

  2005-05-09 01:42 Z
Seeing Goldman is in New Zealand prompted me to review my notes from my trip there. I really loved that trip.

One thing that fascinates me is the role of the Maori culture in modern New Zealand. NZ is one of the very few places where native peoples were able to survive the invading Europeans and preserve their culture. For tourists, the easiest place to see that culture is in Rotorua, in the heart of the volcanos of the North Island. The town itself is kind of frumpy, and some of the tourist kitsch is a bit much, but overall it's a good place.

The highlight of Rotorua was Te Puia, a one-stop spot for your New Zealand tourist checklist. In one place you get Maori arts and crafts (including a beautiful marae), Maori feasting and dance, a geothermal valley, even kiwi birds. The center of the place is a serious school for traditional carving, so it's got some depth.

We stayed at the Millenium hotel. It was OK, not great, undergoing a badly needed renovation. Dinner was at Herbs Restaurant, in the middle of the little restaurant row near the end of Tutanekai street. I wouldn't go back. I regret now we didn't do go to a traditional hangi feast. I'm told it's quite nice.

  2005-05-08 17:24 Z
Psychonauts is a wacky new platform game by Majesco games, more specifically Tim Schafer, the guy behind Grim Fandango. It's a psychedelic platform game. The conceit is you go inside people's minds where you navigate all their psychological weirdness. Mostly an excuse for some very wacky level design, as you can see from the screenshots. In the vein of Rayman or Beyond Good and Evil, only trippier.
The reviews are great and the PC demo is definitely worth trying out. Oddly the game is value priced at $30 on PC, but $50 on consoles.
  2005-05-07 23:36 Z
My mother was a travel agent. When I was eleven, I proudly announced that I was going to get married and go on a honeymoon cruise around the world. She looked at me deadpan and said "I'm sure I could find something more interesting for you to do."

I just got back from a ten day cruise to Mexico. We had a good time, very relaxing, but boy was it boring. We didn't really go anywhere I wanted to see: San Francisco to Monterey, Catalina, Mazatlan, Puerto Vallarta, and Cabo San Lucas. The Mexican beach resort scene just isn't me.

The demographics of the cruise ship scene aren't me either. I fear that for most of our cotravelers, baked alaska and prime rib will be the most elegant dining experience of their lives. I'm really glad that we booked with a gay travel group. We were part of a group we had something in common with and we met some nice people.

Being on a cruise ship is certainly very comfortable and it was great to drop out for ten days and do nothing. I'd take a cruise again, just somewhere more interesting like the Mediterranean.

  2005-05-05 15:33 Z