November 2007 Archives

Oddly enough, like Danny O’Brien, I spent a good chunk of the holiday weekend reworking my version-controlled home directory setup. This is my third time setting up a revision-controlled home directory, and I think I’m starting to converge on something fairly workable.

In my first attempt, way back when, I used CVS. After a while, that got to be fairly painful to keep up, and eventually I dumped everything out and lived without revision control for a while. In the end, that was just as bad or maybe even worse, so I returned to the “revision control uber alles!” position — only by now, SVN with the fsfs backend was available, so I used that.

Initially, that was good. I had (almost) everything in a single repository and a whole mess of scripts, symlinks and svn:external relationships holding the whole thing together. Every computer that I used had a checkout of some subset of this repository, and when I needed to set up a new computer, it was a matter of just a few minutes to bootstrap up the basics. The downside was that adding a new project was a pain in the ass, and getting it added in to all the various host setups where it needed to be was worse. The goal of the design was to allow different chunks of stuff on different computers — but in the end it turns out that almost all the chunks end up on almost all the computers anyway. Over the past month, I’ve been coming to the realization that I’ve not only optimized the corner case (adding a new host to the setup is fast, but I don’t really get access to new computers all that often, it turns out), I’ve also pessimized the common case (I add new projects all the damn time). When I got to the point where I was avoiding putting a new coding project into the right place in the repository because I didn’t want to jump through the hoops, I knew it was time to start over.

In the process of reworking the system, I’ve picked up a scar or two learned a few lessons about structuring SVN repositories, and I’ve ended up going away from the ‘one big repo’ pattern. One of the goals of the new design was to make it possible to allow more public access to my repositories. Since not everything can get dumped publicly right away, I’ll be doing some repository dumping and loading as I get things cleaned up — and dumping and loading parts of repositories is a pain. Much easier if everything is structured in small repositories to start with; then you can just dump and load at the repository level, which seems much more in line with how those tools want to work.

Another aspect of the design, related to being more public, was an increased usage of Trac instances, one per public project. I have the beginnings of what will turn into a ‘create new project’ script which will hopefully make the common case friction-free. There’s still a lot of utility scripting to be done around this system, but it’s young enough that it’s not completely clear where the automation wins are going to be.

My overall home directory organization is largely unchanged from the last go-round — having things in fairly standard UNIXy subdirs works well for me. The private dir is new this time around, because there are some things that you can’t share with everybody.

bin      # uncontrolled; primarily automatically generated symlinks
doc      # private svn repository
etc      # public svn repository for configuration -- bash, vim, etc.
lib      # uncontrolled; mainly locally installed emacs modules
private  # repository for private configuration details -- passwords, etc.
proj     # contains one dir per project; each dir is a distinct repo. 
         # some public, some private
src      # private svn repo of frequently used tarballs
tmp      # the junk drawer
var      # uncontrolled; logs

The public stuff is available for read-only access at If you see anything that you think shouldn’t be up there, do me a favor and holler back. Alternatively, if you see anything that you’re interested in hacking on — like the Catalyst-based browser-oriented RSS feed reader that I’ll actually release to CPAN one of these days, let me know and I’ll get you a commit bit.

Quoting Elf in Solidarity!:

In an article entitled Typical Special Needs, Anne points to an article in Time magazine about telecommuting. And one of the things she points out is that telecommuters complain about a lack of social interaction. The article goes on to talk about people who describe human contact as a need, and who go to great lengths to compensate for its lack or even simulate it when there’s none about. Nowhere does this article describe this need for interaction as a disability. Anne writes, “And yet, clearly it is a trait that must be accommodated if some people are to do their jobs properly and maintain their mental and emotional health.”


| No Comments | No TrackBacks

Dear LazyWeb —

I need a terminal emulator for MacOS X. I’m an Emacs user, and my forearms think that the key immediately to the left of the space bar is the Meta key. One of the frequent key combinations I use is ‘M-Q’, to reflow paragraphs and other text. The silly Mac persists in thinking this keystroke means “quit the current program”.

I used to run and just use xterms. Leopard apparently got the eff’d up juice all over the, so that currently doesn’t seem like a good option. I just quit iTerm for the last time before starting to type this post. I won’t get into the details at the moment, but suffice it to say that it also makes the baby Jesus cry big tears of pain. (Randomly garbling control characters is not an acceptable behavior.)

Is there anything else that’s going to suck less than (Ideally, something that doesn’t involve the phrase “and then I installed Ubuntu”).

Thank you O Great Lazyweb. May your surfing always be free of content filters.

On The Weakerthans wonderful new album Reunion Tour, there’s a song called “Elegy for Gump Worsley”. Now, clearly from the lyrics it’s about a hockey player, but I didn’t understand the last line (‘If anyone asks, the inscription should read, “My face was my mask.”’) until I looked at the Wikipedia page for Gump Worsley. Turns out not only was he an well known and accomplished hockey player (i.e., were I Canadian, I would have known this already…), but he was also one of the last goaltenders to play without a mask.

If anyone asks, the inscription should read, “My face was my mask.”

The song is awesome, most of the whole album is awesome, and when they came through town recently show was well worth the $20. Buy the disk, go to a show if you get a chance; people writing stuff this intelligent and layered deserve some love.

I spent part of yesterday standing up a Rubric instance at It’s configured so that links put into it are public, but the web-based account creation stuff is disabled. If you want an account holler and I can probably make you one.

Why do this? shrug These days, I’m feeling more and more like owning/controlling my own data as much as possible. Sure, I’ll miss out on some of the social aspects of, but it shouldn’t be too hard to modify Rubric to send any new entries back over that way.

I did have to do a tiny bit of hacking/munging/kludging to get things to work, and I carried on further and made a few further fixes/enhancements. All of those patches have been sent to the Rubric queue in; any further changes I make will be funneled in that direction too.

Via Charlie Stross, peek behind the OPEC media curtain:

‘Kill the cable, kill the cable,’ shouted the security guard as he burst through the double doors into the media room at the Intercontinental Hotel in Riyadh, followed by Saudi police. It was too late. A private meeting of Opec leaders, gathered this weekend in Riyadh for the cartel’s third meeting in its 47-year history, had just been broadcast to the world’s media for more than half an hour after a technician had mistakenly plugged the TV feed into the wrong socket. The facade of unity that the cartel so carefully cultivates to a world spooked by soaring oil prices was shattered.

As Charlie says, “Got a car? Fill it’s tank today — oil’s going up again on Monday (and the dollar’s going down).”