« October 2005 | Main | December 2005 »

November 30, 2005

Updates and Expectations

I hit problems with Windows Update on a couple of my machines (one at work, one at home). In both cases an update repeatedly failed to install and gave no indication as to why.

Now Microsoft, to its credit, offers free support for Windows Update, and in both cases I got a quick reply telling me how to fix the problem (the first was by stopping the wuauserv service, deleting %windir%\SoftwareDistribution, and then restarting wuauserv; the second was by hand-installing the Windows Genuine Advantage DLLs). But still it was frustrating that there was no information that would allow me, a fairly technically competent user, to solve the problem without resorting to support (and the support costs Microsoft money in the end). The precise knowledge is obviously available, since the support people were able to retrieve it on their first attempts, but it's not publicly available. If you search the Web for the error, all you find are people complaining about hitting the same problem and other people attempting to guess (incorrectly, in the case of my two problems) how to fix it.

I was discussing this with my father (who is also technically savvy), and he said he was also frustrated by similar problems. But then we started talking about car repairs (I feel that cars are probably the best everyday analogy to computers). When my father was young...well people rode around on dinosaurs...but then a bit more recently, many people expected to be able to work on their own cars. They would change the oil, futz with the spark plugs, adjust the alternator crankshaft (or whatever...as I will soon claim, someone my age typically makes no pretense of understanding how cars work). The information was presumably also more available to people...it's hard to compare because now we have the Internet making everything so much more available, but I'll assume there were more books, newspaper articles, magazines, etc. about car repair than there are now. Nowadays, most people don't expect to do that. If something breaks with their car, they take it to the dealer to fix it. And as a result, car manufacturers feel no real need to explain what the cryptic status codes that they flash on the display mean; all they tell you is whether it is an urgent problem or just something you should have looked at eventually. If a car is recalled, there's no question you take it to the dealer to fix.

This may be where computers are heading. A critical software update is like a car recall; the difference is that since it is software, it's POSSIBLE that it could all be fixed remotely (no physical parts involved, like with a car recall). But it doesn't always work that way; the instructions for fixing my second Windows Update problem involved hand-installing and regsvr32ing the DLLs, then running a .INF; the .INF actually failed, which would have require a typical user to need a fix to the fix to the fix; but since I'm a geek I was able to look inside the .INF and determine that all it did anyway was install and register the DLLs, and since I had already done that by hand I could ignore the error (which may have been precisely BECAUSE I had already done it by hand).

The era of user-repaired computers is fresher in our memories than the era of user-repaired cars, so it seems stranger to be unable to repair a computer than it does to be unable to repair a car. But it's conceivable to imagine a near future where people don't even attempt to fix their computers on their own; they bring them in to a repair shop for checkups every six months, and if there's something urgent, they bring it in right away. This wouldn't work now because updates are so frequent, but hopefully that's a temporary problem (my father pointed out that his father would never have considered driving from Philadelphia to Atlantic City without two spare tires; now I get a flat about once every five years). And in the future, when operating systems may be burned into the firmware or shipped on read-only USB devices, a trip to the computer fix-it shop may be the only choice you have, and us old-timers wih our "Did I ever tell you about the time I had to hand-install a DLL" stories may be the ones sounding like geezers.

Posted by AdamBa at 05:05 PM | Comments (4) | TrackBack

November 28, 2005

26.2

Several years ago I picked up an obscure book called Bone Games from Daedalus Books. The copy I have is subtitled "One Man's Search for the Ultimate Athletic High", although it now has been reissued with the subtitle "Extreme Sports, Shamanism, Zen, and the Search for Transcendence." The book is about a quest that the author, Rob Schultheis, went on to recapture a magical feeling he experienced after falling off Neva, a mountain in the Colorado Rockies, and having to descend, injured, on his own:

Something happened on that descent, something I have tried to figure out ever since, so inexplicable and powerful it was. I found myself very simply doing impossible things: dozens, scores of them, as I down-climbed Neva's lethal slopes. Shattered, in shock, I climbed with the impeccable sureness of a snow leopard, a mountain goat. I crossed disintegrating chutes of rock holdes vanishing from under my hands and feet as I moved, a dance in which a single missed beat would have been fatal. I used bits of rime clinging to granite as fingerholds. They rattled away into space but I Was already gone, away....it was like certain dreams I have had in which my body is light as a feather, lighter, and I leap off one foot, effortlessly, and drift ten, twenty, thirty feet into the air.".

