Pictures From The Itailiad

November 4th, 2003 | 18:27

 

Some early photos (exactly one gross, in fact) from Itai’s epic journey through the South Seas.

(I was going to put them on his server, but I didn’t want to muck with his web server settings enough to do an image gallery and run a blog.)

I don’t know what order they’re supposed to be in, so alpha is fine by me.

Sometime later, I’ll set up something that archives his email dispatches, with links to Mapquest that will show exactly where his GPS coordinates are. Posting the dispatches is actually contrary to his express wishes (in the “oh, my writing isn’t good enough to be made public!” vein), so we won’t tell him until he gets back.

CD-R archiving

November 2nd, 2003 | 14:11

There’s a discussion over at the Fred Miranda forums on archival CD-Rs. I’m up to about 600MB of pictures from my Sony, and I should probably put a copy someplace safe. It’s not a professional portfolio by any means, but it’d be nice to be able to go back to these a few years from now after, say, a hard drive crash, and find that I can still read the CD.

The Fred Miranda forum discussion was triggered by the Register article on a Dutch survey of no-name CD-Rs. The discussion also pointed to an older article in CD Media World comparing name-brand CD-Rs. There’s also this more extensive Slashdot discussion. In any case, the thing to do is to find made-in-Japan gold CD-Rs. I’ll take a look in Circuit City today.

New mail server postmortem

October 31st, 2003 | 22:44

The new mail server for work went into production last week. Here are some notes/gotchas in putting it together:

RH9/package notes in general:

Be careful when doing updates with the glibc. For any reasonable box, RH9’s installer will use the i686 version instead of the i386 one. If you “downgrade” accidentally when updating the i386 RPM by hand, you will hose the box. Make sure you pick up the i686 version from the proper directory. If you do “downgrade”, it may be possible to force install the i686 RPMs if you haven’t rebooted and are lucky.

A working SRPM for Cyrus-IMAP 2.1.15 can be found at http://home.teleport.ch/simix. I couldn’t get a modified version of the 2.0.17 spec file to work. Note that the bin files for this RPM go into /usr/lib/cyrus-imapd.

RH9 comes with namazu and relatively recent versions of MHonArc and Mailman. The latter two rebuilds easily off of updated SRPMs and lightly edited spec files. Note that there’s a bug that causes high load in Mailman 2.1.2. Make sure you use the latest Mailman package.

The perl-DB_FILE module is needed for SpamAssassin Bayesian learning.

Application notes:

Sendmail configuration was relatively simple, since we have 8.12 examples to work off of. One thing to change between an 8.11 and 8.12 configuration is to make sure define(`confAUTH_OPTIONS’, `A p y’) has the “p y” at the end, to require TLS for anyone doing SMTP auth.

The new box was set up with LDAP authentication, with saslauthd as the intermediary. Cyrus uses SASL2, whereas Sendmail uses SASL1. Make sure the conf files for authentication are in the right place. Make sure saslauthd is running before testing authentication. Right now, we have saslauthd getting to LDAP via PAM, since the RH9 version of saslauthd doesn’t appear to have the LDAP mechanism compiled in, and PAM/LDAP is sufficient for our needs.

One note with PAM/LDAP, vis-a-vis objectClasses. We’re using our own custom objectclass for the mail users, but for some reason the PAM/LDAp configuration in /etc/ldap.conf didn’t pick up the objectclass filter. This is fine for most users, since the default posixUser applies, but didn’t work for our mail-only users. The mail-only users have been changed to posixUsers in the meantime. This doesn’t affect anything else in our setup, but is just a nuisance.

Mailman 2.1.3 now uses a number of daemon processes instead of a single qrunner process called by cron. This is a definite improvement, as we no longer will have mail stuck in the delivery queue because the archiver was crunching through a big file. Mailman migration basically involved copying the $MAILMANDIR/lists directory (along with the data directory for unprocessed messages) and running $MAILMANDDIR/bin/update to update the lists. If I recall, this also generates the sendmail aliases for Mailman.

The Mailman archiver was having problems with MHonArc, where headers weren’t being transmitted for some reason. The solution was to send the message to a trivial shell script:

#!/bin/sh

LISTNAME=$1
TEMPFILE=/tmp/$LISTNAME.`date +”%H%M%S”`

