Eric S. Raymond's Blog, page 54

January 28, 2013

Coding Freedom: a review

My usual audience is well aware why I am qualified to review Gabriella Coleman’s book, Coding Freedom, but since I suspect this post might reach a bit beyond my usual audience I will restate the obvious. I have been operating as the hacker culture’s resident ethnographer since around 1990, consciously applying the techniques of anthropological fieldwork (at least as I understood them) to analyze the operation of that culture and explain it to others. Those explanations have been tested in the real world with large consequences, including helping the hacker culture break out of its ghetto and infect everything that software touches with subversive ideas about open processes, transparency, peer review, and the power of networked collaboration.


Ever since I began doing my own ethnographic work on the hacker culture from the inside as a participant, I have keenly felt the lack of any comparable observation being done by outsiders formally trained in the techniques of anthropological fieldwork. I’m an amateur, self-trained by reading classic anthropological studies and a few semesters of college courses; I know relatively little theory, and have had to construct my own interpretative frameworks in the absence of much knowledge about how a professional would do it.


Sadly, the main thing I learned from reading Gabriella Coleman’s new book, Coding Freedom, is that my ignorance may actually have been a good thing for the quality of my results. The insight in this book is nearly smothered beneath a crushing weight of jargon and theoretical elaboration, almost all of which appears to be completely useless except as a sort of point-scoring academic ritual that does less than nothing to illuminate its ostensible subject.


This is doubly unfortunate because Coleman very obviously means well and feels a lot of respect and sympathy for the people and the culture she was studying – on the few occasions that she stops overplaying the game of academic erudition she has interesting things to say about them. It is clear that she is natively a shrewd observer whose instincts have been only numbed – not entirely destroyed – by the load of baggage she is carrying around.



I should give a representative example of the kind of theoretical smother I mean. A major theme in Coleman’s analysis is a contrast between two notions of individualism: one of which she labels “liberal” and associates with economic minimaxing and rational selfishness, and another which she describes as “Millsian” or “romantic” and associates with ideals of self-expressiveness and the Aristotelian idea of eudaemonia. She detects both these notions in hacker culture, and spills a lot of ink discussing what she supposes to be a tension between them.


What Coleman never notices is that this is not a tension the hackers she is observing actually experience – there isn’t any sort of unresolved personal or cultural problem here for her subjects, who cheerfully go on both pursuing their rational self-interests and expressing eudaemonia without feeling any strain between the two. The ‘problem’ is entirely an artifact of her theory; she thinks there must be tension or paradox because the words in her head insist that these are opposing ideals that are in conflict. Her maps have rendered her unable to see the territory.


There is another, larger failure in the same vein. The thesis that eventually becomes the center of the book is that hackers have revealed “a conflict between cherished liberal values” with respect to software, one value being property rights and the other being freedom of expression. Coleman then hares off into political science and history without noticing that, again, her map fails to match the territory – the critique of intellectual property uttered by many of her hacker subjects has nothing to do with this supposed opposition.


What she misses is the libertarian critique that so-called “intellectual property” rights are illegitimate because they grant state-enforced monopolies that would neither arise nor be defensible as natural property rights in a free market. I am not sure I buy this one myself, but my skepticism and the grounds for it aren’t relevant here; the relevant fact is that many other hackers do buy it, and that this critique attacks IP in a more fundamental way than a free-speech objection does.


On this account there is no contradiction, merely a failure of liberal values to successfully assert themselves against overweening statism (or, in versions flavored with left-wing language, corporate oligopoly). The “free speech” argument ceases being the principled ground of objection and becomes a tactical hack of the legal system, parallel to the way the GPL repurposes a copyright system that it in principle rejects.


Coleman is so busy churning up abstractions about “liberalism” and “neoliberalism” that she never notices any of this. My point here is not to argue that the libertarian critique is more correct than the free-speech one she is valorizing (I’m not sure I believe that, anyway) but to point out that not noticing or engaging it at all is a failure of ethnographic method, another place where she mistakes her own incomplete map for the territory and stops seeing what is actually there.


Far too much of the book exhibits this kind of theory-induced blindness. I am inclined to blame not Coleman for it but rather the people who trained and indoctrinated her in how to think and write like a ‘real’ anthropologist. If Coding Freedom is really the sort of book anthropology wants its bright young things to emit, the field is in desperately bad shape – far too inward-looking, over-abstract, mired in self-reference and tail-chasing, obsessed with politicized modes of non-explanation. I would actually prefer the theory that Coleman is a dimwit who has emitted a sort of unintentional parody of real anthropology if I could make myself believe it, but I can’t – her best moments seem too lucid for that.