When I go on long runs, after a while (it usually takes about 90 minutes) I can achieve a pale shadow of something like the sensation that Schultheis describes. There was an article in "Runner's World" a few months ago that captured some of the same feeling: it's about the Tarahumara Indians from the Copper Canyon region of north-western Mexico. The Tarahumara, somewhat inexplicably given their lifestyle, excel at long distance running -- really long distances, like 100-mile ultra-marathons. The article is about Caballo Blanco, fka Micah True, an American who went to live among the Tarahumara to learn their secrets. The sense you get from this article is of not so much running above the ground as flowing over it -- of being able, essentially, to run forever.

Inspired by the article, I thought about training for this year's Seattle Marathon. The final nudge was an article in the Seattle Times, three months ago, about how anyone could run a marathon. I pulled out a calendar and decided that having run a half-marathon in July, I could just about build up a series of longer runs that would almost constitute a legitimate training plan for a marathon. And failing that, being a guy and all, I could just show up and gut it out.

So I embarked on a series of long runs, and I really started looking forward to them. I didn't quite get the sense that I could run forever, but I did feel, at the end of each one, that I could have kept going. Unfortunately I got sick for a couple of weeks which scotched my longest run (planned for 3 hours and 15 minutes), so the longest I did was 2:45. Four hours is a pretty good goal for a marathon but I thought that would be too aggressive, so I penciled in a rough goal of 4:15 and figured I would settle for 4:30, although 4:22 (which is ten minutes per mile) was also in my mind.

The race was yesterday, and things looked good at the outset. The weather cooperated, it was cold, 36 degrees at the start, but the rain stopped and it wasn't too windy. On my way to the race I drove over the I-90 bridge, where the carpool lanes were blocked off for the course, and saw two volunteers huddled together in the cold; the sight of them, in the gloomy, directionless light that attends a Seattle sunrise this time of year, moved me to near-tears.

There has been a bit of a trend in recent years to run barefoot, it being deemed healthier because humans evolved barefoot etc, and I did see a few barefoot runners, including one guy wearing only running shorts. Another recent trend is the "Rock 'n' Roll Marathon", in which a band plays every mile; Seattle's race instead starts out as the "Monorail Accident Marathon", in which you begin right by the EMP where there was a fire last year, and about a mile later we arrived at the site of Saturday's monorail mash-up, which I got to check out from directly underneath while running by.

But the rest of the race...well, dreams of achieving satori were gradually shunted aside on my trek through hilly Seattle. I reached the halfway point in 2:03, which isn't bad, except it was 7 minutes slower than my time from July, and I wasn't trying to pace myself. As I ran on my brain (or the little dude with the pitchfork hovering over my right shoulder) started sending me not-so-subtle messages that walking for a while might be a good idea (one goal that runners tend to have, beyond beating a certain time, is running the entire distance without stopping). I told myself no, that I should keep running, and eventually reach a compromise that I would run until mile 20, then talk a walking break. When I saw the mile marker I had to hustle to reach it in 3:20 (ten minute miles), which I had for some reason decided was a worthwhile goal -- and which I did make by 12 seconds.

So I had run the previous from mile 13 through mile 20 in about 78 minutes, or just slower than 11 minutes miles, and since I was slowing down I knew I wasn't going to hit 4:22, or probably even 4:30. At that point I figured I just had to finish, which I didn't really doubt I would be able to. I took walking breaks at mile 22 and 24 (I probably walked for 12 minutes total during the race), and hit the finish line in 4:44, which is just under 11 minutes per mile--it's nice to finish "just under" something, even if it's a bit far from your original goal. My last 6.2 miles took an hour and 24 minutes, about 13.5 minutes per mile. Which is pretty slow, I guess. Going up some of the hills I had to look down at the lane markers to make sure I was still moving forward.

