The Monty Hall Problem

This is an old story, but a coworker and I were just discussing “The Monty Hall Problem,” which comes down to the common scenario from the old game show “Let’s Make a Deal”: If you have three doors, with a car behind one of them, and dud prizes behind the other two, once you’ve made your selection and the host reveals a dud prize behind one of the other doors, does it make sense for you to switch doors or stick with the one you’ve picked?

The simple intuitive answer is that it makes no difference, now that there’s a 50/50 shot at opening the right door. But it seems that 2/3 of the time it’s better to switch! We pondered this for a while and I guessed that it may have something to do with the fact that the host knows which door the car is really behind.

Apparently that’s correct. (Since this link points to an ancient [in Internet time] web page that may or may not endure, although it’s made it this long, I’ll provide a summary here.)

Let’s Make a Deal Roulette Wheel

This roulette wheel is the key. The inner circle is the door the car is behind, the middle circle is the door the contestant picks, and the outer circle is the door(s) Monty Hall can open after the contestant picks. The red spaces indicate that the contestant should switch, and the blue that they should not. 2/3 of the time it’s better to switch, because Monty Hall has basically been forced to reveal that the car is behind the door the contestant did not pick.

In other words, the contestant picks the right door the first time 1/3 of the time. This is pretty straightforward. That means that 2/3 of the time they did not pick the right door the first time, also straightforward. Therefore, since 2/3 of the time the car is not behind the door they picked, and Monty Hall will never open the door the car is behind, then 2/3 of the time the car is behind the door that neither the contestant nor Monty Hall picked, so the contestant doubles their chance of winning by switching.

The Case of the Missing Nav Bar

I will admit, sometimes the problems I encounter in Internet Explorer are simply due to slight differences in browsers’ implementation of HTML or CSS or whatever, and I’m just not properly accounting for the way IE does certain things. Other times, it’s true, they’re due to a flat-out bug in my code that Safari and/or Firefox (usually “and”) will just graciously accept, whereas IE will not. (The cases where IE catches errors that Safari and Firefox permit, however, are rare compared to the vast, cluttered landscape of bad code that IE welcomes with open arms but that Safari and Firefox rightly reject.)

And then there are the cases such as the one I encountered today. There’s no way around it. I can’t find a nicer way to put it, IE is just plain fucked up.

Yesterday I was going along innocently enough, demonstrating to a coworker the site I had been working on for him. As usual I had worked with Safari and Firefox as my test browsers, firing up IE through a remote connection to my PC as needed to make sure things weren’t completely off track. (In a perfect world, I would never have to do this, of course. But, well…) And then, wham! Of course this kind of problem only rears its head when you’re showing your work to someone who has the authority to reject it. I was convinced it was a fluke on his computer, but sure enough when I went back to my desk, I observed the same thing happening in IE on my own PC. Time to hit the brakes once again and go into IE debugging mode.

I tested all of the obvious things. No luck. So I dug a little deeper and started testing the more obscure, but at least logical things. Still nothing. And like so many times before, I was reduced to just randomly trying anything to see if I could get a different result, no matter how seemingly absurd.

Fortunately it only took about an hour to track down the problem this time. But as usual there was no satisfying resolution, no “Aha!” moment as I suddenly recognized a stupid mistake I had made. Oh no. The problem was that the CSS definition for the <div> tag containing the entire body of the page specified a background color. Of course! (No, not of course, as this should not have any impact whatsoever!)

*SIGH* Seeing as how that background color specification wasn’t technically necessary, I removed it. Problem solved. Frustration with Microsoft, higher than ever.

Salvage (part of) a corrupted zip archive in Mac OS X

Perhaps this has been pointed out elsewhere; I haven’t really searched for it, so I don’t know. But it’s rare that I stumble, completely on my own, onto what I believe is truly a “hot tip” for dealing with computer problems, and when I do, I’m excited to share it.

Now then, the problem we’re dealing with here is corrupted zip archives, which seems to be common for me these days given the fact that I’ve foolishly been using some cheap off-brand CD-R’s that have been sitting around my house on a spindle for a couple of years.

The situation manifests as such: You double-click a zip archive to extract the files, BOMArchiveHelper fires up (don’t worry if you have no idea what this is — basically it’s just a background application embedded in Mac OS X for working with zip files), and the extraction process begins.

But then, oh dear. After a while (usually right near the end), the progress bar will change to a disconcerting alert: Unable to unarchive... (Error 1 - Operation not permitted.) Aside from the meaninglessness of the error message itself, you realize, dishearteningly, that the only thing you can do is click the “OK” button, at which point… *poof* everything is gone. Well, the zip file itself is still there, but what good is it if the goodies are forever locked inside?

I’ve discovered, however, that while BOMArchiveHelper is busily extracting the archive, it creates a hidden temporary directory on the hard drive in the same directory as the zip file. Once you click “OK” on this alert, it deletes this temporary directory, but until then, it’s there. With all of the files so far extracted waiting inside. Oblivious to the doom that shortly awaits them.

So what do you do? Well, the first thing you do is get your pointer away from that “OK” button! Leave the alert on the screen, and fire up Terminal. You’re going to need to get your hands dirty with some command line mucky-muck, so if you don’t know where Terminal is, I advise you to just stop right here. Cup your hands over your face and sob quietly.

Now then, this is most likely going to require root access, so type sudo -s and enter your administrator password. Then navigate to the directory where the zip file is. Type ls -al and amongst the hidden files at the top of the list (the ones whose filenames begin with a period), you’ll see a subdirectory named .BAH1234. (The 1234 will be some random number, which I am guessing is the process ID. But it’ll always start with .BAH.) Make note of the exact name, because you’ll need it in a minute.

Everything that’s been extracted so far is inside this directory! So now you can move or copy the contents to another directory and BOMArchiveHelper won’t take it upon itself to “tidy up” after you click the OK button. Here’s some code to try:

mkdir Rescued
mv .BAH1234/* Rescued/

Be sure to change the 1234 portion to whatever the correct name is, as you determined by running ls -al earlier. Also, note that if you’re extracting multiple zip archives at the same time, they may be handled by the same process, so you’ll have a second directory named .BAH1234 2 or something similar. Since this name contains a space, when you’re referring to it at the command line you need to wrap it in quotes, like this:

mv “.BAH1234 2″/* Rescued/

This will create a new (visible) directory at the same place on the hard drive, called Rescued, and it will copy everything from BOMArchiveHelper’s invisible temporary directory into Rescued, where you can now work with the files as you wish. It’s unlikely that everything from the zip file will be in here, but everything that’s not corrupted in the archive will be, and it might just be the things you were looking for.

Once everything’s been moved into your Rescued directory, you can go ahead and succumb to the temptation of that gently pulsating, deliciously blue (or not-so-deliciously gray, depending on your system settings) “OK” button.

RoundRects are everywhere!

It was true in 1981 and it’s true today. Rounded rectangles are everywhere, and they’re still giving us technogeeks trouble. Maybe it’s not so hard for a CPU to render them anymore, but it’s still inconvenient at best in a web browser, at least until CSS3 support finally shows up.