Michael J. Radwin

Tales of a software engineer who keeps kosher and hates the web.

Monthly Archives July 2003

Rhinospray® to the rescue!

We spent last weekend in the Bay Area for Gil and Becky’s wedding. On Sunday, I started coming down with a cold and was feeling miserable. It was late at night and I didn’t feel like going out to the drugstore to get a decongestant.

My mom remembered that during a trip to Europe last year she started getting a cold and picked up a nasal spray in the airport just before her flight home. The medicine had probably expired, but I was welcome to try it:

Rhinospray sensitiv bei Schnupfen

I tried to read the label, but everything was in German. Rhinospray sensitiv bei Schnupfen. Wirkstoff: Tramazolinhydrochlorid… I needed to know: how many times should I spray? How often? Are there any dangerous side-effects?

Alas, I don’t speak German, yet I really needed to clear my nose. So I gave it a shot. And viola! Like magic, I was breathing clear again. I no longer cared what the active ingredient was; it could’ve been arsenic and I’d still use it again.

Today, I learned from netdoktor.de that the Wirksamer Bestandteil (active ingredient?) is Tramazolin.

Whatever that is.

Wesley K. Clark for President

So I’ve been granted the lovely honor of being a guest author on my brother-in-law Michael’s blog. I’m so excited, and there are so very many things that I could talk about. But I think I’m going to talk about what was on my mind this morning at work (I work at the Jewish Community Center of San Francisco, which is just boring enough to provide me with plenty of opportunity for thought problems…).

Draft Wesley K. Clark for President in 2004!!

Why? OK, well, the Democrats don’t really have anyone. Let’s be honest. We’ve got Dennis Kucinich, who looks like a character actor from a terrible B movie. We’ve got John Edwards–TV psychic or South Carolinian Senator? John Kerry–looks like a bloodhound. Carol Moseley Braun–let’s get serious. Howard Dean–flash in the pan, soup du jour, flavor of the month. He won’t last. Joe Lieberman–right, because everyone wants a President who puts them to sleep with the very sound of his voice. Anyway, you get the point. It’s been belabored by others, so I don’t really need to elaborate any more…

And then you have Wesley Clark. Let’s see…Rhodes Scholar, graduated number one in his class at West Point, winner of the Purple Heart and the Medal of Freedom, Supreme Commander of NATO forces Europe, serious about national security, pro-choice, pro-environment, distinguished, brilliant, an Ike for the aughts. But truth be told, he’s got no money, no name recognition, and no organization, so in all likelihood Clark on the ballot will be as VP (Dean and Clark? ugh. Kerry and Clark? has a nice ring to it…).

But he’s my man for ’04. He can give to the Democratic Party the moral vision and clarity of purpose to raise the party out of its ideological quagmire. He isn’t a dove, and isn’t a hawk. He wasn’t opposed to the war in Iraq, but was opposed to our brazen hegemonic stupidity in acting outside of NATO and the UN(Check out his article in the Washington Monthly from September 2002).

Sadly, he could run in ’08, but Hillary’s got that one all sewn up…though Bill Frist will spank her in a general election. She’s the kind of candidate for whom the party faithful will love to vote. But I’m getting ahead of myself…

Anyway, that’s my thought for the morning.

Oh, one other, actually. This is a book recommendation: Bystanders to Genocide: Why the United States Let the Rwandan Tragedy Happen by Samantha Power. She’s brilliant, insightful, thoughtful, and brazen. Witness one of my favorite quotes from the book…”We have a foreign policy based on our amoral economic interests run by amateurs who want to stand for something

Banzai on FOX

Last night I saw the premiere of Banzai, a mock Japanese game show of sorts where the contestants do a bunch of wacky things and the audience is supposed to bet on the outcome.

Banzai - Sundays at 8:30pm on FOX

I imagine that if you’re drunk it makes for a very entertaining experience.

MySQL Scaling Pains

MySQL logo Jeremy Zawodny spoke Friday

morning about MySQL

Scaling Pains.

I’m still just waking up, so here are some abbreviated notes.

  • Security administration (don’t just GRANT ALL PRIVILEGES ON *.* TO

    someuser, but think seriously about delegating privileges to

    separate users)

  • Size Limits (MyISAM default 4GB limit can be modified, you just need

    to know the magic incantation)

  • Lock Contention – consider using InnoDB instead of MyISAM if you

    have as many readers as writers. MyISAM tends to work fine when you’ve

    got 90-95% readers and just a few writers (or vice-versa) but you can

    run into lock contention when there are lots of both. InnoDB doesn’t

    fix locking problems; it actually introduces some problems of its own.

  • ALTER TABLE is slow. Requires an exclusive

    write lock on the entire table, all queries will back up until it

    finishes. Plan ahead.

  • Disks often tend to be the bottleneck. You can add all of the CPU

    power in the world and it won’t matter if it’s waiting on a slow disk.

    Low seek times are more important than high transfer rates. RAID can

    help. If you have time, benchmark different disk combinations

    (suggested a tool called Bonnie++).

  • Load balancers. If you use one, choose the correct algorithm.

    Sometimes the “least connections” algorithm can make things worse.

    Often a simple “round-robin” algorithm works just great.

  • Handling many connections. Setting wait_timeout to a

    lower value will force idle connections to disconnect. Sometimes this

    can improve overall efficiency.

  • Data partitioning by servers (i.e. putting 1/Nth of your data on

    each of N clusters of servers). Instead of a single “users” table, you

    have 4 different tables (“users_abcdefg”, “users_hijklmn”,

    “users_opqrstu”, “users_vwxyz”) and the application needs to look at the

    first letter of the key to figure out which table to query.

  • Full-Text search is neat, but it has its limits. First, be sure to

    use 4.x, not 3.23. Also, it’s not as flexible as other software.

