by Joel Aufrecht 11:03 AM, 29 Sep 2003
QUESTION: Has the President either asked
Karl Rove to assure him that he had nothing to 
do with this; or did Karl Rove go to the 
President to assure him that he --

McCLELLAN: I don't think he needs that. I think 
I've -- and I've spoken clearly to this publicly 
that -- but it's -- yes, I've just said it's -- 
there's no truth to it.
Categories: Comments (0)
by Joel Aufrecht 09:32 AM, 27 Sep 2003
A mere two weeks after a bizarre column about our enemy France, where I couldn't tell if he was writing parody or straight prose, Friedman makes a very valid point with stunning clarity:
The U.S. war on terrorism suffered a huge blow last week — not in Baghdad or Kabul, but on the beaches of Cancún.

Cancún was the site of the latest world trade talks, which fell apart largely because the U.S., the E.U. and Japan refused to give up the lavish subsidies they bestow on their farmers, making the prices of their cotton and agriculture so cheap that developing countries can't compete. This is a disaster because exporting food and textiles is the only way for most developing countries to grow. The Economist quoted a World Bank study that said a Cancún agreement, reducing tariffs and agrisubsidies, could have raised global income by $500 billion a year by 2015 — over 60 percent of which would go to poor countries and pull 144 million people out of poverty.

Sure, poverty doesn't cause terrorism — no one is killing for a raise. But poverty is great for the terrorism business because poverty creates humiliation and stifled aspirations and forces many people to leave their traditional farms to join the alienated urban poor in the cities — all conditions that spawn terrorists.

Categories: Comments (0)
by Joel Aufrecht 09:05 AM, 18 Sep 2003
So I was enjoying a pleasant ferry ride: a reasonable number of people in the cabin, enough that it didn't feel deserted, but not so many as to have trouble finding an empty table to spread out my breakfast and newspaper. People were quiet but not subdued, the weather was promising if not actually nice, and I generally felt at peace despite the many transitions in my life at the moment.

Like an idiot, I read the newspaper. These two quotes in particular, both found on page A11 of the 17 Sep 2003 Seattle Post-Intelligencer, I feel compelled to share with you. First, Senator Lindsey Graham, R-SC, opines:

The idea of being able to use a redesigned nuclear weapon to keep a terrorist from hitting us with a nuclear weapon is something we've got to come to grips with because it's part of the war on terrorism."
Let's think about this, shall we? Someone should, because Graham apparently didn't.

Presumable he's speaking of the money the White House and Pentagon want to develop new "bunker-buster nukes." These are small nuclear warheads that can be put on earth-penetrating weapons in order to destroy underground facilities. There are several drawbacks to this research.First, we continue to undermine our position on global disarmament if we spend more money on our own nuclear weapons. Some may argue that "evil" countries like Iran and North Korea won't stop just because we stop, and that is probably true, but it's probably also true that when we build more nukes, they feel threatened and build more nukes. The disparity in our responses to Iraq (no nukes, no threat, easy victory, hence we invaded) and North Korea (nukes, real threat, no prospect of genuine victory, hence we try to pay them off while pretending not to be paying them off, even though that's really the best strategy for the world to pursue, because that was Clinton's strategy and therefore inherently evil and wrong) make it pretty clear to everybody in the world that the only hard deterrent to a US invasion of your country is to possess nuclear weapons.

Notwithstanding the "evil" countries, plenty of other countries, such as the Ukraine, have foregone nuclear weapons, probably because most Ukranians aren't insane. If we want to be safe in this world, we need for most people to be not insane and not provoked to do insane things. US nuclear weapons development provokes people, and could make not-directly-threatening countries continue to develop things, which can then get stolen, sold, or re-purposed after a revolution.

Notwithstanding this political arguments against renewed nuclear research, there's the slight problem that "bunker-buster" nukes can't actually work, as proven by the laws of physics. In brief, a bunker-buster is meant to kill people who are hundreds of feet underground, where any other method of attack would amount to doing an excavation project while under fire from hard cover- ie, many dead people on both sides. First, you drop a bomb on the enemy's dirt or concrete roof. Powered by gravity and being pointy and dense, the bomb digs though the earth. Then a small nuclear warhead detonates, making a crater. The current research involves making better bombs and making warheads that can endure the trip and still detonate.

First problem: radioactive waste. Proponents argue that there won't be any outside the bunker, because the warhead detonates underground. Setting aside groundwater contamination issues, there's the slight problem of the hole that the bomb made, a tunnel which points right up to the air and out which a fair amount of exploded radioactive stuff will presumably jet. You can poke a straw in a water balloon if you want to see how a pressurized fluid reacts to escape hatches.

Second problem: Getting depth. Since earth is big and heavy and dense, explosions tend to go sideways, not down - path of least resistance. (See previous water balloon experiment.) So craters tend to be much wider than they are deep. This means that nuclear warheads don't actually make deep craters. And it turns out that small warheads, the kind that fit on earth-penetrating bombs, the kind that don't trigger Chernobyl-style fallout disasters, don't make craters deeper than a hundred feet or so. Even when detonated underground, so that there is pressure from above, they mostly explode sideways and up. We know this experimentally - there is a section of the US Southwest with an awful lot of shallow craters, surrounded by fences and mutant plants.

So if the explosion isn't going to get you much depth, you need the bomb to burrow a lot. Unfortunately, the physics of pointy things going into big flat hard things ends up putting a limit of a hundred feet or so on depth. Even if you put a rocket on the back of the bomb, it just won't go much deeper. And while not going much deeper, it will pulverize itself, which is bad for delicate machinery like nuclear warheads.

So with all this together, a bunker-buster nuke, which will provoke hostile governments to build more nukes, encourage neutral ones to develop more, discourage non-proliferation forces, and make it more likely for nuclear weapons to be actually used, thus making it more likely for bigger nuclear weapons to actually be used, will destroy enemy bunkers down to 200 feet or so. This is the power that Graham thinks will somehow keep a terrorist from hitting us with a nuclear weapon. That's right: they won't nuke us, because we'll be able to blow up their shallower caves, if we can find them.