cat > $TEMPFILE

/usr/bin/mhonarc -add -mbox “$TEMPFILE” -outdir “/var/mailinglists/lists/$LISTNAME” -rcfile /var/mailman/etc/mhonarc.mrc > /dev/null

rm $TEMPFILE

For some reason, this retains the headers for MHonArc processing. Note that the Mailman external archiver configuration is now a FAQ entry for Mailman.

Namazu worked out of the box with the previous configuration. Not much had changed.

Cyrus upgrade was relatively painless, too. The main differences had to do with Cyrus file locations. Almost everything except for the IMAP spool itself is now under /var/lib/imap, e.g., /usr/sieve had to put into /var/lib/imap/sieve. We took sieve, user, quota and, of course, mailboxes.db. The IMAP spool now has a first-letter partitioning scheme. For example, /var/spool/imap/user/cchen in 2.0.x now goes to /var/spool/imap/c/user/cchen. This was a minor matter of scripting after the files were copied over from the old hard drive.

Note that copying (cp -a) took about 6 or 7 hours. Make sure people clean out their Spam folders first. A dd would have been faster, but was not possible for this setup.

mdadm is nice. We took the old drive and set it up as a hot spare for the RAID-1 on the system disks. raidhotadd would have been fine, too, but mdadm is more informative.

Server notes:

We got a big performance improvement by making sure the mail and IMAP spools, Cyrus maiboxes.db and LDAP database were marked as noatime (chattr -R +A). Load on the hyperthreading box hovered between 1 and 3 for most of the first day or two before we realized that noatime had not been set. After this was done, load dropped to 0.50 or so for normal periods. Possibly, the hyperthreading confused things like top and uptime into reporting a higher-than-normal value (IO load being counted for proportionately more than it should have been), but that’s just a belief on my part. Certainly, the box was sluggish in the first couple of days of production use, with excessive IO.

Sendmail’s milter timeout had to be tweaked. We started Bayesian scoring a couple of weeks ago, with spamd running on a different box. The default timeout of 10 seconds allowed at least 5% of spam to get by without SpamAssassin providing any scoring. The timeout has now been set to 90 seconds, which allows virtually all email to be scanned and scored.

Notes for the future:

We need to put in something like MIMEDefang to take care of the email social engineering viruses. MIMEDefang requires a set of extra Perl modules, most of which is available at RPM contrib directories from rpmfind.net. Also, has a recent RPM of MIMEDefang in any case. MIMEDefang will be configured later; we’ll get by with just SpamAssassin for now.

We have to put in some sort of distributed IMAP store for the NY and CA offices. Presumably, we’ll use Cyrus Murder for this. I’ll also need to read the Sendmail book for this sort of distributed delivery for CA users.

Bean Stew with wheat berries

October 27th, 2003 | 08:25

Vaguely based on this Israeli Wheat Berry Stew, but bacon-y and with on-hand vegetables. I also had frozen collard greens, but didn’t get around to adding them towards the end.

4 cloves garlic, chopped
1 onion, chopped
1 pkg turkey bacon, chopped
1 c wheat berries
1-1/2 c Assorted beans, soaked overnight
1/4 c brown rice
2 zucchini, chopped
26 oz can of tomatoes, diced
2 c vegetable stock
1 tbsp cayenne pepper
1 tbsp turmeric
1 tsp cumin seeds

In large french oven, saute garlic, onions, bacon until soft. Add wheat berries and saute for a few minutes before adding the remaining ingredients. Bring to a boil, then back to a low simmer for two hours. Season with salt and pepper and let cool for 15 minutes before serving.

Ropa Vieja

October 27th, 2003 | 08:22

Taken from http://www.lacabe.com/marga/food/recipes/ropa.html. Presumably we can just drop the wine part, since the stewing isn’t going to boil off the alcohol in any reasonable amount:

This is an extremely delicious, and rather simple, if time consuming Cuban dish. A favorite at my house. It’s adapted form The Frugal Gourmet on our Immigrant Ancestors

-about 3 1/2 lbs chuck roast beef
-2 onions, chopped
-1 or 2 green peppers, chopped
-4 cloves of garlic, chopped
-2 cups tomato sauce
-1 cup wine
-2 bay leaves
oil, salt, pepper, water

