Quick notes

Because I shouldn’t blog, but be fixing Krita bugs (although I’ve already fixed quite a few important bugs today.

Google delivered the Summer of Code t-shirt today. It’s a nice change from previous years, and Irina immediately liked it. Which is good, because I don’t wear t-shirts. She’s also got the Trolltech Developer Days t-shirt, with the word “five” in binary.

The Qt Software Developer Days in München were lots of fun. It was incredibly busy: there were about 550 developers and about 50 trolls. I don’t think we really fitted in the Hilton hotel anymore… Scary was the keynote where the Nokia guy told us that they were looking to expand the Qt Software development team ten-fold. I mean — where are they going to find so many top-class Qt hackers? Even scarier: someone else told me Nokia is looking for 3000 Qt developers in Finland. And at the same time, almost everyone I spoke to was looking for developers, too — half dozen for this company, a dozen for that company. Us, we’d have have been happy with just three suitable candidates.

The Qt ecosystem may be large and vibrant, but this is scary stuff, for a couple of reasons: if there are 500 people working on Qt itself, it cannot but dilute the quality of the development team and it cannot but make Qt balloon in size until it becomes as unmanageable for a developer as Java. And secondly, if Nokia hires all good Qt developers, there will simply not be enough developers for third parties — which means Qt becomes less attractive, less used and less interesting.

On the other hand, there’s so much exciting stuff happening. I am looking forward to being able to play with Project Greenhouse — if it gets open sourced, of course. It looks like a very nice and nimble IDE. The Cocoa and WinCE ports are great news; and I sure hope that Nokia will indeed bet their shirt on Qt, because at work we are faced with having to develop our mobile apps three or four times (iPhone, Android, WinCE, maybe S-Something), which sucks.

What I didn’t get was the astonishing eagerness with which Nokia doles out N810s. I mean, these are cool little things, but still just a tiny bit too GTK-based for a Qt conference, aren’t they?

Well, for the rest: it was great to meet lots of people, from KDE, from the wider Qt world. One evening a small group of us went into München, to a very cool little bar, a converted petrol station, where there was some excellent beer, nice music and a cool atmosphere. The other night, my colleages (Arend, who used to work on krdc, and Henk, who’s a born-again pythonista) went into town and had a great dinner in the Rathauskeller and a nice drop of beer in the Hofbrauhaus.

The Hilton, by the way, is a weird place… The beds are good, but the rooms cramped. I could, through the ventilation ducts, follow the goings-on in the neighbouring rooms on floors 11, 12 and 14. The food was pretty good, although I think Gerolsteiner mineral water is the most insipid mineral water I’ve ever tasted. The big, big bummer, however, was that there was no free wifi. Come on! This is, after all, the twenty-first century!

I was glad to go home, no wifi meant no contact with Irina. I managed to nail a nasty, nasty bug in Krita that only occurs when Krita is compiled with -O2. And last night we spent watching “Aanrijding in Moscou” with the family. It’s a long time since I’ve seen such a recently-released movie, but it was pretty good, really funny and really touching in places.

And now my compile is done: back to working on Krita!

Standing on the shoulders of giants

Is generally reckoned to be a Good Thing. Not-Invented-Here and solipsistic DIY frowned upon. The danger, of course, is when the shoulders one stands on come with feet of clay. If, for example, someone in the 16th century mis-interpreted a 12th century book and the mis-interpretation becomes the foundation of generations of shoulders, fun ensues.

So, just like the kilt isn’t Scottish, witches weren’t burned by their millions by the Church of Rome and Columbus wasn’t the first man to realize the
earth was a globe
, the Middle Ages turned out to be clean and not feudal at all.

Now for a historian who manages to undo the artificial separation between the history of the Christian West and the Christian East.

Cross-platform to the rescue

There have been discussions all over the place about whether it would be a  good or bad for the uptake of free software to make applications available for non-free platforms.

Having complained in the past about the way my daughters’ are forced to use Windows software for school, notably Microsoft Office.

So, when Naomi told me today she had to download an application to do some music homework I was filled with apprehension. Turns out the chosen application was Audacity! Plus some instructions to download a precompiled lame ddl…

Well, one apt-get install audacity later she’s in business. Now if only there  was a distribution that supports both sound and a usb wifi stick for her laptop, she wouldn’t have needed to borrow her sister’s laptop.

Lesson learned: cross-platform applications make the update of a free platform possible, even if the powers-that-be still live in benighted obscurity.

Libre Graphics Meeting is fun!

On Friday night there was a Grand Gala Dinner for all attendants. I got introduced to someone who was really, really complimentary about Krita, telling us that he thought our colour handling was much, much more logical and useful than even Photoshop’s color handling. Like, wow! Lots more compliments ensued 🙂

On Saturday, Cyrille and I gave our Krita talk. Right afterwards Cyrille presented his talk on OpenRaster.

The Krita talk went really, really well. I was almost mobbed by people wanting to talk to me after the presentation and all through the afternoon people came up to me to tell me they really liked our style of presentation, that they thought it was one of the best presentations they’d been at. And, did I have a business card for them? I should have asked the KDE promo team for a set — and I’ll be sure to do that when I get home.

During the talk someone asked me whether I intended to make Krita compete with Corel Painter. Dramatic silence… Then I said “Yes!” To which he said “Good!”. It turns out his wife illustrates children’s books with Corel Painter. She uses an older version — 5.5, if I remember correctly, because newer versions are too slow for here 600dpi drawings. Seems like we’ve got a new hard requirement for Krita! And then someone else jogged my sleeve and told me he’d been a Corel Painter developer a few years ago — and if I had any questions, I should be sure mail him about it.

The OpenRaster talk was great. It provided the catalyst for a great round-table discussion with all the experts present. From people who could provide input on the xml style we use to people who are really hot on color and color requirements. There are a couple of people I really. I feel outnumbered a bit compared to the large Scribus, Inkscape and Gimp teams, so Bart, Casper, Sven, Adrian, Emanuele and Jan really should have come! And then Clarence Dang for Kolourpaint, Gilles Caullier for Digikam (so he could have fight^Wdiscussion with Hubert Figueire on the best way to (ab)use dcraw) and especially Zack Rusin for general graphic goodness! I really suspect that this conference will rival and outclass siggraph in a few years, the level of energy, commitment and just plain expert knowledge is really great.

One thing I especially like about the atmosphere of this conference is the open-mindedness of the people around, users and developers. I’m loving meeting the Gimp people, the inkscape people, the scribus people. I’ve had a great talk with Peter Sikking, the Gimp usability guru. I’ve been going out for dinner & a beer with a group of panorama enthusiasts — one of them took not only a panorama shoot of the restaurant table, but also of the beer glasses in the bar! (Yummy beer and interesting beer, and live music.)

Of course, there are also moments that tie in tightly with Aaron’s blog. Jakub Steiner gave a presentation about photo management and editing with F-Spot and GIMP. Quite interesting to see him work with those applications, but his explanation at the end that free software was simply not ready for a 16-bit workflow so we had to make do with the 8-bit limitations of Gimp, Ufraw and F-Spot was a bit, well, parochial-minded. After all, with Digikam and Krita, you can go 16 bit from your original RAW image to the finished artwork without any trouble. Pity, but we’ll overcome that.

Regression testing

We’ve had quite a few release of Krita now — 1.4.1 in July 2005, 1.4.2  in October 2005, 1.5 in April 2006, 1.5.1 in May 2006, 1.5.2 in July 2006, 1.6 in October 2006, 1.6.1 in November 2006– and we’ve got 1.6.2 coming up for January and 2.0 for somewhere in 2007. The dot zero releases, 1.5 and 1.6 were accompanied by alpha, beta and rc releases. And still, with every release (except for 1.4.1) we had regressions — features that worked in the previous releases that didn’t work in the new release.

Do we suck and are too incompetent to code good software or is there another problem? Well, I’ve got hubris enough to believe that we don’t suck, that we, on the contrary, have a great team of hackers who dedicate most, and sometimes even all, of their leisure time to working Krita.

The problem is that software is complex: fixing a bug may cause a bug, improving usability for one feature may kill an unrelated feature. The code  that determines the size of a selection is a case in point: we use that in a lot of places for a lot of different things. It’s used in adjustment layers, in masks, in selections. Our architecture is not fragile, we just reuse a lot of functionality. That cuts two ways: a fix often fixes a number of unrelated bugs, and a fix may hurt a number of very nearly unrelated features. It’s the only way we can write software in a mere 70.000 lines of code that provides all the functionality Krita offers.

The problem is testing. And this problem is hard. For one thing, a developer is not a tester. A developer starts with a mental (or sometimes paper) model of how a certain feature is going to work. For me, that model is almost geographical, like a 3d landscape with features, landmarks and connections. From that model, the code is written, and then we usually exercise the code a few times to see if it conforms to the model. Given that we know the model behind the code it is next to impossible to come up with ways of exercising the code that don’t follow the model for developers. For another thing, we’re really, really pressed for time. Krita developers seldom have the time to use Krita for any tasks — I haven’t touched my real oil paints for more than a year now, let alone started a good painting in Krita.

So — what’s the solution? Is there any solution? Where should the solution come from?

To me, it’s obvious that we need real regression testing prior to a release. All functionality of Krita needs to be exercised — every feature needs to be used — and we need to keep track of what works and what fails. Alpha and beta releases don’t work for that. People installing an alpha or a beta generally do so to see whether a promised new feature is what they need. They don’t test the whole application rigorously. I think I have an idea that could work out. It combines the team spirit of our translators, the pride involved with buzz, cvs and bugzilla statistics and the accessibility of bugzilla (which, despite all claims, is not bad).

I would like a web application a little like bugzilla, where for every application testcases with test scripts can be added. The goal is to have the test cases completely cover the application’s feature set. Then, when a release is looming an application is put in test mode. At first, the application has been tested 0%. Everyone with an account can join the, say, Krita 2.0 Test Sprint, and pick test cases. The goal is to reach 100% of tests executed, but it’s okay if several tests are run more than once, by different people. Tests that fail are mailed to the relevant developers mailing list.  Successes, too, of course.

The whole thing can be jazzed up with statistics, adding a little gentle competition between applications in release mode, chat forums, irc channels and all the other things that build a community.

I have started coding on it, using Django, but my web application skills are meager, and besides, I need to flakify Krita in a hurry. So, there isn’t much more than a proposal for the data model. I might pick it up again, but I’d much rather hack on Krita — which is why I’m writing this blog. Any  volunteers? I’m not wedded to Django, and I’m prepared to install any web app environment on calcifer.valdyas.org for a test environment. If it pans out, we can look for real hosting.

Running Linux

Matt Welsh, Lar Kaufman

There’s an old Dutch song by Louis Davids, later re-used by Wim Kan that goes something like “Weet je nog wel, oudje, van toen“. I was irresistibly reminded of that text when I was laid up and had nothing better to do than to thumb through old Linux Journals (1995-2000) and similar.

In 1983 a shop advertised proudly that when you bought a BBC micro disk drive with them you’d get free instructions on formatting a disk! And if you’d buy a Vic 20 computer your enjoyment could only increase because there would be always another peripheral to lust after.

In 1988, rendering a 3d scene took hours on a mainframe computer. Games Machine, one of the last magazines from Newsfield, the publishers of the ZX Spectrum magazine Crash, did a special on the state of the art of graphics. And also one on child slavery in the software industry: apparently, in Great Britain it was fairly usual to grab bright teenagers and speed them up so they could code 24/7.

In 1995, Linux Journal carried letters claiming that the author would really like to use Linux, if only one little feature were implemented. Sound familiar? In this case, the ability to run SCO binaries on Linux (it was already possible with icbs). An advertisement tried to entice the money from your pockets by claiming to cut through all the bloat. Even then, people were curiously concerned about the great undefinable imprecation “bloat”. That was when Linux fit on a 20MB disk and 4MB of RAM and a 386sx at 32Mhz was enough to have a useful system for handling all your mail, news (using uucp) for several users.

So, firmly in nostalgia’s grip, I took my first edition copy of Matt Welsh and Lar Kaufman’s Running Linux from the shelf. Today the book is in its fifth edition and mostly written, I presume, by Matthias Kalle Dalheimer who now takes first billing. The fifth edition discusses KMail and the Mozilla mailer — the first edition reading email with Emacs and Xmh.

Reading it did bring back why I started playing with Linux in early 1994: the magic and glamour of UNIX — the real thing that until then I’d only met at the shell prompt of Hacktic and the machines at the place where they retrained me from a suave linguist into a nerdy keyboard maven. Sophistication. Power. Tinkering with X11 modelines until the baker opposite our house put the first batch of bread in the oven at four in the morning.

And the result: so much more useful and usable than Dos or Windows 3.11 — we had only one computer, but with my Psion Series 3, a serial lead and a terminal emulator I had a very decent terminal, so Irina and I could use the same computer at the same time.

Later, I ordered Running Linux and started learning about all the stuff that really counts: shells, tcl, tk, gdb, emacs, (vi was the mandated company editor at the place I had started working), gcc, fvwm, the X11 resource database, uucp, usenet (we used Taylor UUCP to get our mail and news until well into the 21st century).

And I got into my first, really stupid, discussion on why Linux really needed a GUI word processor that was better than Andrew… Matt Welsh even mailed me personally, telling me stop whining and start coding. He was right, of course, and at that point in time one could say “roll up your sleeves and get cracking” without being yelled at for being an elitist nerd who doesn’t realize that it’s his job to do the coding. I’ve still got my initial design somewhere. It was really, really bad. But the main reason my attempt foundered was that I didn’t understand the curses library, didn’t know C and that my 386sx with 4 mb of memory wasn’t really helping

Wonderful times!

Postscript: EZ did have a plainer and plainest keyboard shortcut: the first takes away the last style modification, the second all style modifictions on the selection. Cool concept…

My thoughts exactly

Joel Spolsky today on simplicity and taking features out of software. It’s interesting to note that the applications people are most enthusiastic about are the do-it-all behemoths that people live in, like Amarok, WordPerfect, Photoshop, Word — and those, if not free, are the applications that get pirated hard. Try finding an illegal copy of Photoshop Elements on bittorrent. Now try finding an illegal copy of Photoshop CS on bittorrent — that’s much, much easier.

Leonard Sax

Derek Kite’s blog about gender mentions Leonard Sax. I feel I have to chip in with a a warning: Sax’s book “Why  Gender Matters: What Parents and Teachers Need to Know About the Emerging Science of Sex Differences.” has been widely exposed as pseudoscience of the worst kind.

Sax is anecdotal, overinterprets his sources and more. He has a political agenda: he is the premier proponent of single sex education. The “science of sex differences” is mostly on the same intellectual level as “Men are from Mars, Women from Venus”.

Don’t read Sax (at least not seriously): read Language Log


As Terry Pratchett likes to have his characters say (Pterry being as fond of  his own jokes as the next man and liking to repeat them often), a metaphor is a lie. Which makes it surprising, given the propensity of software engineers to shout “Not True!” at the drop of a hat, that metaphors are so often used in our software: everywhere from basic concepts to icons.

We’re going to have a KOffice crash interaction design meeting next weekend at my place, and in preparation I’m reading up on my Cooper. One thing that has always surprised me is the use of metaphors in software. Cooper agrees: in chapter 20 of About Face 2.0 he talks about metaphors, idoms and affordances, preferring the latter two over the first. The big problem with metaphors is not that they don’t fit the way humans think, we do think in metaphors, but that they don’t scale and become stale so very fast. For example:

  • The clipboard. Who has ever seen a real clipboard? Outside old World War II movies? One of those cardboard thingies with a metal clasp on ’em? And how often on those real-life clipboard did you see words, sentences, small scraps of text, the odd image, long-play records, movie reels and complete folders from the filing cabinet held by that clasp? The clipboard on a computer is a metaphor, that is, a lie.
  • The pasteboard. Even more obscure, page layout design applications like Pagemaker use the pasteboard metaphor. That is, around the page you’re working on, you’ve got this great big desk that you cover with cut-out scraps of text and image that you’re going to glue in the right order on your page. I have worked that way, when I was a kid and prepared a monthly magazine on Andal — but as a metaphor, it should be retired.
  • Filing folders. I don’t know about you, but while my desk at work still has an arrangement for those folders that have a bit of bent metal in them to hang them from a frame so you can drop paper in it, I’ve never used them in the past decade. So inconvenient.
  • Forms. My favourite pet peeve. A dialog with checkboxes, radiobuttons, text areas and so on look just like my income tax statement… The metaphor still works, although the income tax statement is moving to a wxWidgets-based application, but to be reminded day in day out of taxes… Eugh!

On the other hand, I don’t see the problem with saving documents: I can handle a small working set of things I work on (my XEmacs has never more than a dozen open buffers), and a place where the things are moved for safety. But actually, instead of having to decide for every document whether I would like to save it or not, I would like to have that working set in a more literal way: my set of documents, organized in work piles per task, and the option (with a reminder, visually for instance through having my workspace too cluttered for comfort) to put the documents in a versioned safe place from time to time. Everything on that workspace should always be as I left them; including the last edits.