It’s not the heat, it’s the humidity

The difference between St. Louis and the Bay Area is the little things. Today, I went to the cabinet and took out a slice of bread that’s at least two or three weeks old. It was a little stale, but I toasted it up and it was fine. In St. Louis, bread started to go bad after about three days, and there was pretty much nothing you could do to keep bread from going moldy within a week.

An unexpected victory

I’ve read that at Disneyland, the wait times posted at ride lines are deliberately overestimated, so that when you finally get to the front of the line, you feel like you weren’t waiting that long.

For the past month or so, I’ve been playing (mainly on the bus to and from work) Wakeboarding Unleashed™. The manual promised that, along with increasingly difficult levels and challenges, and additional wakeboarding skills and boards, I would be able to unlock videos, as well as a secret character and level. When I found a reference online that revealed that all of these things would be unlocked only by completing the game with a given character, I was pretty bummed. I took “complete the game” to mean completing each level’s objectives, gaps and challenges. If I didn’t do this, after all, I would still have things left to do in the game. And the “attack sheet” gave me a convenient count of how much of my “career” I had completed.

So imagine my surprise when—with only 72.5% of my career goals achieved—I “finished” the game. It turns out all I had to do was finish the last challenge of the last level. It turns out I’m allowed to skip straight to the end, and that counts. Of course, I wasn’t doing things in order anyway—some order is enforced, since you unlock later levels and challenges by beating the earlier ones, and I had unlocked the entire game by this point—but I had expected that “complete the game” surely couldn’t mean anything other than when the career meter got to 100%.

I’m not sure whether to feel enthused or let down. On one hand, I was beginning to despair that I would ever be able to finish everything in the game. The only things left were those that were the most difficult, so I had an expectation that some of the challenges remaining were simply going to be too difficult to ever accomplish as a casual player. On the other hand, I was fully expecting that I would have to do it somehow, and being declared “done” by the game itself after beating an essentially random challenge that happened to be the last one on the list…

I guess there are seven more characters I can play, and seven more videos to unlock. Plus my Shaun Murray career still has 28.5% left to play. But I may be beginning to tire of it. But then, I suppose a months of entertaining gameplay is not bad for a $30 computer game (and I am ignoring the fact that I spotted it in the $10 bargain bin the week after I bought it.)

What’s in a name?

At dinner last night, there was a bit of a discussion about what exactly a “panther” was. Obviously, it’s a large cat. Some insisted that it was a large black cat in the leopard family (Panthera pardus), while I was pretty sure it was one of the many synonyms for mountain lion (Felis concolor, aka cougar, puma, painter, catamount). Turns out we were both right. According to the dictionary, a panther is either a “leopard, especially in its black unspotted form,” or a mountain lion. The latter definition is specific to American usage, as the mountain lion is a North American wildcat.

I even found several references to a third definition, which indicates panther can be used to describe the large spotted cat Panthera onca. A quick search shows that Panthera onca is more commonly known as the jaguar.

So, yes, this means that the past few Mac OS X releases can all be legitimately referred to as “panther.” But since I can find no reference to panther being used for Panthera tigris (tiger), I’m going to hope it’s a fluke.

They speak European in Europe, right?

An episode of Jeopardy that TiVo recorded for me earlier featured a contestant who taught English as a second language. During the get-to-know-you part of the show, he revealed that most of his students are from Latin America and Asia. Alex asked which students had the easiest time learning English; his response was that speakers of European languages probably learned English quickest, but it didn’t really matter, since he didn’t usually have students from Europe.

Yeah, it’s too bad that those Latin American students mostly speak Spanish, and not one of those European languages like they speak in (oh, I don’t know) Spain. Maybe he was thinking that it wouldn’t be too hard teaching English to someone from England.

Amazon.com Alerts

At a bookstore the other day, I discovered that several new Steven Brust books have been published since I last thought to look. I had thought Amazon.com was supposed to notify me about this sort of thing, so I went and checked. It turns out that I could find no mention of the email notification service anywhere on the site, although (thanks to Google) links to the signup page still take you to a valid-looking page.

