Cleanup

The Gibber is enrolled in a Montessori day care; it’s a pretty neat place, and I mean “neat” in two ways. Firstly, as in “cool.” Secondly, neat as in Montessori teaches kids to put things away when they are done with them. Want to play with a set of toys? Okay, take them out of the box, play with them, then put them back.

Not that The Gibber is getting much verbal instruction at this stage of his life (well, probably a lot more than we think). But kids are great at observation.

Over the weekend we were horsing around, and he reached into my shirt pocket and pulled out my to-do list for the day. He crumpled the paper, then stuck it in his mouth and chewed for a while, then took it out and wadded it up a little more. Finally and very deliberately he put it back in my shirt pocket. Then he grinned and applauded himself.

Okay, applause. I’ll have him read this when he’s a teenager and won’t clean his room….

A spin on a museum visit

I asked the museum guard if they had it on display.

“Not really, we have it in an area that’s not open,” she said, immediately knowing what I was referring to by name (it is at least a little obscure — but I didn’t have to give her a description at all, just a name).

“Uh, I was wondering if it was possible for us to see it?”

She thought for a moment. “Not officially. But . . . how many of you are there?”

“Just my family. Four of us, and a toddler.”

“Okay. Follow me. But this is unofficial, really don’t tell anyone I let you see it, okay?”

“Okay.”

Whereupon she ushered us into the elevator to the special floor, where they did indeed have it, all polished up and gleaming and hanging from wires so you could see it from all angles. Very cool.

On the way down, she mentioned that I’d been wearing the Right Shirt.

A Distinction

Let us distinguish, please, the difference between a Software Pattern and a Software Habit. A pattern is something common and useful (feel free to debate this). A habit is, well, a habit might look like this –

#define U16 unsigned short
#define U32 unsigned int

and then using the resulting “types” all over the place in the fond hope that your code is somehow made better by it. Habits also include the reimplementation of string objects, linked lists, layers (upon layers upon layers upon untold numbers of layers) of networking “helper” code, memory managers, and so forth.

Habits are the code that happens between the time you have a good idea and the time that you have a good design. They are what busy little fingers do to kill time.

I once saw a library that essentially reimplemented bit shifts and some other low-level operations in a very involved, convoluted manner, essentially using loops, masks and a ton of function calls to accomplish what &lt< and &gt> do. When I asked about the library (the engineer in question “wasn’t around anymore”), I got the answer that (a) the person who had checked in the code had been carrying that code around for quite some time, and it was what he was used to, and (b) “Yeah, we know it’s written in <blah> and the rest of the project is written in <foo>, but he got real upset when we didn’t let him use it.” That little portable library was costing the product real cycles, and was causing real maintance issues.

Some old habits die hard. I’m a power Emacs user, but I wonder how much I’m missing from good integrated environments like Visual Studio 2005 (which I use mainly for the debugger). Unfortunately the Emacs commands are embedded in my nervous system at a very low level, and a sequence like C-A and typing a character — “go to the start of the line and insert x” — winds up replacing the whole edit buffer with “x” in Visual Studio. Thank goodness for multilevel undo.

Not really about habits, but –

I really wish that out-of-date documentation self destructed. Things are better if you can auto-generate documentation from code comments, but this is not so good for writing tutorials or other “verbiage level” (as opposed to API level) documentation. (And even with doc-comments, the comments are often either very sparse or out of date).

I’m pining for an inter-linked edit world (hello Xanadu!) where my sample code can reference working code snippets from the unit tests that exercise the latest APIs, and that everything just gets built up (… and transmitted to users? why not?) when the build happens.

I guess it’s another good reason to stop using Emacs, or write my own 🙂

Zelda and WoW

A while ago I whiffed through the classis NES game The Legend of Zelda. It’s a fairly primitive-looking tile-based adventure; you trudge through an “Overworld” populated with crudely rendered monsters, ugly trees and dialog in “engrish.” As you grind through the dungeons you collect magic items and clobber boss characters. There’s an ultimate battle with a trick. Nothing is terribly pretty in this game; the graphics are frankly terrible, but the game play itself is very, very good.

I haven’t been addicted to too many games, but this is definitely one of them. At one point, maybe thirty minutes into the first session, I had the conscious knowledge that I had just become hooked on the game, and that I was going to finish it.

I don’t finish many games. I came close in Quake, and did finish Quake II (though it got boring and sloggy in places), and I only had to cheat a little to get to the end of Unreal. Then my wife and I spent about a year playing Diablo II. (We also slogged through to the end of Dungeon Siege, but it wasn’t that much fun, and the ending was a letdown). I still sometimes pull out the Diablo II disk, it’s fun.

My verdict on World of Warcraft is that it is quite good, but that Blizzard made the game a little too social. You can advance to the highest levels without teaming up with anyone, but it’s a fairly slow process and you have a choice between boredom (playing it safe) or dying a lot (exploring and getting clobbered), and there are places that you just can’t go without a bunch of help. For a curmudgeon like me, the social aspect is difficult. Also, I’m never quite sure if I can join a party for the couple of hours necessary to get to the final boss and claim the Amulet of Hurting Bad Monsters or the Ring of Excessive Violence.

The other problem with WoW is that the game play is pretty much the same no matter what level you’re at. You’re level 1, you kill level 1, 2 and 3 monsters (collecting their teeth or horns or something and turning them in to complete quests). You’re level 30? You kill level 30, 31 or 32 monsters (collecting their arm-bands or iPods or whatever, turning them in to complete quests). Oh, along the way you can craft things like potions and armor, and the spell effects are cool, but the essential game play is that you clobber things, over and over. While there’s a lot of detail, there’s not a lot of depth.

Basically, Blizzard (and I suspect the other MMOOGRGHRGs) are getting the really interesting AI for free, from their players.

Now, all of these games have non-player characters (shop-keepers, ho hum, but also characters that give you quests). It will be interesting to see if the games start letting you play these characters, rather than have all of the NPC interaction be hard-wired. Player-moderated DMing, in other words. The MUDs allow it, why not the MMOOGRGHRGs?

Update

Okay, it’s been a while since my last entry here. FYYFF isn’t dead; there are lots of reasons for the silence. The Gibber has been going through serially fussy nights, putting the kabosh on the whole sleep thing, we had some work done on the house, and WoW sucked up a bunch of keyboard time that I’d otherwise use writing missives like this.

The good news is that (thanks to the window replacement project), I’ve finally got my desk under control, the surface of which now includes the scanner, so I should be able to start scanning some interesting memorabilia and scribbles. Heck, maybe even the cat’s fundament.

I’d write some flames about the recent Sony DRM fiasco, but other people seem to have that well in hand. There’s not a whole lot that I have time to be mad about at the moment, but I *do* have some book recommendations, and I’ve been doing a lot of reading about Haskell and some wacky uses of combinators (as if there are any non-wacky uses of them…)

DRM phones home to Sony

The Sony rootkit-like DRM stuff was brought to more public light last week. Now, it turns out that the DRM code contacts a Sony site every time you play the album.

Enough is enough.

This stuff needs to be transparent. Users need to know the exact nature of the software that has been installed on their systems. Hiding techniques only hurt the honest people; features like this are speed-bumps to people with the knowledge and motivation to circumvent them.