She is very perceptive, for example, about the central role of hacker humor in promoting social bonding and affirming the culture’s values (I’ve explored this theme myself). Her ground-level reporting about the emotional atmosphere of hacker conferences and demonstrations is acute. Her discussion of how hackers as a culture have bootstrapped themselves to a state of legal literacy in order to fight their corner of the intellectual-property wars gives one of the gifts that ethnography should – to help us see how remarkable and interesting are practices we might otherwise take for granted.


There is even one significant thing I learned from this book, or at least learned to see in a new way. I hadn’t noticed before how ritualized the practice of writing damning comments about bad code is. Coleman is right that they display a level of pointed and deliberate rudeness that their authors would not employ face-to-face, and she is right about how and why the culture gives permission for this behavior.


What these good parts have in common is that they are far less theory-laden than the rest. When observation wins out over abstraction Coleman is well worth reading. But this happens too seldom.


I still want the book this should have been. It would have been better with all refererences to literary theorists and philosophers brutally ripped out of it and much more of the unaffected reportorial eye. But it may well be that a book less determinedly flogging empty signifiers of academic erudition would have been a functional failure for Ms. Coleman, as it wouldn’t have earned her a doctorate. If so…so much the worse for the academy.

 •  0 comments  •  flag
Share on Twitter
Published on January 28, 2013 04:28

January 24, 2013

Charisma: a how-to

A couple of weeks ago a friend asked me how he could become more charismatic.


Because the term “charismatic” has unhelpful religious connotations, let’s begin by being clear what he was actually asking. A person is “charismatic” when he or she has the ability to communicate a vision to others in a way that makes them sign up for making it real. Sometimes the vision is large (“Change the world!”) sometimes it is relatively small (“Become as cool as me!”).


My friend asked me how he could become more charismatic because he has seen me do the charisma thing a lot. This relates to my previous blogging on practical prophecy. A prophet has to be charismatic, it’s a requirement to get people to actually move.


Before he asked me about it, I would not have thought charisma was something that could be explained in detail. But questions properly posed sometimes elicit knowledge the person answering was not consciously aware of holding. That happened in this case; I found myself explaining four modes of charisma.


Here is what I told him.



The first way to be charismatic is non-attachment, the way sociopaths do it. To a sociopath, other humans are meat robots with emotional handles sticking out of them ready to be grabbed. Desire, fear, shame, status-seeking, loyalty – a sociopath sees all these and other emotions clearly in others exactly to the extent that, lacking the ability to empathize with those others, he has no skin in the game. People who aren’t sociopaths can sometimes learn this kind of perception through rigorous self-awareness and mystical disciplines that teach extreme emotional detachment as a learned state.


The second way is just the opposite of non-attachment – extreme empathy for others. The empathic charismatic works his mirror neurons hard, identifying with his targets in order to motivate them by tapping into their strongest emotional currents. Externally, the behavioral signals the empathic charismatic emits to affect others may be the same as the non-attached charismatic uses, but the internal representations they use are very different. The empath isn’t merely pretending to care; his behavior is not brittle and he can’t be “found out” the way a socipath can.


The third way to charisma is channeling. The channeler, instead of identifying with their target(s), identifies with some figure or personified idea that is emotionally powerful for the targets. In a religious context, the charismatic may evoke a saint, a previous prophet with high prestige, or a god. In a more secular context, a channeling charismatic may appear to embody the characteristic virtues of a profession, a tribe, a nation, or some other group in which the targets have a large emotional investment.


The fourth way is the call to excellence. Whatever else a would-be charismatic does or fails to do, he can succeed with one simple, powerful message: “You can be more than you are.” The charismatic who calls to excellence invites people to grow, to take charge of their lives, to attend to what is best in themselves. In some but not all versions, this becomes “You can be part of something larger than yourself.”


In practice, most charismatics use mixed strategies. I myself rely mostly on a combination of channeling with the call to excellence. While I’m not particularly deficient in empathy, I’m not enough sigmas above the mean for that mode of charisma to be more effective than the two I lean on. If I put the required effort in to alter my consciousness, I can inhabit a sociopath-like state of detached manipulation, but I find it deeply uncomfortable to remain there for long.