Salt and pepper the meet. In a large pan, brown the meat in a little bit of oil on both sides. Add about 1 cup of water and simmer, covered, until done, about 2 hours. Turn off heat, and allow to cool down, covered, in the pan.

Shread the meat. Add the broth from the pan. In a clean pan, heat some oil. Brown onions and garlic. Add green pepper and cook for a few minutes. Add meat, broth, tomato sauce, wine, bay leaves and salt to taste. Cook for about 1/2 hour. Serve with rice

ALTERNATIVE FOR COOKING/SHREADING MEAT

A reader has come up with this alternative:

“What I have done successfully is pre-cook the meat under the broiler to at least medium-rare. Then I have used my food processor with pulsing action to shred meat. It is particularly effective if you are using a cut with strong grain to the meat (eg. flank or brisket) and cutting the meat against the grain in the desired length or longer before feeding into the food processor. Do a little at a time and watch out for how long you process or you will mince the meat instead of shredding. Obviously, this is an excellent technique for mincing any meat such as fully cooked chicken for chicken salad.”

RIP Tuesday Morning Quarterback

October 23rd, 2003 | 19:39

I’ve been bombarded by search engine referrals from people looking, desperately looking, for Tuesday Morning Quarterback.

Sadly, I have nowhere to direct you to. ESPN dropped TMQB, scrubbed it out of existence, after the Easterbrook anti-semitism/Michael Eisner insult flap. He’s had his defenders and explainers. I personally can’t believe anyone who works at TNR can be anti-semetic, so the scenarios put forth by Micky Kaus (on October 20) and Jack Shafer seem plausible to me. Easterbrook is basically a guy who needs an editor, or even a habit of pausing to put the keyboard down and later coming back to read his own writing later, so his flights of rhetorical fancy don’t blow up in his face. A blog may have been one of the worst things to give him.

Easterbrook apologized, but the wheels had been set in motion, and, as he notes, once the words had been posted to his blog they can not be retracted. His firing from ESPN surprised me, though in retrospect it shouldn’t have, especially given that Disney owns ESPN, and Eisner doesn’t take insults from subordinates lightly. The implications of this are larger than they appear at first glance: granted, he dissed his boss, but for words that appeared in TNR (where he was paid to write political commentary), not ESPN (where he was paid to write football commentary). Glenn Reynolds notes:

Easterbrook was fired � from ESPN � for something that he wrote � in The New Republic � that offended the head of Disney. And that�s the reason why media consolidation is an issue. If people who write for one outlet have to think about pleasing not just one boss, but a plethora of them, then people will write a lot fewer criticisms. And if most outlets are controlled by a small number of conglomerates, we�ll read fewer criticisms, as a result.

It’s not quite as indirect as Reynolds implies, since ESPN is a part of Disney, so Eisner is TMQB’s ultimate boss. Media ownership wasn’t consolidated in this case, as Disney doesn’t secretly own TNR. Nonetheless, Easterbrook was fired for words that were paid for by TNR, words that have no direct relationship to the words that were paid for by ESPN.

I’m also not sure that speech was restricted in any substantial way, at least in the long term. Easterbrook’s main job is to write for magazines like TNR; ESPN was a sideline where he could indulge in his passion for football, bad science fiction and cheerleaders. He’s lost income, but not in a crippling way. Further, there’s nothing to prevent him from continuing TMQB if he wants to. In fact, it looks like someone registered the tmqb.com domain and is offering it to Gregg Easterbrook. It’s trivial to self-publish on the Internet. The hard part is to make money off of it. Easterbrook may not care that much TMQB revenue, but there’s an enthusiastic user community desperately searching for TMQB, and there’s at least one site doing a TMQB homage. It’s likely people would be willing to hit the Amazon tip jar to pay for server costs, if he can be convinced to start writing the column again.

IKEA Index, Internet Price Discrimination

October 23rd, 2003 | 12:00

The Times‘s World Business section is a marvel of design: filled with some of the cruft that makes the regular Business section just a bit bulkier, it can be tossed in the trash without more than a glance through the headlines. Every six months or so, there might be a sufficiently interesting article in it worth reading. (I’m not being willfully ignorant of international business; I read the Economist for that. It’s that the NYT World Business section is particularly uninteresting.)

