“A rising tide lifts all boats” seems to be the new code for trickle-down economics. Besides the inability to distinguish between “some X is bad” and “all X is bad” (where X in this case is government regulation), Den Beste’s latest fallacy-fest makes me think of another saying: nobody can see the bodies until the tide goes out.

The amazing thing is that Den Beste starts with a sports analogy, but doesn’t follow through to see how an uneven playing field only benefits one side and referees are needed to make the game a worthwhile excercise for everyone. He has a background in engineering, yet fails to mention that feedback is usually something that needs to be damped down or eliminated altogether. He thinks that lemmings running off a cliff is a good model for how to run an economy. All that intellect, all that imagination…wasted in the service of a fundamentally flawed anti-ideology. How sad.

State of the Union

I’m probably going to surprise a lot of people by saying I was pleasantly surprised. Just yesterday I was talking with some folks about government investment in research beyond the military, and using environmental research as an example, so $1.2B for hydrogen-powered vehicle research seems like a good start. ;-) $15B for AIDS relief in Africa and the Caribbean was also a welcome surprise. I think the time might even be ripe for “Project Bioshield”. I expected to hear almost nothing I liked, and the inclusion of items such as these seemed almost like progress.

On the other hand, there’s still the dividend tax cut, faith-based initiatives, and national missile defense. Yech. There was some definite dishonesty on tax cuts and health care. For example:

  • “Ninety-two million Americans will keep this year an average of almost $1,100 more of their own money”
    Yeah, George, but what’s the median? If Bill Gates walks into a crowded room the average income rises substantially, but the median remains practically unchanged. The Bush tax cut still benefits the already-wealthy disproportionately.
  • [on health care costs] “These problems will not be solved with a nationalized health care system that dictates coverage and rations care.”
    They won’t be solved by letting private for-profit HMOs dictate coverage and ration care either.
  • “just like you, the members of Congress, and your staffs and other federal employees, all seniors should have the choice of a health care plan that provides prescription drugs.”
    …but, unlike you, they’ll have to leave the system for the warm embrace of for-profit HMOs to get that.
  • “I urge the Congress to pass medical liability reform.”
    Reform would be welcome, but there are many kinds of reform. The kind of reform that merely says “we’ll make it harder to sue your HMO for withholding care” isn’t a solution.

When you look past the mom-and-apple-pie phrasing, it doesn’t seem that any of Bush’s proposals actually do squat for the economy or for health care.

Bush’s case for war in Iraq was weak, but less weak than I expected. It now seems possible that a case can be made before the UN security council next Friday to justify immediate action. We already knew that the current round of inspections was (finally!) converging on a scientific verdict and, if those vague “US intelligence sources” can (again, finally!) show a link between Iraq and terrorist groups that threaten us, maybe that will be sufficient. France will never come around, of course, because they’re too worried that thinking about nuclear proliferation will lead people to wonder why otherwise-insignificant France is allowed to retain nuclear weapons and a permanent veto in the security council. It looks like Russia’s ready to be convinced, though, and maybe others as well. I’d still like to see a clearer “exit strategy” detailing what happens after the military victory, but Blix’s report and Bush’s address have left me willing to be convinced that we have done our “due diligence” and legitimately determined that war is necessary. Unlike the “peace at any cost” crowd, that’s all I’ve ever expected.

Overall, then, I’ll give Bush a C+. I was expecting to give him his usual D or worse, but he actually managed to mix a couple of decent points in with the bluster and BS.

New Platypus Pictures

First batch of the new year. Check them out here.

Chess and Learning

I just happened to trip over a couple of articles on the effect of chess on learning and academic performance. Without further ado, here they are.

Redundancy Checking for Redundancy

Dawson Engler, who previously developed a tool called Metal to detect hundreds of real errors in real code (e.g. the Linux kernel), has now co-authored a paper on Using Redundancies to Find Errors. The idea is that redundant code is often not merely inefficient, but a sign that a programmer is “confused” about what the code does, and the results seem to bear that out; code containing flagged redundancies was 45-100% more likely to contain serious errors than other code. Some of the examples are really interesting.

I also noticed that Engler has collaborated with David Dill, one of the authors of Murphi, on a paper entitled CMC: A pragmatic approach to model checking real code. I’ll have to check that one out soon.

Conversational Terrorism

CT is kind of a cross between Technical Nukes and the various lists of logical fallacies which I’m forced to mention in all too many online conversations. It’s both humorous and useful.

An Unlikely Champion

Bill Gates Sr. – yes, the father of that other Bill Gates – is co-founder of a group opposing estate-tax repeal and co-author of a book on the subject. Why? Here are some (second-hand, now third-hand for you) excerpts:

repeal rebels claim the estate tax hurts “family farmers.” But Collins pointed out that when curious reporters searched for these alleged victims, not one could be found. In fact, the pro-repeal American Farm Bureau Federation â?? the largest farm organization in the country â?? couldn’t point to a single case of a family farm lost due to the estate tax.

