Friday, March 21, 2008

My Favorite Monkeys

New post at Pathfinder on monkey patching.

Monday, March 17, 2008

Beep Repaired

I don't know what this says about me, or anybody else for that matter...

I've been a huge Tom Lehrer fan ever since my 8th Grade Social Studies teacher decided to warp all our minds by playing "That Was the Year That Was" during a reading period. (It was 1985, so it's not like the recording was current or anything...) I was pretty instantly hooked, and a few years later when his albums were re-released on CD, bought them instantly, and have more-or-less memorized them.

I also became aware of the existence of the musical Tom Foolery, a review of Lehrer's songs that had apparently even recorded a cast album somewhere along the line, but not anywhere that coincided with a record shop I ever saw. I had always kind of wondered about it, and about a week ago, sort of randomly popped it into an iTunes search, and was really, really surprised to see the album actually show up. In DRM free iTunes plus, no less.

The album also has 24 reviews of which break down into: a) this isn't Tom Lehrer, b) Tom sings all these songs better, c) when is iTunes going to get real Tom Lehrer, and d) they don't even use the real lyrics, and e) who are these whiney English people pretending to be Tom Lehrer. People seem to be genuinely angered that anybody else would even bother to record Lehrer's songs (in addition to being somewhat confused as to what this recording actually is -- for example, the "wrong" lyrics were actually written by Lehrer for the production...). Oy.

Well, I wasn't about to let 20 some-odd random strangers dissuade me from an album I've been looking for for almost twenty years. Although I did pause for a microsecond or two.

Preparing for disappointment, I downloaded the album.

And you know what, it isn't Tom Lehrer. It's also actually pretty good. All in all, I like Lehrer's syncopated, ironic style better on most of the songs, but it's not true that the English cast sings the songs with no bite. It is true that they have better-trained voices than he does, and that works in favor of some songs and against others. Still, it's nice to hear some songs in character -- "Poisoning Pigeons in the Park" is cute as a duet, and I liked most of the adult lyric additions to "Silent E".

The really dark ballads don't all do as well, but the uptempo songs are great. There are a couple of cases where the accents invalidate a rhyme or two, but overall, I had no problem with these people singing Lehrer's songs. (It was a little weird to hear them using so much of his monologues to introduce the songs...) So, I guess it's Random English Singers 1, Random Internet Commenters 0, at least as I keep score.

One last geeky thing... like a lot of live recordings made for vinyl, the tracks begin with the actual start of the song and end with the introduction to the next song. This is fine in a record album, where you would use the track breaks to find the beginning of the musics, but it's really irritating in an iPod, mix-and-match world, since any song that comes up ends with the introduction to then next song that isn't going to be played. This really bothered me for this album, since the introductions really do need to be tied to their actual songs.

But these were DRM-free songs, and I can be an own-your-media type on occasions, so I took them all into GarageBand and re-split the tracks so that the introductions are on the same tracks as the actual song. Took under an hour, and only that long because I didn't know that GarageBand had a global preference for export quality that was set too low. Much better that way.

Speaking of iPod, mix-and-match worlds, someday I really must introduce my iTunes random playlist generator...

Monday, March 10, 2008

The Average Programming Book

One weird aspect of being a published writer is that you get very little information about sales. You see your own numbers (several months after the fact), but there's no larger context, and no sense of what a reasonable expectation of sales might be.

Which is why I love it when O'Reilly Radar puts up one of their periodic looks at the computer book market. I haven't pored over stat line like this since I collected baseball cards when I was ten.

I'm going to assume you've gone and followed the link, and post some further thoughts, rather than rehash the points already made.

So, the average programming book sold about 1100 copies in 2007. Given the probable distribution, I'd imagine the median is significantly lower, probably under 1000, although I have no way of knowing for sure. Obviously that conflates a lot of things, new books/old books, general books/specific books, but it seems to be a reasonable baseline.

It's not clear what that means for total sales, since I don't have a good sense of how long a particular book is viable. Jython Essentials, which is nobody's idea of a best-seller, is still selling the odd few copies a month, and 2007 was it's sixth calendar year of sales, (it probably just slipped below the 1100/year figure based on 2007).

You might expect that the per-unit total is larger for the larger language markets, but that doesn't seem to be the case. In fact, three of the top ten languages have much lower per-unit figures (Java, C, Visual Basic). Presumably, this is because the larger markets encourage specialized books in a way that, say, the Groovy market doesn't. Yet.

It does seem to be the case that markets whose share is growing have high per-unit sales and vice-versa. This makes sense, especially when you factor in the lag time that publishers operate under. Growth markets result in high sales for the relatively few titles available, then the average gets driven down later on as more players enter the market. (The most interesting counter example is PHP, which maintained a pretty good per-unit sales rate despite an overall drop.)

Quick thoughts:

  • Ruby has the highest per-unit sales rate in 2006 and 2007 (books are placed based on what language the examples are in, so this includes all Rails books). It's still a very strong growth market, though. (But I wonder what the average is if you subtract the two Dave Thomas books...)

  • Python passed Perl, for presumably the first time since ever. That's really weird sounding. If you'd told me when I bought the Pickaxe book in 2001 that six years later Python would outsell Perl, and Ruby would outsell both of them combined... It's weird.

  • If the trendlines come even close to continuing, C# will be the biggest language market in 2008. That seems strange too... but I guess the Microsoft Bubble of Tools is pretty big.

Saturday, March 08, 2008

iPhone SDK