Today was the day of the semi-annual interesting article: it’s about an IKEA index, similar to the Economist’s Big Mac index. Instead of comparing the prices of McDonald’s burgers across the world, the IKEA index compares a basket of identical IKEA furniture across European and North American markets. It shows that the EU single market isn’t quite as of yet, as there are not insignificant price differences across countries, even those countries on the Euro. There is progress towards market integration in terms of prices and volume, but less than expected.

Over the long term, prices should converge for tradeable goods across countries. The Big Mac index indicates current price differences between relatively identical goods, which indicates whether a country’s currency is overvalued or undervalued. It may be a fanciful notion, judging exchange rates in terms of burgers, but it’s not the worst idea in the world, and it captures fundamental economic ideas about purchasing power parity in a handy index. The IKEA index perhaps does the Big Mac index one better, at least in the countries in which IKEA has a presence. IKEA furniture is centrally produced from the same factories, is of identical design, and presumably can be put into a box and shipped elsewhere. The Big Mac is generally produced from local agriculture and must generally be eaten locally, though it tends to be centerally designed with minor tweaks for local tastes. In terms of approaching the ideal of a trade good, IKEA furniture is therefore a better example.

The results of the IKEA index is that the same basket of furniture costs 17% more in Finland than in the Netherlands, both Euro countries. Shipment costs from IKEA factories clearly don’t account for the difference; presuming the factories are in Sweden, Finland would seem closer, and in any case international freight costs are relatively minor. Also, Belgians pay 33% more for Billy bookcases than Germans, even though there’s a German IKEA store just across the border. The US had the least costly basket of IKEA goods.

The explanation for these differences is that local market conditions — tax regimes, local competition and labor markets — are still relatively strong, and that IKEA is able to price discriminate between these local markets. An example given in the article is that IKEA competes against small, high-end furniture stores in Italy and is able to charge more than in the US, where IKEA has to compete against Wal-Mart. It’s unclear to me, though, why the German IKEA store would have such a large difference compared to the Belgian one for some items. With open borders, people should be able to travel to the cheaper store, much as New Yorker’s schlepp over to Elizabeth, NJ. Presumably, the Belgian store is sufficiently far away from the German store.

An interesting note is that the economist who compiled the IKEA index was able to do so once IKEA put it’s catalog — with prices — online. Before this, it was too difficult to gather up all the current IKEA catalogs for a trivial research subject. The Internet is having the effect of making economics research less costly.

There is an interesting paper on price discrimination increasing because of the Internet. One summary is over at TechDirt. Internet price discrimination is suprising because services like Froogle or PriceWatch should flatten prices between retailers; consumers have so much more information about what the other guy is charging. It turns out that price discrimination is possible because of eroded privacy. With personal information more readily available (both from purchasing information from third parties or collecting it directly), Internet retailers can tailor offers very precisely, giving discounts on goods to attract the marginal consumers.

Price discrimination is not a bad thing in itself. It increases overall consumer utility by providing marginal consumers with a price point they can live with. Producers like it, too, since they, of course, capture more profits, both by selling more to the marginal consumer and by selling at a higher price to other consumers. Increased production may also lower overall prices, assuming lower bulk production costs. It’s the other consumers who hate price discrimination, since they feel gypped that other people are buying for less. A few years ago, Amazon experimented with price discrimination based on personal buying habits, but had to back down because of the backlash.

Amazon’s mistake, as implied by the paper, is that the prices of its goods are easily compared by different consumers, who then got into an uproar. This sort of effect would be predicted by the readily available price information on the Internet. Price discrimination therefore requires stealth, mainly by bundling goods together so that price differences are harder to spot. Price discrimination can also proceed on non-tradeable goods, since there’s no arbitrage opportunity. For example, airline tickets have a great deal of price discrimination between when you buy the tickets, when you intend to fly, frequent flyer clubs, and so on. This is because your name is on the ticket, and it can’t be traded to someone else.

IKEA’s online catalog does some of this by having country-specific versions of their web site and by refusing the ship goods to countries not specific to that site. The trivial personal information of which country you live in is sufficient for this bit of price discrimination, since a secondary market for IKEA furniture is limited: shipping costs for consumers are relatively high.

Note that price discrimination because of personal information happens off-line, too. Really, when you use that club card at Duane Reade, you’re trading information on your buying habits for discounts on goods. For many people, this is a worthwhile trade, or at least a necessary trade for belonging to a modern society.