A quick email to Amazon’s customer service confirms that “We have recently discontinued our Alerts service,
and e-mail notifications are no longer being sent.”

This sucks. Does anyone else provide a similar service? A quick search of the online booksellers seems to indicate that no one else has this feature either.

Things that annoy me, part twenty-seven

So here’s the thing: The California Vehicle Code treats bicycles just like any other vehicle. Except for a few specific exceptions, there’s no legal difference between a bike and a small, light, underpowered motorcycle. I may not be a great bike rider, but I like to at least think I’m a safe and legal one. I come to a complete stop at stop signs, I signal my turns and stops, I yield to pedestrians, and I always wear my helmet (which is not a legal requirement, but a really good idea nonetheless.) If I’m biking and need to get somewhere it’s not legal or safe to bike, I get off and walk.

So of course I get annoyed at auto drivers who don’t seem to understand that it’s not only legal for me to bike on the road, but that I’m not legally allowed to bike anywhere else. Like the red sports car who, as he passed me (illegally) earlier today, laid on his horn, apparently to inform me I was in a lane that only cars had a God-given right to drive in. But what actually annoys me more is other bikers, who flout the law with ready abandon. In the fifteen minutes a day I spend biking, I see at least half a dozen people on bicycles (and, of course, without helmets or lights) riding on the sidewalk, on the wrong side of the road, through red lights and stop signs, and generally making a menace of themselves to pedestrians, drivers, and other bicylists (last year, one such biker ran into my car.) With bikers like that on the road, I can hardly blame drivers for thinking ill of the rest of us.

Alexei’s guide to Aaron Sorkin

It’s no secret that I’m a big fan of Aaron Sorkin’s screenwriting. It occurred to me today that one of the things he’s good at is memorable speechmaking. Each of his movies has a scene that has, at least for a time, entered the public consciousness and became recognizable on its own. These scenes are all pretty much monologues, spoken with force and drama by one of the movies’ main characters. But my favorite speeches from each of Sorkin’s movies have been other scenes. In each case, they’re scenes of dialogue, with lines spoken by other characters than the ones who speak the more famous lines.

I found this sort of interesting, if somewhat trivial. So without further ado, here’s my guide to scenes in Aaron Sorkin’s three movies, complete with chapter numbers for the DVDs:

A Few Good Men

  • Famous scene: Chapter 26 (“You want answers? / I want the truth! / You can’t handle the truth.”)
  • My favorite: Chapter 24 (“I’m sorry, I keep forgetting. You were sick the day they taught law at law school.”)

Malice

  • Famous scene: Chapter 16 (“You ask me if I have a God complex? Let me tell you something: I am God.”)
  • My favorite: Chapter 24 (“What does anybody want? I want the Red Sox to win the World Series.”)

The American President

  • Famous scene: Chapter 30 (“My name is Andrew Shepherd and I am the President.”)
  • My favorite: Chapter 27 (“They want leadership. They’re so thirsty for it they’ll crawl through the desert toward a mirage, and when they discover there’s no water, they’ll drink the sand.”)

P.S. I realized this afternoon that the first two seasons of The West Wing are available on DVD and I don’t own them. Odd. I couldn’t buy Sports Night or the special edition of A Few Good Men fast enough, but The West Wing DVDs have been out for some time, and I haven’t had desire to buy them. Maybe because the show is still on the air? Or maybe I subconsciously still blame The West Wing for being part of the reason there was never a third season of Sports Night. Now that I’ve thought about it, though, I’m starting to feel a burning sensation in my pocket.

C++ vs. Objective-C

There’s a “discussion” on Usenet right now about the relative merits of Objective-C versus C++. I know better than to post to that sort of thread on Usenet, but apparently I don’t know better than to do it in my weblog.