And also I am starting to wonder, how many more years will it be before people will stop ending sentences with "... part of the war on terrorism?" It took a decade or more for people to abandon the war on alcohol, but that may not be a useful data point because my question is linguistic: the 18th Amendment doesn't actually say "war on alcohol"; you don't really hear about the war on poverty any more; we're still talking about the "war on (other) drugs" decades after it became an obvious failure. I'm guessing we get to play "war on terror" for ... 20 more years?

(Look up Ted Postol if you want to read more on bunker busters and why they can't work.)

The second quote I want to share with you needs no analysis; it stands quite well on its own as a statement of monumental idiocy:

I think the real problem is politics. We can manage our forests and we must manage our forests. The truth is, some in the opposition think the forests can take care of themselves (and to) just let them be. -- G.W. Bush
Categories: Comments (0)
by Joel Aufrecht 11:11 PM, 09 Sep 2003
First, a random observation: If you want to know what life would be like in a world with unchallenged vampires, try borrowing a bicycle without running lights and then being told that the fine for being out at night without proper lights is DKK500 (about US$70). Suddenly the exact timing of dusk and sunset become important factors in your evening plans.

The job offer in Copenhagen was always a one-month trial, so I had a one-month ticket. It was obvious within the first week that we had a good fit, but I still had a relatively unchangable return ticket, and also a lot of unfinished business in Seattle. When I left, I was overseeing renovation of my parent's island cabin, which had a rotten bathroom floor from the Eisenhower administration. (No, really. They used a lot of newspaper for insulation, and one headline wrapped around the shower drain pipe said something about Ike sending ships to Indochina to help the French.) And the bathroom was part of the new wing of the cabin.

Scandinavia, charming as it is, can wear thin after a while. There seem only to be about four basic Danish faces, and while a year of China has simply made me hunger to hear Mandarin - especially I love to eavesdrop, even though I can only understand about ten percent, so I if I were reporting back to the CIA my transcipts would read,
A: No, I don't ... ... ...
B: Do you ... ... ... food?
A: Today ... ... ... ...
B: ... ... ... bathroom.

- but a month of Danish and I'm already filing it in the lower half of the beautiful-languages league table. Anyway, although I'm in a groove at work and making minor progress apartment-hunting, I want to take care of stuff at home. Now that the contractors have finished the floor and put in the new water heater, I can wrap up the easy stuff like painting and flooring, and find a new rentor who might pay enough to cover the taxes. And collect my bicycle and music hard drive. Though I fear I've already set my self up for another ordeal: Round trip from the West Coast to Copenhagen for Oct-Dec is US$2500. If I go for one month, it's $600, but that doesn't help me. But, it turns out, I can go to London for 3 months for $600. So I have a round-trip ticket from San Diego to London Heathrow, and a one-way ticket from London Stamsted to Copenhagen for 30 pounds. Of course, Heathrow and Stamsted are something like fifty miles apart, and the shuttle bus web site actually says something semantically equivelent to, "Our shedules (so to sic) are a total joke, you silly wanker" so I've alloted six hours to that leg of the trip. And I'll have my bicycle as emergency fallback. Oh, yeah, so now I'm looking up the bicycle policies for Southwest, United, and easyJet. But it will all be worth it, I keep telling myself, when I casually pass not only the commuter Danes, but also the hard-core spandex-clad messengers on real bikes with real derailleurs. I've been bicycle-commuting in Seattle, and they live in a flat country. (In reality, I frequently get overtaken by little old (blonde) ladies on pseudo-Schwinns. But, thanks to China training, I now give elbow as good as I get against all ages and infirmities when boarding buses and trains. But the Danish messengers don't look like much compared to Seattle's tattooed downtown bicycle messenger corps. I bet hardly any of the Danish riders even have social diseases.)

The first big wrinkle in my plans was the email from the contractor cheerfully announcing that not only were they over budget (not technically true, I guess, because I screwed up and didn't set a ceiling) but were an entire (expletive inserted by me and then deleted) month late because we needed a custom shower stall. Well, no, we had a shower stall, the old one, and it was profoundly dirty and probably easier to replace than clean - unless it turned out to be a custom size!! I would think that a month delay and unknown dollar increase would at least prompt a heads-up email, but then again I'm in the software business, where we perpetrate far worse every day. But then again again, commercial software development is a few decades old, whereas we've been building houses for profit for maybe a bit longer?

So, because the shower stall wasn't there, they didn't finish the electrical and can't do the floor. Since they can't do the floor, they can't paint yet. Since they can't paint yet, they can't put the toilet back yet. (I guess we'll get to find out how much a month of Honey Bucket rental costs.) So I'll be reverse-commuting from friends' apartments in Capitol Hill out to the cabin for a day at a time until it's liveable, at which point I'll have to go back to Denmark. And I'll be trying to work part-time during this, over a modem.

So this has set my mood for the flight back. Then I find out that the flight I remember as a 10 am departure is actually noon, so I've got extra time to kill in the apartment, my third in a month. This one I have all to myself, which is good because it's a small apartment; the owner has gone to Bulgaria for a week. Meanwhile I've managed to partially clog the shower drain, which upon inspection is a hole in the floor leading to a pipe that goes straight down for an undetermined distance. So I can take feeble showers or I can swim. I am of course mortified to leave the apartment in this condition, but the pipe is at least a foot straight down, so I can go shopping for coat-hangers or I can go shopping for toxic drain-cleaning products labelled in a foreign language. I do neither, ultimately; instead, I apologize in a note so that it won't be an untimely surprise. Surely she will have a tried-and-true solution. And she doesn't know the previous landlady to warn her - the previous landlady (the new-age hippy who's owned her apartment for over two decades) and I got on well enough that she invited me to stay there again, at a much lower monthly rate, when I got back if I didn't have a place, and this is my fallback if there is a snag in negotiations with the prospective new landlord I met the night before I left, who has a perfect sublet walking distance from the office but wants a half the rent off-contract - wants half-rent for twelve months in advance, in cash. Um, yeah. The Danish Kroner isn't worth too much more than a Chinese Yuan, but I'm being paid ten times more per month - and everything, housing included, is at least ten times more, so we're talking real money now. I'll email back a counter-offer and see what she says.

