follow me on Twitter

    Blog has moved to, see September, 2008 on new site

    Blog entries for September, 2008

    This post moved to

    In an effort to outdo other software developers in nerdiness, I read a blog called Accrued Interest, subtitle "Come for the analysis and research on the U.S. Bond market. Stay for the geeky Star Wars references."

    Accrued Interest has a nice explanation of how the credit crisis affects everyone.

    Here's another good one from the New York Times.

    This post moved to

    I've been wondering for a while why nobody contrasts Obama's health care proposal with some of the past Democratic proposals. It's a market-based, incremental proposal, that makes use of existing programs and existing insurance companies.

    Today Obama's campaign has a new ad making this point, so I guess I'm on their wavelength. After my What happened to John McCain? post, the next day Obama ripped that off, too, for a negative ad.

    Finally fixing health care would make a huge difference for quite a few people I know. It may be the single most consequential thing the government could do.

    If you watched the debates, see's coverage. They ding both candidates on multiple claims.

    This post moved to

    Worst stock plunge in 20 years.

    Here's a relevant post from last year, when the stock plunge was much less dramatic.

    Lessons for the next bull market (yes there will be one eventually):

    • Low interest rates and high liquidity do not mean stock prices will stay up. Those things are indicators of insufficient risk premiums, not indicators of permanent demand for assets.
    • If companies have 2x their long-run average profit margins, something unsustainable is going on. Abnormal profits don't last forever in (more or less) free market systems, due to competition and the business cycle. Anytime you read an article that mentions a P/E ratio, without discussing normalized margins, run away in fear. (The inverse goes as we most likely head into recession. P/E ratios will become misleadingly high, while in the bull market they were misleadingly low.)
    This post moved to

    Nice, factual, 1-chart explanation of the competing tax proposals. (Thanks Luis.)

    Barack Obama's policy proposals.

    This post moved to

    McCain was always the respectable Republican, who opposed tax cuts without spending cuts, did not deny environmental threats, had a reasonable approach to immigration, and was against the scorched-earth Rove-style politics. Somehow he has reversed himself on all of these things while running for president. It's not even clear he still opposes torture (see this vote, for example).

    I don't consider flip-flopping in itself to be bad; the famous Keynes quote is, "When the facts change, I change my mind. What do you do, sir?"

    But the facts haven't changed, McCain has. Read this interview with Time magazine - cringe-inducing. I just feel bad for him.

    McCain 2008 is so unlike McCain 2000, it's very hard to understand what's going on. I'm not willing to write this one off as "politics" because it feels unusual and strange.

    On top of McCain's personality-ectomy, since just before the convention, his campaign has kicked into a series of frivolous distractions. The New York Times has an article and an op-ed about it, but if you're a New York Times hater, is excellent and calls both candidates on their inaccuracies. doesn't try to make a subjective judgment about which candidate distorts the most, but read the last couple months of fact checks on each of them and see what you think.

    On at least two substantive policy matters, taxes and health care, the candidates are failing to have a real discussion - McCain has been repeating misleading talking points instead of engaging with and debating the actual proposals.

    And Sarah Palin - in her first interview, she says this with a straight face:

    What insight into Russian actions, particularly in the last couple of weeks, does the proximity of the state give you?

    They’re our next-door neighbors. And you can actually see Russia from land here in Alaska. From an island in Alaska.

    Come on. She's applying for a serious job.

    While a hollywood actor mocking creationism is not going to win over any swing voters, I have to agree with the "Disney movie" part of the sentiment.

    To combat this, before announcing Palin's nomination, the McCain campaign seems to have invented a narrative that "they" are attacking her family, attacking her because she's a woman, blah blah. Even though Obama did the opposite and condemned attacking her family, McCain stuck to the talking points. And though it took his campaign a couple weeks, they found this "lipstick on a pig" comment they could use as "evidence" for the talking points they'd already been pushing. Obama responded very well - emphasizing how ridiculous it is to play games given the weight of the substantive issues at stake.

    If your attention span is too short to watch Obama's serious responses, Jon Stewart takes apart the pundits on Palin in a more humorous way.

    It makes me sad. When McCain won the nomination, though I was not going to vote for him, I was happy that we would have two people running with competence and integrity well above the politician average, and well above most of the others in the primaries. It felt somewhat "can't lose" - the upgrade from Bush would be significant either way. McCain 2008 is still better than Bush (it's not a high bar). But "new McCain" has been very disappointing compared to McCain 2000.

    Mike Evans reposted a nice case for Obama from Marc Andreessen. Unfortunately, where the majority of young people and "knowledge workers" see competence, a lot of swing voters seem to see something negative.

    There are serious problems facing the United States, especially the US economy, and the economic problems ripple through national security and other issues. Our economic problems have some straightforward answers: simplify the tax code, make it a bit more progressive so we have a solid base of consumers to buy stuff, reduce lost productivity and inflation caused by a broken approach to health care, and - the big one - address the redistribution of wealth and power from the US to other countries created by our oil dependency.

    One of the presidential candidates wants to talk about credible solutions to these problems, and one of them wants to talk about distractions.

    This post moved to

    "If synchronous IO becomes a problem, it can be made asynchronous later." Tempting to imagine that some operations on local files are "fast enough" to implement with synchronous IO. "Premature optimization is the root of all evil," right?

    Wishful thinking. Async vs. sync IO is not a performance issue (in fact synchronous IO can be faster). It is a structural or qualitative issue, a design issue. Sync IO is guilty until proven innocent.

    My new rule is: any code that will be blocking during a user-interactive main loop must run in a known-short time. The task must be known short, not indefinite-but-often-short.

    Local file access could be short, but is not known short. Another common culprit: synchronous D-Bus calls.

    I've seen so many rewrites from synchronous to asynchronous IO over the years - it is almost 100% likely that anything blocking the main loop eventually comes to be seen as a bug. There's near-zero chance it's really OK to use those nice, easy-to-program blocking D-Bus calls, or that nice, simple g_file_get_contents(). Even the harmless looking g_file_test() can bite.

    These APIs exist only to tempt you. They are the dark path.

    (Note: by "asynchronous" I mean "the main loop is not blocking, for example because IO is in its own thread" - I don't mean special AIO system calls.)

    Here's the core issue: the UI's main loop needs to wake up at 30-60 frames per second to do animations and repaints, and it should respond to user input with similar speed. It needs to do this consistently (think real-time-like), not "on average" - if there are big outliers, like an occasional quarter-second delay in frame rate, the app will feel sluggish.

    "Local" IO can be slower than you think; the firefox fsync problem shows one extreme case (the whole kernel gets bogged down, not just the IO operation), but think about network file shares, or large file sizes, or systems under load. Even mild manifestations of these issues are visible in decreased user responsiveness and animation smoothness.

    It's very common for supposedly fast IO operations to end up batched together, creating a long delay at once; for example, calling stat() on everything in a directory, or queuing a bunch of idle handlers that all happen to kick in at once.

    Another Firefox example: try uploading a bunch of photos to Flickr in one go. Ouch. The files are local, but ... there are a lot of them and they are big. Pretty sure Firefox uses synchronous IO here.

    Enough "this local IO should be fast enough" laziness scattered around an app creates distributed bloat that's hard to pin down and doesn't show up very well in profiles because it depends on external circumstances.

    Not only is it hard to find later, synchronous code is hard to fix - it means rewriting.

    Bottom line: don't write this code in the first place. Using async APIs is not premature optimization, it's correct design.