The canard that the estate tax is “double taxation” was also thoroughly debunked by Gates who, when asked about it said, “Well, I’ve been paying taxes on my house in Seattle every year for the past 43 years.”

I’ve said before that estate tax is not double taxation. The inheritor is the only legal entity involved in the transaction (the deceased having just lost any legal status or rights), the estate is income (i.e. money that goes into their pocket) and they haven’t paid tax on it before. The whole “double taxation” issue is kind of bogus anyway. It represents too narrow a focus on a bigger picture that should include many different kinds of taxes, many of which do recur or get passed on. Every dollar that’s not freshly minted by the government (including electronic equivalents) has probably been taxed already at some point, so should it be forever immune from taxation? Of course not. If money changes hands, the tax clock resets. Recurring property and excise taxes really are double taxation. Estate and dividend taxes are not.

I’m a little bit troubled by the implications for buying and selling stock or similar investments, but I don’t think it’s an intractable problem. Whether you tax the entire value or just changes in value (the current system) you’re equally vulnerable to charges of artificially favoring one kind of investment – “buy and hold” vs. short-term speculation – over another. They key is that it’s not really necessary to tax all types of income at the same rate. There’s an aesthetic appeal to it, I’ll admit, but the practical consequences of taxing a stock’s entire value at the wage-income level would be catastrophic. On the other hand, a 3% tax on entire value might make a lot of stock investors happier than a 30% tax on appreciation, while remaining revenue-neutral and philosophically consistent. Yes, I just pulled 3% out of thin air, and I don’t know the real number, but you should get the idea.

What Color Glasses?

USA Today reports that, even though minorities are generally overrrepresented in the US military, the actual front-line forces are still pretty white. It’s one of those things where people see what they want to see. Right near the top of the story is this comment:

In a little-publicized trend, black recruits have gravitated toward non-combat jobs that provide marketable skills for post-military careers, while white soldiers are over-represented in front-line combat forces.

…and this…

“If anybody should be complaining about battlefield deaths, it is poor, rural whites,” says Charles Moskos, a military sociologist at Northwestern University in Illinois.

This makes it sound like the anomaly is a result of minority choice, and poor white folks are paying the price. However, another possible explanation lies buried near the end of the article:

The reasons for the racial divide are unclear, but several theories have emerged, including lingering racism in some quarters of the military

Racism? In elite military units? The ones that were last to admit blacks at all, and still don’t admit women? The ones where the prestige and pay scales are both higher? Yeah, I guess that should be the last explanation we should consider. Riiiiight.

With Friends Like These

On the way in to work today, I saw a guy walking his dog. It’s 12 degrees out – 10 below, for you metric folks – and the dog was obviously Not Very Happy about walking on hard pavement that cold. But did the dog’s owner notice? No, of course not…because he was yakking on a celphone. GRRR!

Goto Still Considered Harmful

There has apparently been quite a discussion on the linux-kernel mailing list (about the use of “goto” in the kernel; kerneltrap has a good synopsis. Many people, both on the LKML and in the kerneltrap discussion, point out that “goto” can be a clean and concise way to handle complex multi-stage initialization functions that might need to “back out” at several points, and that non-goto approaches often involve extra functions, variables, or indentation so deep that the code becomes unreadable. I’m not going to argue with those points here, although there is also at least one goto-less approach to the same problems that is just as robust and performs just as well as the goto style.

No, my point is somewhat different. What I’d like to point out is that the multi-stage initialization argument is a red herring, and that goto is actually used in the Linux kernel in several far less justifiable ways. For example, “goto repeat” is used in several places instead of a simple loop, and “goto xxx” is used instead of “break” (e.g. “goto end_wait4″ in kernel/exit.c). “Goto out” – where the “out” label does nothing but return – is often used instead of an inline return. Some functions use a not-very-readable set of “goto err2″, “goto err3″ etc. The scheduler is the worst offender, with jumps to the following labels:

  • scheduling_in_interrupt
  • move_rr_last
  • still_running
  • recalculate
  • same_process
  • need_resched_back
  • repeat_schedule
  • still_running_back
  • move_rr_back

At least the label names are reasonably descriptive, but it’s a bit of a stretch to claim that the same functionality couldn’t be implemented more cleanly some other way – e.g. with an explicit mini-FSM. Some would undoubtedly claim that the scheduler is extremely performance-critical and other coding styles would cost too many cycles, but that’s just bull. The contorted control flow as it currently exists probably exacts a greater toll – mostly in terms of defeating the compiler’s attempts at register allocation and optimization – than the extra variable or two required by a more readable and less error-prone approach. I challenge anyone to provide proof – not bluster and hand-waving – to the contrary.

I’m not a goto extremist. I’ve never personally found a situation where a little thought didn’t reveal a better goto-less approach, but I’m willing to concede that such situations might exist. I’m even willing to concede that goto provides an acceptable (though not optimal) approach to the multi-stage-initialization problem. However, the Linux kernel-hacker community’s sneering response to criticism of gotos only highlights their own immaturity – not that of “brainwashed CS students” as they claim. There’s some sloppy code in the Linux kernel, and nobody benefits from denying it.