Last month I added CVS-reading support to reposurgeon. The reason I haven’t blogged in ten days is that this pulled me down a rathole out of which I am just now beginning to emerge. And now I have a a request for help – I need to collect some perverse CVS repositories, preferably relatively small ones.
Today’s very special non-world-ending software release, triggered if not originated from here at Eric Conspiracy Secret Laboratories is the amazing Zen simulation, Robot Finds Kitten. I bow in respect before Leonard Richardson and the other giants of kitten-finding history and am humbly proud to be counted among the select few who have contributed to this monumental, er, monument.
Get yer hot fresh tarball right here. It will improve your sex life, clear up your financial problems, cure your acne, and make you as a god among men. Would I lie?
Well, er, no. Actually, it attacks CVS.
Yes, that’s right, the just-shipped reposurgeon 2.11 can now read – though not write – CVS repositories. To get it to do this, I got my lunch-hooks on a relatively old program called cvsps that assembles changesets out of CVS repositories for human inspection. I gave it a –fast-export reporting mode that emits a fast-import stream instead, so now CVS has a universal exporter that will talk to any version-control system that speaks import streams. Oh, yes, and I’m maintaining cvsps now too – applause to David Mansfield, who both did a very good job on that code and sees clearly that its original use case is obsolete and –fast-export is a better way forward.
Two substantial releases of different projects in a day is a fast pace even for me. cvsps-3.0 and reposurgeon-2.11; two great tastes that taste great together.
Well-designed software suites should not only be correct, they should be able to demonstrate their own correctness. This is why the new 2.10 release of reposurgeon features a new tool called ‘repodiffer’. And yes, that is what it sounds like – a diff tool that operates not on files but entire repository histories. You get a report on which revisions are identical, which are different, and in the latter case where the differences are, down to which files don’t match. Commits to be paired are matched by committer and commit date. Like reposurgeon, it will work on any version-control system that can emit a fast-import stream.
I should have known it. I really should have expected what happened.
So it’s about week 7 at kuntao training, the tasty exotic mix of south Chinese kung fu and Philippine weapons techniques my wife and I are now studying, and we’re doing fine. The drills are challenging, but we’re up to the challenge. Our one episode of sparring so far went very well, with Cathy and I both defeating our opponents decisively in knife duels. The other students and the instructors have accepted us and show a gratifying degree of confidence in our abilities. Our first test approaches and we are confident of passing.
The only fly in the ointment, the one silly damn thing I’ve had persistent trouble with, is spinning my escrima sticks. Last night I found out why…
I had said I wasn’t going to do it, but…I experimented, and it turned out to be easier than I thought. Release 2.7 of reposurgeon writes (as well as reading) Subversion repositories. With the untested support for darcs, which should work exactly as well as darcs fast-export and fast-import do, this now brings the set of fully-supported version-control systems to git, hg, bzr, svn, and darcs; reposurgeon can be used for repository surgery and interconversion on any of these.
Here’s the most interesting adventure in linguistics I’ve run across in a while. Two professors in Norway assert that English is a Scandinavian language, a North Germanic rather than a West Germanic one. More specifically, they claim that Anglo-Saxon (“Old English”) is not the direct ancestor of modern English; rather, our language is more closely related to the dialect of Old Norse spoken in the Danelaw (the Viking-occupied part of England) after about 865.
The bolster their claim by pointing at major grammatical traits which English shares with Old Norse rather than West Germanic languages – notably, consistent SVO (subject-verb-object) word order rather than the SOV (subject-object-verb) or V2 (verb-second) orders that dominate in languages like German, Dutch and Anglo-Saxon. The practical consequence they point out (correctly – I’ve experienced this myself) is that English and Norwegian or Swedish are quite a bit closer in mutual intelligibility than any of this group is with German or Dutch or Anglo-Saxon. I had actually noticed this before and been puzzled by it.
The professors think the reason for this is that rather than evolving into Modern English, Anglo-Saxon actually died out during the two centuries between the invasion of the Great Army in 865 and the defeat of Harold Godwinsson in 1066. They propose that Anglo-Saxon influenced, but was largely replaced by, the Norse dialect of the Anglo-Danish Empire. Which, SVO North Germanic grammar and all, then collided with Norman French and evolved into English as we know it.
This isn’t crazy. It may be wrong, but it isn’t crazy. Two centuries is plenty of time for an invading language to reduce a native one to a low-status argot and even banish it entirely; we’ve seen it happen much faster than that when the invaders are as culturally and politically dominant as the Anglo-Danes were in England at the time of Cnut (1016-1035).
Even in the conventional account of the evolution of English, modern English is supposed to have derived from the Anglo-Saxon spoken in the East Midlands – which, as the professors point out, was the most densely settled part of the Danelaw!
All of this gave me an idea that may go beyond the professors’ hypothesis and explain a few other things…
One of my regulars, contemplating the increasingly pathetic series of clusterfucks that have passed for exciting new products at Microsoft, wonders why a company with all its advantages – more money than $DEITY to hire the best developers, lots of experience, dominant position in a major technology market – can’t seem to release a decent product any more.
The answer is simple and deep. It’s because evil is inefficient.
Last night I utterly trounced three opponents at the slick new Fantasy Flight reissue of a classic interstellar trade and exploration game, Merchants of Venus. My end score was nearly three times that of the runner-up, and I had acquired so many fame points (which each become 10 victory points at game end) that we ran out of fame tokens.
One of the other players half-humorously protested that I had gotten incredibly lucky. “Nonsense”, I said, “it was planning”. He sputtered that I had frequently had the victory conditions for lucrative missions apparently drop in my lap. Which was true, and he was right to view those individual occurrences as luck. But it was also true that I planned my way to victory.
I made chance work for me. Pay attention, because I am about to reveal why there is a large class of games (notably pick-up-and-carry games like Empire Builder, network-building games like Power Grid, and more generally games with a large variety of paths to the win condition) at which I am extremely difficult to beat. The technique is replicable.
I shipped reposurgeon 2.0 a few days ago with the Subversion support feature-complete, and a 2.1 minor bugfix release this morning. My previous release announcement was somewhat rushed, so here is a more detailed one explaining why anybody contemplating moving up from Subversion should care.
To go with this, there is a new version of my DVCS Migration HOWTO.
By now you’ve doubtless heard about Hurricane Sandy; the record-breaking superstorm hype has been pretty hard to miss. Well, I just got a look at the latest NOAA track projection, and it looks like the storm center is going to pass directly over my house sometime Tuesday night. The center track on that map couldn’t hit me more accurately if it had been aimed.
This was a sort of spinoff from irker, though I’ve decided it not to use it there because I want to keep irkerd and irkerhook.py in single self-contained files.
No, I don’t know dak180′s real name. He’s a pretty good collaborator, though.
I nearly issued a forking threat a few minutes ago. Only the second time I’ve felt a need to do that and the first was in 1993, so this is not something I do casually. And I drew back from the brink.
But I may have to if the maintainer I’m dealing with doesn’t clean up his act. His library is critical to one of my projects, but his behavior has been increasingly sloppy and erratic lately. He made a serious design mistake which he’s been trying to paper over with kluges; the kluges have made the code unstable and the latest shipped version is actually broken to the point of unusability without a patch.
My title is, of course, a reference to the 1984 paper End-to-End Arguments in System Design by Reed, Saltzer, and Clark. They enunciated what has since become understood as perhaps the single most central and successful principle of the design of the Internet. If you have not read it, do chase the link; it well deserves its status as a classic.
The authors wrote mostly about the design of communications networks. But the title referred not to “network design” but to system design, and some of the early language in the paper hints that the authors thought they had discovered a design rule with implications beyond networking. I shall argue that indeed they had – there is a version of the end-to-end principle that applies productively and forcefully to the design of (non-networked) software. I shall develop that version, illustrating it with a case study from experience.
My regulars will be aware that, since the Mixed Martial Arts program we were in folded up, my wife Cathy and I have been having an interesting learning adventure checking out various schools in our area as possibilities for our next style. We’ve had some more adventures since.
I’ve just shipped irker 1.8, and I think this brings the wild ride I’ve been on for the last eleven days approximately to a close. I consider this release feature-complete; it achieves all the goals I had in mind when the CIA service died and I decided it was up to me to rescue the situation. I expect the development pace to slow down a lot from the almost daily release I’ve been doing.
The last really major feature was irkerhook support for Mercurial repositories. I’d be mildly interested in a bzr extractor class if anyone wanted to contribute one, and that probably wouldn’t be hard – the git and hg extractors are about 70 lines each. But with git, hg, and Subversion covered it’s good enough.
Uptake of irker continues at a pleasingly rapid pace. There’s now a second symbiote application, a poller daemon that watches the log of a specified Subversion repository and uses irkerd to ship notifications from it. This can be useful if you don’t have write access to the repo hooks and thus cannot install irkerhook.
Time for a pause and some reflection on lessons to be learned.