guitone 0.9 – “long time no see” release [updated]

I’ve released guitone-0.9 today. This is mainly a bugfix release which
contains only two new features:

  1. People can select the correct encoding for a file which is
    displayed in guitone’s diff dialog. Guitone is capable of setting
    and restoring a custom file attribute for diffed workspace files
    and automatically render the file with the correct encoding next
    time it is diffed.
  2. There is now a “Node information” dubbed info window which displays
    a couple of interesting information for selected workspace paths.

The usual download location for the new release is

http://guitone.thomaskeller.biz/g/download

Check the NEWS file there for a complete set of changes.

And before you ask – the Win32 setup file should be ready on Monday – I
don’t have access to a windows machine before… 😉

Update Unfortunately a small glitch made it into the 0.9 tarball release where qmake bailed out with a monotone error message “mtn: misuse: workspace required but not found” – this should be fixed now. Sorry for the inconvenience./Update

Hacking on the Train back Home

I’ve been in Hamburg today with two other colleques to show off a milestone of our current project at work. Since the customer was quite satisfied, I was in the mood and finished a short hack for the next guitone release: A node info panel. Here is the obligatory screenshot:

The panel shows a particular new monotone feature which just popped up in 0.41, but was implemented months ago on the Summit: Information in which revision a particular file or directory was created (“Added in”). People can click this and go straight to the revision selector in which they can retrieve more information about the revision, compare it with others and so on.

The panel probably needs some more polishing (i.e. I don’t know if the icons render so pretty in 64x64px on Windows and Linux as well, or if I have to downscale them to 32×32 there), but it should basically work.

I’m yet undecided if I should do another point release for guitone. Not much has changed since then, a few minor bugs have been fixed and preliminary encoding support has been added for the file diff dialog. My plan was to add support for the automate netsync commands in 0.9, but since they haven’t yet landed on mainline, it makes no sense to implement support for them on guitone’s side. (Thats the drawback if you have to implement stuff on monotone’s side yourself before you can actually continue with your main goal.)

But since I just got a note from Ulf Ochsenfahrt today that he built Ubuntu 8.04 debs of guitone I’m now egged enough to do finally finish the missing tests for the nvm.automate-netsync branch and get this hopefully implemented later on in guitone as well.

We’re git – Resistance is Futile

I just read today that Trolltec^WQt Software (a Nokia Company TM, blabla) plans to move their internal source control from perforce to git, effectively from October 1st (read here and especially here). Now I’m not crying a tear for perforce here, but rather worry about the other “left” competitors of git, amongst them mercurial, darcs and monotone.

There is an almost regular attempt of different people to persuage certain projects to jump the ship from monotone to git over the last couple of months. Somebody now even writes a to make the process even easier to get away from monotone… This makes me really think. Are we really so bad? Or is git just that good?

Git draws a lot attention off the “others”. While this is good for distributed version control in general, its bad for the communities around the particular projects. People like me who’re still attached to one of those systems wonder if the work they’re doing is still honored somehow, if it will attract “fresh blood” anyhow – new people who carry the ideas and development further. Or if all these people are just absorbed by… you know…

git – resistance is futile.

I don’t know enough of git to measure exactly in which areas its better or worse than monotone. Actually, I’m not even interested in that. I’m biased in the way that I like to stick with the tool I love. Monotone provides accuracy and data integrity above all. It tracks renames perfectly. Its simple, yet efficient cert functionality allows many custom use cases. There are more than three dozen hooks which let you customize the behaviour of monotone. The documentation and test coverage is great and the community friendly and very helpful.

Again, do I care how this compares to git? No, absolutely not.

Still, I’m not biased enough to convince other people to use monotone. I guess most people from the monotone community won’t do that. Not because we think we have a bad product, but because we have this liberal thinking that diversity is good and that people will find us themselves if they’re fed up with their old version control system. The problem is that people tend to be more fed up with cvs or subversion, than with git or mercurial to actually find us…