So that's my marathon story, and I think I even will run another one soon (they say that after childbirth a woman's body releases some chemicals that block their memory of just how painful it was, an evolutionary adaptation that encourages more children; 24 hours after the race, I may be under a similar affect). The first time I ran the Seattle Half-Marathon, in 1998, I similarly failed to run the whole way; now I can knock off that distance with relative ease. A few longer training runs, lose about 10 pounds, have the psychological edge of having done it before...no problem!

Posted by AdamBa at 11:26 AM | Comments (2) | TrackBack

November 21, 2005

Monad Book Available for Pre-Order

The first book on Monad is now up on Amazon (I'll give you a link with my Associates ID in it, see if I can earn some $$$). The book was reviewed by various team members (including me) and Jeffrey Snover wrote the forward.

Posted by AdamBa at 11:29 AM | Comments (0) | TrackBack

Xbox 360 Auctions

The Xbox 360 launches tomorrow, and because many retailers have sold out their initial allotment, there is a thriving market of people flipping their Xboxes the first day they get them. Seems like $600-$700 was the going rate for one of those on eBay.

It turns out that the winners of the Mountain Dew "Every 10 Minutes" contest got their systems a few days earlier, and the winners of the Hex 168 contest got theirs even earlier. So some people are auctioning off those, to arrive at the buyer's before the launch (or now, since the launch is tomorrow, here's one that sold for $1025 for delivery tomorrow). Looks like the Hex 168 ones (which gave you about 5 extra days of play) were getting around $1200 and the Mountain Dew ones (which gave you one or two extra days of play) were getting around $1000. But the market is drying up instantly as the pre-auctioned units hit the street; this guy currently has no bids for his early model.

Posted by AdamBa at 11:14 AM | Comments (1) | TrackBack

November 17, 2005

What I Did Last Weekend

On Friday, I got to experience something I had won at an auction this spring: a walk-on role in "Sweeney Todd" at the 5th Avenue Theatre in downtown Seattle. This is something they now appear to be doing every year (the policeman who walked on stage during the title song in "Singin' in the Rain" last year was a similar auctioned walk-on). For "Sweeney Todd" I was onstage during the song "The Contest", when Pirelli and Sweeney Todd are battling over who is the best barber in London.

There was very little preparation for it: I had come in a few weeks earlier to be measured and fitted for my costume (turn of the century London lower-class mufti) but the rest was just showing up an hour before curtain on Friday, doing a quick walkthrough of where I would be on stage and how I would enter and leave, and I was declared ready to go, retreating to my personal dressing room (complete with my name on a star) to wait for my cue.

My main co-conspirator in all this was the lovely and talented Bobbi Kotula, one of the ensemble members for the production. She had drawn the task of helping all the walk-ons (they did the same role as a walk-on for every performance). She was the one who gestured for me to come on stage, I stood next to her during the scene, and then she shooed me off. My main task was to direct the audience's attention by alternating looking at Pirelli and Sweeney Todd when the focus was on them. During the "rehearsal" I was asking Bobbi questions about how fast I should come on stage, should I exaggerate my emotions, etc. and her advice was the Yoda-esque "Don't think, be". I was reminded of a local theater that a few years ago did a live version of the movie "Point Break", with the Keanu Reaves part played each night by a different unrehearsed non-actor pulled from the audience. But Bobbi was right; once I got on stage for my bit, it was easiest to simply react to what was happening, without thinking about it too much. When someone gestured at something on stage, I would naturally lean over to look at it because the curiosity my character was supposed to feel was naturally mirrored by my own curiosity.

It was cool being backstage because people were running around in costume and signing along to the show on stage, except it wasn't just some random schmo signing along, it was a trained professional actor/actress, so they sounded pretty good. In the end a great time was had by all and there are even pictures of the event, although only backstage stuff, nothing of my actual moment in the sun. Bobbi, incidentally, is going to be in "Sleeping Beauty" at the Seattle Children's Theater.