Perhaps the most important thing to know about these strategies is that they are not inexplicable magic, but skills that can be learned and practised and improved. The most effective way to learn them is by mimesis: studying the behavior of charismatics, imitatiting it, and putting yourself inside the behavior (allowing yourself to notice that the behavior induces a mental posture and going there, as in method acting).


That’s what I told my friend. Now, on reflection, I would add two more important tools to the charismatic’s kit: honesty and fearlessness. I speak of these as instruments rather than virtues because I am mainly concerned with their effect on the charismatic’s audience.


Most people are half-aware that they are almost constantly surrounded by a net of lies. The big lies of politics and religion; the medium-sized lies of advertising and marketing; and all the little lies of the workplace and normal social interaction. Many people constantly pretend, even to themselves, to believe things that in other and deeper parts of their minds they know aren’t true – but they dare not confront those truths because they think the social and personal costs of doing so would be higher than they can bear.


The charismatic who is honest and fearless brings a gift. By thinking unthinkables and saying unsayables and getting away with it – not being struck dead by lighting or instantly lynched – he offers his audience, too, a psychological release from the relentless tension of everyday lies. He gives them at least temporary permission to be more honest in their own thoughts.


This is extremely powerful. So much so that many people will follow a charismatic to his goal just for this. Most people who hear the old saw “Honesty is the best policy” doen’t realize that it dates from a time when the word “policy” had slightly different connotations than it does today; what the proverb meant then might be better translated as “Honesty is the most effective strategem.” Now you know why.

 •  0 comments  •  flag
Share on Twitter
Published on January 24, 2013 13:20

January 21, 2013

How to fix cable messes

A friend of mine recently posted this image of a hideous network-cable tangle:


A hideous tangle of network cable

A hideous tangle of network cable.


I have invented an algorithm for fixing this kind of mess. Probably other people have developed the same technique before, but it wasn’t taught to me and I’ve never seen it written down. Here it is…



First, start by assembling your equipment. You will need a labeling gun (the kind that can put lettering on a short length of sticky-backed plastic tape), a bunch of cable ties (a couple dozen for this mess), a pad of paper (ideally, blue-lined graph paper), a clipboard, and a pencil. Finally, a bunch of patch cables in 12-inch and 6-inch lengths.


For some jobs, like this one, you’ll want a nice sturdy stepladder, something you can use to put the bulk of the cable tangle at or below shoulder height. If you need to reach above shoulder height to get at the connectors, the job is going to fatigue you faster than you realize – and that can easily lead to mistakes that are quite difficult to recover from. Hard work is not a virtue here; make the job easy on yourself so you’ll get it right.


The tangle pictured is about a three-hour job using this method, maybe four; scale appropriately for your mess . Allocate time so you can do it all in one go, otherwise you may have trouble fully recovering intermediate state.


Your first step (and the longest part of the job) is the crucial one. Trace each individual cable through the mess without removing it. Now label both ends of the cable, right near each connector, with a unique code.


Second step: Make a sketch of the patch panels. The reason graph paper helps is that usually the equipment racks will be laid out so the cable connectors fit on a rectangular grid. Sketch in each connector as a little box, and each rack unit as a surrounding frame. Leave enough room in the boxes to write inside; if there are unused connectors on the units, X them out in your diagram. When you are done, your sketch should resemble a crude plan of the racks.


Third step: Pick a cable. Note the code at one end in the corresponding box on your sketch. Unplug that end. Work the cable end through the rest of the mess until it is fully untangled and you can see the entire length. Identify the end still attached and add its code to your sketch. Unplug the other end and lay the cable aside. Repeat this procedure until all cables are removed. If you can recruit someone to help you, the single most useful thing that person can do is eyeball-check each code pair on your diagram as you pencil it in.


Step Four: At the end of this step, you should have a filled-in diagram that will tell you exactly how to rebuild your patch network. Do that. But this time, you’re going to do three things differently. First, you’re going to use shorty cables wherever you can to avoid hanging loops that can get tangled. Second, you’re going to use cable ties to bundle together parallel runs.


Thirdly, and most importantly, each new cable gets a label at both ends. Once you’ve done this, your patch network will no longer be a nightmare to manage. And the next poor sod who has to cope with it (quite possibly yourself in six months) will bless your foresight.

 •  0 comments  •  flag
Share on Twitter
Published on January 21, 2013 07:05

January 13, 2013

Announcing cvs-fast-export