Of course a software project lives and dies with the people around it. When Graydon (the original author of monotone) announced his official retirement earlier this year, I wrote a message entitled “The future of monotone” to monotone-devel, which broke loose a huge thread afterwards. So while my initial fears that not many people were interested anymore in the project vanished a bit due to the overwhelming amount of answers there and also because of the upcoming European Monotone Summit, where quite a bit new work started, this feeling slightly comes back when I look at the actual results of the past months after the summit. The last release (0.40) lies back more than four months and while a couple of small things happened in the meantime, almost nothing improved in the important areas like networking and security. But of course its bad to just point the finger at other people, in the end I have not done anything in the core areas either. Maybe because these things are not important enough for me, maybe because I think monotone works nicely as is, and maybe because I’m not smart enough to create the needed machinery f.e. to enable partial pull (you know, one of this “killer features” people of big projects ask constantly…). Of course, the time factor is also good for an excuse.

So, should we all just move to git and forget everything else? No, probably not. But I’d certainly look quite close on the requirements for a new project’s revision control system. Maybe git is what you look for, maybe mercurial, and maybe its monotone.

Maybe you’ll just learn to love monotone once you tried it out just like I did and maybe you don’t want to see anything else afterwards… the monotone community, me included, would certainly give you a warm welcome then – thats for sure!

Qt Framework introduction

I did a small workshop on Qt today in my company, mainly to introduce the framework to my fellow developers. I think I did a good job, because I’ve seen the glow in their eyes while presenting the graphics view demos and the 2d paint engine amongst many other things.

Anyways, if you’re interested in Qt as well and want to get a short (German) introduction, snag the workshop slides from the Stuff page.

Better than grep

If you’re a programmer and you’re using a command line heavily, you’ve certainly come across a big nuisance in the usage of GNU’s grep utility: The verbosity you need to exclude files from being searched, such as backup files (*~ or *#) or any kind of vcs inventory stupidity like .svn or .cvs. (Did I mention earlier that this is one of the many reasons why I hate svn and cvs with a passion – for the fact that they clutter my workspace with this crap?)

Anyways, with grep you usually end up with something like that:

$ grep -R myterm | grep -v ‘\.svn’ | grep -v ‘~:’

or, to speed up your searches a bit and let grep not even crawl things you don’t like to see anyways:

$ grep -R myterm `find . -type f | grep -v ‘\.svn’ | grep -v ‘~:’`

Anybody else thinks that this syntax is just hilarious and totally overkill? So I looked at grep’s manpage for some kind of .greprc which I could define in my homedir and in which I could set all the things I want to exclude, but apparently no such file is acknowledged by grep.

Finally I did a Google search for “grep ignore svn directories” and found ack – a Perl tool which resolves this and other problems with grep. My personal feature highlights:

  • You can use real Perl regular expressions (no grep -r stuff needed)
  • -A, -B and -C options work just like I know them from grep
  • Output is highlighted with terminal colors and very much cleaned up in comparison with grep
  • There are predefined sets of file extensions to search, i.e. ack --php foo will search all php files (php3, php4, php, aso.) for foo, also with an option to exclude these sets with f.e --noperl

So I’m more than satisfied with this – if I would have only found this earlier! This saves my day!

Oh, I think I forgot to mention one absolute killer feature of ack – to quote the author:

Command name is 25% fewer characters to type! Save days of free-time! Heck, it’s 50% shorter compared to grep -r.

Go, get it while its hot!

Little Nickname Science

Its not that I’m a newbie, but sometimes I just feel that way. People start and talk in acronyms on IRC, and then it comes out that these acronyms stand for apparently famous people in the Free Software world I should know…

Lets start with an easy one: rms.

Yeah, that was easy. If you come across this nick in an IRC channel, make sure you don’t talk about the advantages of proprietary software, Richard Matthew Stallman may just jump at you and bash you with a big club.

Now, who might be esr?

Actually I learned about his nick not too long ago. He stumbled into the #monotone channel on OFTC last December and asked about the backgrounds of the monotone project. He prepared a paper of modern revision control systems at that time (I only have a dead link where it used to reside), but I guess most people will rather know him from one particular essay anyways, “The Cathedral and the Bazaar”: Eric S. Raymond.

Now, if esr is Eric S. Raymond, who might be rse?

If you’re working with web servers, and here in particular with the one from the Apache Foundation, you probably know of this one swiss army knife ™ which solves all your redirecting / load balancing / other weird use case problems – mod_rewrite! But actually, the person I’m talking about, is also highly popular for being the main author / founder of other popular Open Source software project, like OpenSSL, OpenPKG or RPM5: Ralf S. Engelschall. If you catch him somewhere and you’re using his software on a daily basis (like I do), do not forget to praise him ;).

