“My power is made perfect in weakness”

My wife and I watched The Fellowship of the Ring last night, for the first time since we bought the DVD. I realized some things I hadn’t before.

Much is made of how Sting glows when orcs are near. But when they’re at Balin’s tomb and the attackers are approaching, Gandalf draws Glamdring with a flourish, and it doesn’t glow at all. That would’ve been such a simple detail to get right.

The only thing in the movie that I think is dead wrong is the portrayal of Galadriel. Perhaps the gift-giving scene (restored in the special extended edition) will serve to soften her somewhat … but I still don’t see the point in making her seem so menacing. In the books, the characters’ fear of her came from a realization of her power, combined with the almost irresistible allure of her beauty, kindness, and hospitality. They feared that their judgment was being clouded.

The one place in the book where she does (perhaps) take on a distinctly menacing tone is when Frodo offers her the ring. That was overdone in the film, but at least there it’s just a matter of degree. She does, for whatever reason, deliberately try to give Frodo (and the reader) a glimpse of what the ring would do in her hands, and what she would do as its bearer.

Thinking about that scene, I realized something about its significance. Tolkien made if very clear that he hated allegory, but that’s not to say he disliked books with moral or spiritual lessons; he merely felt that explicit allegory left the readers feeling that they’d been preached to. Tolkien’s Christian values do show through in The Lord of the Rings, and Galadriel’s temptation is a good example. It doesn’t work as allegory … Galadriel doesn’t have enough in common with Jesus to see an allegory of his temptation there. But the episode is one of a series in which we see powerful people undone – or in fear of their undoing – by the ring. Isildur. Gandalf. Boromir. Aragorn.

The point, I think, is that Frodo is suited to the task before him precisely because he is weak. He neither seeks power nor does he have power that the ring would seek to exploit. Middle Earth’s best hope lies in entrusting the ring to someone who is morally strong, but physically nearly powerless.

The greatest pop song ever recorded

I usually scorn statements like that. When people ask me about my favorite movie, for example, I usually can only narrow it down to 3 or 4, and my favorite song or band depends on my mood. But today, eating lunch in Jason’s Deli, I heard Rikki Don’t Lose That Number, and I was reminded that I believe it to be greatest pop song ever recorded.

On first listenand second, third, and beyondit sounds like a catchy pop song, and little more. But I’ve been hearing it for 25 years now, and I’m still hearing things in it that I’ve never heard before. It’s simple in structure, but complex in the details and in its influences (e.g., its quotation from Horace Silver’s Song for My Father). I’ve never heard a song so perfectly crafted, where everything—the words, the music and the arrangement, the singing, and the musical performancesall work together so seamlessly to support each other and tell the same story. Even the guitar solo is whiny, bitter, and desperate, for pete’s sake.

The lyrics are typical Steely Dan: skeletal, allusive, cryptic and ambiguous. It’s just one side of a conversation. But the music fills in the gaps. We hear the anguish, the backpedaling and saving face, the desperation and the pathetic attempts to hide it, the heart in the throat, and the frightened anger. And at the end, we hear the door slam and the deflated resignation. It’s all there, and it’s a whole package. It’s so perfectly disguised and devoted toward the service of the song that most listeners never notice.

Blue’s Clues music

Today we took the boys to Blue’s Clues Live. I continue to be impressed with that show. It’s not perfect, of course, and some of the marketing and paraphernalia is too much. But they find creative ways to teach interesting stuff, they teach morals and ethics without being preachy, and the kids love it.

I’ve always thought that, in particular, the music on Blue’s Clues stands out. They incorporate music from every genre you can imagine, mostly cleverly adapted versions of the various themes from the show. And nearly all of it is much better than the usual music from children’s TV. Today, believe it or not, the stage show included a distinctly Koyaanisqatsi-ish minimalist Philip Glass-style piece. But to the kids, it was all just music, which is the way it should be.

What were they thinking?

I think Ruby is a much better language than Perl, but it’s definitely true that the libraries aren’t as mature. Here’s a problem that has just annoyed me for the second time.

All of the creation methods for the Time class take similar arguments, exemplified here by the Time.local method:

Time.local(year [, month, day, hour, min, sec, usec])

But the ParseDate::parsedate method that does a good job of parsing date information out of human-readable strings returns this array:

[year, mon, mday, hour, min, sec, zone, wday]

You really should be able to type Time.local(*ParseDate::parsedate(timeString)) but you can’t. You’ve got to chop the last two elements off the array first. That’s not hard in Ruby, but still …

So far as I know, there may already be a remedy for this in CVS. But there really ought to be a Time.parsedate(aString) method that does the right thing.

Simple things should be simple …

… and complicated things should be possible. And, for that matter, not unnecessarily complicated.

I don’t know how many years it’s been since Alan Kay said that, and people still don’t listen.

I’m working on an application now that uses a Swing-based client, deployed using JNLP (i.e., Java Web Start). The client talks to a SOAP-based web service. It’s written using Apache SOAP, which has worked out pretty well, but for various reasons I’ve been looking into reimplementing the web service part using Sun’s JAX-RPC.

Some background: JNLP-based apps are deployed from a web server, and launched (the first time, at least) from a web page. But they’re full-fledged Java apps that get downloaded as JAR files and run on the client machine. So the best way to package it is to put the whole clientthe JAR files, the HTML pages, and the JNLP filein the WAR file with the server-side stuff. And that’s the way our build system works. We compile the whole thing, build the client JAR, and then build the WAR that includes the client.

In JAX-RPC (at least, in Sun’s implementation of it) they’ve tried to make the process easy. The service is defined as an RMI interface, and the implementation also fits RMI conventions. So far, so good. Then you compile the service definition and the implementation class. Then things get bad. In an effort to make this all simple, they’ve gone too far. The next step is that you package your server and a SOAP mapping file into a WAR file, and pass that WAR to a tool called “wsdeploy”. That tool reads your WAR, generates stub and tie classes that are used to hook the client and server code into the SOAP infrastructure, and then repackages your server, along with the tie classes and the server-side SOAP support, into a brand new WAR file.

All of that has to be done before you have the stub files that you need to properly compile your client code. So our nice, clean, 3-step build process (compile, package client, package server) turns into this:

  1. Compile server
  2. Package server into WAR
  3. Run wsdeploy, which does these things:
    • reads the WAR
    • generates stubs and ties
    • rebuilds the WAR with ties and SOAP infrastructure included
  4. Compile client
  5. Package client
  6. Add the client to the WAR file.

That’ll sure shorten the edit/compile/debug cycle and keep my ant scripts clean.

It turns out that there is another tool, xrpcc, that generates the stubs and ties in a more conventional way. But I haven’t been able to find any documentation for that tool. It, too, uses an XML-based config file to define the SOAP mapping, but it’s a different flavor of XML, with no documentation that I can find.

I’m all in favor of a good out-of-the-box experience. But it’s frustrating to hit a brick wall when you try to move beyond that to real work.

subscribe via RSS