I'm trying to figure out exactly why I'm so psyched by the Apple iPhone SDK announcement. The basic announcement wasn't a surprise, and I don't even own an iPhone. I did, however, dig out my Cocoa programming book and start studying.

Further thoughts:

  • The tools themselves seemed somewhat slicker than what was expected -- a lot of Mac developers were pleasantly surprised that Interface Builder was included (although apparently it's not in the first beta). There was a lot of speculation that the SDK release was delayed over security issues, but it also looks like polishing the tools took some time.

  • The demos were exceptionally well done, a very nice range of choices, and the continual push of how easy it was to make them. The quality of the demo is clearly one of the reasons that I'm excited.

  • As an aside.. say your boss came up to you and said you're going to fly to Cupertino for two weeks to build something in the super-secret iPhone SDK, which you will get to present in a full-on Steve Jobs media event. How many nanoseconds would you need to wait before accepting?

  • Let's see, the iPhone 2.0 comes out the end of June. So... by August 1, it should be the top mobile gaming platform going, right? Those were some seriously cool looking games...

  • The terms were more open than I expected. It's particularly nice that Apple is allowing the developers to set the price. It's particularly nice that they specifically included "free" as a price. They seemed to emphasize that Apple was going to try and get as many apps in front of developers as possible -- I'd take the inclusion of AIM as a demo as a sign that even things that AT&T might not be thrilled with will be allowed.

  • The general sense of the existing indy Mac community is that the 70/30 split is reasonable given what Apple is offering. It'll be interesting to see how the price points play out. (As pointed out by Jens Alfke, the App store model enables an entirely new class of micropayment software)

  • Still a number of questions: how will developers manage limited betas? Will developers be allowed to have the download be free, but have a separate license authorization? What about free but add supported (like Twitteriffic)?

Early line, here's a short list of people or apps off the top of my head I expect greatness from:

  • MobileTwitteriffic, already essentially announced. The trick here will be improving on the web UI.

  • Red Sweater, apparently Daniel is considering porting Black Ink, and maybe MarsEdit.

  • Ambrosia Software. For a really great game -- Sketch Fighter would work...

  • The Desktop Tower Defense guy. The UI would be tricky, though...

  • Somebody to do the killer To-Do list or GTD app. Omni?

  • A really cool doodle/draw program.

I think this is going to be a very fun ride...

Wednesday, March 05, 2008

Cuts Like A Knife

SF Movie Review: Battlestar Galactica: Razor

(Continuing the enlargement of things I write about on this site, and I think this will be the last post containing a disclaimer about topics...)

I'm not sure what this says about me or my relationship to this show, but the following is all true:

  • I bought this DVD the day it came out (I don't get Sci-Fi at the moment...)
  • I then let it sit for three entire months while waiting for the right time to watch it in one sitting.
  • I finally decided that I'd watch it in pieces, so I started it at about 10:45 at night.
  • Got so caught up in it that I watched it all the way through, then read Jacob's incredible TWoP recap before sleep.

The movie is made up of several nested flashback stories (don't even try to use this movie as an introduction to the Galactica universe...), mostly unified by the person of Kendra Shaw, whose official title might be "Highest Ranking Pegasus Officer We Never Saw Before". Shaw arrives on Pegasus about fifteen minutes before the original Cylon attack, and has a front row seat for the craziness hinted at during the first time through the Pegasus story. Later, she becomes Lee Adama's XO, and leads a mission to a mysterious Cylon outpost dating from the first Cylon war. Add in a couple of flashbacks as to what the elder Adama and Cain were doing on the last day of the first war, and you've about got it.

The basic issue with a this movie, which is designed specifically not to be necessary to understand the main story, is for the show to justify it's existence as more than a way to move DVD's at Best Buy. I think it does, not so much at a plot level, but in the way that it deepens the Pegasus story, already one of the show's best storylines.

The Galactica story has always revolved around about three questions, how do you deal with overwhelming loss, how are you supposed to act in the name of survival, and how are you supposed to treat a mortal enemy. Razor encompasses all three. The earlier Pegasus arc was, in some ways, a little too easy -- Cain fits very neatly into the model of Crazy Commanding Officer Who Goes Too Far. By taking us through the all the steps from beginning to end, Razor makes it harder to dismiss Cain as a lunatic -- it explains her actions without excusing them. Kendra Shaw, who pretty much wears a sign at the beginning saying "I'm Not Crazy" gets drawn straight into the heart of it all. As a result, Razor ends up being a very dark story even by Galactica standards.

  • My list of bedrock Galactica questions doesn't include the question of whether the Cylons are human. While that's frequently a topic of discussion on the show, it's clear to me that the creators of the show know the answer to that question... they use the human/robot question as a way of getting at the deeper issues.

  • I liked the subtle ways in which the movie placed itself in the Galactica timeline, the exact number of survivors in the credits places it, plus there were a couple of background references to major events in the last half of season 2.

  • Have they ever mentioned on the show exactly what caused the first Cylon war to end so abruptly? That's a possible plot issue to be dealt with in season 4. Or, I suppose, the on-again, off-again Caprica miniseries.

  • Moore's commentary is very interesting -- as with many other Galactica episodes, this one changed dramatically in editing. Essentially, they turned the entire movie inside out, and what was originally the framing sequence became the ending mission, and the original meat of the movie became the framing sequence.

Monday, March 03, 2008

Using Active Record For Migrations

New post on the pathfinder blog:

Using ActiveRecord to Migrate Legacy Data