March 2006 Archives

V for Vendetta


I just saw V for Vendetta. I’m having a hard time determining what I thought of it. The following ramble will give away all the good bits, so if you’re going to see the film I’d suggest doing so before reading further.

First, some background: I just read the comics a few days ago, and loved them — right up there with Watchmen, in my book — so obviously my take on the film is somewhat distorted. But all the same, I have to major objections to the film version, and I think they’re more-or-less valid.

First, there’s the politics. The comic is in the aftermath of some sort of global thermonuclear exchange, resulting in extreme climactic changes and widespread chaos; following a few years of miserable anarchy, a group of proto-fascists take charge in Great Britain and start to build their sort of society — which, incidentally, has very little room for ethnic or religious minorities or homosexuals.

The movie throws all that out the window. The ruling party in the film version brought itself to power by engineering massive biological attacks on their own soil, fostering a climate of fear in which their leader — a devoutly religious man, as the maddening omniscient voiceover informs us — can take control.

What irks me is that this change is wholly gratuitous, and servers only to provide the mandated minimum amount of thinly-veiled Bush-bashing for a modern Hollywood production. It’s hard to like a pointless alteration with no justification aside from furthering the mindless paranoid vitriol that passes for political thought in Hollywood.

My second substantive complaint concerns the ending: I know Natalie Portman has a very pretty face, and yes it would be a shame to cover it up, but for God’s sake the story needs her to don the mask! In the comic, V’s dying words instruct Evey that she, “must discover whose face lies behind this mask, but [that she] must never know [his] face”. Of course, Evey soon realizes that this statement isn’t a puzzle but a riddle, and dons the Guy Fawkes mask herself to lead the masses in their final assault on the corrupted government. Evey, of course, slips out early — to save a young stranger and bring him to the Shadow Gallery in much the same manner as she herself began.

The obvious suggestion in the comic is that this young man will eventually become the next V when Evey’s part of the task is complete — and also leave the reader wondering whether V is really the first V, the original victim of room five. What truly galls me is that this question is really a closed one in the comics — the issue is definitely settled when V fulfills the dying wish of the female doctor and shows her his face. That dying wish is missing in the film, giving me an hour of elation until the ending and the crushing realization that change was not the setup for an improved ending but a non-sequitur before a disappointingly straight-forward finale.

But, for all my ranting, I think it’s a good movie — as long as you can keep in mind that the politics are drivel. Hugo Weaving is probably getting to be right up there with Christopher Walken on the list of inexplicably cool actors.

On Platforms And Sustainability


Clan Lord isn’t a game. It isn’t even a service. It’s a platform. The Clan Lord server and client software do absolutely nothing of value on their own — the fun of the game stems entirely from the content, which nowadays is produced primarily (if not entirely) by unpaid volunteers. This puts DT in an unusual but certainly not unique position. And there are certain things that a company in this position needs to do if they wish to continue operating.

The first and most important step is to recognize that you are dependent on others, and that you need to present yourself as a beggar rather than a chooser. If you’re not going to provide direct incentives for the content-creators, then you need to do everything in your power to remove any disincentives: make the tools free and friendly, suck up to all your content-creators as though they’re the most important, and generally do everything in your power to make the act of creating content for your platform as painless as possible.

Microsoft understands this; you can download a copy of Visual Studio Express for free, and if just about every school with a programming course can join the MSDN student network and hand out free copies of all Microsoft products to their student base. And let’s not forget the image of Ballmer jumping around like a monkey chanting “developers, developers, developers”.

Apple understands this; Mac OS X is nothing but a shiny file browser without applications, so they distribute a copy of the development tools with every copy of the OS, and make them available for free download to boot.

Sun understands this; you can download and install Java for free and get everything you need to start developing right there in the zip file.

Blogger understands this; you can set up a blog for free and start writing about your cat in just about ten minutes.

