Tuesday, November 27, 2007

End The War

Driving to XP West Michigan tonight I passed through the trendy parts of East Grand Rapids, where I saw these yard signs that say, "End The War." When I see the words, "End The War" I have often thought that that means "Give up and cut our losses."

Here's another way of looking at it. We ended World War II in 1945 and I have every confidence that Mr. Churchill and Mr. Stalin and Mr. Roosevelt each did their level best to end that war as quickly as possible.

From now on when someone says to me, "End The War," I intend to reply, "Yes, we should win it as quickly as possible."

Tuesday, November 13, 2007

The Hollywood Stupid Tax

I've said elsewhere that I believe the death of the Star Trek franchise was due to the Hollywood Stupid Tax, a fact I realized when I saw the Enterprise from the evil-parallel Spock-with-a-goatee universe and noted that those were the only episodes that didn't suck of the entire Enterprise series.

The Hollywood Stupid Tax came to mind again yesterday when I turned on the old-movie-channel and saw the last 5 minutes of "The Dirty Dozen." That movie rocks in a way that only someone who thinks "300" was homoerotic cannot understand. There's a writers' strike on in Hollywood. So, there's an EXCUSE for the plots of all the stories being tired, derivative and repetitive. And what could the American viewing public go to see over Veterans day weekend? Anti-war sermons consisting of 87 minutes of famous-name actors giving speeches to one another. How's the box-office on your latest flick, Mr. Redford?

There's more to it than just further alienating people who already think Hollywood types suck. There's "opportunity cost." Opportunity stands rapping on the door with huge boat-loads of cash in a valise saying, "open up and this money is yours."

Just imagine what a remake of "The Dirty Dozen" would bring in in terms of box-office. Set the thing in Afghanistan and select a dozen guys in federal prison for a suicide mission to someplace in the Afghan mountains. Make them heterosexual, white, male Christians who don't sort their recyclables. Use lots of CGI and roll out an accompanying videogame that plays a lot like Halo. It's a license to make tons of money.

Now, i don't own any stock in any of the big movie companies. But if I did, I'd seriously question the financial stewardship of current management.

Saturday, November 10, 2007

Solving Problems With Unsent Email Messages

I've found that an effective problem-solving strategy is to write an email message describing the problem. This happened in the last 48 hours to me.

First, I have a legacy program that does not have any formal unit tests. It was my first OO project and my inexperience really shows. Happily, I drank the Test-Driven Development (TDD) kool-aid a couple years back so my current code doesn't suck so bad. But living in a TDD mode makes maintenance of legacy code devilish. You get used to "TDD has your back" and when you approach your legacy code with that same fearlessness about refactoring its a high-wire act without a net. Ergo, I resolved to write unit tests for the new work that's required of it and also for any refactoring I choose to do.

More easily said than done. I have some experience with CPPUNIT and have applied it on some of my C++ work with some success. However, everything I have using CPPUNIT works in 32-bit Windows on the Microsoft C++ compiler. And this legacy system is a BORLAND 16-bit Windows application with a 3rd-party GUI library nobody uses anymore called zApp that I don't want to port to 32-bit Windows and the Microsoft compiler. How to add a unit testing framework to that? Pondering this question has kept me up some evenings. But the GLSEC conference this week thrust upon me the urgency to add unit tests and the guys at Atomic who use mock objects to abstract HARDWARE got me thinking.

I saw a way to start, but there were a lot of details that I didn't understand and I wanted some help. So, I started work on an email to a colleague describing what I was trying to do and what I had a hard time understanding.

The mere act of articulating a problem is a magical thing.

I jotted down the first steps I'd taken and where, exactly I was having difficulty. And then an idea occurred. I followed up on that idea to clarify my question and in so doing I found that the idea had solved that difficulty but had raised a couple others a little further along the path to solution. So, I edited my email restating the question as a backgrounder for the current difficulty nettling me. As you can probably guess, I was mid-description when another solution came to mind. And follow-up proved itself, and I edited the email to summarize the current state of my ignorance and so on iteratively until done.

I had a working program, but an email that was a mess of half-finished edits reflecting how much I didn't know at various points in the last few hours. I deleted the unfinished message, declared victory, and went to bed.

This pattern works with more than just emails. If you have a supportive wife, or cubicle-mate, or if you're pair-programming, just describing what you don't know suffices to organize your thinking enough to suggest a solution.

Wednesday, November 07, 2007

How to Break Borland C/C++ 4.52

Now, you're probably wondering why I'm posting about a C++ compiler that was pretty cool 12 years ago, but is now painfully obsolete. Well, believe it or not, some companies make money on software that depends upon this compiler.

Here's the deal. Normal, sane people don't rename their printers to something incredibly verbose. But if you were normal and sane you wouldn't be using Borland C/C++ v4.52. Under Windows XP, click Start | Printers and Faxes and you'll see a list of the printers installed on your machine. Pick one you like, click on its properties, and rename the printer to something like this: "HP LaserJet 4 (but I've added a very verbose description of many long and boring details to blow out memory in a zApp buffer)" Now you're all set.

Suppose you make this oddly-named printer your default printer. Then launch the Borland 4.52 IDE. You should see the Borland copyright splash screen overshadowed by a dialog box that says this:

Fatal error in IDECRTL at 0001:4758 (addr = 0x143f4758)
Borland C++ will terminate
Save editors before exit?

It doesn't matter what you do, Borland will immediately exit. And all you'll have is the unenlightening error message above to guide you. That and a bunch of 8-year-old Usenet posts that will misdirect you to version mismatched DLLs, to reinstall. Reinstalling won't help. Rebooting won't help. You'll have to change the printer name and/or the default printer to something less verbose.

Hopefully, if you see the error message above, the Google godz will wisely steer you to this note. Good luck my friend.