Now the last, pretty hard one for me at least, I just learned today: Who’s famous for his nick drh?

I felt pretty stupid when I learned about his nick; after all I’m using his software on a daily basis as well – indirectly at least. He’s the author of SQLite (monotone’s database backend), the creator of CVSTrac (the inspiration for the nowadays widely used Trac project) and he has of course, like the other people I introduced here, his own wikipedia entry. I’m speaking of D. Richard Hipp.

So this was my Little Nickname Science. If you’ve similar anecdotes I’d love to hear them!

guitone 0.8 released – spring time is hacking time!

guitone 0.8 has been released today. Major improvements happened under the hood, the outstanding changes are:

  • guitone is now licensed under GNU GPL Version 3 or later. Please note that you’re now only allowed to legally distribute binaries which you’ve built with Qt 4.3.4 or later, since earlier versions of Qt are GPLv2-only
  • new “driver” interface to call certain dialogs of guitone from the outside, which should help for all sorts of integration wishes ondifferent platforms. A “TortoiseMonotone” project has already been kicked off at the last summit – currently residing on the net.venge.monotone.tortoise branch – and this project is still looking for help from people which are fluent in Python and / or the Windows API
  • numerous improvement in workspace handling (faster, prettier, more configurable, yatta, yatta…)
  • for a full list of changes check the NEWS file

You can download guitone at the usual location, a win32 installer (yes, we’ll have one!) should follow shortly.

Hide Qt GUI applications from the Mac OS X dock and menu

Starting with Qt 4.4 which was released a few days ago Qt now honors the

LSUIElement
1

setting in the Info.plist file of the application bundle. This is particularily useful to create bundled application which should not pop up in the global dock or menu, f.e. daemons which run in the background or applications like Quicksilver which are only accessible via a global key stroke or an icon in systray area of the menu bar.

Now, with guitone I recently had the problem that I wanted exactly this mode under OSX in its new “driver” mode, which lets you automate / script the access to internal dialogs (check the nvm.guitone.app-driver branch for more information), but it should not interfere with the “standalone” mode, i.e. the dock icon and menu bar should be of course shown there.

One way of accomplishing that would have been to create a separate binary just for this usage and only set the setting in this property list. However, even without knowing much of OSX’ Carbon API, I came up with a better solution, inspired by what Qt does itself deep inside qapplication_mac.cpp if it stumbles upon the LSUIElement entry:

GuitoneStandalone::GuitoneStandalone(int & argc, char** argv)
: GuitoneCore(argc, argv),
{
#ifdef Q_WS_MACX
ProcessSerialNumber psn;
if (GetCurrentProcess(&psn) == noErr)
{
TransformProcessType(&psn,
kProcessTransformToForegroundApplication);
}
#endif

}

This unconditionally transforms such a background application to a foreground application with a dock icon and menu bar. So all I had to do was to check my calling arguments if the driver interface should be used and if not, create the correct QApplication instance which brings the application to the foreground. Nice!

Now I only have to fix this one, very weird behaviour of QMetaMethod::invokeMethod which does not accept my argument list… *grumbles*

montone hackery

As promised a few days ago I’m writing a few words on the Monotone Summit which took place in Wuppertal from 28th of April to 4th of May 2008. I could only attend for five days because my train left already on early saturday morning, and I almost managed to get too late to it – must have been the absence of sleep, but lets tell the story from the start.

