| < March 2008 | Matthew Loar > Blog | May 2008 > |
So I was both happy and irritated to find two boxes outside my apartment door this evening: happy because it meant I got to spend the night playing Guitar Hero III on my new Wii, and irritated that UPS had left them to sit in the hallway all day. How come they sometimes know to take things to the leasing office? Oh well.
So yeah, Wii. Lots of fun. I'm picking up Guitar Hero pretty quickly. Now I just need to pack up and do something with my superceded GameCube, and of course pick up all of the packing detritus. Now I know why Wiis are so hard to come by - it must take forever to wrap each individual piece in foam and seal it with green tape. :)
Last night was the last night of the regular bowling season. My team won the first quarter, so we'll be at the championships next week. Need to bring my A game.
And here it is 01:30 and I'm still awake. Something tells me I'm not going to be at the demo day in the morning. Oh well.
It has been a while since I did a personal post. Although, every time I try to do a personal post, it ends up pretty technical. Oh well, let's continue:
I installed Debian "lenny" on my laptop. It has been a while since I used GNOME, and I have to say they have done a great job in making a Windows user feel at home while addressing some of the most annoying problems with the Windows user experience. But there are still significant barriers to the average user setting up a Debian laptop themselves - wireless comes to mind. After the initial installation, there wasn't even an interface for my network card. Thinkwiki helped me figure out that it was because the firmware for my wireless card has a license that prevents it from being distributed with Debian. So I had to go to some site, get the binary blobs, and stick them in /usr/lib/hotplug/firmware. Then I had to figure out how to use wpa_supplicant. It turns out you can just stick some special options in /etc/network/interfaces and wpa_supplicant will do the right thing when you ifup the interface. This is cool, but it took me like an hour to get everything working, and I consider myself a very knowledgeable user. There are a couple network configurator things on my GNOME menu, but they don't appear to do anything. But I digress. The point is I have Debian on my laptop, and I have largely liked it. I still have occasional need for Windows on my laptop, though, so I have an NTFS partition that I will need to reinstall Windows on at some point.
Related to the last item, I have become addicted to this "Battle for Wesnoth" game. So much fun.
I got an email from Newegg this week - I had requested notification when they had more Wiis. So I bought one, and picked up Guitar Hero III for it at the same time. Should be here on Tuesday.
I still need to call Comcast. The signal strength on the digital channels abruptly dropped 30-40%, so now my digital and HD channels are nothing but artifacts and stuttering audio. It's Comcastic!
I finally booked my Vegas trip. I'm going the week after Independence Day and staying at the MGM Grand. Should be fun.
On Friday my sister graduated from massage school, and I went to the ceremony and then to the afterparty at the Rendezvous. They have this cool basement room called The Grotto that you can rent out, and you get your own bartender. Anyway, there I discovered that I like gin and tonic. So my liquor shelf now sports bottles of tonic water (diet, of course) and I have a couple limes in the fridge. I'm glad I bought that gin now, since I have decided I really do not care for cognac. Still need to get some more amaretto, though. But I digress...
Last night I went to an engagement party for Abbie's friend Jeff and his fianceƩ. Also fun.
Today I did nothing but play "Battle for Wesnoth" and then fight with Unicode support in terminal emulators trying to type the previous line.
So that's what I've been up to.
So as I said I would in last night's post, I read more of the Git documentation and various blog posts surrounding the topic. Now that I understand more about Git, I do find its model interesting. As I understand it, Git basically stores changesets as floating objects, and you have heads (which they call branches) which point to changesets, which then point to their parent changesets. You can pull random changes into a Git repository - it doesn't care. So you could have the Linux kernel sources in your repo, and pull in Samba, and then nuke all of the heads that point at the Linux kernel sources, prune your repository, and hey! You just switched your repository from Linux to Samba! What fun!
But as cool as that sounds, I've decided to stick with Mercurial. Here's why:
Append-only storage model. With Git, you have it creating new files all over. You're supposed to periodically run git gc if you want your disk usage to be reasonable. This also comes into play when serving Git repos over HTTP, as mentioned in the next item.
HTTP as a first-class transport mechanism. The Git documentation says that the preferred method of serving Git repos is running a daemon that listens on port 9418. HTTP is supported, but the documentation warns that its less performant, since it works the same way that the static-http transport in Mercurial. You also need to run some command to give your repository extra magic or something for serving in this way. Mercurial has a handy-dandy CGI script that is both a smart server for hg clients and displays a pretty interface for web browsers, which I greatly prefer, since I need another daemon running like I need another hole in my head.
More consistent commands. The Git documentation may be getting better, but there is still a dizzying array of different commands with different options.
I have been working with hg for a while now and really the only problem I have had is this thing surrounding named branches which ultimately is little more than an annoyance. So I'm going to stick with it and hopefully they'll come up with a good solution for it in a future version. Or I'll get bored some night and come up with something myself. You never know.
I also gave bzr another look. Apparently back in February it became an official GNU project. So from the perspective of avoiding projects backed by either Linus Torvalds or Richard Stallman, Mercurial is a winner. They recently released version 1.3. Thoughts:
Their interoperability is still lacking. The bzr-hg read-only support had an OMGINCOMPLETE warning on it. I tried to try out bzr-svn again, but apparently Jelmer's idea of "stable" isn't what you think - it bailed and told me I needed bzr 1.4. But the version they released all of a week ago is 1.3. I didn't see any other branch in his directory that was obviously meant for 1.3, so I gave up.
The bzr project is backed by Canonical, the same folks behind Ubuntu, and they have given bzr the slogan Version Control for Human Beings. That's just too funny.
Still no inline branch support. They have this lightweight branch thing that didn't work so well when I tried it last. Now, hg's inline branch support is what got me into this whole mess of looking at VCS again, so I don't hold this one against them too much.
Other than the branches on launchpad.net, there doesn't seem to be a pretty web interface commonly used. Some of the branches linked to from the plugins page give you the wonderful empty directory listing of a bare bzr branch.
And I guess I shouldn't neglect to mention Darcs while I'm at it. But it's late and I really should be in bed, so I'll be laconic about it:
Haskell
Tailor
'Nuff said.
P.S. To be fair, you could do the Linux->Samba thing with hg if you wanted to. But it would at least require a --force to hg pull.
That is quite possibly the dumbest title I've ever had for a blog post.
So of course after I bashed git in last night's post, I have started looking at it again. My dismissal of it initially was because of the lack of real Windows support, but that has become less of an issue for me. Also, apparently there is a native port of git for Windows now though.
Anyway, the first thing I'm going to do is get git 1.5, since it's supposed to be better or whatever. Not surprisingly, etch still has 1.4. I have been contemplating upgrading my home box to lenny anyway, so I might do that, or I might simply backport it.
Anyway, for what I said about its documentation, the user manual seems to be comprehensive and decent. It does seem that they reuse standard VCS terms to mean different things, though.
Anyway, I'll report back on how this goes. That nonsense I went through last night just to purge some badly-named branches from my repository may just push me to git.
A few days ago I read a comparison of Mercurial and Git. One of the things the author had to say against Mercurial was that it had a really bad model surrounding named branches. At the time I hadn't really used named branches, so I didn't think much of it.
Well tonight I was working on setting up hgweb so that I could deprecate my svn repository, and I ran right into this problem. When I set up my crazy hg stuff to track PuTTY development, I managed to create two named branches in my repository: the upstream branch (putty) and my local branch (PuTTY). Now since I was only exposing my changes by pushing to a svn repo, this didn't really matter much. But now that I was going to expose the repository for public consumption, I wanted more descriptive names.
Unfortunately, this isn't straightforward by any means. In hg, the branch name is an arbitrary string that is intrinsic to the changeset. It is included in the changeset description which is used to generate the changeset hash. So there is no simply no way to change it on committed changesets. You can make a branch inactive by committing on it with a different branch name, but this doesn't hide it from hgweb or the output of hg branches. And there is no way to prevent an attempt to reuse that branch name later from generating a branch-shadow warning.
I see this as a rather severe problem. There are some ideas on the Mercurial Wiki about how to address this, but so far nothing.
So I am currently attempting to do nasty things with hg transplant to rebuild the repository history with more meaningful names. It's a huge pain, but I still think I prefer hg to git. I had to use git the other day to check out the Ceph code, and git still puts me off. For one thing, there's this whole 1.4-vs-cogito-vs-1.5 nonsense I don't really care to understand. The crazy development-all-over-the-place model that git enthusiasts tout as its greatest feature is its greatest downfall from a usability perspective. And the documentation still sucks.
Yesterday Russ released remctl 2.12, which included my changes to build on Windows. It still didn't quite compile, though, so I have updated my patch with the necessary fixes. He's planning a new release soon, so hopefully after that it will no longer be necessary for me to maintain my patch separately.
You can find my updated patch on the remctl page.
| < March 2008 | Matthew Loar > Blog | May 2008 > |