Anyway, I have time to kill, but I have very efficiently left my power adapter plug at the office, so I just go to bed early and wake up early, saving both laptop batteries and my new books for the flight. Since I don't have an assigned seat, I figure that getting to the airport three hours early will be a good thing. And mass transportation to the airport takes $3 - one bus and one train, totalling four zones, or two punches on my two-zone card - and well under an hour.

I don't know which was a weirder sight: the Boeing 737 in Aeroflot livery, or an identical place at the next gate from Estonian Air. Estonia is almost adjacent to Finland. Peter says that Swedish is the most beautiful language, except maybe for Norwegian, which always sounds happy; Finnish always sounds depressed. Danish is too gutteral for him.

At the airport, SAS is refusing to show checkin information for my flight (and just my flight), so after cooling my jets for half an hour I just go up to one of the thirty counters to try to check in anyway. Naturally I've picked a short line. Naturally I've picked a line with exactly one family in it, a family with two cats. Ten minutes later, they're finished, and I check in. But still no seat assignment. (I've had the ticket for four months now; I couldn't get a seat assignment when I bought it through Travelocity; I couldn't get a seat assignment when I checked in to Alaska in Seattle, I couldn't get a seat assignment when I inquired at the SAS desk at the airport in Copenhagen after arrival. I go to the gate and of course there isn't anybody at the desk - it's almost two hours before checkin. It's early in the morning, but I feel my buddha nature slipping away.)

Then we're all hearded partway back up the terminal for a security check. There are signs on the walls everywhere in Copenhagen airport (a lovely structure marred only by its stench, which results from the European insistince, shared by almost all civilized peoples except the Californians, of permitting - almost demanding - smoking in all public and private areas. Yes, please, I would like your stinking poisonous gas in my face. Please, impregnate my clothes too. When this decrepit guy at the laundrymat took time out from scoping the girls to light up, I almost cried. Even when I go to wash the smell from my clothes, this is not permitted? You have a long way to go, Europe) warning that there are no gate announcements. What this means in practice is that there are still loud, intrusive announcements in two or three languages every several minutes, but instead of a few of them being relevant, none of them are. Unless you are passenger mumble mumble on British Airways, in which case you should proceed urgently to gate C14.

So SAS has taken this new policy to heart, and now communicates to its passengers by having someone murmer quietly to one or two members of the crowd, relying on the speed of rumor. So we were herded out of the gate area, into a non-line in the wrong place, and then into a line several feet away from the first line, and then Newark-bound passengers were seperated from Dulles-bound passengers, and then it was let slip that those of us without seat assignments should be at the other counter. The one that won't open until an hour before scheduled departure. Well, we wouldn't want to take some Scandinavian Air Serviceperson from their morning Weinerbrod and cigarette. In case you haven't noticed, I've developed a serious antipathy to SAS employees, who to a woman seem to be arrogant jerks unhappy to be forced to deal with actual paying masses. Perhaps they'd rather be out designing mobile phones or furniture or something.

