Fading Memories

About

Ramblings about books and other things that will soon fade from my memory.

Boudewijn Rempt

index | rss1.0

There's more...

Creative Commons License
The original artwork is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.

Roundabout through identi.ca

    follow me on Identi.ca

    Categories, too

    Find


    Archives

    Other things here at valdyas.org

    2006-12-27

    The Design and Evolution of C++

    Bjarne Stroustrup

    Buy this book.

    Since October 2003 I have learned to appreciate the C++ programming language. In fact, the better I get acquainted with C++, the more I like it. So, after having read Practical C++ by Ouailline, C++ in a Nutshell by Lischmer, Accelerated C++ by Koenig and Moo and a few others, and after having touched half a million lines of C++, I thought it time to go to the master for instruction.

    Which is why I bought a second hand copy of The Design and Evolution of C++, and later also The C++ Programming Language. Even though it's an old book, dating back to 1994 (stone age, practically, no mention of Java or Python in this book), TDaEoC++ was exactly right for me. I like reading the combination of a historical treatment and a discussion per "feature" or "problem area" much more than a language specification or a tutorial-style book. I feel I've got a much better understanding of why things are the way they are in C++.

    Of course, it's also an advantage that Stroustrup is a clear and entertaining author: not too dry, but not trying to be overly funny either. If I wanted to niggle I'd say that Stroustrup is a little too defensive, although that's understandable given the flak that C++ has been getting since its inception.


    Regression testing

    Sven Langkamp took up my suggestion and learned Django over Christmas. The result: the very small and humble, but nonetheless promising beginings of a regression testing web application. I've just added it to KDE's subversion repository:

    http://websvn.kde.org/trunk/playground/devtools/koregressions/


    2006-12-24

    We've got a couple of feet in our sights

    KDE does some excellent things, like producing great technology in a great community of great individuals. But at the same time we've got a singularly sure aim at our own feet.

    With 3.0, we managed to turn away nearly all people who switched to Linux at that time because we made the ugliest widget style in history, Keramik, the default. And because that was at pretty much the hey-day of switching to Linux, we lost out big-time. Anecdotally: all my colleagues at Tryllian who were KDE users in the 2.0 days or switched to Linux in the early 3.0 days switched to Gnome because they thought KDE incredibly ugly.

    And now, with KDE 4.0, we're on track to build the flickeriest desktop ever released since Windows 2.0 made its debut on monitors with a 60hz refresh rate. Applications change all their widget and window colors on focus change. (Except for the window title bar, it seems, that will stay the same color no matter what, or so I am told.) Imagine this: a 20" wide screen monitor with a sovereign application, like KWord open. Press alt-f2. Everything but the window decoration and your document will change color. Press escape. Everything will change color, again. My whole monitor will flicker.

    It's a bad idea, but that's not all. Because Qt4 still is, sorry to have to say this, slow as frozen treacle when it comes down to painting on my Ati X600 card (no matter which driver), in all probability, I will have pressed escape before Qt has finished redecorating KWord to the inactive state. So, the app gets focus again, finishes painting itself as if it hasn't got focus, then start repainting itself so it looks like it's got focus.

    Foot, meet gun.


    1pi and 1pe

    1pi and 1pe are linguistic abbreviations for first person plural inclusive and first person plural exclusive respectively. Some languages, like Limbu, make this disctinction pretty thoroughly. Pronouns and verbs differ in form according to whether they "we, including you" is meant or "we, excluding you" is meant.

    Read more ...


    2006-12-23

    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.


    2006-12-22

    Running Linux

    Matt Welsh, Lar Kaufman

    Buy this book

    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.

    Read more ...


    2006-12-20

    Photoshop LAB Color

    Dan Margulis

    Buy this book.

    Larry Marso wrote to the KImageShop mailing list in January 2006 about this book (two chapters are freely available). It deals with the LAB colorspace and the ways LAB makes it easy to completely mess up, I mean, fix, your photographs. Larry wrote us because just then we had added a 16 bit/channel LAB color colorspace to Krita, more because we needed it as an intermediary than because we knew what people would actually do with it.

    Now, about a year later, I decided it was time to get the whole text and see whether Krita can Do This, too, already. I haven't started with that yet, for two reasons: first, I was in hospital, second: the demo files that come with the book are not in nice application-independent TIFF (or OpenRaster...), but in PSD, PSD > version 6, to be exact. I have to hope that Cyrille Berger hurries up with his libpsd (which he's developing together with the Scribus people).

    Until that's done, I'll just have to content myself with reading the book. There's no doubt that there is a lot of interesting and good information in it. I really want to give Margulis' recipes a try with Krita, and improve Krita where necessary. But at the same time -- oh my gosh! Margulis is a crashing bore. He's self-important, self-congratulatory, wordy -- in short, nearly unreadable. Still, I'll probably wrestle my way through most of it.


    The First Betrayal

    Patricia Bray

    Buy this book

    I had to go to hospital for a small operation (that nonetheless entailed my first night in a hospital), so I had to have some light reading. This book looked like the most likely satisfying on the fantasy and science fiction shelves of the local bookshop. I had never heard of the author, which is a plus for me, and the world building seemed quite nice, even if a little derivative, with strong echoes of late Byzantium and a map that looked a bit like the Black Sea. And despite being the first of a series, it didn't seem the usual hackneyed first part of a polylogy, but a rounded story.

    Turns out that it was good choice: there are interesting people in the book, shades of moral good and bad, the world building is as interesting as it seemed at first blush, the intrigue is complex, but not too complex for my nose-stuffed-up-with-sponges-and-bandaged self. Only near the end it seemed as if Patricia Bray got into trouble: she has set up her various plotlines so that there simply isn't good or bad anymore and it becomes difficult to emphathize with any of the protagonists. But that's quite realistic, too, and the depictions of imperial politics, while not quite as convincing as, say, Psellus (who really was in the thick of it), are convincing.

    Another strong point: the main protagonist's condition remained a mystery to me for as long as it remained a mystery to himself, despite carefully crafted hints. To me that shows that this is a well-crafted story. I'm looking forward to the second story about Josan -- even though the preview at the back seems to hint that he won't survive the first twenty pages.


    2006-12-11

    Libre Graphics Meeting 2007

    Canada, here I come! Cyrille and I have just booked our tickets for Montreal for the Libre Graphics Meeting 2007! I already do not like flying, so flying for six or seven hours is definitely dreadable. But the prospect of seeing Canada is enticing -- Irina has been there before, for a roleplaying games meet of the old rpg advocacy usenet newsgroup, but it's my first time.

    May... We should have something interesting to show the free graphics community by then!


    2006-12-10

    OpenGL Application Design

    Does anyone know of a good resource for designing an application around OpenGL? The Red and Orange books don't deal with that, really, just with making use of the API's. But as Frederick Brooks has famously said, "Show me your flow charts and I shall remain mystified, but show me your tables and I will be enlightened".

    For Krita 2.0, we would like to take our use of OpenGL even further. Not just for rendering and zooming the canvas, but we want to make it possible to write filters and brushes in shaders, maybe even layer composition. Cyrille is laying the first stone by making it possible to replace colorspace functions in the Pigment library like convolveColors at runtime with more powerful equivalents, like MMX or AltiVec routines -- or OpenGL routines. And applications like Tom van Laerhoven's Waterverve (unfortunately not downloadable, the link goes to his Phd thesis) work entirely as Cg shaders.

    But how do we best design our data backend for optimal OpenGL usage?

    Like most applications, Krita uses tiles, that is memory areas of 64 by 64 pixels. I am thinking of something like this:

    • Store as many of the most-recently used tiles as possible as textures in the graphics card, if OpenGL is enabled
    • Store a certain number of the second-most recently used tiles uncompressed in memory.
    • Compress the tiles that haven't been accessed for a long time (based on Ariya's code, we've made a start with this step)
    • If memory gets tight, swap out the compressed tiles

    Now there's a problem: because we really, really want to make life easy for plugin developers (and their life is very easy!), we don't expose the tiles in our API. That means that colorspaces get a pointer to a chunk of chars in memory, that tools, paintops and filters always work with iterators and so on.

    But how do our optimized OpenGL shader programs get access to the pixel data? It would be a bit of a waste to copy the relevant data into a texture before letting OpenGL work on it, so the OpenGL routines must access the textures that are already in memory directly. And at this point I'm stumped.

    Hence the query: is there a good book about these issues? Or does the communis opinio hold that it is impossible to write a single application that works well without OpenGL but better with?


    One Ruler Class to Rule the World

    In KOffice 1.x, Krita had its own custom ruler implementation, while KOffice had another, KOffice-wide ruler implementation. The reason for this was that KOffice uses Postscript points (of which there are 72 to the inch), while Krita uses pixels. And pixels notoriously don't have a size.

    In KOffice 2.x, Krita knows how big its pixels are, so it suddenly becomes possible to re-use the KOffice ruler implementation. Which is exactly what Casper Boemann did yesterday: use the KOffice rulers in Krita:

    Currently, the rulers show the scale in points: soon this will be settable, or configurable. We're discussing this: is it useful to have a widget, for instance in the top-left corner between the rulers to cycle between the units (points, millimeters, inches, pixels etc.), or is changing the unit you view your image in something so seldom done that it's better to put it in the preferences dialog?

    Also note the extension to the statusbar: Monday David Vignoni will start working on icons to replace the radion buttons, but the slider and the text box will stay. This is the "view bar" where you can set the zoom level of your document. Also coded by Casper in the last week.


    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.


    2006-12-09

    Lecturing on Krita

    Fabrice Mous had asked me to give a presentation on Krita and KOffice at today's NLLGG (the Dutch LUG) meeting. Which I did: you can download the Dutch presentation here. It went quite well, all in all, I think. My text and my slides diverged fairly soon, so it became more of a lecture than a presentation. Especially because there was a whiteboard, so I could sketch out concepts like brush simulation and so on.

    I've touched on the history of Krita development, the way painting can be simulated, color management, krita-as-part-of-koffice and more. Usually I finish much too early, but this time I overran by about twenty minutes. Nobody seemed to mind, and near the end, when I talked about the user survey we did a while ago, a gentleman in the public told us about his use of KOffice in the school where he teaches and delivered a ringing encomium for KOffice!

    Afterwards there were drinks in a restaurant close by. I went, had a nice chat with people who had only just discovered Krita (a surprising number, actually, had only heard of Krita in the past month), but left really soon. The room was very smoky and it turns out that my tolerance level for tobacco smoke has dropped more than I thought. After all, I used to smoke a pipe regularly (that is, about once a month) and I grew up in a house filled to the rafters with a permanent blue haze.

    Another observation: SuSE is still really popular as is KDE. I had not realized how strong SuSE has been in the Netherlands, probably because at Tryllian there has always been a strong Debian culture with a Mandriva undercurrent.


    Upgrading OpenSUSE

    Thursday night I upgraded calcifer, the little webserver, mailserver and more that's also bringing you my blog to OpenSUSE 10.2. For development I'm using Kubuntu, but for a server I have a hard time doing without Yast. And, having used SuSE since version 5.something, almost all my system administration skills are, in fact, SuSE skills.

    That said, upgrading a SuSE system to a new version has never been smooth. This upgrade was among the smoother -- it just took a very long time, so I was disconnected from the wide world for an hour or two. But in the end, only a few relatively unimportant things broke:

    • I had two soundcards on this system (it's also my upstairs desktop), now I have none.
    • My laserprinter disappeared from cups, and when I added it, it mysteriously lost its ability to print landscape.
    • Somehow the GD module which is used by Authen::Captcha, which makes my blog a slightly less popular fairground with comment spammers, disappeared, so my blog disappeared, too.

    On the other hand, the webserver, mailserver, mailman installation and cvs are still working, and I'm looking into installing planet software for Thomas to play with -- he wants a planet that aggregates all blogs that have to do with OpenDocument and free office software.


    2006-12-05

    As exciting as watching paint dry

    Cyrille fixed a bug in Krita's watercolor simulation yesterday. This is a special colorspace, based on Raph Levien's Wet Dream prototype. Raph wrote this code for eventual inclusion in the Gimp, but it never got that far.

    During my lunch break today I discovered why our automatic drying left nothing but small one-pixel wide trace of your last brush stroke: we flowed, dried and adsorbed the previous state of the canvas, instead of the state right after painting. The temporary fix is to make every drying step an undo stage. This sucks, but at least allows automatically drying of your wet paint:

    And all this work for something that nature does without any effort!

    (Note that Krita already does something Corel Painter has only learned in version IX: save and load the wet state of your painting. Close Krita, start again, load your image and it continues drying until completely dry.)


    2006-12-04

    Smudging

    We're all working hard on Krita 2.0 -- but now and then Cyrille codes a little tasty something for the 1.6 branch. Just to keep in form. The smudge paintop is one he coded yesterday. As Bart Coppens said, so laughably simple that we could have done it three years ago. Today Bart added some more support for playing with the pressure of your tablet, and presto: a nice feature for Krita 1.6.2, which will be released in January. Ronan Zeegers, who did the great toolbox icons for Krita is going to do a nice icon for this paintop.

    Paintops, by the way, are a rather a special thing in Krita. We've got the ordinary tools, like freehand and line and curves, and the ordinary potato-stamp brushes every paint application since Mac Paint 1.0 has had -- but for added power, things like airbrush, soft brush, smudge, chinese brush (in 2.0) and others are implemented as little plugins that work with every tool that wishes to draw a line, including the selection tools. I'm rather proud of this idea (I came up with it myself a year or two, three ago), and it is working out really well.

    If you feel like giving coding a paintop a try, begin with reading our plugin writers' manual -- and don't hesitate to contact us on freenode, #koffice or on the mailing list!


    Resolution

    Up to now, Krita thought in pixels, just pixels. A pixel is a pixel on screen or a dot on the printer, no questions asked, no lies told. But while I'm personally comfortable with that (I haven't got a colour printer anyway and therefore don't design for paper), it's definitely Not Good Enough. So Casper Boemann yesterday started implementing real resolution in Krita.

    Read more ...


    2006-12-03

    Belenix

    I've long wanted to give OpenSolaris a try, but the vmware images I could find didn't boot into X11 and it was generally speaking a hard slog to find anything that ran KDE. I've got an ulterior motive, of course: we sometimes get bug reports about Krita not compiling on Solaris (notably 106891 125439 and 125446, and I want to be able to test fixes. Besides, SunOS was the first Unix I worked on, and I am as sentimental as the next person.

    So I was rather delighted at Aaron telling the world about Belenix. This OS must have the coolest logo ever, not to mention the cool Asterix connotations:

    The Live CD booted on my laptop without any trouble, but, unfortunately, my wireless network card didn't work. This is the same card that Kubuntu uses successfully during the installation stage to hijack my neighbors w-lan.

    Still, that's a minor thing: I'm not one of those who whine "just add this one little feature for me, and I'll use your stuff!" -- I'm sure I could discover how to make it work, or, alternatively, make do with a wire.

    More interesting, perhaps is this: KDE really needs to have a unified system administration front end that works on all operation systems. My goodness - OpenSolaris is different -- I had no idea I had become so much indoctrinated with the Linux (Slackware, SuSE and Kubuntu) way of doing things. I couldn't find my way at all...

    Another observation: the Belenix guys are cool. They show the readme notes in a real xterm inside vim. How's that for not pandering to the masses! For the rest, there are, as Aaron said, some wierdnesses on their desktop, primarily caused, I think, by having xfce as a basic with KDE overlaid on it. Still, it's cool. Much cooler than Nexenta. If only because of the logo!

    Oh, and although I couldn't find, the release notes say Belenix includes KOffice! I guess my Solaris compile problems were already solved, then.


    2006-11-30

    The desire for unity

    I've been watching from the corner of my eye the life videocast from the Church of St. George today. The Patriarch of Constantinople and the Pope celebrated the Holy Liturgy of St. John Chrysostom. I was hoping for a miraculous restoration of full communion -- for the Patriarch to beckon the pope with the chalice, or something like that.

    Read more ...


    2006-11-29

    A lesson in usability

    I've just been helping a friend of ours to get up to speed with her new Macbook Pro (latest model, very nice!). She's a theoretical physicist and a composer and needed a word processing application. Besides, there were were a couple of things about her new mac she was unsure of. Sitting next to her was as educational for as I hope it was for her. Lessons learnt:

    Read more ...


    2006-11-14

    Lenoard Sax

    Derek Kite's blog about gender mentions Leonoard 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 instead!


    2006-11-13

    AOL!

    I've been sitting on my hands for the whole day, ever since I read Ongoing this morning... By now I've read the blogs and seen the webcast -- and I still simply must chime in:

    Hurray!

    Sun is just doing everything right: the right licenses, the right language (notice the GNU/Linux on the announcement graphic? The licenses are the right licenses -- being a Java drone suddenly starts feeling right.

    Of course, a move like this is going to have a lot of influence. What will happen to Mono? Even, what will happen to DotNet itself? How will Jambi fit? Will we perl KOffice into a pure Java application? May we go as far as expecting imminent peace in the Middle East?

    Someone who isn't worrying is Mark Wielaard, the GNU Classpath maintainer. He's loving this: read his blog.


    Scaling revisited

    Krita's scaled used to be, at least in my memory, a lot better than it's now. The change came when we went from scaling code that was channel-depth dependent and scaling-specific to channel-depth independent generic transform code. Today I put the old code back and special cased it for 8 bit rgb, cmyk and grayscale code. Let's see if it makes any difference. The image was scaled from 1200 pixels width to 400 using the default settings. Just open the dialog, set the width and press enter. That's what I always do anyways.

    The generic code:

    Michael Thaler's quality optimized code:

    Gimp:

    And now blown up to 800 percent:

    The generic code:

    Michael Thaler's quality optimized code:

    Gimp:

    The Gimp may still be a little better than Michael's code, which gives results that are just a little fuzzier, but the quality difference between the generic Krita code and Michael's code show that my memory hadn't betrayed me.


    2006-11-11

    Look what Karbon can do...

    Karbon in trunk has gained an amazing new shape (and because it's a Flake shape every other KOffice application can or will be able to use it, too.) Starting out with a simple star, Jan Hambrecht has created these wonderful objects:

    (I defiantly scaled the image with Krita, but I must admit that we've got a regression here. At one point in time, our scaling was really good.


    2006-11-10

    Flake 2

    We're having another flake weekend at my place: Thorsten, Thomas and Sander are already here, we're waiting for Jan Hambrechts, the tireless Karbon hacker from Berlin. Sorry Ellen for abducting a Berlin KDE hacker to the Netherlands!

    Tomorrow we're going to do some interaction design, decide on a common UI vision (hopefully) and do a lot of high-bandwidth code design. I want to get as much of this done, and not so much actual coding.


    Must read

    "I have nothing to hide" - or the Sainsbury's Lesson. It explains why Irina and I canceled our library cards when the library started keeping track of not just which of their books we had at home, but also of the books we ever borrowed.


    2006-11-06

    Metaphors

    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:

    Read more ...


    2006-10-29

    A short and refreshing holiday

    We have just returned from a week-long holiday in Egmond. We rented a little summer cottage for an autumn week, just like my parents used to do when I was a kid. And it was lovely -- the sea stirred by the wind, mighty grey clouds, dunes painted gold and gray by quickly changing skies. Beer and pancakes on a terrace in posh-posh Bergen, Dutch-Chinese comfort food in the Egmond Binnen Chinese restaurant, served by a waitress who was surprised that it was possible for kids to actually want to drink tea, a herd of wild horses grazing in the dunes north of Egmond aan Zee and much more.

    More images available for them as likes a horsey wallpaper...

    We rented bikes for a day and visited the village where my parents were living when I was born (in the hospital in Alkmaar) -- Egmond Binnen. Wonderfully preserved place. This is the church where I was baptized:

    The dust removed from my lungs, energy to work on stuff has redoubled. I discovered the existence of illustrators as a likely target audience for Krita and saw Rembrandt's incomparable sketches in the Rijksmuseum.


    2006-10-21

    A level filter

    Spurred on by discussion in bugzilla, Frédéric Coiffier implemented a level filter for Krita, one of the things Krita was notoriously lacking. Yay for Frédéric!

    Oh, and I got my aKademy award, as you can see from the above screenshot. This Motorola phone George sponsored is really cool. You can even type Chinese on it. It speaks and understands English. It has gadgets galore. And the Qt interface is so easy to use that finally I've got a mobile phone that I can actually use instead of curse. And take a look at the certificate!


    2006-10-18

    L*a*b*

    As Cyrille says, the people who really, really need CMYK are a limited group. Still, having CMYK is an important thing because it's the easiest "other" colorspace to implement that still needs icc profiles. (Grayscale is actually quite hard to do correctly, and the very best algorithms to convert to grayscale are horribly patent-encumbered.)

    But the real fun starts with L*a*b*. As Photoshop LAB Color: The Canyon Conundrum and Other Adventures in the Most Powerful Colorspace by Dan Margulis shows, the L*a*b* colorspace really allows for some powerful image editing techniques that are nearly or totally impossible in rgb.

    Which is, of course, that I'm inordinately proud that Casper Boemann and me have managed to implement L*a*b* for Krita. You can paint on it, tweak channels and everything. There are limitations: the convolution filters temporarily convert the pixels to rgb and back (fixed in trunk) and we haven't got all the filters and dialogs in place that make it easy to use the power of L*a*b* -- but that's something everyone can help with, now the hard work has been done.


    A tonne of code

    KOffice is steadily growing. While we've not reached really gargantuan proportions, Krita has passed the 100,000 lines of code mark in trunk -- and that's with the color library, pigment, moved to the koffice libraries. Krita 1.6 is 108,000 lines of code, while the Gimp is 600,000 lines of code. Some of that is due to C needing more lines of code for the same functionality, some of that is generated during compilation, but there's also a difference in functionality. The Gimp has many more filters and tools: lots of stuff Krita doesn't have. Yet. And I suspect Photoshop to be in the multi-mloc range.

    Last time I used sloccount on KOffice, the result was around 630.000. That was October, too. A year ago, kspread was still bigger than Krita by 10.000 lines. A year later, we're at:

    Read more ...


    Krita progress

    Krita 1.6 has been released, and while there may be a 1.6.1 release in November with bug fixes, my own attention has been focused on Krita 2.0 since the end of the summer. Porting to Qt4 is mostly done; now we're starting to use Qt4 features, like the Arthur paint system and the much improved dockers and tablet support of Qt4.

    Krita now shows -- faintly -- the bits of layers outside the image area in the borders of the window:

    Because of the canvas work, I've disabled the dockers a bit. Qt4.2 gives excellent feedback when dragging and dropping dock windows. It is possible to place dock windows in tabbed rows and everything. There are a couple of gotcha's though:

    • It's not possible to define dock windows to startup in tabbed positions.
    • When tabbed, the tabs go completely mad because of KDE's automatic underscore accelerator adding -- this can take up to 99% of your cpu.
    • It's not (yet?) possible to have the tabs above the docker -- necessary to achieve that perfect Photoshop look!
    • While Qt automatically restores the position of the dock windows when you close and restart your application, this sometimes goes wrong
    • I haven't figured out how to mix Qt's actions with kxmlgui so there are no menu options yet to show or hide the dock windows.

    But I'm quite confident that these problems will be solved by Trolltech before we release KOffice 2.0

    Update: Actually, Simon Hausmann mailed me to say TT solved the first problem already in Qt 4.2: http://doc.trolltech.com/4.2/qmainwindow.html#tabifyDockWidget.

    The KOffice tool/pointer system is something I'm working on right now. The idea is make it possible to have a different active tool for every pointer device attached to your computer: so, if you've got a Wacom tablet, you'll be able to have, for instance, pan linked to your mouse, paint to stylus, erase to the eraser end of your stylus and maybe the paint tool but with the airbrush paintop to your airbrush. This already works a bit in Krita 1.6, but for 2.0, this will be possible in all of KOffice.

    Now if I could wangle an Intuos tablet with a couple of tools, I would not only be able to test whether this code works (better than in 1.6), but I would also be able to make use of all the cool extensions to QTabletEvent in Qt 4.2.


    2006-10-04

    Err... No, not really.

    The thread is long, yes, but to say that matters have come to a conclusion, that it is possible to even arrive at an executive summary is premature. As far as I'm concerned, there have been no conclusive arguments in favor of Scott's summary. But since the discussion is now apparently to be held in blog form, here's my summary.

    Read more ...


    2006-10-01

    Getting at pixels

    As discussed in my blog on graphics libraries, common schemes for storing large images are tiles, scanlines and blocks of memory as big as the width * height * size_of_pixel. Tiles are the most common, though. Photoshop, JAI, Krita, GIMP, GEGL, MosfetPaint -- these all break up the image in small squares.

    The big difference is in how the application or plugin developer accesses the data in the tiles.

    Read more ...


    2006-09-27

    Investigating Image Libraries

    There's a tremendous effort being expended in the free software world to create great raster image applications. And that means that there are also a lot of free or open source libraries that could be used as the basis for an image editor application. Still, most applications use their own core. Krita has pigment for color management and kritaimage for pixel manipulation.

    Read more ...


    2006-09-25

    Generous!

    Today I got the official award notification mail from Albert Astals Cid. Seems like it's not just honor I'm getting -- very generously Staikos Computing Services has sponsored two high-end Linux mobile telephones, one of which I'm getting.

    The incredible Laurent Montel, who did the lion's share of porting KDE to Qt4, also gets one of these phones. Tink tells me it's a Motorola Rokr E2. Very cool! Apparently it doubles as an mp3-player. You should have heard the agonized squeals from my three very jealous teenage daughters!

    Alexander Neundorf, who contributed so much to the success of replacing autotools with cmake has gotten a video iPod sponsored by Ricoh. I'm not sure what would have made my kids more jealous...

    Linux New Media -- publishers of Linux Magazine, which is miles better than Linux Format (not a difficult feat) and which I read with more pleasure than Linux Journal nowadays, is giving all award winners a yearly subscription to one of their magazines. Yay for Linux New Media!


    2006-09-24

    Birthday Bounty!

    Today's my birthday -- and, unsuited to my age as the sentiment is, I'm impressed by the bounty I've bagged. Episode 9 in Ken Don Rosa's epic history of Uncle Scrooge. A flask of very, very nice peppermint bath foam. A box of delicious Belgian pralines. A very, very cool Danish design wrist-watch. A dvd of the 1917 Dutch moving picture "Het Geheim van Delft" (I love ancient moving pictures, I'm a complete Douglas Fairbanks aficionado) and a dvd of Eisenstein's Potemkin, a movie I've always wanted to watch.

    And to cap it all, tonight Thomas Zander phoned from Dublin to tell me Krita has bagged the Best Application Akademy Award! Whee! Yippee! Hurray! No way anyone is going to believe the width, height, brightness and general enormousness of the grin I'm wearing right now.

    Hey, Bart, Cyrille, Casper, Adrian, Michael, Gabor, Sven, Sander (only Krita team member actually in Dublin), Emanuele, Ronan, thanks! Krita has a great team! And all our incidental contributors, bug reporters, testers, users -- everyone who has helped making Krita a better use for processor cycles around the world, thanks!

    Virtual Guinness for everyone! To Krita 1.6! And again: to Krita 2.0.


    2006-09-17

    Er...

    At least once a year, I type rm -rf bla * instead of rm -rf bla*... Today was this year's occasion. And before I knew what happened, the blog directory had vanished. I do have a recent backup, of course, but I cannot find it. Probably because I found a really good off-site place for it that I subsequently have forgotten. Just like a squirrel forgets his nut-cache. In any case, I found a slightly less recent backup -- we're back in May now.


    Computers we've owned

    The untimely demise of calcifer II, the server that was bringing you my blog entries, and the quick replacement of it by calcifer III sent me reminiscing about computers past and present.

    Read more ...


    2006-09-08

    KDE4 rocks!

    On of the little frustrations of developing for KDE4 is changing to the kde4 user (I know that’s not necessary, that it is possible to work on KDE4 from your regular user account, but I’m lazy and this is the way I got it setup). And to change to my kde4 user I type sux - kde4, which, well, sucks.

    Fortunately I have at my disposal all the foo-magic of Bash! One quick alias later, KDE4 no longer sux, but rocks!

    alias rocks="sux - kde4"

    It’s simple, silly and cosmetic, but once more all is well with the world, the snail is on the wing, the lark on the thorn and every time a daisy sneezes a little god is born.

    Oh, and I’m nearly through with refactoring Pigment to make it possible to add composition operation dynamically to colorspaces for extra flexibility.


    2006-06-21

    kio-sword

    KDE’s kio slaves are incredibly useful, I couldn’t live without fish, audiocd or camera, but today I discovered another one, while doing research on Django: kio-sword.

    I’m already a pretty heavy user of BibleTime, but kio-sword is even handier for finding the text of a particular verse really quick. And there’s even a Kubuntu package.

    Leads to:

    I bet old Basil the Great would have loved this.


    Krita plugins

    Krita is quite extensible. You can add new filters, of course, and chunks of user interface like scaling dialogs, and new tools — like weird and wonderful selection tools or a path tool like the one that is right now being worked on for Google’s Summer Of Code. But also new ways for existing tools to paint. I’m working on a Chinese brush simulation based on Clara Chan’s interpretation of Strassman’s Hairy Brushes for Krita 1.6. And finally, you can add complete new colorspaces. We’ve already got various rgb, cmyk and grayscale colorspaces, and also xyz, lab, yuv and lms — but there is no end to the possibilities.

    However, the best API is useless without a good tutorial, and I’ve just completed the first draft of Developing Krita Plugins. Apart from extending Krita with C++ plugins (and, if you manage to get automake and gcj to play ball, java), you can use Krita’s document scripting interface to create scripts in python and ruby. And there’s dcop, too, of course, but that’s not as well documented.

    So, if you’ve always thought Krita was nothing more than a glorified icon editor, you can now change that. Go ye therefore, and code all kinds of plugins, extending Krita in weird and wonderful ways, in C++ and Java and Python and Ruby.

    ps. What I also wanted to say… Krita’s got a pretty good manual, too, in case you just wanted to use this icon editor.


    2006-06-20

    OpenRaster

    I’ve been quietly working on a discussion draft for an OpenRaster file format specification. The goal is to create an file format that fits right in with OpenDocument for layered raster images with extras (think adjustment layers). Dave Neary discussed this issue yesterday, which was just the kick in the pants I needed to continue work.

    (I’ve been slacking a bit lately. Of course, I needed to work on the last few papers for the theology course I’m nearly done with, and after the 1.5 release Real Life wanted its Boudewijn back for various things, and I got a bit fed up with the kind of reactions that prevail on free software-centered websites lately. But that’s for another rant.) But it’s nice to read that Krita is good, too.

    In any case, with the valuable input from Øyvind KolÃ¥s (alias Pippin), whose esteemed presence graces the koffice irc channel, I’ve prepared a discussion piece that after review by Cyrille Berger will be posted forthwith to the Create project (where we’ve agreed to do the initial discussions) and also be presented to people higher up in the OpenDocument community. The basic idea is to just follow OpenDocument and have a zip archive with XML and binary parts in it.

    And then, after lots of discussion of details and lots of coding, we may finally be able to move images from Krita to the Gimp and vice versa without losing too much.

    2006-05-27

    Blog as you go

    I think I somehow messed up my Breezy install bad enough that upgrading to Dapper just isn’t going to work, so I’m reinstalling, or rather installing Dapper from scratch. I must say, this is a good installer.

    For once thing, I’m blogging this logged into my server from the laptop where Kubuntu is being installed as I’m typing this. The life cd found my neighbours’ wifi lan, cracked the key (apparently, or they have chosen to disable encryption today) and got conected.

    The artwork is nice, very nice. The startup of the life cd has provision for accessibility. The life desktop is very nice, very clean. The default window theme is small and not gaudy.

    Some minus points: the partitioner is completely incomprehensible to me — and I’m an experience partitioner, having repartitioned hard disks for fifteen years. After pressing ok, the screen goes black for just long enough to give me a nasty fright. And my ssh loging through the neighbour’s network sometimes halts and then continues.

    Well, time to reboot. Installing is done.

    2006-05-26

    Quick!

    Before the piccy scrolls off the mainpage. The Kubuntu picture of Konqui & KOffice is way cool. And there are no fewer than five Konqui fans in my house...

    In other news, the reason I went to kubuntu.org was to find the bugs database, since upgrading to Dapper seems to have removed my gl.h file and there's something funny happening when I resume for suspend-to-ram, one time out of three.

    In you don't half realize how soggy the weather is news, our family went for a day trip, today. Yep: I managed to make it possible to get a holiday by working extra-hard for a customer so I could squeeze out from the two or three work projects demanding my attention.

    So we went to 's Hertogenbosch, to take the boat trip on the Binnendieze.. Despite the rain, this was rather worth it. Fascinating, in fact. And the way the old city wall is restored in one place reminds me of the intriguing way the castle in has been restored. Graceful, with respect for the original building, but working around it instead of messing it up.

    Anyway, now back to my attempts at restoring sanity to this lowly Z60m.


    2006-05-25

    So tiresome...

    Print magazines have a difficult time, nowadays. Not enough advertisers, not enough speed in their time-to-market. It's no wonder it turned out to be quite difficult to get a copy of the issue of Linux Format slagging KOffice 1.5.

    Or maybe it's the quality of Linux Format... I mean, if one reviews the first beta release of an application suite, one should mention that little fact. If one is deficient in the wit department, one should not try to exercise that faculty. Not that KOffice is perfect, but, well, it's not that badi!


    Summer of Code for KOffice

    KOffice got four Summer of Code projects from the 24 allotted to KDE, which is quite nice. It was going to be five, with Ariya's Excel Export filter project as the fifth. However, since Ariya had also entered a project for Open Office, and since Google when students are chosen for two or more projects, favours the smaller, he was accepted for OpenOffice.

    KDE didn't lose the slot, though, we had two backup projects: one for KOffice, one for KDE. But Google placed the other project, so KOffice is down to four. Slightly less excellent for us, but for KDE as a whole not a big deal.

    And the projects KOffice has got are real dozies:

    • For Krita, Thrain (or Emanuele Tamponi) is going to try to add bezier and scissors tools, under the mentorship of Bart Coppens. After meeting Emanuele yesterday on irc, I'm convinced that he fits right in with the team. Which means that he's officially declared to be as nutty as the rest of us.
    • Under the stewardship of David Faure, Alfredo Beaumont Sainz is going to implement full native ODF and MathML support in KFormula. I've every confidence in the success of this project, since Alfredo is KFormula's brand-new maintainer.
    • I am going to mentor Fredrik Edemar to implement two things for KWord: basic version control and heading recognition. The latter is quite interesting: Frederik wants to make KWord to assign styles to paragraphs based on text, recognizing when a user types a heading. This is something I like a lot: too often, word processors either allow the user to do all formatting, resulting in documents without structure, or force users to create structure, which they -- rightly! -- don't want to do. What a good word processor should do is recognize the way the user formats the document and create structure. That's the next level, and I'm convinced it's going to be copied a lot.
    • Cyrille Berger is going to mentor amazingly erudite Gábor Lehel to turn his Krita-specific layer widget into a cool, Qt4-style compliant, model-view, generic layer/document structure/page preview widget for KOffice 2.0. This widget will go a long way to enabling us to realize the vision presented by the winner of the KOffice 2.0 design competition, Martin Pfeiffer.

    This year's Summer of Code looks like it's going to be a runaway success for KOffice!


    2006-05-10

    Eh...

    Our family prays every night -- a very, very, very short and abbreviated version of vespers -- and we like to light a karbounakia, or small bit of charcoal, and add a grain of incense. There are all kinds of good, theological and pious reasons to do so, but it's fun, too, and it helps if the living room smells like Church, when you want to pray.

    Our stock, bought last year in Greece, is now sadly depleted, so I was rather interested when a bit of outre research(1) led me to the Hermitage of the Holy Cross. Here they sell incense... But it's almost as if they're selling pipe tobacco!(Note: I do not recommend smoking, not even a pipe, although it is surely something every wise wife should allow her husband, the old English proverb says "allow your man his pipe and his hobby and you've got him chained for good", but smoking etc. A hobby like KDE, though, cannot be but good for ones health.)i

    In any case, Casper Boemann has just fixed the rotating-big-images bug in Krita. Hurray!

    -----

    1Roey Katz on #koffice reminded me (without knowing himself) that I should check Ship of Fools, from whence I went to Monachos, where a discussion on head scarves attended me to the question of long hair and beards for men, where I learned that angels are trespassing on the 96th canon of the Sixth Ecumenical Council.

    I bet I earned that penny for my thoughts now!


    2006-05-08

    Absolutely lazy...

    That's what I feel. The weather is nice and I haven't done a thing about Krita for quite a bit of time. Of course, that's partly because I have a hard time getting into the Qt4 porting; porting Qt3 to Qt4 makes me feel like I'm learning to ride a bicycle with training wheels again. Which, given that I'm as Dutch as Dutchmen come (being from mixed German and Swiss stock), you may well imagine is hard on me. Anyway, if I cannot bike, I'm going to ramble...

    Read more ...


    2006-05-07

    My PyQt Book

    Looks like getting a new lease of life. After consultation with the publisher and Phil Thompson, I've sent the sgml sources to Phil, who's acquired a small band of volunteers to update the text for PyQt4 and, what's even nicer, bundle it with PyQt.

    The only real restriction on the license of the book is that nobody but OpenDocs is allowed to publish it as a paper book. Maybe that makes it not free enough for Debian, but, well, having the book available in the PyQt package makes PyQt so much more attractive. Even if I say so myself, it is a very full and clear introduction to coding a complete application in PyQt. The University of New South Wales chose it for its introductory class in OO programming, after all. Pity they used the electronic, not the paper version.

    Oh, and a Turkish translation appears to be in the works.


    2006-05-02

    PyQt...

    Update: "hgg" writes to tell me that my book is still available at http://www.commandprompt.com/community/pyqt, which I didn't know. Which means that my offer of sending out a pdf file isn't necessary anymore.

    Seems I was five years too early for once in my life. Python as Visual Basic for the Free Software world was exactly my pitch when looking for a publisher for my book on application coding with Python and PyQt. The book is hard to get nowadays: the publisher has let the online copy disappear and paper copies are exceedingly rare. I periodically try to interest the publisher in a scheme where someone else can update the text, but that has never gone anywhere. In any case, I can send interested people the pdf file, I guess. More than 600 pages...

    Personally, I've never cared for Ruby, and while I admire Korundum, I've never seen the problems with PyQt and PyKDE. Actively maintained, stable, easy to use (every method can be a slot!), integrate well with KDE, maintainer is a great guy, nice mailing list. In the early days the biggest problem were that there were no distributions carrying the binding; nowadays it's one of those technologies that may not be completely up-to-date in the buzz department, but that just work. PyQt and PyKDE work fine. You can depend on them.

    A newer development is Kross, in KOffice. Basically Kross is a bridge between a set of classes you define to be the scripting API of your application and a language interpreter. All languages use the same API: Kross has pluggable interpreters. Currently Python and Ruby, but people seem interested in adding a Javascript interpreter. Now I've just had the pleasure of hacking on a Javascript application a little, but that's a whole other rant. There are mature Kross bindings for Krita and Kexi and an experimental one for KSpread. Personally, I'm interested in doing one for KWord. Sebastian Sauer is now working on a macro system, too.

    Kross is a little underdocumented -- like everything -- but Cyrille Berger has been writing a tutorial for people who want to use Kross in their application. It's not finished, but it has enabled Isaac Clerencia to do the KSpread plugin.

    As a side-node: a current problem with application scripting seems to be that we don't have a good idea of what a KOffice document tree should look like from a scripting point of view. Something I need to think over.


    2006-04-29

    Tulips

    It's spring in Deventer, the Netherlands, too. So I can show off with pictures of the tulips I got for my birthday in December:

    It's not much, but it's mine... Most of the garden has been taken over by the kids to grow vegetables. But I really like the yellow and red tulips:


    2006-04-24

    Open Source Game Development:Qt Games for KDE, PDAs, and Windows

    In Krita 2.0, we will be using OpenGL much more than we already do in Krita 1.5, so I need to learn. When ordering the two basic books, OpenGL Programming Guide and OpenGL Shading Language. But Amazon then gave me Open Source Game Development Qt Games for KDE, PDAs, and Windows as a related choice.

    I was a bit surprised: a whole book on coding games for KDE? But, well, it had an introductory chapter on OpenGL, and I thought that might help me ease into the topic.

    It turns out this book is a really excellent, well-written concise and clear introduction to coding for KDE. Not just for coding games, but the whole thing. The ideal beginners introduction for people who are interested in coding for KDE. Of course, it doesn't deal with CMake yet, although there is quite decent coverage of Qt4. And the OpenGL chapter is just what I needed, too.

    Buy this book, is my advice!


    2006-04-23

    CHRIST HAS RISEN!

    Christ has risen! (all over the world)For those who've been wondering where I was last week, well, I was in Church pretty much solid from Wednesday evening until Sunday morning, 3:30 (CET). And afterwards we had a feast, so I wasn't home until six o'clock this morning.

    Holy week is the one week in the year during which I feel most completely alive; when every day seems to be an eternity in itself. During Holy Week I never can believe that there exists a world outside the church services -- everything else is so thin and unreal. That goes for work, but it also goes for KOffice and everything else. Christos anesti!

    Which is good, of course. Church is the place where one goes to experience the Eternal and to praise the living God, who his risen from the dead and thereby conquered death itself. And Easter is not commemoration, or re-enactment, but actualisation -- making the eternal truth present for us. Christ is resurrected in reality every time when the priest first sings "Christus is opgestaan!

    And this morning, I'm going about the house, singing the Easter troparion in Greek, Dutch and Church Slavonic. Eating chocolate eggs, kissing my wife and hugging the kids. We've got a growing parish full of people (we really don't fit in our Church anymore) I love, and I've given almost all of them the Easter kiss this morning. We had the Gospel in Dutch, Russian, Greek, French, English, Frisian, Macedonian, Georgian and Geez. And I'm blogging incoherently -- but full of joy. Христос Воскресе! Χριστος Aνεστη!


    2006-04-14

    Tada!

    And KSpread runs, too!

    And KOffice trunk, of course, compiles with CMake, and I must say, I rather like CMake.


    2006-04-13

    Fond memories

    Quite a long time ago I wrote a book on PyQt, the Python bindings to Qt. I still think that even though Phil Thompson may have taken a brute-force approach to binding, it's easily the best and most productive environment I've ever hacked in. Although I use C++ and Java almost exclusively nowadays, I still long for the simplicity and flexibility of Python and Qt.

    Good to see, therefore, that Bruce Eckel managed to find a second-hand copy of my out-of-print book.


    Krita 2.0 runs!

    Thanks to the indefatigable work of Laurent Montel, Adrian Page and Sven Langkamp, Krita 2.0 now starts up. You cannot load an image, create an image or actually do anything but start it, of course. But given the enormity of the task of porting a really big Qt3 application -- and one that depends on almost all of the KOffice libraries and KDE libraries -- this is a very impressive result.

    Porting started March 27. That is seventeen days ago. That we needed seventeen days to get a completely stripped down port of Krita done indicates the enormity of the task, and I think we'll need more than a month to get Krita back into a shape where we can start refactoring to make use of Qt4's possibilities, or even adding cool new stuff.

    And, of course, we're dependent on KDE, too. Large and important things like the config system, the XMLGui system and so are currently unavailable, which limits the scope for our porting effort.

    But, hey! Krita runs again!


    2006-04-11

    Whoopee! Yippee!

    KOffice 1.5.0 has been released! We -- that is the KOffice hacker collective -- are tired, maybe even somewhat burned-out, gave our all, have typed our fingers to the bone, our butts have rooted themselves to our chairs and people sadly shake their heads when they pass our neglected and delapidated houses. But now is the time to celebrate! Look at the changelog. The condensed changelog, to be precise. We went from a dozen hackers to about thirty, are still under one million lines of code, have gained yet another application -- and we're tired but happy. But I've already said that, haven't I? Champagne, beer, ginger ale and wine are flowing like water in Germany, France, Belgium, the Netherlands, Great Britain, Sweden, Denmark, Poland, Spain, Italy, the United States of America, Canada, New Zealand and Austria -- and those are just the countries I know we've got hackers. Rejoice!

    (And in a month or so, we'll do a 1.5.1 with a couple of bugfixes...)

    And still the work continues. Martin Pfeiffer is committing to KOffice 2.0 right now!


    2006-04-08

    Dress

    for Success

    David Wheeler (who I very much respect -- see his work on OpenFormula) has written a nice article on what the well-dressed hacker should wear when going for success.

    Read more ...


    2006-03-29

    Grab the opportunity!

    There are such wonderful new opportunities these days, up for grabs for any self-respecting intelligence agency eager to get on in the world. For instance, the public transport companies in the Netherlands have decided that paper tickets are so past tense -- chip cards are where it is. And unless you pay extra, your chipcard will be personalized and you need to swipe it at the begin and at the end of every journey. And those details will be recorded. And kept, into the ages of ages.

    Which we, happy customers, won't mind at all. Dutch Rail knows its customers, said their boss recently, and he just knows we won't mind. And of course we will be delighted if this information is used for commercial purposes -- and we don't like it, we'll just be glad to pay a little more. And, of course, we're fiercely patriotic enough to really love it when all this lovely data is commandeered by the Dutch intelligence agency, the AIVD. It's for our safety and protection! We must unite to safeguard our democracy.

    And do we believe the more expensive cards are really anonymous? Do we believe we won't be suspect if we want one of those? Of course! We believe! All hail the wisdom of our government. They know what's good for us, and we cannot but bow our heads in admiration for them.

    Read: Bits Of Freedom Niewsbrief, 29 maart 2006.

    And don't think you will escape by driving a car: your itinerary will be registered. It is your car, it's you who is driving it. And just like your car won't be stolen by terrorists and criminals, so whatever happens is your fault, your OV Card won't be stolen. And you are your mobile phone. Do not deny it. Be happy, and obey.


    2006-03-27

    There's a rainbow in my heart...

    Today is a big day for KOffice -- Laurent and David have starting porting trunk to Qt4/KDE4. That's great new -- and a lot of work has already been done. Cyrille has start coordinating the 1.6 effort -- a feature release for Krita, Kexi and KChart. I'm bugfixing already for the successor to the first release candidate for KOffice 1.5. Had a nice chat with Thorsten about tools for flake. Lots of activity, very bracing.

    On the other hand, koffice.org is down so we cannot release 1.5 rc1 even though everything is ready!


    2006-03-12

    Flake

    Yesterday, Rob, Casper, Thorsten, Peter and I discussed the architecture and the design of our new shared KOffice-wide graphical object library. When taking a short breather, strolling through the snow we decided to provisionally call this library flake -- after the complex shaped that were filling the night sky.

    The goals of this library are to have in all KOffice application that can use graphical objects like clip-art, stencils, borders, animations, embedded movies and whatever:

    • Common object handling in all libraries: the same user interface for creation, selection, moving, resizing, snapping to rulers and guides etc.
    • A simple object hierarchy with a common manipulatable base object class and subclasses for svg objects, lines, movies, embedded documents and text objects. Svg objects and lines should always have the option of an associated text object.
    • Color management (may be hard to achieve with Arthur)
    • Connectors and snapping
    • Excellent printing
    • The possibility of adding high-level behavior to objects (click on an object and move to another page in Kivio.
    • Copy and paste and drag and drop in and between applications
    • Saveable in OASIS
    • Inspector widgets
    • Undo and redo (of course)
    • The objects render themselves to a QPainter
    • Oh, and while we're at it, let's try to get a common ruler implementation, shall we?

    What we don't want to do is:

    • KOffice independent. Initially it will be, because we're developing on Qt4, but it's no hard requirement, unless people from outside KOffice start helping and hacking, perhaps.
    • No canvas. This is no canvas library: every application will have a canvas optimized for the kind of things it needs to do (although Karbon14 and Kivio will merge their canvas and use the same thing.)
    • Creation of complex svg itself: use Karbon14 or Inkscape for that
    • Save in KOffice's old file format

    Of course, we immediately started hacking, and we can already put a red square with a black border on screen and manipulate it! Our first bit of Qt4 code. Impressive isn't it?


    2006-03-10

    KOffice Graphics Meeting

    I may be missing the Libre Graphics Meeting (but Cyrille is going to hold up the Krita banner), but we've got our own little KOffice Graphics Meeting here in Deventer this weekend. Peter Simonssen (Kivio), Thorsten Zachmann (KPresenter), Casper Boemann (Krita) and Rob Buis (Karbon14) are here to discuss how we're going to handle graphical objects in KOffice 2.0.

    Rob is right now typing up a list of items from our initial dinner discussion Common handling of complex graphical objects, connectors, color management, fine-grained application integration (objects, not documents!) and shared canvas have been discussed tonight. And tomorrow we're going to do some real discussion, design and perhaps even API stubbing.

    Thorsten and Casper have arrived -- at least, Thorsten has just arrived, but Casper and I have been hacking all day on Krita already

    Rob has joined us.

    Peter has arrived from Sweden -- time for dinner and initial exploratory discussions, interleaved with preparing the KOffice 1.5 beta 2 release. Tomorrow we'll do the dot story... Everything is prepared except the kliks, but Kurt Pfeiffle is busy bribing Isaac to prepare the debs...


    2006-03-06

    Rainbow

    I recently got my hands on the source code for a painting application written from 1991 to 1993 by a EPITA students in France -- Olivier Brand, Olivier Raoul, Olivier Lahaye, Olivier Coquet, Frederic Losacco, Frederic Gaubert, Bertrand le Vern en Cedric Marsot. Their painting application -- a school project -- is called Rainbow and is a treasure trove of advanced ideas.

    Apart from the custom real-time dithering X server that's included somewhere, the version of the code Olivier Lahaye managed to retrieve for me from an ageing MIPS machine can paint using on-the-fly computed textures, deform an image by distorting a grid and lot, lots more. A very cool magic wand implementation.

    More advanced code is somewhere on a possibly broken Amiga harddisk. Or not, but Olivier Lahaye is trying to hunt it out for me. This includes a SIOX-like algorithm for foreground selection and an intelligent fill routine that was able to texture an image of a green car in the countryside. Select the car, select fill: presto: a wooden car with all the shadows intact. Painting with just intensity. Paint with color, but not intensity.

    To put this into context: in August 1995 Kimball and Mattis started on the Gimp. XPaint seems to have started in 1991, one year after Rainbow. Try to imagine what the libre graphics world would have looked like if an application with the capabilities of Rainbow would have been released under an open source license in 1993!


    2006-03-03

    While I'm checking out

    KOffice and its translations preparatory to tagging KOffice 1.5 b2, I'm already looking forward with anticipation to next weekend. That's when Rob Buis (Karbon), Peter Simonssen (Kivio), Thorsten Zachmann (KPresenter) and Casper Boemann (Krita) are coming to Deventer to start working on what should become a common foundation for the handling of graphical objects for KOffice. The KDE e.V. has agreed to sponsor these hackers' travel costs, and I'll sponsor their food, drink & connectivity.


    2006-02-27

    A second beta

    As Bram notes, Krita still crashes now and then. We did fix most of the performance issues last week, and Krita is unlikely to become any faster before the release. But since the last beta, Krita got about 500 commits; and KOffice as a whole another 1000. KPlato, KSpread, KWord, Kexi, the libraries, KChart, KPresenter. Lots of new code. And as anyone knows, lots of new code means lots of new bugs.

    So, fairly unanimously, we decided to do a second beta release and slip the final release until April 11. I do hope the second beta will get a lot of testing: I mean, the first beta was really easy to test thanks to binaries for Debian, Kubuntu and SuSE, not to mention the kliks. Nobody has an excuse for still filing bugs against 1.4.2! Even the first 1.5 beta is much better than the 1.4 series.

    And it's really, really, really, really important that users test these packages. Developers do not find bugs: developers seldom have time to actually use what they work on, and developers know the safe path through their code instinctively. And we have only a very limited mix of environments. No ppc, for starters, and a small set of distributions.

    So: if you're a user, and if you've had a crash in a Krita beta (or in any other KOffice application, but I'm the guy you need to approach for Krita crashes), please, please, mail me the backtrace. I'll get back to you right speedily and either tell you it's something I just fixed, it's something I'm fixing right now, it's something I will fix soon, or something hard and complicated. If the latter, I'll ask you to file the bug in kde's Bugzilla. I don't need you to look in bugzilla first to check whether it's a known bug, if it is, I'll tell you, and still thank you for your help.

    Without your reports, the crashes you experience will in all probability not get fixed: it is entirely probable that neither me, nor the other Krita hackers experience those crashes. You get a crash, you mail me -- and then I can try to fix it. No report, no fix, and crash bug in Krita 1.5. That's the deal.

    Note that I do not read web forums, do not regularly check blog comments, hardly ever read usenet and am a lot less available on irc than some time ago -- you need to mail me (or go to bugzilla directly, but I prefer an initial mail), otherwise I will not see your report.


    2006-02-26

    Krita at Fosdem 2006

    Irina's birthday tends to collide with Fosdem, so I probably won't ever go there. But Bart Coppens went (he's a local guy, after all) and gave a nice presentation which apparently was very well received.

    We're busy fixing the last-minute bugs in Krita. Tagging has already been delayed a bit, and we'll probably have to delay some more. It's not like we're in deep trouble, but a list minute optimization that made it possible to load a 5000x5000 image in only a few seconds has quite a few repercussions.


    2006-02-23

    Krita shirts?

    Apparently, Krita shirts are for sale... I vaguely seem to remember someone asking me about it -- whether they could do it, or whether there were any to be had, but I have been so preoccupied lately it never registered. But it looks nicely done, even if it's the old icon. Oh, wait, now I realize -- it's Janet Theobroma's shop. Nice :-).


    2006-02-18

    Monkey Business

    (Everyone knows about the alt-f2 imdb shortcut in the minicli, right?)

    I've just seen one of the less famous Marx Brothers movies Monkey Business, and the last one I had never seen before. And it's a great one. I was in the mood for a good laugh, having had a horrible cold on top of a bronchitis on top of all kinds of worries, and this was the perfect specific.

    Read more ...


    2006-02-02

    Life is a little hectic

    Well, we got KOffice 1.5 beta 1 out of the door. With an embarrassing problem, of course, just like with 1.4.2... It turns out that if you compile KOffice with an option called --enable-final the debug display for bidirectional text gets activated. Blue and red lines across, over and between the text in KWord and KPresenter. That got fixed very fast, and updated Debian and Kubuntu packages are being prepared right now. (This is an update: I earlier thought they were ready already, but I was mistaken.)

    And, as if getting a release out wasn't strenuous enough, I'm in a kind of very uncertain situation job-wise. Not that I'm going to be out of a job tomorrow or next week or so, but the times are getting rather too interesting at my company. Which is not a restful and relaxed situation at all.

    In the meantime, Sander Koning is taking his duty as the Krita documentation czar very seriously. KOffice 1.5 doc freeze is Sunday, but Krita's manual is getting to look very nice.

    And I've only got to fix one more filter and then all filters can save and restore their settings. Which means adjustment layers can be saved and loaded, too.

    Cyrille Berger has set up a separate Krita plugins project: Krita 1.5 will be released with a development package so you can create plugins outside the Krita development tree. And you can do a lot with plugins in Krita. Scripting is implemented as a plugin, as is color separations. Filters are plugins. Tools are plugins. Paint operations are plugins. File format filters are plugins. Even colormodels are plugins. I'm hoping lots of people will start coding weird and experimental plugins after 1.5 is released.


    2006-01-24

    An amusing side-effect

    It's happened before that a coding mistake produced a very attractive side-effect, but this one is nice enough that I'd wish I could add a plugin to krita to do specifically this. But we're in string freeze now. Running the raindrops filter as an adjustmentlayer shows a bug in our filter API: filters are supports to read from a source paint device and write to a destination paint device, where source and destination are allowed to be the same object. But that needn't be true, and here we see the effect of a filter that does expect them to be different paint devices:


    2006-01-23

    KDE 3.5 or KDE 4.0? Or just Qt 4.0?

    Adriaan, Aaron and Cornelis have all tried to reassure application developers that it's not a problem if KDE 4 will get delayed until somewhere in 2007, since KDE 3.5 is so great and stable and gives us everything we need to create great applications. And since my name was dropped, I'll have to chip in, of course.

    Read more ...


    2006-01-19

    Adjustment layers

    It needs polishing, and it's a bit slow, but on the other hand, it's a first: Krita's got working adjustment layers. This image shows a 16 bit L*a*b* image with a desaturating adjustment layer on top:

    Now we got the layer groups implemented, this was fairly easy. Performance improvements will mainly have to come from caching un-dirty bits of projection.


    2006-01-18

    Natural Media

    Nathan Willis has written a very good article on Krita for linux.com, Exploring natural media graphics with Krita, where he describes where I personally want to take Krita in the future.

    Of course, Krita is and will remain a competent image manipulation application, with cmyk, lab, adjustment layers and all that jazz, but my core interest is indeed natural media. Which makes me very happy that Bart Coppens has managed to make wet paint usable:

    Everything works, except that we should disable parts of the user interface that are not relevant to wet work when the layer is wet and that drying is still a problem. In this image you can also see Gábor and Casper's jointly produced layer preview tooltips.

    In other news, the freeze went by, but hacking is still frantic. First beta's are notoriously supposed to be unusable, but I do hope people will download the sources, packages and kliks and test KOffice 1.5 beta 1 really thoroughly. Especially OpenDocument interchangeability is of paramount importance, but there are other big improvements that could do with some serious user testing, like all of Krita, really, and big chunks of KWord, KSpread and KChart, and KPlato. We've been busy.

    I didn't witness much of the freeze, actually, because I was laid up with acute food poisoning (again...) and I'm still not quite well. Actually, I'm going down about now.


    2006-01-14

    Brain making weird connections again

    Once I was a scholar, and learned Classical Tibetan, among other languages. Now our teacher was a very fine scholar and gave us a bit of poetry by the famous sixth Dalai Lama to translate, when we'd had about a year of Classical Tibetan.

    In four wel-formed lines, this poem expressed the essential dichotomy between his day and his night life, between his exalted and his debased personality. (And, this being Buddhism, there's an argument to be made for connecting the two back to front: where exaltedness exceeds it becomes depravity and where depravity exceeds, it becomes exaltedness. Or something like that, I'm no longer as deeply into Buddhism as I once was.)

    And somehow, inexplicably, I have been thinking of this poem all week long, when I was working on getting Krita ready for the freeze at night, and learning how to work with Java Studio Creator (new! hot! Visual Basic 3.0 for Web Applications! Only more complex, with Java and not as stable!) It's strange how man's mind works...

    But back to Tsangyang Gyatso. An accurate translation is not suitable for a public web page, especially the last line would sound like a spammer's favourite subject line:

    po ta la ru bzhugs dus
    rig 'dzin tshangs dbyangs rgya mtsho
    lha sa zhol du sdod dus
    'chal po dvangs bzang dbang po

    Even someone who doesn't know any Tibetan should recognize the first word (three syllables) of the first line, and the first word (two syllables) of the second line.

    A loose translation in English:

    In the Potala Palace
    I am Rigdzin Tsangyang Gyatso
    But in downton Lhasa,
    I'm Dangzang Wangpo.

    Now, where did I put my Dutch translation? It must be somewhere on the hard disk of my first laptop, or maybe on an old floppy... I've forgotten what Rigdzin Tsangyang Gyatso means. Something laudable, I'm sure.

    But the old font I used when writing Tibetan in Word 2 is still available. The encoding is fantasy, and I made the font with CorelDraw.


    2006-01-13

    Engineering, apparently.

    But with an equal amount o flinguistics, sociology and art. Hm. This is the first quiz where I had "agree completely" at the majority of questions. I mean -- everything is so fascinating. I once read a couple of studies on television soaps -- fascinating, even though the soaps themselves are pretty boring. But here's my score:

    Read more ...


    2006-01-08

    The KOffice Freeze is Near

    The next ice age in KOffice hacking will commence January 12th. That's awfully soon, so we're working like mad trying to get the features in so we can debug them at our leisure during the beta period. Er, no, scratch that. We're ready for it! Freeze, here we come!

    In any case, Adrian Page committed a very nice refinement for Krita: the image is no longer show in the top-left corner, but in the center of your window. Together with this, the scaling steps and controls have been sanitized. In the same screenshot, you can see Gábor Lehel's new layerbox. This one is much more robust than the previous one. The old layerbox often became a little deranged when there were more layers in an image than it could show in one go. Of course, the new layerbox support drag & drop and the grouping of layers in folders. That was the cue for me to start implementing adjustment layers. It'll be a race against the clock to get them in before the feature freeze, but I made the first commit today.

    In the meantime, Bart Coppens has extended the colourpicker so it can pick the average colour in an area of pixels around the cursor, instead of just the pixel where you clicked, Cyrille Berger has created a png, tiff and jpeg import/export filter, and extended the scripting in Python and Ruby module. Casper Boemann has been working on the palette mechanics and has done most of the work to make the implementation of nested layers possible.

    Back to KDevelop now!


    2006-01-04

    Both laptops have returned...

    Two weeks and one week late, respectively. And at least one will go back to Dell immediately. At least one has been returned to us with a broken dvd player and a broken keyboard.

    We're checking the other one as I type...

    Update

    The other one is working fine. But there's only one expression for Dell, and I'm not going to use that expression in public.

    Another update

    No, both laptops have returned broken. And it's bloody impossible to get to speak to someone at Dell except ordinary technical support, and they are dragging Irina through the entire "are you sure it isn't your own fault", "run the recovery cd" (nice, both laptops don't have a working cd drive anymore), "no windows? We only support Windows" sequence. And then, of course, they'll notice the machines are out of warranty, I'm waiting for that.

    Oh, and Dell technical support cannot handle two broken machines at a time; they can handle only one service tag per call. Damn Dell.