On Saturday I flew down to the O.C. to stay with my sister-in-law and her fiance for two nights. The nominal purpose was to visit Legoland (see below), but since we had some time on Saturday we went to Disneyland for the evening. I got to experience the revamped Space Mountain, after waiting through a line claiming to be 105 minutes, even at 10:30 at night (we wound up waiting only about 45 minutes after somebody handed us Fastpasses they weren't going to use). The first time I rode Space Mountain I kept wondering if there was going to be a big drop somewhere, said expectation contributing to my enjoyment of the ride. Once I had ridden it and discovered there was no big drop, the experience was slightly degraded. Well, with the new version, spruced up to be more thrilling (or so I had heard), I had one shot to ride it for the first time and experience the same thrill of the unknown, waiting for the big drop that might be there. And I did enjoy it more (and no I won't spoil it for you by revealing if the big drop really was there).

On Sunday I went down to Legoland for my annual "Master Builder" session that I get from having a lifetime membership (this is the same trip I took last year). I wasn't planning on going except they said this year they would talk about their new plans for a Las Vegas "cluster" (as the Miniland setups are called) and we would get to build a "Las Vegas architectural element". Sounded promising...what would the mysterious architectural element be? It turns out that the plans for a Vegas cluster are still not finalized, all they are sure of is that they will build a replica of the New York New York hotel. Which is funny because NYNY itself consists of smaller versions of real buildings in New York. And Legoland also has a New York cluster in Miniland which consists of smaller versions of real buildings in New York. So a Miniland NYNY hotel would consist of smaller versions of smaller versions of real buildings in New York. Meanwhile the architectural element I got to build was...a small version of the Eiffel Tower in front of Paris Las Vegas, which is of course a smaller version of the real Eiffel Tower (which presumably leads someone to stare at the one in Vegas and say "Only in America" and then have the person next to them say, "No, there's one just like it in France"...but I digress). Legoland also has a full-size miniature (if you know what I mean) Eiffel Tower you can see from the "Coast Cruise" ride.

They were pretty vague on the Las Vegas cluster plans: opening would be in 2007, and the only indication of what they were planning to build was a picture of a computer model that appeared to show it would basically be part of the Strip with what looked like New York New York, Excalibur, Luxor, Aladdin, Paris, a big hotel that might have been MGM Grand or perhaps Wynn, and a couple of the three-spoke jobbies (Mandalay Bar, Bellagio, Mirage, or TI). But of course it was nifty hanging out with the Master Builders and the small Eiffel tower, whatever its ancestry, was fun to build. I asked MB Kristi if the job was boring and she said no, because they got to do many different things (such as take trips to Vegas to study buildings). Then I asked if anybody had proposed marriage as a way to get access to cheap Lego and she said, "No, not yet." A likely story.

On Monday morning I went running through the Newport Bay Ecological Reserve, which was very pretty if somewhat foggy. Then I flew back home. Friday on stage at the 5th, Saturday riding on Space Mountain, Sunday hanging at Legoland...not a bad weekend.

Posted by AdamBa at 10:50 PM | Comments (2) | TrackBack

November 10, 2005

What's Up With CNN's Website?

I just went to the CNN website (gotta get my dose of midday news) and instead of the familiar red logo I got some portal thing. ???? Is this because I'm on Zithromax, or is something wierd going on here?

Posted by AdamBa at 11:22 AM | Comments (3) | TrackBack

November 09, 2005

Monad Audibleizer

I really am not trying to come up with a "crazy Monad script of the week"...but this is one I thought of. It's inspired by the "visualizers" you see on car stereos now, which generate abstract visuals in sync with the music they are playing. I never could understand the point of those. My script (which I can't understand the point of either) uses the Windows system sounds to generate random audio in sync with a file it is...well basically in sync with a file it is using to generate the sounds.

So here it is:

$files = resolve-path $args[0] | where-object { $_.Provider.Name -eq "FileSystem" }

$s = ( [System.Media.SystemSounds]::Beep,
       [System.Media.SystemSounds]::Hand,
       [System.Media.SystemSounds]::Asterisk,
       [System.Media.SystemSounds]::Exclamation )