Minor Oracle/SSH Mystery Solved

October 20th, 2003 | 16:40

Apparently, the Oracle Listener works differently on Windows compared to Unix. All the times I’ve done ssh port forwarding has been with Solaris boxes, and forwarding just 1521 has worked fine. Various users have reported problems with this, and it turns out that the Oracle Listener on Windows works like FTP, where the initial communications happens on 1521, and then is redirected over to some other port. This obviously spoils ssh port forwarding or stunnel, and requires you to set up some sort TNS proxy (presumably available from Oracle).

But, this sort of redirection was done on Windows because the TCP/IP stack on NT pre-SP3 was buggy and couldn’t handle any volume. It’s been fixed since, and the Listener behavior can be changed so that it works like the Unix Listeners by a registry change:

Add ‘USE_SHARED_SOCKET = TRUE’ to HKLM\Software\Oracle\HomeX, where X is the OracleHome

The discussion on this topic was over at the stunnel site. There’s also more information at Greenspun.com. Note that this should only be done on Oracle at least as recent as than 8.1.7.1.2 and on WinNT SP3.

The Yankees Win the Pennant!

October 17th, 2003 | 08:33

I was surprised when they brought Pedro back out to pitch the 8th. He had started to look vulnerable at the bottom of the 7th, with the Yankees nicking a run and putting men on base. And wasn’t his pitch count already over 100 at that point? The Sox have a bullpen that’s been strong all post-season, and I had thought we were going to see Timlin (who had almost strung together a perfect game through a half dozen relief appearances) and possibly Wakefield coming in for the 8th and 9th. Why not use them? There’s an off day before meeting the Marlins on Saturday.

Even given his starting the 8th, why did he continue to pitch after Jeter and Williams got hits, and the left-hander Matsui coming up? The Fox sportscasters noted that Pedro told his manager that he could get the next guy out, and the manager listened. And maybe it was in that moment, on the mound and between at-bats, that the Red Sox lost.

We missed the beginning of the game when Clemens got pounded. Thankfully, we missed the beginning of the game: it would have been depressing with the Yankees down three or four and Martinez looking sharp and unrattled. In some sense, the ALCS loomed larger than the World Series, at least in New England and possibly New York. For Sox fans, winning two in Yankee Stadium would have meant slaying the dragon in his lair, and what came after, good or ill, would have been a mere coda. And for New Yorkers, well, the Times phrased it: “YANKEES PROLONG RED SOX MISERY”. No, this rivalry isn’t a disfunctional relationship.

The Yankees, more desperate at the beginning of the game, and perhaps with more control over the yes’s and no’s of its star pitchers, pulled Clemens early and threw in any pitcher Torre could find. When we finally turned on the game, the Yankee on the mound looked a whole lot like Mussina, and, by golly, it was Mussina. Where the hell was Clemens? And there was this sinking feeling, though the score wasn’t that bad. It may have been a memory of the last time I recall the Yankees throwing in starting pitchers as ad hoc relievers in a desperate game, when they faced Seattle in 1995, with Cone faltering to let the Mariners tie, and then Jack McDowell coming in to lose it after the Yankees took the lead (what a great game that was) in the 11th. But Mussina, Wells and Nelson held them, and Rivera went for three and shut them out until Boone homered on the first pitch in the 11th of this game. A great game last night. Not the best, but a great game.

All the Yankees starters are spent. Who’s starting on Saturday? Clearly Torre doesn’t trust anyone in the bullpen.

Oh, Gothamist had a link in the comments to a better angle on the Martinez-Zimmer incident last Saturday. From this angle, Martinez looks far more justified, since you can see how quickly Zimmer was rushing him. Before, with the angle that Fox had during the broadcast, the scene could have been interpreted as Zimmer walking up to Martinez, possibly trying to push Pedro’s right shoulder, and getting grabbed around the head and thrown on the ground for his troubles. With the extra video, Martinez, well, got out of the way while giving Zimmer a bit of help to get to the ground. The aikido people say it was kokyunage.

I just have to point to Slate’s article by a Sox fan talking about a Sox-Cubs World Series. It’s a historic artifact, but entertaining:

