Saturday, October 28. 2006
As some of you may have noticed, mutt-ng development came to a halt quite a while ago. The problem was that mutt-ng, in its original form, wasn't really maintainable anymore. We had huge issues merging changes that happened in mutt, as well as newer versions of the patches that we had integrated into mutt-ng. This led to a total lack of motivation to push mutt-ng development forward, and eventually all efforts were suspended.
Recently, I collected my thoughts about what could have been done better in the whole development, and my conclusion was that a fork can't survive without a certain user community, and the mutt-ng community never really got that big. Another big issue was the lack of the right tools, or at least the knowledge about them, e.g. we had absolutely no patch management.
The consequence of all that was that I decided to "restart" the whole project, but with different goals. The new mutt-ng isn't supposed to be a fork anymore, but instead a well-integrated set of patches against the latest version of mutt. I experimented a little bit with different patch management tools, and decided to use quilt in combination with a Subversion repository. For those who don't know quilt: it manages a stack of patches, and you can push and pop them. The patches themselves are stored in a subdirectory called "patches". When you're a certain patch, you can edit some files, and then refresh the patch so that your changes are reflected in the corresponding patch file. To change a patch to a newer version, all you need to do is to pop as far as the patch before the patch to be replaced, copy the new patch over the old patch, and push it. If there are any conflicts, force the push, correct the conflicts, and refresh the patch. Then push the rest of the patches, which usually works with no or little extra work. This means that managing a relatively big set of patches is quite simple, while quilt manages all the "dirty" stuff.
So far, I managed to reintegrate most of the patches we had in mutt-ng, and also to port some of the mutt-ng-specific features and bugfixes. The new mutt-ng isn't as complete as the old one, but its pretty usable, and the most important things like sidebar and NNTP support work already. If you want to have a look at the current state, read this description on how to apply these patches. As stated above, you will need quilt in order to use it.
Feedback is welcome, and I would also like to know if this new development model is desired and accepted by the community.
Monday, December 26. 2005
From December 27th to December 30th 2005, the 22nd Chaos Communication Congress (short: 22C3), a congress on "technology, society and utopia", also known as the "European Hacker Conference", is taking place in Berlin, Germany. Chaos Communication Congress proved itself to be a wonderful place to hack, to collaborate and to exchange ideas, and to meet new and interesting people. This year, we decided to register seats for the mutt-ng project at the Hackcenter, where most of the hacking is about to takeplace. So, if you want to meet us, talk to us, or contribute code and/or ideas, just stop by. Nico Golde and I (Andreas Krennmair) will be there from the 26th in the evening on, and Rocco Rutte will most likely join us on the 28th. We hope to get as much as possible done at the Congress, especially the ongoing mutt-ng rewrite will have our attention. See you in Berlin!
Monday, December 12. 2005
As some of you probably saw already, mutt-ng is currently in a rewrite phase. I would like to give some insight on why we started the rewrite and what's actually going on. When we were trying to improve mutt-ng with more and more features, we came across the problem that it was very difficult to actually identify and fix bugs, and how changes on some parts of the code would influence the overall behaviour and probably would add new bugs to the code. So we came to the conclusion that the only feasible way that would make it easier for us in the future would be a well-documented rewrite, as we had troubles seeing overall design goals, in fact, there was no documentation at all for the original mutt(-ng) design. So first, we started drawing UML diagrams of the overall design, using ArgoUML. These designs can be found in our Subversion repository. As soon as we had a reasonably usable design, we started with the implementation in C++, which is currently going on. Why C++? Because it's language that makes it reasonably easy to provide a clean mutt-ng implementation that reflects the UML design and makes it possible to take advantage of object-oriented features while retaining compatibility with existing mutt-ng code pieces, making it relatively simple to reuse existing (pre-rewrite) mutt-ng code. As mentioned before, one focus is on documentation. Rocco put some effort into documentation building: complete developer documentation of the source code can be automatically generated. Even better: the documentation is generated once a day from the most current source code, and put online here. The user documentation is auto-generated. More general information about the rewrite can be found on the mutt-ng rewrite page. This is also something where anybody who wants to contribute can do so: the user documentation and the rewrite pages are created in such a way that it's simple to translate it to another language. So, if you want to contribute to mutt-ng, just translate the user documentation to your native language. So far, English and German are available. Although there isn't much to document yet, we think that providing the documentation in as many languages as possible makes it easier to get a grip on mutt-ng, to understand it and to get them contribute by themselves. Besides documentation, there is another important goal on the rewrite: as much of the mutt-ng functionality as possible should be automatically testable. The buzzword for this is unit testing. The tool of choice for this is unit++, a very C++-ish unit testing support library. To meet our own expectations of high-quality code, we wrote unit tests for the core library and the mutt-ng library (yes, very modular design) practically in parallel, a development method that proved to be useful especially in big projects: as soon as a test breaks, you know that something has gone wrong, so continuously developing and testing makes it easy to detect hidden bugs. For refactoring, this is also very useful, as the unit test is part of the specification, and you can easily test your code whether it conforms to the previously defined (and expected) behaviour. We think that this will very valuable for future development. If you're interested in contributing to the mutt-ng rewrite, don't hesitate to submit patches. But please don't forget to provide useful documentation (a look at the header files shows what we mean) and unit tests. Documentation makes your code easier to understand, and the unit tests show that your code works, so providing both raises the chance of getting your patch included. In the future, we hope to be able to provide more and especially more often background information on the rewrite status.
Wednesday, October 19. 2005
In revision 553, we fine-tuned the scoring functionality of mutt-ng in order to make it more usable, especially for reading newsgroups. Basically, the fine-tuning consists of enabling patterns to match against the realname of headers containing mail addresses, e.g. From:, Cc:, To:, etc., which was deactivated before for whatever reason.
Continue reading "Scoring in mutt-ng"
Sunday, March 20. 2005
Yesterday and today, I refactored a few bits of the POP3 support in mutt-ng, to significantly improve readability. The big problem that the original developer of the POP3 support for mutt made was that he used a lot of "magic numbers" for different states, without explaining what these values mean.
Continue reading "Refactoring experiences"
Friday, March 18. 2005
If you have some experience with mutt(-ng) and can write LaTeX, then consider helping Rocco Rutte with the official mutt-ng manual. It contains the same as the SGML version, but this time in more beautiful LaTeX.
I just got the notifcation that mutt-ng is now officially in the Gentoo portage tree. This is great news, as it will help raise the name recognition of mutt-ng.
Tuesday, March 8. 2005
GRML 0.3 is the first distribution to ship mutt-ng. GRML is a live CD based on Knoppix and Debian, targeted at system administrators and text tool users. It's definitely worth a try, and I always have a copy of it with me with my work notebook (although that's still an older version w/o mutt-ng :-/). The lead developer of GRML, Michael Prokop is also the one who contributed the wonderful grml-muttng script that dramatically simplifies the creation of new mutt-ng configuration files especially for new users.
Sunday, March 6. 2005
Rocco Rutte started working on a new mutt-ng documentation with the focus on userfriendlyness and better structure than the old mutt documentation. Some parts have already been written, but most of the parts are still missing, so if you have some technical writing skills, and are interesting in contributing to a new and better documentation, don't hesitate to download the SGML source (LinuxDoc), add text where it is missing, and submit patches to Rocco.
Sunday, February 27. 2005
Kyle Rankin wrote a very good article about mutt-ng, briefly explaining the differences between mutt and mutt-ng, and showing some of the mutt-ng features. Thanks, Kyle! Oh, and he's linking to this weblog... 
Wednesday, February 23. 2005
As gass reported in the comments, there's an ebuild available to build mutt-ng on Gentoo.
This is awesome. The project doesn't even exist longer than a few weeks, and so many contributed packages. This is how free software/open source is supposed to work.
Tuesday, February 22. 2005
When you use the sidebar then it happens quite often that the mailbox or newsgroup name is way too long to fit into the sidebar. Well, to overcome this problem, I developed a new option, shorten_hierarchy, to "shorten" or compress mailbox or newsgroup names when they're in hierarchies. An example would be the newsgroup name de.alt.sysadmin.recovery. When you enable the option, you will see this name as d.a.s.recovery instead in the sidebar. Again, see below for some screenshots.
Continue reading "Shortening hierarchies in the sidebar"
The sidebar in mutt-ng now honors the imap_home_namespace configuration parameter. When you set this parameter correctly, you will have a sidebar that will take up less space and provider a better overview and readability. But see below.
Continue reading "Better sidebar with IMAP"
Monday, February 21. 2005
I was interviewed by Andreas Kneib for the German Linux User magazine a few weeks ago about the future of mutt-ng. The interview was printed in the latest issue and is also available online.
|