The argument (which you can go and read yourself) boils down to “C++ can do everything Objective-C can” versus “sure it can, but not easily, usably or understandibly.” The usual argument comes down to object models: With Objective-C, you can send any object any message, and if it understands it, it will respond. C++ is restricted by its compile-time type system, so that even if you have arbitrary objects that all implement the member function foo, there is no way to call that method on a set of them unless they all inherit from the same base class. Except that you can, as exemplified boost::any and boost::variant.

To me, here’s the point people are missing: Objective-C has one main model for programming, objects. C++ has two. It has its object system, which is very different than Objective-C’s. C++’s object model simply does not allow you do to the sort of messaging and introspection that Objective-C allows. But C++ has another, far more powerful, programming model: generics (aka templates). With a template, you can call foo on any object that implements it, regardless of class hierarchy. just method signatures. That’s how boost::variant works, behind the scenes. In fact, it’s even more powerful, since you can make use of any property that’s shared between two types, not just method names. Generic programming, when you make full use of it, provides object-like polymorphism and overloading without using objects. Note that the STL makes use of inheritance only for code reuse, and classes only for encapsulation. In an interview on the design of the STL, designer Alex Stepanov recommends against member functions, instead recommending that all methods be global.

Thinking about, I realize that well-designed class libraries for each language look completely different, object-wise. A template-based C++ class library (like the STL) makes heavy use of inheritance for code reuse, but does not use dynamic method dispatch (“virtual“) for polymorphism, relying on templates instead. An Objective-C class library (e.g., Cocoa) uses objects for polymorphism, making heavy use of dynamic dispatch but without much subclassing; code isn’t inherited from one class to another, but classes delegate to one another to share code. This is true even (or especially) compared with non-template-based C++ class libraries. For example, in PowerPlant (a C++ app framework for the Mac), most classes are designed to be subclassed. Your app might inherit from LApplication and implement methods to customize it. Very few of Cocoa’s classes are ever subclassed, on the other hand; an app would implement a separate delegate class that responds to events or answers questions that NSApplication asks about how your app should behave.

Then there’s Java, which is stuck with the inefficiencies of Objective-C’s runtime object model (and lack of generics), but the rigidity of C++’s compile-time type system. When using a Java class library, you can’t simply inherit all the code you need as you might with C++, since Java only has single inheritance, but since it has strong type-checking, you can’t use Cocoa-style delgation either. Last time I did serious Java programming (it was several years ago), I remember having to create dozens of “connector” classes just to implement the interfaces that the APIs needed. Java 1.1’s big new feature was “inner classes”, which did nothing to solve the serious language problem, but at least made it so that you didn’t have to create a separate source file for each of these damned things. I hear that Java is getting “generics” support soon (if it hasn’t already), but my understanding is that it’s just templatized types, which mainly just means you can write type-safe code using off-the-shelf collections without casts. It doesn’t give you any of the expressive power of real generic programming (e.g., C++ templates). Java, under the hood, does use an Objective-C style object model, but you need to use the reflection APIs to get access to it, and they aren’t very “natural” (and weren’t added until Java 1.1, either!) In Objective-C, you can call a method on an object not known to implement it until runtime, simply by calling it.

Once again I’m not quite sure what my point is. I do know that C++ is a far more complicated language than Objective-C. Every time I look at code that makes heavy use of the C++ language, I find out more things that can be done with it. With enough application of template magic, C++ can in fact do almost any language trick, and it is compile-time checked and type-safe in situations where almost any other language would have given up even run-time type safety miles before. Years after I thought I knew everything in the language, C++ continues to impress me with the things it can do. I think there’s something really poetic about a language that’s deep enough that no one can ever fully understand it. On the other hand, when I need to get something done, I’m usually more interested in working code than poetry.

Command-Shift-S

Rick Schaut of Microsoft’s Mac Business Unit wrote recently about styles in Word 2004. More specifically, he writes about how they “reworked the functionality of Cmd-Shift-S for Word 2004.” This keystroke moves the cursor focus to the “Style” popup in the formatting toolbar. In previous versions of Word, if the formatting toolbar was hidden, it did nothing. In Word 2004, it shows the formatting toolbar and then moves focus to the “Style” popup.