I have previously suggested that I feel toward the Yankees as I would toward someone who’d shot and killed my dog. Given this, what would it feel like if the Cubs beat us in the big one? It would feel as though some pleasant, absent-minded guy had accidentally run over my dog in the street and not really noticed, and then clumsily reversed back over the dog as it yelped in its death throes. Then he started whooping and guzzling beer with friends, while still standing over the dog corpse. And all the while he still seems like a really nice guy who was hard to blame or dislike.

Please don’t be that guy. Please.

As a side note, I’ve heard it pointed out that the most likely outcome of a Red Sox-Cubs World Series would be that, during the decisive game, moshiach would come and history would end.

Kill Bill

October 13th, 2003 | 17:37

Is a movie shaped to look just like a 1970s martial arts exploitation film itself a 1970s-style martial arts exploitation film? If so, Kill Bill may be the best 1970s-style martial arts exploitation film ever made. If not, Kill Bill may be the best homage to 1970s-style martial arts exploitation films ever made. Regardless, it’s an amazing, fun movie. The only negative is that it’s an incomplete movie: Tarantino films, ignoring the winding dialog punctuated by terrible violence, are built around notions of loyalty, honor and betrayal. These notions were hinted at in Kill Bill Vol 1, but not yet shaped to their final forms. We’ll have to wait until February until Volume 2 comes out.

Kill Bill is basically a revenge movie along the lines of a modern day Shogun Assassin. Uma Thurman’s character is a member of what may be described as an Evil Charlie’s Angels, with Michael Masden as Bosley and the unseen Bill as Charlie (Lucy Liu is perhaps the Leonard Nimoy of these two universes, having been both Angel and DIVA all in the same year; she does not wear an evil goatee in Kill Bill, however.) For presently unknown reasons, she’s targetted for assassination by Bill. Grievously wounded, Uma wakes up after four years from a coma and goes to seek vengence against her former associates.

This vengence is about as violent as any of 1970s movies, with scores of corpses, body parts and hacked off heads, but, yes, really, it was all in good fun. Gallons of fake blood are used in every violent scene, all of it gushing out in such vast arterial sprays that it can’t be taken seriously. Arguably, the most disturbingly violent segment is not one of the live action fight scenes, but during a Japanese anime-styled segue into a character’s past. The most disturbing live action segments are either Uma’s dream-like attempted assassination at the beginning, or the sudden, unexpected betrayal by a former collegue. With the latter, the more horrific part is what happens shortly afterwards, in a moment later echoed and amplified by the anime segment as a genre-adhering origin myth for the continuation of vengence.

(As a side note, you can’t get a sense of how much fake blood is in the movie from the trailers. In particular, during the course of her big fight with Lucy Liu’s henchmen, Uma’s jumpsuit gets covered in large splotches of vivid red blood. These large splotched actually don’t appear in the trailers. Because these sequences in the movie are in black and white, her jumpsuit only has black splotches during the color versions for the previews.)

The fight scenes are spectacular, done with relatively little wire-fu and zero amounts of Matrix bullet-time special effects. It’s all about Uma (or at least her real-person stunt double) swinging steel, running up banisters, taking on gangs of sword-wielding Kato-masked thugs, all of it shot by the best film photographers money can buy. Despite it’s self-consciousness, this really is a 1970s-style martial arts vengence flick — complete with cheesy electronic sound effects when sworn adversaries meet eye-to-eye — all amped up, with its essence reified by the modern Hollywood machine. What’s on screen is simply spectacular.

Coincidentally (well, not really that coincidentally), I went to Shihan Berrios’s kenjitsu class Saturday morning and learned a bit more about our basic kata, and senior student did much more involved work. I was amused to see there were kenjitsu trainers and fight coordinators listed in the Kill Bill end credits. There was a point near the end of the fight between Uma and Lucy where they’ve crossed swords and have moved so that they’re standing more or less side-by-side. This position was very much like one of things I watched during the class, where, during #3 in the kata, tori winds up next to uke; instead of continuing to trying to strike with the bokken, tori off-balances uke in a katana-nage, or takes uke’s elbow in ikkyo. Sadly, Uma and Lucy didn’t try for the alternative technique in the movie. They also crossed blades just before starting to fight, which is a bit of a no-no, because you’ve just gotten too close to your opponent. But it looked nice and dramatic.