Anyway, after handing over my ticket and asking for the worst possible seat just so that I wouldn't have to wait, I had to wait for forty-five minutes and ended up with a window seat. If you think I got my vegetarian meal, you would be wrong. I put the pork patties into the coffee cup and ate the veggies and the cake. Already I'm feeling much better about this EasyJet leg to my next Copenhagen trip. As I told my seatmate from Clairemont (SD, not LA), when she expressed frustration over our additional half-hour delay once on board while they searched for incorrectly routed luggage in the hold that turned out to never have been loaded in the first place (the sort of situation that makes you wish they'd just lied and said that one of the wings had cracked a bit and they'd had to add more duct tape, because then you wouldn't mind the delay so much), "At least with EasyJet you're not paying for the service you're not getting."

Dulles was fine - I gorged myself at Friday's, believe it or not, on cheese sticks and a bbq garden-burger plus sweet 120V from a conveniently located outlet for the ThinkPad. When I asked a guy behind a desk if the mailboxes at Dulles were past security or before security, he said they had ripped out all of the mailboxes and he actually sounded upset about it. So I asked him if he would mind mailing my postcard and he said sure. Then I said people were much nicer at Dulles than Newark.

Things really turned around on the journey when I picked up a new book. I had gotten a heavy paperback of Godel Escher Bach, which I hadn't really penetrated when it was handed to me at a ludicrously improbable age (thanks for the vote of confidence, dad), and a light sf/fantasy short story collection by an author I whom I had liked in collaboration ten years before. This latter choice was an obvious mistake in hindsight, and I left the book mostly unread on the airplane. But in Dulles, I picked up "Lies and the Lying Liars Who Tell Them." I've often found Al Franken unfunny in the past; unlike people like Mike Myers, who seem funny even when they aren't, and Jon Stewart, who isn't innately funny like Mike Myers but manages to always pull something funny out of his ass, when Al Franken isn't funny he has nothing to fall back on. Happily, that isn't a problem with this book because he's always funny. I've been biting my hands to stop laughing so loudly that I annoy my cabinmates. If you want to know the basic facts of how extreme the radical right is and how extensively it's penetrated and captured the mainstream, but you don't want to be driven suicidal or homicidal in the process, read his book. It's clear, actually researched, and after Franken writes something especially inflamatory, such as a chapter detailing Clinton's extensive antiterrorism project (a Reagen administration counter-terrorism ambassador says in 2000, "Overall, I give them very high marks. The only major criticism I have is the obsession with Osama, which made him stronger) and the Bush administration's stunningly complete abandonment of policy, which including everything from inattention to abandoning already drafted anti-terrorism plans to outright budget cuts, and was naturally followed by reality-inverting blame for Clinton, he follows with a nice tension-reliever like:

But, you know what, I don't want to get into a whole partisan politics thing here. Not in this book, anyway. We'll save that for my next book, I Fucking Hate Those Right-Wing Motherfuckers!, due out in October 2004.

And then, as we were chasing the sunset and losing (as a bit of geometry and a calculator and the knowledge that the earth is basically spherical and 8000 miles in diameter and rotates every 24 hours, jets fly at about 600 mph, and our route was at about 45 degrees longitude will tell you we must) a very nice Alaskan Airlines stewardess handed me a tray, asking, "You had a vegetarian meal?" And right on top of the rice and the brown sauce were big cubes of shiny white tofu. Bliss! I had a huge grin and I got my travelling chopsticks from my bag and ate it all and read Al Franken and tried not to laugh tofu up my nose

Categories: Comments (1)
by Joel Aufrecht 12:41 AM, 08 Sep 2003
After reading dozens of [Paul Krugman] columns you start to hunger for something more in-depth that might answer the central political problem of our era: With so much to get mad about, sitting in broad daylight, why hasn't America risen in rage?

... The story of mainstream America's failure to understand the radicalism of the Bush/Cheney Republican regime, Krugman argues, echoes Kissinger's account of the difficulties Old Europe faced in recognizing the rise of a "revolutionary power" that did not play by its rules and that did not acknowledge its legitimacy. Turning Kissinger's geostrategic diagnosis inside out, Krugman casts Bush, Cheney, Rumsfeld, Rove & Co. as today's Jacobins and Napoleons, determined to upend the status quo of American democracy and slaughter its sacred cows -- like a tax-supported social safety net, civil liberties, electoral norms and international cooperation.

Categories: Comments (0)
by Joel Aufrecht 11:31 AM, 04 Sep 2003
After watching National Review's preppy editor Rich Lowry denounce the Democrats on C-SPAN for "sissifying" and "feminizing" politics, Franken calls him up and challenges him to a "Fight Club"-like mano a mano in his parking garage. "I'm 50 and have a bad back. But I think I could take you," the humorist tells him. A flabbergasted Lowry asks to sleep on it, but then wimps out the next day when Franken calls him again.
Categories: Comments (0)
by Joel Aufrecht 11:13 AM, 04 Sep 2003
[Seven factors that have historically led to the commission of war crimes:] (1) high friendly losses; (2) high turnover rate in the chain of command; (3) dehumanization of the adversary; (4) poorly trained or inexperienced troops; (5) the lack of a clearly defined adversary; (6) unclear orders; and (7) high frustration level among the troops.
“Doctrine for Joint Urban Operations,” by U.S. General John Abizaid.

Unlike Tommy Franks, the general whom Rumsfeld befriended and who won the war and left a disastrous peace behind as he went home to retire, Abizaid looks like someone who should be in charge. Happily, he is. Sort of.

Categories: Comments (0)
by Joel Aufrecht 01:14 AM, 04 Sep 2003

A computer program is a set of explicit instructions for producing outgoing data as a result of incoming data. A computer can be a machine or a living thing. A small child rigorously indoctrinated by nuns in the basics of arithmatic could be a computer: the child can take as input a sequence of addition and subtraction programs and produce as output answers. However, the process of programming the child is inefficient and the program is generally not extractable from the child, so we would not think of children as useful programmable computers. Instead, a useful programmable computer can accept and execute a variety of different programs.

An executable computer program is a set of instructions that can be used in its current format by an actual computer. A book of arithmatic written in Basque is not an executable computer program for a typical child from Australia. Nor is a stack of IBM punch cards an executable program for a modern IBM Thinkpad laptop computer. Because most modern computers are binary digital computers, executable programs are typically sequences of binary data.

To be digital means to input and output and use internally digits, specific and invariant values. If the value of an input is continuously variable then the signal is analog. For example, if a signal is transmitted as a blow to the head, and the value of the signal is the amount of pain that it causes, then the signal is analog. The Second Law of Thermodynamics, the one about entropy, dictates that analog signals cannot be transmitted perfectly. For example, if you receive a blow to the head you cannot pass on the exact value of that signal - you cannot strike someone else, or even yourself, with exactly the same amount of force nor cause exactly the same amount of pain.

The magic of digital computing is that we can use analog devices to create a digital system. To do this, we define several values along a continuum, and round the analog input to the nearest value. If the typical variation is much less than the space between the intervals, the digital information is reliably transmitted. For example, we can define two signals in our system of blows to the head - painless and incapacitating. If each transmitter strikes with either as much or as little force as possible, but not at any force level inbetween, then it is easy to determine the value of the system at any point simply by examining the condition of the next recipient and rounding up or down. Because there are two possible values, the system is binary. And even though each transmission, each blow to the head, is an analog event, the system is digital because the digit is always one of two values, either unhurt or lying on the floor bleeding. All that is required for the system to be reliable is that no transmitter ever strike merely a glancing blow.

This system of course presents certain physical and ethical complications, and so modern computers instead use levels of voltage in a wire as their digits. In a five-volt system, a level close to zero volts is a value of zero and a level close to five volts is a one. A system with values of two or three volts is defective and should be returned with the receipt for a refund. (Aside: The clock cycle on a modern computer - for example, 1.5 Ghz, is the frequency with which this value can change and still be accurately detected. A 1.5 Ghz - gigahertz - computer changes the values in its wires 1,500,000,000 times per second, and so can do 1.5 billion calculations each second. Or rather, can pass values around 1.5 billion times per second. A value may need to pass through several or even dozens of logic gates to complete a calculation.)

The advantage of a digital system over an analog system is that it is precisely reproducible. This means that perfect copies - of data or of programs - can be made even though no single part of the system is perfect. While errors are always possible in any system with a basis in physical reality, the possibility of an error can be made arbitrarily close to zero through redundancy. If three digital copies are compared, at least two copies will always agree for any given digit, and the chance that two of three digital copies are wrong is much smaller than the chance that a single copy is wrong. But if three analog copies are compared, such as three phonograph records, at any given point there will always be three different values. So combining digital copies produces dramatic improvements in reliability whereas multiple analog copies produce much smaller benefits.

Modern electronic computers use binary digits, though more for historical reasons than laws of nature. We can easily imagine a digit with three values - a trinary system. In our blow-to-the-head system, for example, a value could be painless, incapacitating, or lethal. In our counting system, each digit has ten different values. Our genes are encoded with a quaternary system - each DNA digit consists of one of four different basepairs. While individual DNA strands decompose more or less continuously, systems of self-repair work fairly well - our bodies contain digital sequences that are precisely identical to sequences in organisms that diverged genetically from us millions and even hundreds of millions of years ago - strong evidence of both the copyability of digital information and the power of biology.

In order for a binary computer to execute a program, the program must be presented to the computer as a sequence of binary values. Early programmers did indeed write programs as sequences of ones and zeros - computers were programmed by flipping toggle switches up and down. Sequences of ones and zeros, when properly manipulated by computers, can be construed as instructions. This occurs through means that I won't detail here in large part because I don't remember or haven't learned them, though you can look up a dead British gentleman for proof. An instruction might be, "take two input digits, and if both are 1, output one. If both are 0, output zero. If one is 1 and the other is 0, output 0." This is called an AND, because it outputs 1 only if its first AND second output are 1. A startlingly small collection of these needlessly capitalized functions, such as OR and XOR, are in fact adequate building blocks for a staggeringly large set of computations, including everything that happens on your computer today. The majority of computers today are Turing computers, because their functions can be mathematically decomposed to a Turing State Machine, essentially the simplest possible binary computer.

Despite the popularity of the toggle method of programming, the majority of programming is done with abstractions called High-Level Languages. Instead of describing a sequence of binary operations to combine two numbers, including all of the logic necessary to convert numbers from human-input decimals to computer-readable binary values, and to handle values larger than 0 and 1, and to handle the possibility of negative numbers, and to handle the possibility of receiving as input something intended to be interpreted as a Japanese word for fruit instead of a number, a programmer writes something like "a = x + y".

While programmers write in high-level languages, this code must ultimately be converted into binary instructions so that they can be processed by the computer. This conversion is naturally performed by other programs. ANDs and ORs, although technically programs, are generally realized as transistors or combinations of several transistors. They are thus hardware programs - programs that are physically, permanently encoded into electronic computers. Computers have at least one more level of abstraction, called microcode. This consists of a few hundred more sophisticated instructions built from the logical functions. A typical microcode instruction might be, "Remember this number x until someone asks for it again, then forget it".

The collection of microcode instructions, called an "instruction set," is what defines a processor platform. In a typical situation, a programmer will then write a program, that is, a precise sequence of instructions for converting input values into output values, using this instruction set as a sort of alphabet. If the input is connected to, for example, an electric sensor, and the output to a motor or loudspeaker, the computer is now a kind of robot, perhaps an automatic door or a CD player. Once the program for this kind of computer is finalized and tested, it is permanently etched into a computer chip (a process that is much cheaper in bulk). This is called an embedded computer. Embedded computers make up the overwhelming majority of computers, somewhat reminiscent of the way that bacteria make up the overwhelming majority of life.

Desktops computers, however, are general-purpose programmable devices, and so must accept a variety of different programs. The lowest level of such a program must correspond to the underlying instruction set of the processor. The computer that is a 40 Mhz 80386 microchip from 1991 uses the same instruction set as the 4.77 Mhz 8086 chip in an IBM PC, and this is the same instruction set that a 1 Ghz Pentium III or Athlon uses. While an Athlon has hundreds of times more transistors than an 8086 and a radically different internal architecture, it still presents to the world essentially the same instruction set, called the x86 instruction set, as the original 8086. And thus programs which could be executed with an 8086 can also be executed, substantially faster, by an Athlon.

Such a program could not, however, be executed by the 6502 microchip in an Apple II. The 6502 instruction set is different from the x86 instruction set, and also different from the 68xxx instruction set in the 68000, 68010, and so forth, used by Apple Macintosh computers. And even though the NeXT computer uses a 68040 chip with the same instruction set as a Macintosh, Macintosh programs will not execute on a NeXT computer. The reason for this is the next level of abstraction, the operating system.

The operating system is a program that translates between the hardware and the rest of the software. In addition to the microchip that is the heart of a typical computer, other pieces of hardware, such as a video display chip or a hard drive, also contain microcode. In a desktop computer, the operating system converts the instruction set that the hardware understands to a more abstract, more universal set of functions. The operating system is an architectural convention, and other computers, such as the one in a CD player, wouldn't necessarily have one. In fact, the entire program for a CD player would typically be permanently etched into hardware in the form of a custom chip. A desktop computer, however, is a general-purpose computer and therefore needs to be able to accept different programs.

Recall that a computer program is a precise list of instructions to convert input into output. And recall that most programmers, even those working on embedded systems without sophisticated operating systems, do not write their instructions as sequences of binary digits or simple logic commands, but instead use high-level languages, producing lists of instructions called source code. There are several ways to convert source code into machine-executable programs. One is called compiling. When a program is compiled, another program called a compiler examines the source code and converts it into list of instructions that can be directly executed by the operating system or by the microcode in the chip. This new list of instructions, comprising mostly binary digits, is a binary executable. A binary executable is specific to a particular operating system, and so a binary which was compiled for Windows 3.1 cannot be executed by an Apple II. Sometimes such a binary cannot even be executed by a computer running Windows 3.0, because the different versions of the operating system are not very compatible.

Early computers were sold as hardware, with the software necessary to make them function included without additional charge much in the way that engines are included without additional charge in automobiles. This software was provided both as executable binaries and as source code. While Microsoft did not pioneer the practice of charging for software, they were the first to create a mass market specifically for software. When you buy a Microsoft program, you are buying a binary executable specific to some version of a Microsoft operating system, or sometimes to a Macintosh operating system. Eventually the operating system changes, and you are forced to buy new programs. While Microsoft is quite happy with this arrangement, many developers in the 1960s and 1970s who had not yet realized or were not personally attracted to the benefits of commercial software were troubled by the lack of portability of programs. They felt that a program written for one computer should be usable on another computer with a different instruction set or operating system.

The C language was the most successful attempt to accomplish this. A program written in the C language can be compiled on for any operating system that provides a specific minimum set of functions. The problem is that this minimum set is quite small, and the set of desirable functions increases as new hardware is invented and new uses are conceived. For example, a scanner must be controlled with a different set of functions than a printer.

In addition, programmers are deeply committed to the concept of code re-use. For example, a programmer may need to sort a list of word alphabetically. Because this is a very common need, the program to accomplish this has almost certainly already been written. These collections of programs that aren't directly useful in isolation but provide reusable functionality for other programs are called libraries. Depending on her mood and time to deadline, a programmer may find a library containing the sorting function she needs, or simply write a new sorting function and make it available as a library to others. Programmers love to write sorting functions.

An modern operating system thus consists of a kernel, which primarily handles coordination between other programs and between software and hardware, and many libraries. The Linux kernel in isolation is useless; the thing called linux which is compared to Microsoft Windows is actually the linux kernel packaged together with many libraries and other programs. The programming language C has accumulated a library called libc which provides many basic functions such as square roots. A typical linux distribution has hundreds of libraries, many of them quite obscure and only used by one or two programs - this occurs when a developer becomes convinced that her sorting function's 1% speed improvement and built-in support for French will compell all other developers on the planet to abandon the twenty years of testing and improvement represented by the standard library's sorting function and instead recode their programs to require her library instead.

Issues of both commercial greed and individual ego led to a web of incompatibilities in the Unix C world. In many ways these exceeded even Microsoft's wretched history of library incompatibilities, a history both exemplified by and climaxing with ODBC, version 2.5, I think, which in the summer of 1998 was available in three different, mutually incompatible versions distributed with three different Microsoft products by three different, rival Microsoft internal groups, such that installing any one of the products would tend to silently and untraceably break any program by any company that assumed the presence of one of the other two versions. I am not making this up - I experienced it first-hand and later heard the story from a Microsoft insider.

And so many people gave up on the idea of portable C programs that could be compiled on different platforms. Java is an attempt to solve this with another layer of abstraction. Instead of compiling source code into binary code and then passing the binary code to an operating system, Java interprets code. This means that Java code is converted to binary code as it is used, by a Java interpreter that knows both Java and a specific operating system. In theory, this means that a Java program can be executed on any computer for which a Java interpreter exists. In practice, this means that Java is too slow to be pleasant for many uses.

While Microsoft suceeded with commercial distribution of binary-only software, and the rest of the industry followed, some people rejected the concept. The open source and Free Software movements believe that software should be distributed both as binary executables and as source code. Since computer software is digital information, and digital information can be copied reliably and without significant cost, an alternative economy is possible. Instead of giving money to a software developer in exchange for an single copy of a program, a user can contribute her own work to the community in umetered exchange for other people's work. Because of the negligable cost of duplication and the distributive power of the network, this kind of system can support an incredible number of freeloaders. To date, open source development has been powered in large part by personal contributions of code by individuals who receive emotional satisfaction rather than money for their work.

Open source requires the distribution of source code as well as binary executables because source code is more amenable to modification and re-use. When source code is available, a user can change the behavior of a program simply by learning the fundamental principles of computer programming, learning the language of the program, obtaining and configuring the development environment of the program, modifying the program's source code, compiling or interpreting the source code, determining why the modifications failed, and repeating until satisfaction is obtained. Unfortunately, this is not as easy as it might sound to most computer users, and so the number of people actively contributing to open-source projects is quite limited relative to the total pool of computer users.

The Free Software movement, which predates the open source movement and terminology by over a decade, has almost identical practical goals, and thus the two movements have developed a bitter ideological rivalry. The Free Software people believe that the distribution of binary-only code for profit is innately immoral because it restricts the freedom of computer users, and thus should be eliminated. Source code distributed as Free Software is licensed such that a user has complete freedom to use the program, except that they cannot redistribute the program or a modified version of the program without also making the source code available without charge under the same license. Note that Free/Open Source code is still copyrighted by its authors, who then use their copyright power to enforce the license.

I maintained platform and license agnosticism for my first decade of computer user. While I had preferences, including devotion to OS/2 until well after Windows NT had surpassed it in many ways, and a general distaste for the faith-based assertions of Macintosh usability that seemed to cause followers to forget the fact that Macintoshes crash even more frequently than Windows computers, I refused to categorically rule out any company or operating system. I abandoned this position in 2001 for several reasons. I felt Microsoft's general practices, in additional to being illegal, had crossed the line to establish a "with us or against us" situation. I found the rationale behind Free and open software compelling. And I was installing a new computer in China, where I had access to English-language linux distributions but not English-language Windows.

So I have not used Microsoft software, either personally or professionally, for over two years. This last statement is only 99% accurate - it's virtually impossible to function as a computer professional without encountering and using Microsoft software, if only in net bars and borrowed desktops. As with my vegetarianism, acquired under similar circumstances, I feel that humorless absolutism is tedious for both the bearer and bystanders.

Instead, I have used linux and, to a lesser extent, FreeBSD. (I won't mention FreeBSD further in this essay except to say that the using the installer, even in the latest version, continues to be a less pleasant experience than the proverbial sharp stick in the eye.) Because linux itself is only a kernel, using linux means picking a distribution, a collection of programs dependent on linux in the way that a car is dependent on a motor, even if the motor is unseen. There are dozens or hundreds of distributions floating about, each embodying a different philosophy or profit motive. Several of the most enduring include Red Hat, Debian, and SuSE. I have used Red Hat to varying degrees since 1997.

With this information as background, I want to explain why I spent a reasonably warm and not entirely rainy weekend in Copenhagen beating my head on a metaphorical brick wall at a high frequency instead of touring the city and enjoying the extensive non-metaphorical brick architecture.

Before I do this, however, I want to talk about pronunciation for a minute. The proper English pronunciation for linux, I first insisted out of inarticulate instinct and later had justified for me quite convincingly, is lie-nucks, the first syllable rhyming with pi or pie. Many people pronounce it lih-nucks, using the same short i sound found in "lindy-hop." This is apparently because the Finnish author of linux is named Linus, which he pronouces "lee-nus," the first syllable rhyming with see or be. The anglicized version of Linus, however, is "lie-nus," not "lin-us," and so the anglicized version of Linux should follow suit. I must confess, however, that I can't bring myself to call Beijing "Peking," so expect additional justification at a later date.

Back to our story. While free software is by definition available as source code, it's usually more practical to acquire it as binary executables. This is both because of the chicken-and-egg problem of compiling a kernel without having a compiled kernel and compiler, and because compiling the thousands of programs in a typical distribution can take days. Binary executables are specific both to an operating system and to a particular set of libraries, and so binary distributions are more fragile than source distributions.

Libraries are supposed to be "backwards-compatible," meaning that new versions may add functionality but should behave in exactly the same way as old versions. But this is often not true, because of various tradeoffs in how programs can use libraries, because new functions are radically different, and because developers sometimes feel compelled to make things "better," where "better" is defined very narrowly and without accounting for other human beings - for example, fixing typos after thousands of other developers have accomodated the typo in their own code. This kind of accomodation, called somewhat tongue-in-cheek "bug-for-bug compatibility," is a notorious problem for those who write free software that interacts with Microsoft software - most of the complexity in Microsoft-compatible programs, such as those which open Microsoft Office documents, comes from discovering, mapping, and compensating for inconsistences, errors, and secret variations in Microsoft programs.

Choosing a linux distribution means choosing between source-based and binary-based programs. It also means choosing between philosophies - Red Hat is a commercial company which provides both free and non-free software. Debian is a volunteer collective. Mandrake is French, or it's Red Hat, or both. Nobody outside of Germany knows what SuSE is.

Once a distribution is chosen, it must be used. This generally means picking which of two or three different programs you will use for each function. For example, there are two different major desktop projects. A desktop program provides the glitter and underlying plumbing for the WIMP metaphor - Windows Icons Menus Pointer. As we all know, Microsoft stole WIMP from Apple, who had stolen it from Xerox. WIMP offers the devil's bargain of an easier learning curve in exchange for a loss of simplicity and speed. With WIMP, it's both possible and necessary to get computers to work by fiddling with them for a long time. And linux has two different ones to choose from. Each has a different terminal program, a different control panel, a different help system. There are two dominant text editors. There are three major office suites. There are three major web browsers, one not even free. There are three or four different journalling file systems. The general rule of thumb is that if there are N programs that do the same thing, each one will be 1/N exactly the way you like it, and (N-1)/N intolerably wrong-headed.

Now, you might think that, since it's almost all open-source and there are plenty of standards, you could just modify the source code to mix and match what you like from several different programs. You would of course be wrong. Wrong because, while each program scrupulously adheres to a standard, each program adheres to a different standard. After extensive negotiation and open warfare, the two desktop projects agreed to share a website to host their usability guidelines. Not to share the guidelines themselves, but just to store their different guidelines on a common machine. It is impossible to imagine what compromise programs the machine itself must be running.

Red Hat has improved by a quantum leap with each release. I don't think I ever got version 4 to work. Version 5 was worked but I didn't use it for anything. Version 6 was really coming along nicely. Version 7 would install correctly quite often, and once set up could be used by a normal person. Version 8 was, for someone not already familiar with Windows or Macintosh, no harder to learn. Version 9 is actually pretty.

Red Hat is distributed as a collection of closely correlated packages, so it works quite reliably. Red Hat is distributed as a collection of closely correlated packages, so it is often gratuitously difficult to upgrade. Each package has a list of other packages that it thinks it needs, and sometimes this list is wrong. Or needlessly specific. Or one packages will need a specific version of a second, but a third package will need a different version. Most frequently, one package requires a second, which itself requires two others, each of which require one or two more, which then requires one more. Yes, this process of discovery is manual and every bit as much fun as it sounds. There are several automated tools, but they don't work. So you get a very slick and stable system just by putting in the CDs - it's simpler than almost any Windows installation - but upgrading it later is quite a bother.

Because of all this, when I needed to install a new, bigger hard drive, I decided to try Debian again. I've tried it in the past and given up, because, if the installer isn't quite FreeBSD's sharp stick in the eye, the stick's still pointy at best. But Debian offers a packaging system which is, in theory, extremely slick. The computer is given a list of servers which contain packages. Each package has information about its dependencies. The magic happens when Debian's installer tries to get a package. If that package has dependencies, the installer will get those packages too. If they have dependencies, the installer will get those as well. It will keep doing this until both it and the packages are happy, and you don't have to watch any more closely than you want. All you have to do is type a command and the name of the package you want. After you've figured out that you want a package, and what its name is. Then you come back in a few minutes (hours, if you are on a modem) and it all works. Or it doesn't, in which case reconsidering your original goal may be more fruitful than trying to fix the package system. Debian seems to typify linux, in that most things just work perfectly but those that don't generally aren't worth the bother of trying to fix.

The big plus of Debian is that, when you hear about a cool new piece of software, you can just type in one line and the software materializes on your computer. Once you've used it and decided that it sucks, you can remove it from your computer just as easily. For those of us addicted to the pointless rush of trivially improved software on a daily basis, hey, at least it isn't carcinogenic. FreeBSD takes the package system to the next level - source code. You identify the package you want, and issue a command. The computer retrieves the source code from a predetermined location. And the source code for any other programs, and so forth. Then it compiles all of the necessary programs, and installs them. In exchange for this power, the installer is the worst, most user-hostile, trap-laden villainous installer I've ever seen, barring of course the Oracle installer which is simply a cruel and unfunny practical joke.

The minus of Debian is that it doesn't have nearly the polish of Red Hat. And I wasn't very familiar with it. So in order to reap the theoretical future benefit of easy upgrades, I spent pretty much the entire weekend in the office cursing and banging the table trying to get the computer to do something that I felt it should already do but couldn't articulate in language it could understand. The only other thing I did all weekend was go to a jazz club and watch Danes swing.

To summarize, in descending order of pain:

  1. Oracle installer
  2. (tied) sharp stick in the eye
  3. (tied) FreeBSD installer
  4. pointy but dull stick in the eye
  5. Getting Debian to do something it doesn't want to do (like install)
  6. blunt stick in the eye
  7. (tied) upgrading Red Hat
  8. (tied) no stick but hot smoke in the eye
  9. some dust in the eye
  10. the sensation you get when you bite into a York peppermint patty
  11. (tied) Red Hat installer
  12. (tied) Upgrading Debian
Categories: Comments (0)
by Joel Aufrecht 01:04 AM, 04 Sep 2003
I went with Simon and Peter and Simon's younger brother (who has a fundamental Simonescence such that he is easily mistaken for Simon even though he doesn't actually look very identical) and Simon's cute blonde friend from high school to the Copenhagen Jazz club to catch the Swing Slingers. They were extremely good - very tight, especially the six-piece horn section, and the drummer was dead-on without being flashy. The lead singer introduced each song in clunky, Euro-stiff Danish, jumped up and down awkwardly, and then did full vocal justice, in English, to standards like Minnie the Moocher.

We went early for the dance lesson, but when I saw that everyone else was quite well-dressed I took my excuse to head home to change - I was still in swea pants from doing laundry in the morning, where a woman helped me negotiate the automated machines and I played peekabo with the roller baskets with her her toddler daughter (we traded keys and pocket change and she took me for a Kr1.50) and was then interviewed as material for a short film competition on the topic of Tolerance, and then spending the entire rest of the day in the office messing with my computer. So I came back before the main show started, and I was looking all around the main square for an open coffee shop and didn't see one, so when I walked in the lobby and saw a full bar with espresso machine I knew it was a sign, and got a hot chocolate and sat by the door to watch the Danes filter in. This activity felt very hip at first but when no Danes filtered in for quite some time I started to feel stupid. But then this perfectly dressed guy came in - a peach suit with long jacket, dark solid shirt, nice tie, and matching fedora, and he looked good. He hung out with the band, most of which was sitting by the bar. This other guy came in with a baseball cap and orange nylon jacket and nylon pants, and I felt that maybe I could have worn the sweatpants after all.

Later, it became obvious that two guys on the dance floor were clearly several levels above anyone except this one girl wearing a hair net and reasonable approximation of a flapper dress. One was the guy in the peach suit and the other was the guy in nylon. He danced so well, and was so perfectly built, that he managed to make a fitted black baseball cap worn low over the eyes appropriate garb for swing dancing. Peter, meanwhile, our tall, crewcut blonde Swede, was quite a good dancer but in his black shirt and tight jeans looked like he belonged in a country-western line dance.

Categories: Comments (0)
by Joel Aufrecht 09:21 AM, 01 Sep 2003
There's an anecdote about Donald Knuth, the famous computer scientist who invented scalable fonts. When a new edition of an early book in his series came back from the printer, he was upset by the degraded appearance relative to the earlier hot-lead editions. So he spent ten year inventing scalabale fonts - fonts that are described as vectors so that they can be made arbitrarily larger or smaller and still look good. The story goes that, after years of work, he actually printed out a book using this new technology, and it looked like crap, as most new technology does. And he turned to a bystander and said, "isn't it beautiful?" Because he saw it as it could and would be, not as it actually was.

My question is, when this guy here wrote this Emacs manual, what exactly was he picturing when he wrote elegant?

You might do this by manually editing the file, but Emacs offers an elegant method to change some (but not all) settings in this file, and I describe this modification as an example. Start Emacs from the start menu. Use the Help|Customize|Top-level customization group menu command to start the customization. Locate the Environment group and jump to it by clicking on the [Go to Group] button next to the Environment group. Locate the Load path entry and fold out the values by clicking on the [Show] button. Make sure that the subdirectory site-lisp is listed. If this entry is missing, create it by clicking on the [INS] button at the end of the list. Click the [Current dir?] button and select "Directory". Then enter the full path, e.g. C:\Programs\emacs2031\site-lisp. Save this setting by clicking on the [Save for future sessions] button on top of the Environment group.
Categories: Comments (0)
by Joel Aufrecht 01:04 AM, 01 Sep 2003
A phrase I've been reading a lot, both in emails and in published work, is "I guess I've been naive but ...." While I think it's possible to simply become a complete partisan and assume that everything Bush (or whomever your chosen "enemy" is) does is wrong, what if his team really is that dirty?
As May was drawing to a close, his manager told him that someone from the CPA wanted the company to estimate the building costs of replacing the New Diyala Bridge on the South East end of Baghdad. He got his team together, they went out and assessed the damage, decided it wasn’t too extensive, but it would be costly. They did the necessary tests and analyses (mumblings about soil composition and water depth, expansion joints and girders) and came up with a number they tentatively put forward- $300,000. This included new plans and designs, raw materials (quite cheap in Iraq), labor, contractors, travel expenses, etc.

Let’s pretend my cousin is a dolt. Let’s pretend he hasn’t been working with bridges for over 17 years. Let’s pretend he didn’t work on replacing at least 20 of the 133 bridges damaged during the first Gulf War. Let’s pretend he’s wrong and the cost of rebuilding this bridge is four times the number they estimated- let’s pretend it will actually cost $1,200,000. Let’s just use our imagination.

A week later, the New Diyala Bridge contract was given to an American company. This particular company estimated the cost of rebuilding the bridge would be around- brace yourselves- $50,000,000 !!
Riverbend (A little bit about myself: I'm female, Iraqi and 24. I survived the war. That's all you need to know. It's all that matters these days anyway.)

Categories: Comments (0)
XML

Archive

September 2003
S M T W T F S
  1  4 
8  9  10  11  12  13 
14  15  16  17  18  19  20 
21  22  23  24  25  26  27 
28  29  30         
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
January 2004
December 2003
November 2003
October 2003
September 2003
August 2003
July 2003
June 2003
May 2003
April 2003
March 2003
February 2003
January 2003
April 2001

Notifications

You may request notification for Joel's Blog.

Syndication Feed

XML

Recent Comments

  1. David Johnston: managing investment
  2. David Johnston: Presidential Debate; It’s my proposal not yours!
  3. Joel Aufrecht: from a senior roboticist
  4. Jeff Davis: Source?
  5. Kathryn Schild: quick question
  6. Tai Yan Lim: Trip Back Home - Joel
  7. José Rodrigues: Hello
  8. Guan Yang:
  9. Erika Graffunder: Canada
  10. Erika Graffunder: Per capita emissions