LiveJournal understands this; it probably takes even less than ten minutes to set up a journal and start writing about your wholly-imaginary sexual escapades.

The list could go on. All of these companies recognize that their products (Windows, Mac OS X, Java,, are merely platforms, and that they depend on third parties to provide the content. And, recognizing this situation, they go out of their way to make it easy to provide content.

Now, this isn’t to say that they like all the content that’s produced. Not every Java applet gets linked to from the Sun homepage. Not every shareware tools gets licensed and bundled with new Macs. Not every promising software vendor gets purchased by Microsoft and gutted. But all the same, the more people you have trying to produce great content, the more likely you are to actually have some produced. If Apple had decided a few years back that QuarkXPress was the only page layout program their platform would ever need and had prevented anyone else from working on one, we’d never have gotten InDesign. If Microsoft had stopped distributing developer tools, we’d be stuck with Internet Explorer instead of FireFox.

Compare these platforms with OS/2 or BeOS: the tools to develop for OS/2 were difficult (read: costly) to obtain, as was the documentation, and look where that got them; the BeOS development toolchain was (initially) tied to Metrowerks CodeWarrior, a rather pricey piece of commercial software. Seen anyone running a BeBox lately?

Delta Tao doesn’t appear to have learned this lesson yet. I was at once point told by ‘Small GM’ that “[b]ecoming a GM is harder and suckier than becoming a mystic”… exactly one sentence after she admitted that, “… we NEED people to go through the frustration of becoming scripters and GMs. Because we really don’t have enough active ones.” Eldon also continually oscillates between complaining about the lack of content creators and patiently explaining that we players are all too dumb to accomplish anything.

The net result is that content creation is too slow, players are insufficiently entertained, and the player base shrinks. It’s been happening since the moment I started playing, and it though the loss decelerates over time in absolute terms (though I suspect it’s fairly constant in percentage terms) it never really stops over extended periods. Sooner or later, the subscription fees will be insufficient to pay for the bandwidth consumed and the game will vanish.

Yes, people have been predicting this since day one. Yes, Clan Lord is still here. But the fact that this death is a slow and drawn-out one doesn’t make it any less final — and, unless something changes — inevitable.

MVC Musings


Code Musings

The Clieunk Devlog has some updates. I’m trying to keep all specifically Clieunk-related stuff there, so any folks who are just interested in Clieunk don’t have to read my main blog here and put up with my occasional political ranting. But for more general programming topics not uniquely relating to Clieunk, I figure this is a decent wall on which to write.

MVC, Cocoa, and C++

The Model/View/Controller design pattern is a common one for a very good reason: it works quite well. Not incidentally, the entirety of Apple’s AppKit framework (Cocoa) is built with MVC in mind. The net result is that if you’re planning to write good Mac OS X software you should at least understand the basics of MVC.

The problem here is that while Objective-C (the preferred language for Cocoa development) is excellent for view and controller classes, it has some rather serious shortcomings with respect to models.

Not My Type

If you had to sum up C++ in three words, I’d suggest that they be “strong type checking”. C++ has about the strictest typing of any of the popular mainstream languages, as well as a rich gallery of language features — most notably templates, the const specifier, and a rich and well-defined set of object operators — that support this paradigm. The end result is that C++ is absolutely incredible for defining data types, but sometimes a bit of a pain for designing other things.

How I Learned to Stop Worrying And Love Objective-C++

Objective-C++ is the best of both worlds, with a few caveats. Firstly, it kills bindings, which are a really nice language feature but can’t be made to bridge between C++ models and Cocoa views. Secondly, you lose (to some extent) the extensibility that makes Cocoa so truly neat to work with — you can load a bundle into an Objective-C++ application and tinker with the Cocoa code (headers often provided via class-dump) but you can’t easily affect the C++ model classes. I ultimately decided that neither one of these drawbacks bothered me overmuch for Clieunk, obviously.

Bindings would be nice in the early stages of the project, but since nearly every view in the program will be a custom job eventually, the net gains aren’t as huge as they might seem. All the same, it would be very cool if someone could figure out a way to bind an NSTableView to a std::vector<std:string>, for instance.

The second drawback, upon further consideration, actually turned out to be a benefit. The reason I haven’t gone and posted Pixunk (my CL_Images browser) publicly is because I’m reasonably sure Ann would start to actively make my life miserable if I did so, and I have no desire to fight a war at this juncture. If Clieunk were written entirely in Objective-C, it would be fairly straightforward to turn it into an image browser simply by creating an input manager that attaches to it. This will probably still be possible in an Objective-C++ Clieunk, but the work required to do such a thing is on the same order of magnitude as just figuring out the image file format and writing a browser from scratch, so I wouldn’t feel too bad.

I’ve Got a Unit Test For You

I feel I’d be remiss in cheerleading for strong typing without responding to the recent popular meme about unit testing being superior to strong typing, as exemplified in a widely read interview with the creator of Python. And I would be remiss, so I’ll write about that sometime soon.

My position, in a nutshell, is that preferring unit testing to strong typing is like preferring seat belts to an airbag: firstly, I really would rather have both; and secondly, stupid people can choose not to use the first, but the latter is basically forced upon them. More next time, maybe.

No, But Seriously: MacBook!


Initial thoughts on my MacBook Pro (2.0 Ghz, 2 GB RAM, 100 GM 7200 RPM HD):

The screen really is pretty bright. I’m typing this in bed while watching TV (laziness is an art) and I just turned the brightness down - it was hurting my eyes to flick back and forth between the TV and the far-brighter MacBook LCD.

Fit and finish seem fine. I’ll admit to a bit of trepidation on buying a first revision PowerBook MacBook — having personally watched the battery fall out of a first-revision 17” PowerBook — but thus far my fears have proven unwarranted.

The built-in iSight connects (internally) via USB rather than FireWire, and thus seems to avoid the compatibility problems that have plagued its big brother. It retains the tendency towards yellow casts in uneven lighting, however. The microphone is pretty lousy, but it’s also about the size of the head of a pin so I think I’ll cut Apple some slack.

The MagSafe system is very nice thus far. I worried briefly after reading some initial reports saying that it detached far too easily, but again my fears have proven unfounded. The MagSafe plug is actually rather difficult to remove when you either pull straight out or at an angle horizontally - it’s only in response to vertical tension that it pops out. I’m really not sure how this will work out in practice.

The wider trackpad is very nice (wider than my old 15” 500 Mhz Titanium, at least) as is the two-fingered drag-to-scroll thing it does. I’m sure there’s some proper InterCapped trademarked name for this, but I don’t happen to know it.

Today when Sean came home, he saw a fantabulous sight!

The FedEx Fairy left boxes!

Sean was so happy that he did that growling-squinting thing that almost resembles a human smile!

Either happy or preparing to bit your neck

Sean was sad, because the pictures taken by his cell phone camera are very lousy. But then Sean had an idea!

"Hey, doesn't this new MacBook have a camera built in?" said Sean. And sure enough, it did!

And *crack* went the lense!

It was very cool. It was so cool that Sean's brain began to overheat! And his head began to melt!

PhotoBooth is a wonderful waste of time

"These pictures are so much better than the first two!" said Sean.

"You're dead to me, cell phone!"

It shall sleep with the fishes!

"Poor Mr. MacBook Pro can see everything but himself!" noticed Sean.

This made Sean sad, so Sean decided to help Mr. MacBook Pro out. Sean took Mr. MacBook Pro to the magic mirror in the enchanted hallway by the front door.

It is a very bright screen

"Here you are, Mr. MacBook Pro!"

Just then, a radiation wave hit, and Sean and Mr. MacBook Pro got shot through a Wormhole!

I am not John Crichton

Now Sean is on a living ship full of strange alien life forms. But that is a story for another day!