foreach ($f in $files) {
    $c = 0
    foreach ($b in [System.IO.File]::ReadAllBytes($f.Path)) {
        $k = $b -band 3
        $s[$k].Play()
        $c++
        if ($c -lt 4) {
            start-sleep -milliseconds 200
        } else {
            $c = 0
            start-sleep -milliseconds 800
        }
    }
}

(Interesting, CodeHTMLer didn't pick up the resolve-path in the first line as a cmdlet).

A few points, to give this script some redeeming social value:

  1. The script is written to take a filename as an argument, but I use resolve-path on it. This gets me globbing for free. Plus, it allows me to use ~ to refer to th $home directory. Most importantly, it fixes up the fact that the Monad current location (which is what the user visually thinks of as the "current directory") is not necessarily the current process's current directory, which is what the System.IO.File APIs use. Meaning if you run msh.exe with c:\foo as your current directory, and then inside of Monad you set-location somewhere else, the process's current directory is still c:\foo, so System.IO.File methods would look in c:\foo if you passed in a filename that wasn't path-qualified (we do set the process current directory to a reasonable value in any child processes we launch (setting it to the current location in the filesystem provider, even if your current Monad location is in another provider), but in this case we are just invoking .NET methods and we don't know that the particular ones we call are sensitive to the process current directory). Calling resolve-path ensures we get a fully-qualified path that takes into account the current Monad location. I run the output of resolve-path through where-object to filter out any locations that are not in the filesystem.
  2. I use ReadAllBytes() to read in the data. This puts it in a byte array which makes it easy to walk through one byte at a time.
  3. -band is the Monad "bitwise and" operator (yes we have -bor and -bnot also).
  4. To give the thing some rhythm, it pauses for two beats after each fourth note--that's what the futzing with the start-sleep parameter is for.

As usual, any hallucinations or angry co-workers caused by running scripts posted here are your own responsibility.

Posted by AdamBa at 09:13 PM | Comments (1) | TrackBack

Box of Chocolates Marathon

I was sitting in the doctor's office leafing through an old copy of "Sports Illustrated", when who should I spot looking back at me from the "Faces in the Crowd" section than Brian Fugere, co-author of Why Business People Speak Like Idiots, which was discussed (along with its author) on this blog and elsewhere.

It turns out that in February Fugere was diagnosed with sarcoma, and went through four rounds of chemotherapy. He came up with the idea of the Box of Chocolates Marathon (from [gak] the movie Forrest Gump) in which he walked 144 laps around the cancer ward of his hospital in Walnut Creek--26 miles in all--to raise funds for sarcoma research. In 2002 Fugere had run the Boston Marathon in 3:19 (which is very, very good).

Fugere never mentioned any of this in his talk, despite what I would think would be the obvious temptation to do so...he did have a bit of an otherworldly delivery, but he never said "Listen, I had part of my lung cut off six months ago, so maybe I have a bit of perspective here." Now I feel somewhat guilty for criticizing him. He has four kids also, he's nine years older than me and his kids are nine years older than my kids. So, Brian, however good or bad your presentation may have been, I certainly hope you make a full recovery, and live to see a thousand reasons to rejoice.

Posted by AdamBa at 03:31 PM | Comments (1) | TrackBack

November 06, 2005

Turkish Delight

I spent a bit of time today working for the Mechanical Turk. This is Amazon's new thing-a-mabob (I'll assume you know what it is). I've got four kids that will eventually need college tuition paid, so why not earn some extra $$$ from the comfort of my den.

The Turk presents you with Human Intelligence Tasks (HITs) which you are then paid to complete (actually you're paid when your work is approved by the person who submitted the HIT). At the moment only tasks from Amazon itself are presented. They are in 3 varieties: "A9 BlockView(tm) Image Adjustment", "Automotive Product Title and Feature Point Content", and "Automotive Product Description Content".

The first one involves looking at pictures and trying to find which one best matches an address. The pictures were apparently taken every 20 feet or so from a vehicle driving down the street. GPS can give a rough idea of the address but they are using us to find the best match. For this you get 3 cents per answer.

I tried two cities, Las Vegas and New York. Las Vegas was hopeless. The addresses were all in strip malls so they had no particular relation to location within a block, and most of the pictures were the side of whatever building in the mall happened to be nearest the street (not to future Turkers: you should accept the HIT before looking at the pictures; if you look at the pictures first, by the time you accept it will have been assigned to some other smoofhead with nothing better to do). Then I tried New York, which was much better. For example for an address like 114 First Ave. you might see addresses 124 through 110. In New York, business actually display their addresses prominently, like in giant letters on the awning, so it is easy to find the right place if it's in one of the pictures (although it isn't always there: one HIT looking for 119 W. 57th tantalizingly ended at 117 W. 57th, just short of the intended address).