Before I arrived in Wuppertal on monday noon my feelings were a bit mixed about the event. On the one hand I had not attended anything like this before in my life, on the other hand I was completly puzzled what should actually happen there, because virtually no conversations or communication about possible topics happened on the mailing list beforehand. Given the fact that only seven people attended our little summit (me included) and none of the core hackers managed to ship over from the US, I was also unsure if it would actually become a success. Last but not least I was not sure if there was actually so much I could do for the project, being only a casual contributor who most of the time fixes UI / frontend bugs or works on the automation interface.

So after about five and a half hours train riding I found my way to the W-tec building and to the summit room we’ve been invited to use for the whole week. The ice broke pretty fast. Thomas Moschny, Dan Carosone and Lapo Luchini arrived earlier and were already discussing and working on different topics. Our hosts, Christof Petig and Siegfried Herbold, were also there and provided us with everything we needed (well, you know a programmer is satisfied if he gets coffein and occasionally something to eat :-)). Richard Levitte arrived later at the same day after getting horribly lost while navigating to W-tec by car. I must admit that I wouldn’t have done any better as a Swede in Germany.

Since our little crowd contained at least two interface gurus (Thomas Moschny, who is the author of TracMonotone and me obviously, the guitone guy), one of the main topics were improvements in the automation interface. We had and still have the strong belief that with a better, more complete interface it gets easier to connect monotone to all kinds of other software, thus increasing the uses and the amount of users over time.

Dan’s and Christof’s first topic was cvssync, which should help projects which are still stuck on CVS to get into touch with distributed version control much easier, by providing tools to push and pull contents from a CVS repository to and from monotone.

Lapo created a new grammar for selectors with the help of ANTLR which also led to many discussions during the summit (most of these discussions were lead by Dan :)).

On wednesday or thursday Lapo, Richard and Dan started on moving our existing, completly spammed MoinMoin wiki installation over to ikiwiki. The nice thing about ikiwiki is that it provides many different backends to version control systems, so our new wiki (temporary URL here) actually has a fully blown history, merge support and can be edited just from our local command lines – neat! My task later was to make it look a bit prettier and similar to what our front page looks like – easy, given the fact that I don’t do much else on my daily job…

Beside working on the automation interface (here especially ticker support for commands which need those, like f.e. push, pull and sync) I did some work on guitone. Lapo gave me input for the file diff dialog (which now displays correct line numbers).

Christof and me also started on thursday working on a TortoiseMonotone version. Christof stole some code from TortoiseHg (which astounded us is completly written in Python!) and wrapped his head around the Windows API, while I started the work on making interfacing with guitone possible, in particular preparing guitone on the other side to make it run mainwindow-less on request. This was actually pretty easy thanks to the fact that I introduced the dialogmanager wrappers in 0.7, so main windows and dialogs were only roughly coupled together.

(Lapo, Dan, Christof, Thomas M. and Siegfried [from left])

More stuff will probably fall out within the next versions of monotone and guitone, when more work and polishing is done on the projects which just started at the summit, so don’t expect that everything is already in place the next time you pull the development head of either project.

In the end these five days have been a great time for me, because I finally met some of the people I only knew from IRC or the mailing list and I got the strong feeling that the monotone community – despite of all the competition it has to face – is still alive and keen on working on this great software.

Christof was an awesome and gentle host for Richard and me during the time – we’ve had our own little appartment in his house and he managed to spend a lot of time during the summit for us even though he has a wife and two kids which obviously needed some care as well. This was not always easy, given the fact that our usual day started on 9:30am and ended between 12am and 2am in the morning. I guess he needs a vacation after this “vacation” – so Christof let me repeat my invitation: If you ever want to go east and visit Leipzig, you’re very welcome here!

(Richard and me)

Perverted Logic / Monotone Summit

If you like to have a laugh today, read this. Found via Rob Weir’s blog.


The Monotone Summit goes on and its quite fun to meet and work with all the people I just know from IRC or the mailing list. I mostly worked on automation stuff so far and improved some things in guitone. A longer blog entry with other impressions (and maybe some pictures) will follow within the next days…