Zawodny also inserted a small Yahoo! advertisement in his slides; Yahoo! is hiring engineers. His

incentive is twofold. (1) Smart folks tend to go to OSCON, so it’s a

targeted audience, and (2) if you send him (or me) your resume we can

get the employee referral bonus if you end up getting hired.

Apache 1.3.28 next week?

apache-feather.gif I don’t have time to read most of the Apache mailing lists, but I do keep an eye on the low-traffic cvs commit list.

There’s been a lot of discussion over the past month or so about the upcoming 1.3.28 release, and even a couple of dates proposed. The most recent message suggests that we’ll see a 1.3.28 release next week.

Taking a look at the CHANGES file, there’s not too much that I really need in this release. The past year has been pretty slow for Apache 1.3 development, in large part because folks are starting to move to 2.0.

Why XML Hasn’t Cured Our Ills or Saved the World


After lunch and a little bit of work-related email, I went to Randy Ray‘s Why

XML Hasn’t Cured Our Ills or Saved the World (slides).

The talk centered around five things Ray thinks we do wrong with XML:

  1. People are too quick to use XML.

    You have to aks yourself if it’s really necessary. Is it just for


    • If there is no reason other than the fact that there are XML

      parsers, then there probably is a simpler solution

    • If only a single consumer, there may be a more economical solution.
  2. People are too slow to use XML.
    • Plan ahead for more than one customer of data?
    • If another part of the system is already using XML for a more

      “legitimate” task, why not use XML for other things, too?

      (i.e. configuration data)

    • It isn’t always an extra cost. If the data format (and therefore

      the parser) would be sufficiently complex, maybe using an XML parser

      would be easier?

  3. Lack of cooperation or sharing.
    • Not often due to malice, perhaps lack of central authority. Who

      moderates DTD repositories? Registries on xml.com and xml.org contain

      outdataed information, and UDDI is too business-centric.

    • Example: difficult to find schema for recipies. Had to wade through

      3 pages of Google results to eventually find RecipeML

    • Intellectual Property issues. For example, Microsoft hasn’t

      openened up the XML formats for Office 2003. Compare to open formats

      like DocBook

  4. Misunderstanding the application of XML
    • XML is the “NetPBM” of generic data. (NetPBM broke new ground in

      image file format transformations by reducing an N * M problem

      to N + M).

    • People think that XML is only for “document” data.
  5. People want to make XML hard.
    • Tough topics make money. How can businesses sell

      books/tools/software/training/services when customers think that XML is

      “easy”? Vested interest in making it complicated.

In conclusion, Ray mused that no one technology is (yet) a universal solution and XML is no different when it comes data formats. His charge to the audience: just think about XML before using (or not using) it. Self-described experts don’t necessarily have all the answers.

Ruby for Perl Programmers

I stuck around for local software guy Phil Tomson’s Ruby for Perl Programmers talk. This session was more technical, with the first code example showing up on the 4th slide.

Phil’s slides are online, so I won’t attempt to replicate them here.

Something listed as a “gotcha” actually seems to be a feature to me. Since all variables hold references to objects, you have to explicitly call .dup to clone an object. It’s more Java-like than Perl, but it probably ends up being higher performance since you only make copies when you explicitly want them.

The Power and Philosophy of Ruby

Tower of Babel Yukihiro Matsumoto spoke about The Power and Philosophy of Ruby on Thursday morning. The talk was all philosophy, no code. Very entertaining.

We started off by discussing natural languages and the Tower of Babel, with a comparison of Japanese and its use of ideograms versus English. Matsumoto said that he was heavily influenced by the science fiction novel Babel-17. In some part, the power of the “super-language” in this book inspired him to create the Ruby programming language.

He spoke about the importance of choosing good names; those that are short and well-chosen usually convey meaning very easily. He also spoke about the importance of the machine making it easier for humans (Moore’s Law, evolution of programming languages to higher-level concepts). He feels it’s important for programming languages to cause the programmer as little stress as possible, and pointed out that one metric of a good programming language is that the programmer still has time to go out and have fun.

However, Matsumoto made it clear that simplicity is not a goal of Ruby. After all, human thoughts are not simple, and programs are essentially complex things. Rather, the design adheres to the principle of least surprise. If some aspect of the language meets your expectation, then it’s achieving its goal. Succinctness is highly valued because Matsumoto believes it leads to productivity and efficiency.

In Ruby, like in Perl, There’s More Than One Way To Do It, but the language can encourage one way. For example, Ruby does allow global variables, but you have to put a $ character before globals. Since too many $ are considered ugly, it discourages use of globals. “Dangerous” methods in Ruby have a ! in their name, for example sort and sort!. The “dangerous” methods might be faster, but they have side-effects, and the ! character reminds you to be careful.

Palm Zire for $50

palm-zire.jpg I’ve been a very happy Palm Zire owner since January. It does the two things I need it to do (Calendar and Address Book) really well and has phenomenal battery life. I don’t need anything fancier.

Today, on the palm.com webiste, I noticed an advertisement for an Open Box Palm Zire for $49.99. Cool.