I ran into this, quite accidentally, within my first ten minutes using Word 2004. I had a document open, and wanted to save it with a different name. Instinctively, my fingers pressed Command-Shift-S, which is the “Save As…” shortcut in TextEdit (admittedly, my word processor of choice most of the time). Instead of bringing up the save dialog, the formatting toolbar appeared! This confused me for quite some time. I tried to figure out what I had done. Command-Shift-S wasn’t associated with any menu item; pressing it again didn’t hide the formatting toolbar, so it wasn’t some sort of toggle. I tried hiding the toolbar and pressed Command-Shift-S again. Sure enough, the formatting toolbar reappeared, for no reason that I could figure out.

My first thought was that the shortcut invoked some complicated change, either to my document or Word’s view of it, that happened to result in the toolbar layouts changing (e.g., how switching to Outline Mode brings up the Outlinting toolbar.) But after trying it a few times, I couldn’t identify any such change. Perhaps I would have eventually noticed that the keyboard focus had moved to the Style popup and made the connection between “S” and “Style.” Maybe not—the Style popup is the first item in the toolbar, so it’s the natural thing to highlight when you open the toolbar. Maybe I would have given up and figured that Word simply had assigned Command-Shift-S to the “show formatting toolbar” command, and forgot to highlight the equivalent menu when performing the action. As it happens, I suddenly recalled Rick’s weblog entry, which I had read a week earlier, and realized what was going on.

Obviously, I don’t use Word very often, or I wouldn’t have been trying to use Command-Shift-S to Save As. If I did use Word and its style features frequently—and years ago, back when I did use Word for writing more often, I did use styles—I would probably find the new behavior a worthwhile addition, as Rick seems to. Somewhere, there is a balance between appealing to advanced users and being childproof for novices. In my case, I wasn’t trying to invoke the Style popup, I (essentially) pressed an accidental keystroke, and Word did something completely unexpected and unexplained. A less technically-inclined user probably wouldn’t have stopped to try to figure out what was going on; it would have made Word simply feel less friendly and more confusing—maybe even less “Mac-like.” But I wouldn’t want to take the feature away from the expert Word user. I’m not sure what conclusion to draw from this.

Weekend service returns June 5th

Caltrain has announced its new schedule for “Baby Bullet” and weekend service, effective June 5th. The schedule has been the result of some debate and concern among riders, especially the weekend service, which has been absent for nearly two years now. There were several proposed schedules that differed in both how many trains would run, and where they would stop. The final schedule provides service to each station hourly, but only to San Jose Diridon, instead of proceeding to the Tamien station as do the weekday trains. Instead, Caltrain will be running a free shuttle bus between the two stations throughout Saturday and Sunday, to provide service to the Tamien station.

I’m not quite sure I understand: How is it that they cannot provide train service one additional stop, but do have the ability to run a shuttle? Assuming the number of passengers is low, a shuttle bus is almost certainly cheaper to run than a full five-car passenger train, but the train is running anyway; it would just be one more stop. Further, there may be folks who will choose not to take Caltrain from Tamien, due to the lowered convenience and extra hassle of the shuttle. Given that Tamien links to the VTA light rail and bus systems in San Jose, even if the shuttle is slightly cheaper than the train, it might well represent a not insignificant loss in fare revenue.

The only explanation I can come up with is that the weekend schedule as it currently stands requires them to only have a certain number of trains running at a time (four, if I count correctly), but that adding one more station stop to each run would require them to run more trains—five, maybe, or even six—to maintain the hourly schedule. In that case, I could see how a bus would be cheaper. But it doesn’t add up, math-wise: For example, the southbound 420 train arrives at Diridon at 8:36 AM, but the northbound 425 doesn’t leave until 9:00. Based on the weekday schedule, the round-trip from Diridon to Tamien and back should take only fifteen minutes, which the schedule would seem to allow for.

Color me confused.

Movable Type 3.0

