Older blog entries for schoen (starting at number 231)

Sors Vergiliana:

neu populum antiqua sub relligione tueri


I think I'm almost better now. But my right arm is sore again.


I talked for a while with Andrew about the BBC and tried to get him oriented to work on updating the kernel. He made a lot of contributions to the released 1.5 but has never yet built a BBC by himself. I hope that will change now!

I also wrote to Dunc about getting BBC development on a machine on the public Internet, not behind Linuxcare's firewall.


Wolfgang told me I should read a book called Personal Knowledge, so I ordered it.

I also got a shipment of books I ordered from Dover. Yay! These included several Gardner titles. I'm now missing only 44 of 111 Gardner titles on my bibliography, and I have about 10 or 12 "Gardner-interest" books (Festschrift for Gardner or introduction by him or acknowledgment to him or dedication to him).


She glanced at the book which she knew of course and said to Cynthia in a low voice, 'Have you read the Religio Medici?'. The last word she spoke as though it were the name of a great Italian family. Now it happened that Cynthia had read the book, and possessed it, for the title together perhaps with some stray word or portrait had charmed her when she was first beginning to read.

For long the divine properties of that strange volume acted only in a curious and tantalising fashion. She could not have told you what the writing was about; often she laid it down in distress and fatigue; but the words lured her on, with a promise distinct though not definable, of wondrous caverns, and vast luminous vistas concealed below them, and in time they came to undermine her visible world with a labyrinth of dark channels, and to expand her heaven. Even now that she was a grown woman she could start herself on some whimsical flight infinitely pleasant to her, by reading certain words.

"Yes," she answered, "I know it."

(From the earliest existing fragment of Melymbrosia, the early version of Virginia Woolf's first novel The Voyage Out. This is from Extant Draft A, Appendix B, p. 267 of the published version of Melymbrosia, edited by Louise A. DeSalvo. Thanks, mom.)


I'm still sick.


We had one of those rolling blackouts here, and took advantage of the opportunity to get some hardware onto UPSes.

There was also something of the sense of carrying fire from one place to another: several models of APC UPS won't turn on (even if the battery inside is charged) unless they are actually plugged in and receiving AC power. That can make it hard to turn a UPS on in a blackout! So I had one UPS that was on, and two that were charged, unplugged, and off.

I plugged the Office into the squealing 600, and turned the former on. It came right up and started beeping. I carried it over and plugged the 420 into the Office, which had begun to supply AC power. Now the 420, too, could be turned on. :-)

I guess this is actually like "intellectual property":

He who receives an idea from me, receives instruction himself without lessening mine; as he who lights his taper at mine, receives light without darkening me.

Speaking of which:


Please tell dmarti what you think about his ideas for reforming the U.S. patent system.

Are you a free software developer who has been or felt threatened by a software or business method patent? Please tell Don; detailed, specific examples can help him.

I don't think it's good to circulate this too far while this is still a draft.

Kernel Traffic