For those of you who have been following my work on tools to muck out the swamp that is CVS, a new shovel: cvs-fast-export. Note, this is an alpha release for testing purposes; double-check the quality of any conversions you do with it carefully.



Actually, in some ways this is an old and trusty shovel. Keith Packard wrote the analysis code in 2006 to lift the X repos to git. After that the code gathered dust; when I found it it was in a broken state due to changes in the git library API. Some of you may have seen that version as “parsecvs”.


I sawed off the direct interface to git and replaced it with a back end that emits a git fast-import stream. This is much more useful; it means other version-control systems that have importers for this format can use the tool. It also means reposurgeon can use it.


If you’ve been paying attention, you’ll notice that this is the second CVS exporter I’ve shipped recently. And you’re probably wondering why I’m maintaining two of these beasts. The answer is that they both fell into my lap at nearly the same time and I’m not yet sure either dominates the other.


One of the larger items on my near-term to-do list is to write a really good test suite for both of these, then use it to compare them with each other and cvs2git.


Just from reading the code of both I suspect that cvs-fast-export will do a better job than cvsps – Keith’s analyzer looks more powerful, less ad-hoc. But cvsps has one major feature lacking in cvs-fast-export; it can be used to lift repositories to which you have only remote access.


Depending on what the test-suite comparisons tell me, I may have to fix that by transplanting cvsps’s client code into cvs-fast-export (after which I would scrap cvsps). We’ll see. There’s a fair bit of work still to be done before I’ll know enough to make that decision.


In the meantime, those of you interested in this problem can test. And here’s a shiny thing I dangle before you: with the flip of a switch, cvs-fast-export can generate a graphical visualization of the commit DAG.

 •  0 comments  •  flag
Share on Twitter
Published on January 13, 2013 15:59

January 8, 2013

How do you bait a trap for the soul?

You bait a trap for a mouse with tasty food. How do you bait a soul-trap for people too smart to fall for conventional religion? With half-truths, of course.


I bailed out of an attempt to induct me into a cult tonight. The cult is called Landmark Forum or Landmark Education, and is descended from est, the Erhard Seminars Training. The induction attempt was mediated by a friend of mine who shall remain nameless. He has attended several Landmark events, praises the program to the skies, and probably does not realize even now that he has begun to exhibit classic cult-follower symptoms (albeit so far only in a quite a mild form – trying as hard as he did to to recruit me is the main one so far).


“But Eric. How did you know it was a cult?”


Oh, I dunno. Maybe it was all the shiny happy Stepford people with the huge smiles and the nameplates and the identical slightly glassy-eyed affect greeting us several times on the way to the auditorium. Maybe it was the folksy presenter with the vaguely Southern accent spewing pseudo-profundities about “living into your future” and “you will get Nothing from this training” (yes, you could hear the capital N). Maybe it was the parade of people telling stories about how broken they were until they found Landmark.



Dear Goddess, hasn’t everybody seen this movie by now? It wasn’t even subtle. They might as well have put up a nine-foot-high neon sign announcing “HI, WE’LL BE YOUR BRAINWASHERS FOR THE EVENING.” The only uncertainty left in my mind is how pathological this particular gang is – whether their cult induction machinery is mainly mechanism for vacuuming money out of wallets or they actually have a core group that gets off on the processing-people-into-compliant-zombies thing.


What makes outfits like this truly dangerous is that they aren’t entirely wrong. That is, their theory of how human beings tick (a jigger of Neuro-Linguistic Programing, a dash of cognitive behavior therapy, a few skooches of transactional analysis, and generally a substratum of Zen-by-any-other-name) actually works well enough that if you do the process you are in fact likely to clean up a bunch of the shit in your life. Even Scientology, the biggest and nastiest of the cult groups traveling as “therapy”, teaches some useful things – Hubbard’s model of the “reactive mind” is pretty shrewd psychology.


The trouble with cults is that they aren’t actually about the parts that are true. They’re about using the true parts to hook you, to condition you into an becoming an eager little propagator of their memetic infection. For that to happen, your ability to think critically about the doctrine has to be pretty much entirely shut down. Fortunately the behavioral signs of this degeneration are quite easy to spot – I would have learned to recognize them back at the dawn of the New Age movement around 1970 even if I hadn’t gone to Catholic schools before that.


I bailed out after about 20 minutes. It was just too drearily obvious where it was all going.