It seems like everyone with a weblog has been talking about Movable Type 3.0, so I guess I may as well chime in with my two cents. This weblog has been running Movable Type 2.64 with the same set of plugins and templates for almost a year now, and I have no immediate plans to upgrade to any newer version of anything. I went through an initial phase where I was hacking weblog software, writing tons of plugins, but once I got my weblog the way I wanted it, I haven’t had occasion to change it, and nothing I’ve seen about Movable Type 3.0 convinces me otherwise.

A lot of people have complained about the pricing model, but I’m neither surprised nor disappointed. From the beginning, it was clear that Movable Type was free only for limited personal use. In fact, it always bothered me that you couldn’t purchase a commercial version of the software—I was always worried it would turn out that the MT content management system would turn out to be so useful I’d want to use it for business purposes, and until now, you just couldn’t do that. For a business that needs software like this, $300–$700 really isn’t all that much. The “Personal Edition” price of $100 seems steep, but I suppose they want to encourage people to think about TypePad instead. If they’re going to provide good support, I suspect $100 is probably about what they need to charge; there are a lot of people who will try to set up a weblog and will need hand-holding through the complicated parts. For those who like to tinker with their own weblog, the Free Edition is still, well, free, and it’s the same software.

That said, it’s always bothered me just a little that I wasn’t using open-source software to host my weblog. Especially given the time I put into writing plugins and hacking on software I didn’t have the right to redistribute or use in non-prescribed ways. I picked Movable Type because it was the best weblog software at the time, and it did everything I was looking for and more. I certainly don’t begrudge Six Apart their commercial success; I regret not having donated $20 to them when I had the chance. I always meant to, but now they’ve taken down the donation links. Oh well.

However, if I ever decide to change this weblog (and I’ve been thinking about it; the look is getting stale, and the mess of plugins I’m using feels over-engineered for what I want to do,) it will probably not be to Movable Type 3.0. These days, you can hardly turn over a rock without hearing about new weblogging software, and I’ll probably try something different (and open source). I’ve always liked the idea of blosxom; maybe I’ll give that a try.

Just a little blurry off the top

I usually have no interest in wearing contact lenses, or other (e.g., surgical) options for improving my sight. I like the way I look wearing glasses, and I’m quite comfortable with them. But there is one situation that makes me wish I could see better without them: I wonder sometimes how different life would be if I could see the status of my haircut before leaving the barber’s chair. At the end of a haircut, when asked if I like the haircut, I usually just say yes, when a true response would be that I have no idea. Luckily, I rarely get my hair cut more than a few times a week (hah!), and I’ve always had good luck with haircuts, so it isn’t a huge problem.

Continue reading

Coming soon to own on videocassette

I don’t use my VCR much; I bought my last prerecorded VHS movie circa 1999, and have hardly touched a blank tape since getting TiVo nearly two years ago. Recently I popped in a few movies from the late ’90s, and discovered how much of a different experience watching a VHS tape is versus a DVD. The main difference, interestingly, was not the lack of menus or random access, but the ten minutes of coming attractions I had to sit through (or fast-foward) prior to watching the movie.

It’s not so much that the previews were there—plenty of DVDs want you to watch previews before the movie starts, although not many—but that they were mostly bad. Previews on DVDs, I suppose since they’re so easy to skip, are usually well-produced and for movies that the producers of the disc think you might actually want to see. The movies, TV movies, TV shows and docu-dramas previewed on my VHS tapes seem to be there mainly because they know they have a captive audience, so they may as well try and hype everything they’re trying to sell that month.

Maybe that’s the main difference between these VHS tapes and the DVDs I’m now used to: selling DVDs to own is a big business, and anything that gets put on the disc still needs to be somewhat appealing in two or three years. In the late ’90s, almost all VHS tapes of new movies were going into the rental market, so the features on the movie needed only to be topical. I also have some VHS tapes of older movies, ones that had been around for a while at the time the tapes were produced and were probably intended to be sold rather than rented. I wonder if they have less jarring previews (or less of them generally).