I poked at some KT stuff, like writing an HTTP client as a Bourne shell script. This can tell you whether a particular mirror is up. (It's amazingly hard to use a standard client to check a specific mirror from a round-robin DNS list, because the client will probably connect to a randomly chosen host from that list. And if you try to connect by IP address, you will probably not see the results of the right virtual host! So you really seem to need a custom client.)

Aha, but I'm wrong there: curl has a "-H" option which will let you specify arbitrary HTTP headers. That's extremely useful and would have solved the problem if we'd had curl installed. Once again, bagder, nice work.


I think this MSM is doing some good for my arms.


Phil Agre notes these defenses of the Taliban's destruction of the statues at Bamiyan:


Alas, I am the latest Advogato diarist to get sick. I feel pretty unwell (I think I used that phrase to describe the last time I was sick, unless that was "really unwell"), and this messes up a bunch of nice plans (BayFF, CalLUG, and more).

Last time, I felt sicker than this, and I got better in two days. Maybe I'll be so lucky again.

I was writing a diary entry about the IBM ads and dmarti's nice work to show IBM some meaningful commitments it can make to support free software. I'm very impressed with how things are going. But I can't reach that diary entry draft because zork is unreachable from here at the moment.

Coffee and wrist pain

sangr, practically every medical professional or expert I've talked to says that caffeine is bad for repetitive strain injuries and inflamations. If I remember correctly, it reduces your circulation. If you have RSI problems, you might want to ask a doctor whether reducing your coffee intake could help.

In the mountains, there you feel free

At the IBM casting event (where much of interest happened), I ran into Sam Ockman, who took me out to Muir Woods, where we walked through the ancient redwood forest for several hours. That was really nice.


I wrote a long letter to my sister. I bought a fire extinguisher. I went to a bookstore.


Between wrist pain and not understanding IPSec in the kernel, I still haven't gotten 1.5.9 out! I did post an ISO image so that interested people on the mailing list could try the most recent version, but that's very different from publishing it to the whole public.

I think I should make some more enhancements and go straight to

The next "marketing" release should be 1.6 or maybe (The "golden" BBC.)



*** aaronl@pts/57 threatens people over DeCSS GPL violation at http://www.utm.edu/research/primes//curios/48565...29443.html
sneakums@pts/5> God save me from bored teenagers.

Structure and interpretation

(I was actually reading SICP in the morning, but that's not what made me think of this.)

I read some of ESR's sex tips (following a link from a slashdot comment; I do still read slashdot comments sometimes -- I'm trying to stop, honest!) and was kind of bothered. I think I'm upset any time I hear of discussions of techne (technique, if you like) for attracting romantic partners. I'm surely one of those "unclear on the concept".

Actually, my issue with these discussions is pretty clear to me now. That's what a year of talking structure and interpretation of romantic relationships has done. I'm deeply troubled by a role for skill or knowledge in romance. Eric is saying, not only that there is such a role, but that he'll teach it!


I went to Crackmonkey Night at Zeitgeist yesterday. There Mr. Bad made me a name tag which says "Demandu al mi pri la lingvo internacia". I was pleased.

I'm going to Target tomorrow to buy a fire extinguisher.

If you don't have a fire extinguisher, you too should go to Target and buy a fire extinguisher. (Or you can get one somewhere else.)


I'm enjoying my function "unshuffle"; in its present form, it seems to work (trivially identifying which card has been displaced from its order in a casually riffle-shuffled deck) about 60% of the time after three simulated riffles interleaved (heh) with arbitrary cuts. A big question is still how accurate those simulated shuffles are.

I think I can add another 20% to that, though. About half the time when it fails to identify the card, it's not because it's wrong, but just because it finds many possibilities. (There are a lot of possible cases, which were one subject of my long conversation in Israel mentioned in a previous diary entry. One possibility is mistakenly identifying some other card as displaced. Another possibility is an inability to decide which card has been displaced, from among several possibilities. Another possibility is not finding any cards which appear to have been displaced.)

Ides of March

I didn't beware them last year. Does that admonition apply only to Caesar, or to the general public, too?



Assuming even shuffling, how many shuffles on average would return a deck to it's original order?

If by "even shuffling", you mean

  • perfect faro shuffling: 30, if you're consistent about always in-shuffling or out-shuffling, but you don't care which.
  • shuffling well, but not in precisely the same way every time: probably 52!/2, because good shuffling actually has a genuine randomizing effect, and correlations and patterns will tend to disappear; you'll come around to the original order only by chance.
  • shuffling well, always breaking the deck 26 and 26: probably still 52!/2.
  • shuffling in a randomly-chosen but consistent way: this is a very good question, maybe harder than my old question about permutations; the answer is probably less than 90090.

jmg, thanks for your suggestions. I think we can assume that runs always contain at least one card, by definition; if a shuffler misses an attempted run, it just makes the older run continue longer (although I guess the idea is that the probabilities should be different: there's a higher probability of some much longer runs in that case).

Your point about the difference between the (remaining?) size of the two halves is something I actually addressed yesterday, before I read your note. I don't have a good solutions to it. Do people compensate to try to keep the absolute sizes of the halves equal? Or are they trying to keep the rates at which the halves are exhausted equal? These lead to very different models!

I've been thinking that people are trying to keep the rates even, which doesn't require any adjustment when they notice that the halves have different numbers of cards (because they don't care about that). Your suggestion seems not to be that the average run length should be larger from the side which has more cards, but rather that, when the shuffler notices a significant discrepancy, he will probably try to correct for it by causing a single long run then and there, to even out the two halves. Is that correct?

How much control do shufflers normally exert over the rates at which they let cards full? Not how much control they are capable of (for some extremely adept shufflers, that's perfect control!), but how much control they actually bring to bear after they've started to riffle the cards. In my case, as a poor shuffler, I find it very hard to slow down at all once the cards have begun to fall.

Applications? (A story about a conversation about a card trick)

So, way back in 1995 I was once talking with this physics student about a card trick in the lounge of a college dorm (which happened to be in Haifa, Israel). When we had talked about it for twenty minutes, a friend wandered by and said "You're still talking about that card trick?" "Yep", we said. They said "Well, we're going to dinner."

When they came back from dinner, we were still sitting at that same table. "You're not still talking about that card trick?" But the pad of paper with sketches of hypothetical patterns of shuffles interleaving told the tale. "You're actually still talking about it. OK, we're going off to do some work." So they went off and studied a bit.

Of course, we were unperturbed, and continued our conversation, so that when those people came by again and said "We're on our way out to a movie -- I bet you'll still be talking about that card trick when we get back", we just kind of nodded sagely. And off they went to a movie, and we kept on scribbling and arguing about runs and sequences and ambiguities and averages.

When the movie ended, of course, we were discovered not to have moved an inch, although we had consumed several more sheets of paper, which were scattered around the table. They talked about chains and immunity to cuts and about cyclic order and cyclic chaining and abitrary cut-points and probably something like "true effective cyclic chain length". The deck of cards we'd had was stacked into eight neat little piles, and we were still trying to make consensus estimates of some probabilities.

"You're still talking about that card trick! Look, everybody, Seth and Uri have been here since before dinner talking about a card trick." And it was true. Four hours, all told, if I remember correctly, and four very pleasant hours they were, too.

So there actually is a connection to the program I'm writing. The card trick in question is one I've already mentioned in my Advogato diary (July 17 of last summer); Knuth actually mentions it in an exercise in The Art of Computer Programming. The basic application is that, if I can actually get a realistic model of how people shuffle, I can find out how likely there is to be exploitable non-randomness in a deck after a small number of shuffles.

You know, it's kind of like TCP sequence prediction attacks, only more useless.

Anyway, I'm working on a simulation that tries to undo small numbers of shuffles.


Happy pi day.

IBM Linux ads

IBM's ad agency seems to really, really want me to be in an ad for Linux. It's tempting. I think they may do it right, in the sense of "honestly and respectfully": the ad agency reps seem to accept that free software is different from proprietary software and to consider it a good thing.

I hope they're not harping on the "counterculture" note too hard; in a sense, it's a very difficult problem. I read Commodify Your Dissent by Thomas Frank and found it very challenging; one might have predicted from the discussion of IBM there that IBM would soon be running ads about subversive, revolutionary programmers (and Frank would probably say that this is shallow or counterproductive, because IBM has zero permanent alliance with the values of free software or even with the development model).

There are conflicting tendencies. On the one hand:

  • Free software really is different; the differences are not trivial or vacuous.
  • Free software really is "alternative"; people really have a choice.
  • The non-free status quo really is problematic and it's not worth emulating (in the sense of "seeking to imitate", not in the sense of the Wine Project).
  • There really is a culture around free software which is interesting, genuine (it seems to me), and worth expressing.

On the other hand:

  • There is no point in gratuitously highlighting differences just for shock or curiosity value.
  • Free software is not guaranteed to be successful in business or in public interest just because it's different or free software community members are different in some way.
  • Doing free software is a normal thing to do. You don't have to be weird or bizarre to participate. It's not some special thing reserved for an elite or for a group of strange people -- or, to the extent that it is, anybody can join that group.

Celebrity counterculture (as opposed to general awareness, understanding, and respect) is not the best thing that can happen to free software. And I'm a little concerned that the IBM ads may be heading in that direction.

Remember: "It is not in heaven, that you should say, 'Who will go up for us to heaven, and bring it to us, that we may hear it and do it?'" Neither is it beyond the sea, that you should say, 'Who will go over the sea for us, and bring it to us, that we may hear it and do it?' (Deuteronomy 30:12-3 (RSV))


I got one. No beard cutting as yet.


Jamie's interpretation of a story about fortune, "Johnny Mnemonic", and the police:

You will be miserable until you learn the difference between scalar and list context.


I wrote a letter to the Chronicle which they didn't print but which somehow ended up in the hands of Richard Stallman. He liked it; it owes a lot to his essay Re-evaluating Copyright: The Public Must Prevail.


I didn't make much progress on my Python card-shuffling code, but I looked at some output, and it looked pretty realistic. There are even discernible effects from the fact that people don't cut a deck exactly half and half: this means that there will probably be an extra-long run from one half either at the top or at the bottom. (There's also another model possible in which the average length of the individual runs from one half is longer than the average length from the other. I'm not sure which is more physically plausible. I could be very brave and write to Persi Diaconis and S. Brent Morris and ask: I think one of them might know offhand.)


Sorry to mention too much stuff from slashdot here in one day. (I had independent sources for the other two, I promise!) Does anyone have experience with VoiceXML? I looked at Eve Andersson's article about VXML and was pretty impressed; I called up TellMe -- and you can too -- and listened to her program read me 100 digits of pi when I asked it. Come on, try it out, in honor of pi day. ("Call 1-800-555-TELL. At the main menu, speak the word 'Extensions.' Enter extension 58874.")

But anyway, I signed up for a developer account at TellMe Studio and quickly realized that

  • this is pretty powerful technology
  • I don't actually know anything about VXML

but I now have a little application that will greet me in my own voice and then synthesize the comment that "This is cool". On the phone, over an 800 number. So conceivably I could not only have a web page which can tell people what the weather is like here, or whether my coffee pot is on or off (if I actually had a coffee pot), but I could actually have an 800 number people could call and, in my own voice, it could tell them those things.

It seems that you have to pay to make your VoiceXML applications available to the public; I guess that's only fair.

On the Python edu-sig mailing list, there was some nice discussion about a class to represent a deck of cards, with some code which I got to contribute a bit to.

I managed to write somewhat simple in_shuffle() and out_shuffle() functions which perform (virtual) perfect faro shuffles on a deck. Using these, it's easy to watch what these shuffles do, and to verify experimentally that "eight out-shuffles or fifty-two in-shuffles will return a deck [of fifty-two cards] to its original order" (quoting Gardner from memory). So that's fun.

What I really want, as I wrote on edu-sig, is a good and realistic model for how most people -- you know, other than accomplished magicians and professional gamblers -- riffle shuffle. This is very tricky. I have written a function called casual_shuffle() which it would probably be easier to quote than to describe. (Source code is great for concise expression.) But:

I assume that in a casual riffle shuffle, a person is equally likely for any n between 0 and 52/X to divide the deck into "halves" of 26-n and 26+n. So if X=10, dividing the deck at 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, and 31 are considered equiprobable. (It should probably be a Gaussian distribution instead.)

Now cards are dealt in "runs" from alternate halves, starting with a random half. The length of a run is potentially limited only by the size of the half of the deck from which cards in the run are being dropped, but in my model it is less and less likely that a run will continue as the run gets longer and longer -- the incidence of longer runs should be less than the incidence of shorter runs. That part is correct -- but beyond that I don't know what's realistic, and so I have a decay model, where each successive card in a run diminishes (by a certain ratio) the probability that the run will continue. It is possible to choose the decay ratio.

OK, here's the actual casual_shuffle() function:

  def casual_shuffle(self, split_proportion=10, run_decay=0.8):
       # Simulate the riffle-shuffling pattern of a normal human, who
       # doesn't know how to do a perfect faro shuffle.
       L = len(self.cards)/2
       margin = L/split_proportion
       splitpoint = random.choice(range(L-margin, L+margin+1))
       a = self.cards[:splitpoint]
       b = self.cards[splitpoint:]
       c = []
       source = random.choice([a, b])
       while a or b:
          p = 1.0
          while source:
             if random.random() >= p:
                print p, " exceeded."
             p = p * run_decay
          if source is b:
             source = a
             source = b
       self.cards = c

222 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!