The evening wasn’t done with me yet, though. It was a cold walk from 7th Street to the 15th-Street train station, and my path took me past a Philly cop on the beat and through City Hall. I think the cop spotted the .45 on my hip under my A2 jacket and that could have become unpleasant – carrying concealed is legal in Philly but the police have been known to hassle carriers pretty hard. This one just nodded at me as I walked by. Maybe he’d read the Heller decision.


Pholadelphia’s City Hall is a huge rococo pile of Second French Empire gingerbread with one redeeming feature – four archway entrances lead to a huge central courtyard where, at the exact center of Philadelphia, there’s a big lovely compass rose in the pavement stonework. Well, there used to be. It’s gone. You can see traces of it around the outside. There’s a big rectangular concrete patch where the center was. I mourn – it’s like they ripped the symbolic heart out of my city. By the wear on the concrete it’s been like that for some years, and I didn’t know.


I was still thinking about this when I descended into the 15th-Street station. I was slightly hungry, having not had dinner, and – aha – I spotted an Au Bon Pain, aka “McDonalds for foodies”. So there I am standing at the counter waiting for night-shift guy to make my sandwich. Night shift guy is what you’d expect behind this kind of service counter in this city: black urban dude in his late twenties. Maybe a bit more alert-looking than average but nothing at all remarkable about him.


So I said “I just bailed out of an attempt to induct me into a cult”. He replied – and I will now channel Dave Barry and assure you that I am not making this up:


“The Obama administration?”


Maybe there’s hope for us yet.

 •  0 comments  •  flag
Share on Twitter
Published on January 08, 2013 19:44

Reposurgeon Killed The Radio Stars!

The 2.13 release of reposurgeon has in it maybe the coolest new feature I’ve ever implemented in five minutes of programming – graphical visualization of a repository’s commit DAG.



In yet another episode of “The Awesome Power of Combining Unix Tools”, the way this actually works is that the new “graph” command emits to standard output a description of the commit graph in the DOT language used by the open-source graphviz suite. To turn this into an image view, just create the following little reposurgeon script and call it something like “show”:



graph $% >/tmp/foo$$

shell dot

Now you can say “script show”; reposurgeon will call the graph command, redirecting the output to a tempfile (the reposurgeon interpreter knows that $$ in a script should be expanded to the process ID). Then it will spawn a shell and run a pipeline using the main graphviz rendering program, dot, to make an image from the DOT markup. That is then fed to the viewer of your choice, in this case display(1) from the ImageMagick suite.


Oh, and that $% in there? That says “substitute the selection set, if any, given the script command”. So you can use this to view selected subsets of the commit graph – useful for large repositories.


The stupid way to implement this feature would have been to hardwire assumptions about the image renderer and viewer into reposurgeon itself, or (slightly less stupidly) pass them in via environment variables or a dotfile. By using reposurgeon’s script feature I avoid all that sort of nonsense – the only graphics-specific thing reposurgeon itself knows how to do is emit DOT markup, which took me all of about five minutes to write after I read the graphviz documentation.


I added in-script expansion of the $$ and $% cookies once I knew ‘graph’ was a good idea (I already had ‘shell’ and > output redirection for reposurgeon commands). The $$ cookie is of course modeled on how Unix shells expand it – a perfectly reasonable notation that there is no reason not to re-use here, and which will be helpful for any other reposurgeon script in the future that needs to use tempfiles.


This is how it looks when you design your application as a domain-specific language and think in terms of adding simple, combinable, orthogonal primitives to it rather than big lumps implementing idiosyncratic features with code that never gets re-used for anything else. Total lines of code to implement DOT output plus $$ plus $% was certainly less than it would have been had I tried to write the equivalent of that script in Python inside reposurgeon, and this way each of these three little featurelets can pay off its complexity cost in the future by being useful in ways I’m not trying to anticipate now.


This design has one drawback, however. The reposurgeon scripting facility was really designed for writing regression tests and per-project repository-lifting scripts; there is at present no place reposurgeon looks for scripts like this that should be shared among all your projects – for the excellent reason that this is (probably) the first such shareable script ever written. I need to think about that; this will probably turn into another addition to the language.


Fear the reposturgeon!

 •  0 comments  •  flag
Share on Twitter
Published on January 08, 2013 05:57

January 3, 2013

Solving the CVS-lifting problem

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.



