Imagine, for a moment, that a news program hired an annoying yappy dog to take part in the newscasts. (Given some of my experience, I imagine a Chihuahua, but feel free to imagine whatever you like.)
Now the dog is sort of cute sometimes, and mostly behaves for a while, but then one day, the dog, true to its nature, starts barking and yapping like mad, and no one can shut it up.
What is the real story here? That the dog yapped and barked and was generally an annoying pest? Or that someone thought that hiring the yappy little dog was a good idea in the first place?
So Rush Limbaugh said on ESPN that the Eagles quarterback Donovan McNabb is overrated just because people wanted to see a black quarterback do well. Three days later, he resigned over the controversy.
But who thought that hiring him was a good plan??
Next Tuesday, I get to cast my vote in the California gubernatorial recall election.
Ooh, what a privilege.
A mere 2 1/2 days until the election, and I still don't know how I'm going to vote. I am disgusted by Gray Davis' so-called leadership of the state of California. His blatant interference in the 2002 Republican primary for governor's race, basically engineering it so that he would face the ultra-conservative Bill Simon instead of the more moderate Richard Riordan, was deeply disturbing. (Of course, equally disturbing was the manner in which Republican voters let themselves be led like sheep into nominating a candidate that Davis knew he could beat. Davis may not have deserved to win that one, but the Republicans certainly deserved to lose it.) The only thing less impressive than Davis' handling of the budget deficit has been the astonishing lack of information on how bad the budget really was until just after last year's election. His sudden flip-flop on the bill to allow illegal immigrants to have driver's licenses is political pandering at its worst.
But the choices to replace him are even more depressing. Schwarzenegger has run an entire campaign based on saying as little as possible. It's hard to say where he stands on anything. Even his apology after the LA Times article about his alleged sexual misconduct managed to not say anything -- essentially, "I'm sorry for anyone I've offended even though I didn't do the things that article said." Huh?
Bustamante may be even worse, though. Rarely do you see a candidate quite so transparently bought and paid for by special interests. He managed to solicit enormous contributions into a 2002 re-election fund set up when he ran for Lt. Governor next year, in blatant violation of campaign finance reform laws passed to limit donations to $21,200 per donor -- or, at least, he did until a judge told him to knock it off. Where Bustamante has professed an actual position on something, I usually disagree with it. But lately he seems to be managing to say even less than Schwarzenegger. A Mercury News article earlier this week had the candidate's responses to questions about various immigration issues. Bustamante's responses were all between one and four words long. The only time they were longer than a single word was when the phrasing of the question precluded any chance of answering with a simple 'yes' or 'no'. While this certainly minimizes the chance of his being quoted out of context, it certainly does nothing to tell me where he stands on anything, either.
For the first time, I am sufficiently disgusted by the election that I am seriously considering walking into the polling place, collecting my ballot, and turning it back in untouched. I really don't know what to do.
I haven't followed baseball in years, but when I was a kid, I watched it all the time. I collected baseball cards, kept scorecards, the whole bit. And my favorite team? The Chicago Cubs. Making their victory even more special tonight: the team I loved to see lose was the Atlanta Braves.
It's good to see the Cubs finally win.
Some news today about what I've been working on since March...
http://www.microsoft.com/presspass/press/2003/oct03/10-09IPTVannouncePR.asp
http://zdnet.com.com/2100-1104_2-5089056.html
The second half just added to the misery. At one point, Georgia scored three touchdowns within 2:35 on the clock. UT turned the ball over four times. Tennessee used to dominate Georgia so much that it was barely considered a real game. Now, Georgia has beaten us four years in a row.
It's rare that you can say that a game with a final score of 41-14 wasn't as close as the score indicated.
Oh, the pain...
I tried following all the directions that InstallShield provides on their site for how to fix this error. None of it helped. (My favorite step: "Install the Windows Installer engine." The InstallShield installer needs to use the Microsoft installer engine to work?)
The step that finally did work? I created another administrator user on my XP box and launched the iTunes installer as that user. Then it worked fine.
This is, unfortunately, fairly typical of my experience trying to install products built with InstallShield. Why Apple picked that as an installer is beyond me.
Last week, Peter Kaplan wrote to me about the infamous 8th inning of Game 6 of Marlins at Cubs:
It's an profound observation. It's profound because it's so simple.
Many times in my career, entire business organizations have become paralyzed because of an inability, on the part of an individual or a team, to make a decision.
Imagine a race that starts out in Colorado. The destination is said to be somewhere in the northeast US -- but you won't know exactly where for a few days. One driver decides to wait until he knows exactly where he's going, so he can plan the fastest route possible. The other driver starts driving North-East right away.
Who do you think wins?
He wins because he didn't start driving towards California or Texas. He wins because he realized that some forward motion, in what was vaguely the right direction, got him closer to his goal. He wins even though he will certainly drive for more time and more miles than the first driver. He wins because he got enough of a head start that the extra time doesn't matter. And he wins because, when he does get the news of the final destination, he changes his course to start heading for it.
Of course, the reality is that you can never know all the information you need at the start. I once spent about a month and a half, along with several other senior engineers, basically sitting on our hands waiting for management to come up with the Perfect Plan for the next release of our product. We didn't start the race until management had decided on the exact destination -- but the destination changed before we got there anyway. We gave up a six week head start, and still had to make a course correction.
That was Dusty Baker's problem, in the end. He actually had a plan for getting to the World Series, but he couldn't see that he might need to change his course until it was too late.
I think it comes down to two distinct, albeit related, abilities. The first is the ability to make a decision in the first place -- to realize that going forward in something approximating the right direction is better than not moving at all until you have the exact direction. And the second is the ability to recognize when you have to change your course, because the first plan isn't going to work anymore.
This is one of the more surreal errors I've seen from a mail server lately:
SMTP error from remote mailer after RCPT TO:<address@aol.com>:
host mailin-01.mx.aol.com [64.12.136.57]: 550 INCORRECT DOMAIN IN MAIL/RCPT COMMAND
I wonder what domain it wanted??
It worked the next time...
The next time you're wondering why the political process seems so polarized and rancorous, consider this week's news about the act of a San Francisco member of the Board of Supervisor's move to appoint two members to that city's Public Utilities Commission while he had temporary mayoral powers.
Mayor Willie Brown was traveling out of the country, and had appointed Supervisor Chris Daly as the acting mayor for the day. Daly decided it would be a good time to fill the two vacant slots on the PUC.
Regardless of the whether or not the two appointees are good choices, it's hard to imagine how this kind of moves helps anything. The clear lesson for Brown, and for politicians everywhere, is to never give a political opponent a single inch or they'll take a mile. And stab you in the back while they're at it.
For all I know, this may even be a good thing for San Francisco in the short term. Many people seem to think that the two appointees are positive choices. But this can't be a good thing for the political process in our country in the long term.
I ran into a bug in my code at work the other day that turned out to be because I misunderstood something how .NET Asynchronous Delegates work.
The basic idea behind Asynchronous Delegates is that you can split a function into two calls -- BeginInvoke to start the call asynchronously, and then EndInvoke once it's done in order to clean up the state and to get the return value (if any). There's also a WaitHandle exposed through IAsyncResult (IAsyncResult.AsyncWaitHandle) that you can use to wait for the call to be completed. Async Delegates are useful obviously for any async task, but are especially useful when you start working with .NET remoting, which lets you run code remotely. Since it's going over a network link, there's a huge advantage to being able to invoke the call asynchronously without having to block on the network call.
A C# example of calling an async delegate might look like:
m_delegate = new DoSomethingDelegate(this.DoSomething); m_callback = new AsyncCallback(this.CompletionProc); ... IAsyncResult iar = m_delegate.BeginInvoke(m_callback, null); iar.AsyncWaitHandle.WaitOne();
My mistake was in thinking that the AsyncWaitHandle would be set (i.e., the call to WaitOne would finish) once the async callback (m_callback) had finished. But this isn't true: it is set as soon as the async call (the call through m_delegate) finishes.
In other words, once the async call finishes, the framework sets the AsyncWaitHandle and starts an async call to the AsyncCallback completion proc. If you really need to block until the AsyncCallback function finishes, you'll need to use something other than IAsyncResult.
You can download some C# sample code to see this in action. DoSomething is the async delegate, which sleeps for 1000 ms and returns. The completion proc also sleeps for 1000 ms and returns. When you run it, you'll see something like this:
About to call DoSomething at 0 ms Enter DoSomething at 40 ms Exit DoSomething at 1041 ms WaitOne finished at 1041 ms Enter CompletionProc at 1041 ms Exit CompletionProc at 2042 ms
You can clearly see that IAsyncResult.AsyncWaitHandle was set ("WaitOne finished") at the same time as the async callback was called -- not when the async callback finished.
As a final note, you might wonder why there's a 40 ms delay between calling DoSomething asynchronously and having it actually start. This is true only the first time you use that asynchronous delegate -- subsequent calls have virtually no delay.
Just wanted to check in with everyone about the fires. They are very close but at this time our house is not in immediate danger. The fire line and evacuation is about 5 miles away. We're covered in ashes, but no flames so we're thankful.
Hope the fires are put out soon...
For years, Microsoft has had an annual giving campaign where they encourage employees to donate money to their favorite charities. Microsoft matches 100% of employee donations to qualified charities up to $12,000 annually. Last year, employee contributions, Microsoft match, and corporate donations resulted in over $39.9 million in cash and $207 million worth of software being given to charitable causes around the world. In 2001, it was over $36.7 million in cash and $179 million in software.
At the upcoming Microsoft annual shareholders meeting, shareholders will be voting on the following proposal:
This proposal was put forth by an individual shareholder, not the Microsoft board. Why would she -- or anyone -- want to stop this kind of giving to needy charities?
Because some charities -- such as Planned Parenthood -- support abortion. So, to make sure that no money goes to charities that this person doesn't like, she has proposed that it is best to just stop the entire $247 million/year flow. Sheez.
Microsoft's board of directors has sensibly recommended a vote against this vindictive and destructive proposal.
I'm up in Redmond for an MSTV launch party and the MS company meeting (tomorrow). Tonight was the launch party.
You know it's a party when you get to see your manager doing Free Bird karaoke.