After racking up enough do-re-mi to buy stock in a piece of gum, I checked out the other two HITs being offered. But these required actual work.

One involved looking at an existing product title and set of feature points, and updating them to be accurate and match a style guide. You were allowed to copy text off the manufacturers website, but not from other retailers. For this work, which seemed to require some skill and would probably take about 5 minutes, minimum, they were offering 40 cents.

The other one was even worse/better. Given a product, you were supposed to write a new description, after doing your own research. For this you received the munificent sum of 65 cents, IF they liked your work (which would be manually reviewed by someone, presumably earning more than 65 cents for their time).

The thing is in beta, so I would suspect that they are offering ridiculously low pay to test it out. Or else they are trying to leverage the "coolness" of the Turk to pay researchers $2-$3 an hour (even for the image recognition, which is brain dead simple, you probably couldn't do more than one a minute, or less than $2 an hour). Then again this is the Internet, land of the wiki, so it may work.

Posted by AdamBa at 09:02 PM | Comments (4) | TrackBack

November 04, 2005

J.D. Power Comes A-Calling

We received the J.D. Power New Vehicle Quality Survey for our new Honda Odyssey. This is one of those things you see trumpeted in ads ("#1 in J.D. Power Initial Quality Survey!") although looking around I think ol' J.D. is going around the block a few too many times (they rate dependability, sales satisfaction, initial quality, audio quality, customer service, customer satisfaction, financing satisfaction, and something called APEAL (automotive performance, execution and layout--design, basically)) so it may not mean as much as it used to....anyway the car is fine except for the one annoying problem. I wanted to call it out in the survey but there's no checkbox for "bad interaction between instrument panel, headlights, and NAV display". So I checked that the "Exterior light controls" were "Difficult to Understand/Use". I'm sure somebody at J.D. Power is going to think I'm an idiot (I mean who can possibly not understand how to use a headlight control?) so I tried to explain it in more detail later. No room for the URL to the blog post however although I was tempted to try to squeeze it in.

Posted by AdamBa at 11:56 AM | Comments (0) | TrackBack

November 01, 2005

Obfuscated Monad Script

OK, what does this script do?

$s = "a*h*t*s*m*i*d*o*n*l*k*e*y*u*g*r*w*CBAC> DAE-F-AE>!<R S!><" +
    "F GH IHC> JFKL> T<<GH MHN> V+ OPLLI LOOD AIG BAE>?<" +
    "U V+ CBLE>, S.<U V X><<QHNJG MHN> V Y> BLPL HP CBLPL>?<" +
    "F QHNJG IHC> \ ]>.<^ \> AIMQBLPL>.<Z.<U \>, S.<<" +
    "[ \> FI A BHNDL>?<c+ QFCB A EHNDL>?<b d>.<b e>.<b ]>.<b a><Z.<b, S>.<"
$cur = ""
$line = ""
[char]$next = "A"
$store = @{}
foreach ($c in [char[]]$s) {
    switch -regex ($c) {
        "[\*\>]" {
            $store[$next] = $cur.TrimStart(" ")
            $next = [char]([int]$next + 1)
            if ($c -eq ">") { $line += $cur }
            $cur = ""
        }
        "\+" {
            $line += $cur
            $cur = ""
        }
        "\<" {
            $line + $cur
            $line = ""
            $cur = ""
        }
        default {
            if ($store.Contains($c)) {
                $cur += $store[$c]
            } else {
                $cur += $c
            }
        }
    }
}

I'm not (really) expecting anyone to figure it out from the code...just run it and be shocked and awed.

Posted by AdamBa at 11:39 AM | Comments (7) | TrackBack