Y’all might recall that the program I adopted as a CVS-repository-reading front end was cvsps, after I had hacked it to emit a git fast-import stream. Sadly, cvsps (which had been basically untouched by its former maintainer since 2008) turned out not only to have a whole bunch of unintegrated fix patches pending, but to be seriously buggy even after those were applied. There was a showstopper in the branch-analysis code that would often put gitspace branch points at the wrong place to represent the CVS history, and attribute files added just before the join to the wrong branch. Ugly stuff.


The worst bugs are fixed now, and I can prove it, because I built a regression-test suite and have been adding bug cases to it. But the process basically forced me to rewrite the cvsimport tool in the git suite. It uses cvsps, and it relies an ancestry-tracking option that I had to remove because it was broken. On top of that, testing revealed that git-cvsimport was itself a source of several kinds of conversion bugs which my new export code entirely eliminated.


So, then I had to do a round of politics to sell that fix to Junio Hamano and the git list. That negotiation seems to be done now; I expect to be able to ship a patch tomorrow that will be merged with a minimum of fuss. Alas, though, CVS is not yet done with me. Because through a peculiar accident I’m now the maintainer of yet another CVS lifter, parsecvs.


parsecvs is the code my occasional friend and ally Keith Packard – one of the co-designers of X – wrote to lift the X repositories from CVS to git. I found out when I was looking for a CVS-reading front end that Keith had abandoned it after it got its job done, after which it got picked up by somebody named Bart Massey who lost interest in it in turn. I had written them explaining that I wanted to dust it off turn it into something that could ship a fast-import stream to standard output.


Bart and Keith were radio silent, so I found cvsps, did a bunch of fixups, and its maintainer (Dave Mansfield) dropped it in my lap. Then, a week later, Bart gets back to me to convey me that he’s lost interest and I should probably take over parsecvs.


OK, now I have a duty. Both of these dusty hunks of code have fallen into my hands; I should figure out which one can do a better job, polish it up, and publicly end-of-life the other one so nobody puts future effort into a dead end. Which is when I started thinking about writing a CVS torture test.


Now my goal is to assemble a rogue’s gallery of CVS perversities, then test them against cvsps, parsecevs, *and* cvs2git (the spinoff of cvs2svn). Use the test to pick a winner by objective success, then end-of-life anything I’m maintaining that lost and pour my effort into improving the winner.


Though, actually, there’s another possible outcome for parsecvs; even if it doesn’t do CVS as well as one of the other two, it does collections of RCS files without CVS metadata. In one possible future, I test parsecvs against the Ruby rcs-fast-export maintained by Giuseppe Bilotta, which can only do RCS collections that are either multi-branch or multi-file but not both. If parsecvs turns out to be better, I’ll make the case to Giuseppe that the Ruby rcs-fast-export should be EOLed and replaced with a renamed parsecvs.


Anyway, this is a general request for the location of perverse and nasty CVS repositories that I can snarf and add to my torture test. Bonus points if they’re relatively small.

 •  0 comments  •  flag
Share on Twitter
Published on January 03, 2013 15:03

December 21, 2012

robotfindskitten – the Mayan Apocalypse Edition!

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?

 •  0 comments  •  flag
Share on Twitter
Published on December 21, 2012 12:35

December 20, 2012

Reposturgeon Attacks Tokyo!

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.


Fear the reposturgeon!

 •  0 comments  •  flag
Share on Twitter
Published on December 20, 2012 13:06

December 16, 2012

The Reposturgeon That Ate Sheboygan!

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.



If you tried running repodiffer on two repositories for different projects the output would be noise and coincidences. What it’s really useful for is comparing two different attempts to lift a repository. Don’t trust reposurgeon? Fine – lift your repo twice, once with git-svn or whatever tool strikes your fancy, then run repodiffer to see the differences. All the differences, not just those in the master tip state. I’ve already found one bug in git-svn this way.


There are few other new goodies, like automatic translation of .cvsignore to .gitignore files (trivial, really – the syntax is upward-compatible). Also, translations from Subversion now emulate Subversion’s default ignore-pattern behavior.


Also note the new web page comparing reposugeon to other translation tools. To be extended…


Fear the reposturgeon!

 •  0 comments  •  flag
Share on Twitter
Published on December 16, 2012 19:39

Eric S. Raymond's Blog

Eric S. Raymond
Eric S. Raymond isn't a Goodreads Author (yet), but they do have a blog, so here are some recent posts imported from their feed.
Follow Eric S. Raymond's blog with rss.