The life and times of Zack Weinberg.
Sunday, 30 June 2002
# 2:50 PM
Further to my rant about version
numbers: I left out two important ways to do it wrong.
- Failing to bump the major number when you should have. A good
current example of this is automake. Versions 1.5 and 1.6 of this program are incompatible with
version 1.4; therefore, they should have been called 2.0 and 2.1.
- Incrementing any component by more than one. This contributes to the
pernicious misapprehension that version numbers are decimal fractions.
People sometimes do that when they want to suggest that there have
been a lot of changes and compatibility is not 100% guaranteed; for
jumped from 2.13 to 2.50. The proper thing to do, again, is bump the major
It is, by the way, okay to delete features without bumping the major
version, as long as the upgrade path is straightforward.
# 2:35 PM
Yesterday was the wake for my grandfather. Well, it wasn't a wake
in the technical
sense. There was just a large afternoon party at my grandmother's
house, with about eighty of his relatives and friends invited. No
speeches were made and no one got drunk. A proper farewell to a man who
had three hundred people show up for his fiftieth wedding anniversary
(last year), though.
It was the first time since about nine years ago that I saw all my
cousins in the same place; they've done an awful lot of growing in the
interim. The eldest is off to college in the fall.
This morning, I set out to make pancakes, only to discover that the
maple syrup had gone moldy. I didn't know maple syrup could go
# 1:05 AM
From Salon's interview with
the writer for the new HBO miniseries Wire:
I'll tell you what, this would be enough for me: The next time
the drug czar or Ashcroft or any of these guys stands up and
declares, "With a little fine-tuning, with a few more prison cells,
and a few more lawyers, a few more cops, a little better armament,
and another omnibus crime bill that adds 15 more death-penalty
statutes, we can win the war on drugs" — if a slightly larger
percentage of the American population looks at him and goes, "You
are so full of shit" ... that would be gratifying.
I'm impressed that HBO is willing to take on a show like that.
It seems, well, real, and to be saying something that
needs saying. That's unusual in TV.
Saturday, 29 June 2002
# 12:25 AM
In my mail today was a response to a trouble ticket I'd filed with my
DSL provider. At the top was a lengthy block of boilerplate, containing
Members: Please DO NOT reply to this email, as we will not be
able to respond to it or provide additional support.
We will update this with status or resolution via the Customer
Support tool in TAC. If you need to make updates or close your
support request, please go to [web page].
This strikes me as sheer laziness on their tracking system's
designer's part. How fscking hard is it to set up a robot that
adds e-mailed responses to the relevant trouble ticket's logs?
But it's not just that tracking system; every fscking bug
tracker I have ever used has the exact same anti-feature,
except for Debian's. Now
let me outline the series of steps involved in responding to a
request for feedback, with and without the ability to send responses
|1. Receive query by e-mail. ||1. Receive query by e-mail.
|2. Hit "reply" key. ||2. Launch web browser.
|3. Write response in favorite text editor.
||3. Wait for web browser to start.
|4. Save message and hit "send". ||4. Navigate to relevant web page.
| ||5. Write response in itty bitty form box.
| ||6. Push "submit" button.
I think it's quite obvious that responses by e-mail are better. So
why on earth is it that only one bug tracker on the face of the planet
(To be fair, some other trackers, such as GNATS, claim to
support responses by e-mail, but in practice it doesn't work reliably
enough to be usable.)
Thursday, 27 June 2002
# 9:45 PM
under god, indivisible
As has been mentioned all over the place already, the
Ninth Circuit has ruled the Pledge of Allegiance unconstitutional,
at least as amended in 1954 to include the phrase "under God." This
has come in for bipartisan outrage, e.g. a 99-0 Senate resolution objecting
to the decision.
So let me weigh in here with my total agreement with the decision.
The pledge should never have had any reference to divinity in it, and
the Ninth Circuit ruled correctly. I am disappointed that it seems the
Supreme Court will not agree. Matter of fact, I would like to see the
pledge abolished altogether, but I'll settle for this change.
Seth Schoen speaks
eloquently on the subject than I can manage. Go read what he
ow ow ow
Tried to learn how to wear contact lenses. I did, once, manage
to get one onto both my eyes, at the same time even, and back off
again. And it seemed like they worked; edges were sharp and all
that. The procedure for putting them on and taking them off,
however, was unpleasant and painful, and most of the time unsuccessful.
If the optometrist had not kept reassuring me that everyone has this
much trouble, I would have given up. My eyes are still sore.
I've a copy of Diane
Duane's reissued first
two volumes of "The Tale of Five" (as an omnibus). This is a
wonderful sword-and-sorcery series, which has been very hard to
find for years. Well, the first two volumes were not so hard.
The third volume was very difficult to find, and the fourth...
well, the fourth volume never actually got finished.
Supposedly, the third and fourth volumes will be printed in another
omnibus later this year or early next. Here's hoping.
seen on the street
Down at Shattuck and Addison there is a piece of public art
which I've been walking by for months, and every time it bugs the
heck out of me. It's an area of sidewalk that has been sculpted
to look like there's lots of human lips poking out of it. So if
you walk on this area, you are walking, metonymically, on human
faces. I would rather not do that. There is a reason why 'If you want
a picture of the future, imagine a boot stamping on a human face
— for ever' is such a powerful line. I don't think it
was the artist's intent to evoke that frame, but I'm not going to
cut him or her any slack on that score. People should think of
On a lighter note, today I saw a couple of pre-teen kids staggering
down the street, each carrying two cardboard boxes about as big as they
were. It was a Three Stooges
Monday, 24 June 2002
# 7 PM
A programming puzzle for the readership:
Coding in Python, what is the
most robust way to write a work scheduler that dispatches assignments to
N asynchronous execution threads? Each assignment is the execution of
an arbitrary piece of code. Dependencies between assignments are static
and known in advance.
It needs to be thoroughly robust against the assignment inadvertently
trashing the scheduler or execution thread's private state, failing
to terminate, or consuming excessive machine resources; the scheduler
should in all these cases be able to recover control, abandon execution
of the problem assignment, and continue.
Also, no matter what, a user interrupt must be able to abort the
entire thing. I.e. even in the face of assignments maliciously
trashing the scheduler, or outright bugs in the scheduler or execution
threads, control-C should work.
Ideally, the implementation of this scheduler would be damn fast.
Some performance hit is okay. I said "threads" up there, but any
asynchronous execution mechanism is fine; I don't insist on the use of
honest-to-ghu threads. (Coroutines, however, are no good; I do need to
be able to execute assignments in parallel.)
In case anyone is wondering, yes, I already have a scheduler, it's
just not nearly robust enough.
# 2:40 AM
Picked up my sister at Oakland airport this afternoon and took her into
San Francisco, where she's living this summer. The airport still hasn't
recovered from post-Sep.11 security "upgrades"; the lines for the checkpoints
are still just as long. Also, since the building was built on the assumption
that people who are meeting arriving flights could come to the gate, there is
nowhere to get so much as a newspaper on the outside of the security perimeter.
And you can't cross the security perimeter without a ticket anymore. Feh.
I got to meet all of Dara's housemates — she's living with
a bunch of friends from Stanford. We all had dinner and watched
Jumanji, which they
had a tape of. This is a silly comedy with a relatively non-lame
performance turned in by Robin Williams. It came out in 1995, and it's
kind of depressing how poorly the CGI effects have aged. They looked
really spiffy back then; now they seem obviously fake.
Sunday, 23 June 2002
# 2:40 AM
Another week, another game session. The PCs are trying to rescue a whole bunch
of kidnapped children from a farm. The kidnappers, you see, have holed
up on this farm, taken the farmers hostage, and are threatening to kill
everyone if they don't get given safe conduct out of the country. The
farm, incidentally, is guarded by barghests
— not because the kidnappers brought them along; they belong to
the farmers. So however they get in, they can't let the barghests notice,
or they'll strike up a howl and alert the kidnappers (and likely maul the
PCs to death too).
The players devoted the entire session to planning. Frankly,
I like having players that would rather spend that long making
plans than risk getting any of the hostages or kidnappees killed.
Or the kidnappers, for that matter. The PCs have already once been
forced to trek to the land of the dead to interview an adversary
who inconveniently killed himself before he could be questioned;
they're not going to get themselves stuck in that situation again.
It does, however, mean that we made no use whatsoever of about
half the background detail that I worked up, that being the half
that only becomes evident once they get on-site. (Oh yes, it
gets even hairier.)
Thursday, 20 June 2002
# 5:45 PM
a rant about version numbers
Version numbers, as
you know, Bob, are those odd digit strings attached to computer
software. They look like "1.2.4" or "3.1.0". Now, lots of people
are out there releasing software without the slightest understanding
of how to generate these numbers, so here is my own explanation,
after the style of another
such (which neglects to say anything about the its/it's mess,
but never mind).
This is how to do version numbering right:
- Realize that these numbers are not decimal fractions. They are
integers separated by periods. That means version 1.99 is
older than version 1.100, and version 1.100 is not the same thing as
- Only offically released versions of the program get version numbers.
Development snapshots don't. Nor do test releases.
- A version number should have three components: 1.2.0 or 1.2.3. If
the last component is zero, it may be omitted, but that's just
shorthand: 1.2 and 1.2.0 are the same thing.
- Each of the three components has a meaning:
- The first is the major version. You increment this
number only when you have made changes that break backward
compatibility. This is to be avoided if at all possible.
- The second is the minor version. You increment this
number when you release the result of a development cycle, having
made lots of improvements, probably introducing new bugs as well.
- The third is the patch level. You increment this number when
you release the result of a bug-fixing cycle. A patch release should
have strictly fewer bugs than the previous one, and no additional
- The first official release of your program is 1.0 (aka 1.0.0).
Now, some of the numerous ways to do it wrong:
- Bumping the major version number for no good reason. This is
extremely common. If you bump the major version, it means that
upgrading is dangerous, because changes were introduced
which deliberately broke some of the ways the program used
to be used. Do not bump the major version if this is not true.
- Not having a three-component version number. If you have fewer
than three components, you hide information that your users
need. If you have more, you merely create confusion. (Four-
and five- component version numbers can be correctly used by
repackagers; see for instance the Debian policy
manual. But if you wrote the program, use three components.)
- Using anything other than numbers in version numbers. Versions such
as 1.0a are ambiguous; is that the same as 1.0.1, or is it an alpha
test for 1.0 (which shouldn't have had a version number in the first
place)? Automatic sorting procedures disagree on how this is supposed
to work, as do humans.
- Giving version numbers to development snapshots. The worst offender
here is the Linux kernel,
which makes a distinction between odd and even minor versions, then
tacks a ton of extra suffixes on the end because the patchlevel isn't
sufficient detail. This is a symptom of that development effort's
longstanding habit of not using a proper version control system, but
that's beside the point.
- Using major version number zero. This is not a total proscription;
it is possible to use it correctly, if you know what you are doing.
(See Subversion for an
example of the correct use of major version zero.) Normally, however,
anything before 1.0 is a development snapshot, which — once again
— should not have a version number at all.
- Distinguishing version X.Y from version X.Y.0. This just plain causes
confusion. (Fortunately, very few people do it.)
- The GNU
maintainer advice for test releases has an especially pernicious
suggestion, to use 4.5.90, 4.5.91, ... for test releases up to 4.6;
not only does this clash with the namespace of patchlevel releases
(what if there really were 90 patchlevels to 4.5?) but it continues
by suggesting that the sequel to 4.5.99, if you're not done, should
be 4.5.990, which is just plain wrong. See above about version numbers
not being decimal fractions. Taking this advice is a common error.
The proper thing to do with development snapshots, by the way,
is to give them date stamps, which look like 20020602. It is also
acceptable to use 2002-06-02, if you're consistent. No other date
format is acceptable; there are far too many of them, they're ambiguous
both to humans and computers, and they don't sort right by naïve
string comparison. If you are generating snapshots for two different
branches at once — say, the main trunk and the 3.1 release branch
— you can disambiguate them by mentioning the major and minor number
of the previous release on that branch in the bundle name.
Ex Bibliotheca hopes that this has been an informative and useful rant,
and that more of you out there will get it right in the future, dammit.
Wednesday, 19 June 2002
# 9:55 PM
nitpicks Star Wars: Episode II. And behold, it is funny.
Contains the beautiful phrases "...look on the bright side: you
wouldn't all be crushed under the jackbooted heel of the Dark Lord
of the Sith!" and "I don't know how this could possibly happen,
but I could probably think something up if George Lucas put me on
(Me, I plan to wait until it comes out on DVD and then propose
that the ICSI movie
club either MST3K it, or
Dave Trowbridge's advice.)
# 9:35 PM
Hobo Nickels. Check it out.
(From Boing Boing.)
# 4:05 AM
Threw a party for Shweta's 25th birthday. Lots of
people came: herself, Nathaniel, Sumana, Vince, Rebecca, Michael,
Julia, Eve, and Alex. We played Once Upon
a Time and ate pizza from Zachary's.
Tuesday, 18 June 2002
# 7:45 PM
There's a certain category of fictional works, which are populated
entirely with characters that I hate. I mean, these people are scum.
They have no redeeming qualities whatsoever. If I were to be in the
same room with them in real life I would be forced to blow their heads
off with a machine pistol. Fortunately I can avoid this sort of person
easily in real life. I can also avoid these people in fiction, by not
reading the books, but sometimes I get suckered in and don't realize
until it's too late to do anything but hurl the book out the window and
scrub my brain out with lye.
The question here is, why do people write these books? How can
they stand to have these scum living in their heads? To have made
them up and be personally responsible for every last bit of their
scumminess? Why did they not blow their characters' heads off with a
machine pistol in chapter one, then find a story to write that has at
least one person who is worth knowing?
# 3:30 AM
Joshua Micah Marshall,
a fine investigative journalist with a blog, thinks that Patrick
Buchanan was Deep Throat (of Watergate fame). It is not clear
whether this is true or not, but it is a juicy little theory, is it
(Why am I still awake?)
# 3:20 AM
Teresa has a post on Lutheran humor, in which she mentions
"everyone's favorite Martin Luther quote:"
Sin boldly, but believe and rejoice in Christ even more boldly,
for he is victorious over sin, death, and the world.
I feel obliged to point out that I have never heard that before.
However, now that I have, it is indeed my favorite Martin Luther
quote. (It is also my only Martin Luther quote.)
I haven't done an Amoeba run in
awhile, but the albums in heavy rotation on
All the band names start with "T." This means something, but I do not
The Sisters of Mercy get mega bonus points for doing their own
web page, with an attitude I approve of, and not fscking up the
HTML, unlike some
other bands I could mention. Well, except for the red-on-orange
color scheme in some places. Owwww.
The Bosstones get negative points for pointless Flash;
the link above bypasses it, for your convenience. Ditto TMBG;
you will notice that the link goes to a fansite, not their
official site, and there's
a reason for that.
Time was that if XMMS was playing music, the Flash plugin couldn't
make any noises. This is no longer true. I need to find out what
changed and change it back. (Or find some way to prevent the Flash
plugin from ever making noises. Hmm... hexedit the binary and change
# 2:40 AM
Yesterday, I went to see my friend Julia Bernd receive her
masters' degree. Julia is another linguist — these days I
seem to be hanging around an awful lot of them. She had a lot of
family and friends show up. I didn't know anyone was named Desiree
in real life, which is presumably what I get for being such a Yankee
(Julia and company are all from various parts of the Old South).
Today, I spent an awful lot of time playing Freecraft, which is a clone of Warcraft II, which I
was hooked on for a while back in college. It is a strategy game,
in which you have to defeat a series of small armies of orcs (in
the original; the Freecraft people are systematically renaming all
of the cast in order to make it a tad less cliched, but they haven't
finished yet). One thing I hadn't noticed before, about both the
original and the clone, is that you invariably wind up clear-cutting
all the forests on the board in order to build stuff with the wood.
An increasing number of web sites in my bookmarks list are
becoming inaccessible from my DSL connection; routing traces go
off into the weeds. I've poked the ISP and we'll see if it gets
fixed. Unfortunately one of the inaccessible places is the W3C's
HTML validator, so if there
are any markup errors in this post, that's why.
Thursday, 13 June 2002
# 2:40 AM
Checked with my mother; Roger
was born in 1922. He would have been eighty years old later this
Further to my complaints
about the local anti-war protesters: my father is of the opinion
that there haven't been any effective protest agitators since
Mario Savio. He was
in Berkeley at the time of the Free Speech Movement, so I think he
is likely to know what he is talking about.
It also occurs to me that one of the assertions I made in that
post may be misinterpreted. I said that the protesters take the
position that War is Bad, end of discussion, and this is an absurd
stance. Now, in an absolute sense, war is bad. To quote
Every gun that is fired, every warship launched, every rocket fired
signifies, in the final sense, a theft from those who hunger and
are not fed, those who are cold and not clothed. This world in
arms is not spending money alone. It is spending the sweat of its
laborers, the genius of its scientists, the hopes of its children...
We pay for a single fighter plane with a half million bushels of
wheat. We pay for a single destroyer with new homes that could
have housed more than eight thousand people... This is not a way
of life at all, in any true sense. Under the cloud of threatening
war, it is humanity hanging from a cross of iron.
The catch is that international politics isn't a matter of
absolutes. There are situations where war is the best available
action for a nation to take. There are more situations where making
a credible threat of war is the best option. You will notice that
Eisenhower did not abandon WWII just because it was the colossal
waste of money and lives that he knew it to be. The alternatives
were worse. On the other side, the Vietnam-era antiwar protesters
were credible because they could show that that war was not our
best available option.
The trouble with the current crop of protesters is that most
people realize that sometimes war is necessary. The protesters'
position comes across as "war is never necessary," and that's an
absurdity, at least to their audience. The pro-war demagogues
can therefore run right over anyone raising objections to this
war, by claiming that their position is equivalent to this absurdity.
That's a lie, but it's a lie that gets believed.
The Neilsen Haydens are full of interesting posts lately.
Patrick has a couple of snappy ones on nuclear power and one on people's reactions to Coleen Rowley (the FBI whistleblower). Read
the comments on both. Teresa has a long chewy speculation on
Mr. Bush not knowing that there are black people in Brazil. Again,
read the comments.
Sunday, 9 June 2002
# 2:20 PM
roger alexander, 192x-2002
My grandfather is dead.
He never recovered from the heart
attack he suffered last week. He was unconscious for most of that
time, but did wake up enough to recognize and speak to my grandmother
on Friday. I'm told he died in his sleep, early Saturday morning.
I'm not sure precisely how old he was (pathetic—what kind
of grandson am I?) but he interrupted his college education to
fight in the second world war, so he has to have been born in the
twenties. He had a long and distinguished career as a geologist
with the Standard
Oil Company (Chevron,
after the breakup). After he retired, he taught petroleum geology
for a while at Cal. He
never stopped doing stuff, even this past year when he was continually
ill. In fact, the thing that makes me saddest, right now, is that
I remember him being all excited last Christmas about doing a
geologic cross-section map of the Bay Area. It was to be displayed
at the Mount Diablo state park's
visitor center. He never got to start it.
Yit-gadal v'yit-kadash sh'mey raba, b'alma di v'ra hirutey,
vyam-lih mal-hutey b'ha-yey-hon uv'yomey-hon uv'ha-yey d'hol beyt
yisrael ba-agala u-vizman kariv, v'imru amen....
Goodbye, Roger, I'll miss you.
Wednesday, 5 June 2002
# 8:40 PM
1.0 is finally out!
# 8:35 PM
Hacked up Blosxom
to go faster. Here are gory details.
# 6:50 PM
further car follies
I went and test-drove the new Honda Civic hybrid
(warning: pointless use of Flash). This is a nice little car. It
is pretty much indistinguisable from the conventional-engine Civic
except for being about $4,000 more expensive and getting an additional
ten-fifteen miles per gallon. Unlike the Toyota product, the dashboard
and controls are all normal.
Honda has a surprising-to-me corporate policy of not allowing anyone
to rent their cars. They don't sell to rental companies, and the
dealerships don't do rental arrangements. The sales guy said this was
to improve the resale value; rental places (he said) buy lots of cars,
keep them for a year or two, and sell them again, glutting the used
market. Now, since I am of the "buy one car and keep it for ten years
plus" school of thought, I don't care about the resale value. But it
makes it impossible to test drive the car over a long distance, which is
somewhat frustrating. I didn't even get to try it on a freeway.
Also, the dealership has a markup on all their cars' sticker prices:
"market value." This, the salesman explained, is an adjustment
to reflect how much the car is worth, over and above the MSRP — which
is already marked up quite a bit from dealer invoice. I imagine it
should be possible to talk them down, but gosh, that's awful blatant.
I was pleased that the sales guy took me at my word that I wasn't
going to buy anything today, and let me go in peace.
On the way home on my bike, I saw a car go by with the logo of the
Bay Area City Car Share
organization. This, frankly, would be the ideal car arrangement for
me. I drive about three thousand miles a year, I know when I'm going
to need a car well in advance, and I don't wanna deal with the hassle
of parking, insurance, maintenance, etc. So why am I not signing up?
Because you have to be twenty-five years old. Feh.
It is once again intolerably hot (i.e. 81°F). Fortunately, I
remembered to make ice cubes this morning, so I can now have iced tea
and cool down some. This is going to interfere with doing laundry,
Tuesday, 4 June 2002
# 8:10 PM
Discovered today the lovely Russian
Tea HOWTO, buried in the Linux
HOWTOs collection. They've taken it out of the official bundle,
so here it is for your amusement.
# 4:10 PM
I cannot find anywhere that sells organically-grown white sugar,
or even brown sugar. All there seems to be is "evaporated cane juice,"
which tastes quite strongly of molasses, much more so than brown sugar.
It's not a bad taste, but even so. Why shouldn't there be people out
there who want to buy sugar without pesticide residues in, but still
refined — say, for use in recipies where molasses is inappropriate?
I would like to be anti-war and pro-Israel at the same time. I don't
think this is too much to ask. Yet somehow, all the local anti-war
protesters are thoroughly pro-Palestine, to the point where one suspects
them of outright anti-Semitism. I can't countenance that.
Furthermore, my own opposition to the present war is based
entirely on my opinion that it's not going to help any. We may or
may not have succeeded in removing a despotic government from power
in Afghanistan; it's too early to say whether another one will
replace it. Meantime, we haven't even dented the root causes of
the terrorist problem. If we were doing things that would,
and those things happened to include the use of military force,
I'd support that.
The local anti-war protesters, however, take the position that
War is Bad, end of discussion. Since this is an absurd stance,
it actually strengthens the pro-war position; they can just brush
off more meaningful objections as equivalent to the above.
(When I rule the world, rhetoric will be a required subject in
Here's an article by Paul Berman on the subject of resurgent anti-Semitism
in the developed world.
Sunday, 2 June 2002
# 8:35 PM
Sumana tells me that ska music is simply rock 'n roll with a horn
section, and that often the bandmembers wear suits and ties. I am
Enlightened. I always thought it was much more complicated.
# 1:30 PM
The time stamps are fixed now.
Saturday, 1 June 2002
# 6:45 PM
After five months of bloggery by hand, Ex Bibliotheca is now powered
with a number of personal hacks applied. To do this, I had to change the
base URL; you may have noticed a nasty nag message on the way in, or you
may not have, depending on whether the server redirect is still present.
Please update bookmarks accordingly.
One nice effect of this change is that I can now do like Sumana did, and provide permanent links to individual entries. That's
what the hash marks to the left of each date stamp are. (Sumana
calls them pound signs. The Jargon File entry for ASCII
appropriately points out that
...There are more culture wars over the correct pronunciation of this
character than any other, which has led to the ha ha only serious suggestion that it be pronounced `shibboleth'
(see Judges 12:6 in an Old Testament or Tanakh).
On the down side, all the time stamps are stuck in Greenwich Mean Time
for no apparent reason. I have done the appropriate magic to make them
appear in Pacific time, but it doesn't work. Yet.
I may change software again; Blosxom is nice and simple, but
it's also rather heavyweight - one file per entry, all in the same
directory, and it has to read them all every time you load a
different subset. Also, it doesn't do comments, nor does it
autogenerate the archive pointers for me. However, Apache's mod_rewrite
should mean that I never have to change the URL again. (Famous