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.

Categories, too

Find


Archives

Other things here at rempt.xs4all.nl

2005-07-30

And on the fifth day

The hackers took a break, and they saw that they had done a lot of work... The hackathon is officially over. Although remote hacker Sven and remote-again hacker Michael are still beavering away, the home team, Casper and me have downed tools for the moment. We've made great strides; wrote a lot of code, took a number of important decisions got some valuable expert and usability feedback. Casper has gone on to Schiphol now, with a fixed determination of finding a power socket so he could finish a selection visualization rewrite.

Still, Krita in its current state feels like a first draft again. Most of the stuff is there, but now we need to complete half-baked features, bugfix a lot, do lots of integration work and so on. We also didn't achieve complete colourspace independence -- although we fixed a lot of QColor dependencies.

Right... Just for posterity. (And excuse spellos. Wrists are hurting.) Since Tuesday night we:

  • Improve the filters gallery feature
  • Fix CMYK color model.
  • Fix progress info showing in some filters
  • Remove the text brush for usability reasons.
  • New application icon by Lee Olson (the icon by Christian Essig was also very nice, and very suited to Krita, but the palette idea has already been taken by Kolourpaint. Essig's icon is nicer than Kolourpaint's current icon, though.)
  • New icon for contiguous icon select
  • Added a small tiles filter
  • Fixed cutting of selections
  • Made Krita's crop tool really usable by not following Gimp conventions.
  • Decide on the todo, the colorspace architecture and the look & feel of Krita.
  • Finished the chapter on selections in the manual
  • Add an image separation feature.
  • Read CMY images (we'd like to read the K, too, but that's harder because of ImageMagick)
  • Started writing a paintbox widget with a drawer for minimum screen real estate grabbing
  • Cleaned up header includes.
  • Create a nice curve widget with very good behaviour (that's to say, the curve doesn't snap back to default if your mouse action isn't entirely accurate.)
  • Show the colorspace in the image properties dialog. Redesigned the new image dialog with usability input.
  • Made the convolution painter colorspace independent (in principle -- we've got to implement them in some colorspaces yet, notably the alpha space used for selections.)
  • Added a sobel edge detection filter
  • Speeded up pasting from other applications immeasurable
  • Removed colorspace dependence in colorrange and contiguous area selection tools
  • Started moving the brush, gradient and pattern widgets into toolbar popups instead of dockers -- saving lots of screen estate.
  • Fixed enabling selection actions on layer locking or hiding.
  • Fixed the new toolbox -- made it orientation independent and fixed the order of selection tools.

Right, tonight I'm going to write our Declaration of Colourspace Independence design document and do a mockup of what Krita will look like in the next release -- but for now, it's glass-of-wine and garlic-cracker relax time, followed by a dinner with Irina. She's been cooking deliciously for us since Tuesday (although yesterday's pizza was mostly made by me: I make a very reasonable pizza dough).

Gosh... This has been intensive!


2005-07-28

Time for a little break

I'm not made for marathon coding... Casper and Thomas downed tools at 02:30 this morning, and got up around nine-is. Casper was having a fun time working on a levels widget, one loosely based on Digikam's widget, but with a more Photoshop like way of working. And Thomas has been really busy working around Qt bugs in layout management to get Krita's toolbox maximally pretty and useful. It turns out that you really shouldn't drag a toolbar that contains widgets with layout managers from docked position to docked position -- although using the context menu is fine. This morning I fixed one little bug in his code, and now it's not just pretty; it doesn't crash Krita on closing either...

(Not that there aren't problems... The tablet doesn't work, and somehow my code to lock tools and activate a dummy tool when a locked layer is entered doesn't work either. But with hackathons, I notice, the thing is to a) get agreement on direction and features, b) get the foundation for great new features done (bugfixing as a more lonely activity) and c) discuss usability. Thomas was just as surprised as Alan Horkan was that I actually listen to usability experts and may even remove features...)

Meanwhile, Michael has ported added another filter to Krita and is very busy, at this very moment, to make our crop tool really sane: all corner grabbers are now used for resizing, there are grabbers on the sides of the crop rectangle, too. Click inside the crop rectangle and move the mouse; that moves the crop rectangle. And finally, he's going to add ratio-controlled resizing of the crop rectangle. Given that a relatively large proportions of the post-release bug reports where usability requests on the crop tool, this is significant progress.

Tomorrow we're going to go through the filters and other paint device actions, trying to make sure we're completely colorspace independent.

We also discussed feature plans and direction, and came to some very cool decisions. For instance, selections and masks are very close in Krita, and if we allow to save a selection as a mask on a layer and edit it as if it were a selection we've got a significantly usability edge on anything out there. Our layer editing is very cool -- it's modeless. A selection is a mask, and a mask is a selection and you can paint a selection, but still paint on a layer with a selection... It's very intuitive. We've even got a paint can fill selection tool. (It's a plain magic wand, but now it's clear what it actually does.)

Adjustment layers have been decided up; add a selection layer to an image layer, associate it with a filter, and the selected pixels will get filtered on display. Or probably beforehand, caching may become important with this feature.

And yesterday I blogged about our separation feature, which inadvertently appears to be becoming extreme professional grade stuff.

Right! Callgrind has loaded Krita -- let's get working again!


Have you already updated your blog?

asked Casper... No, I hadn't. I was chasing an elusive bug in a filter while I really should have profiles Krita to find out why our cool new image separation filter (which works fine and is, in principle really good -- separating a 16 bit/channel rgba image to four 16/bit graychannel images, for instance) gives a result that makes Krita really slow.

Anyway, the first day of the Krita hackathon has been quite productive. We definitely decided not to multithread our display code for now; there are problems with that. Michael worked on his cubism & small tiles filter -- and created initial code to separate images into channels for pre-press.

Fortunately, we've got Thomas Zander here, who know about this kind of stuff and can advise us -- in between working on the Krita toolbox code -- a variant of the code he once wrote for Karbon -- on what's really cool in publishing and things like that. Thomas is getting a little frustrated by the slowness of Menna's laptop and has converted all computers in our place into an icecream network.

Casper is working on a levels widget -- similar to the one in Digikam, but more generic. Tonight, we have little red dots moving on the widget and not getting out of place.

Me, I've been fixing progress bars, removing close buttons from palettes and providing provender. Anyway... It's a fun, if exhausting ride. Here's one snapshot, of the computer room:

(From left to right: a bit of Michael, Casper, Thomas and me...)


2005-07-26

Hackathon -1

It's nearly time for the Krita hackathon. Michael Thaler will arrive in an hour or so. and tomorrow we'll welcome Thomas Zander and Casper Boemann. Unfortunately, Rob Buis was forced to change his plans: his boss needed him for a deadline. So there won't be much krita-karbon convergence work done; but no doubt I'll be able to meet him soonish, what with Rob living in Amsterdam and me working there.

I just picked up the t-shirts from the copy shop, and very nice they are too:

Thanks Nuno!

The nice lady in the copyshop reacted very strangely when I told her the shirt was for an event where a couple of hackers were coming together "to create an image app, like photoshop you know". She nodded sagely and told me, "yes, of course". As if she actually knew about Krita... I must have been mistaken, of course -- we're very good (with some great news coming up for the next issue of This Month in SVN, keeping mum about that for now :-), but not famous or anything!

In other news, when I plug my camera in my laptop, as of today, a camera icon appears on my desktop. Unfortunately, click it doesn't start Digikam yet -- but no doubt that's doable.

And, in the cetero censo vein, baking custom widgets is not fun. I mean -- I've spent many hours on creating something decent for drag & droppable palettes using QDockWindow and QTabWidget, and I'm not done yet, and I've also spent entirely too many hours forcing Qt's QToolBar (or KDE's KToolBar, to be exact) into something that shows tools in two columns or two rows, depending on orientation, with sections between types of tools. Custom widgets: Just Say No. Stay with the toolkit, that's my motto!

(Oh, and trying to install a working development system for KOffice on top of plain Debian is No Fun either.)


2005-07-21

Wonderful Kontact!

I'm discovering that maintaining a growing application (both in size and in popularity), while fun, is also demanding of the old grey cells. Managing todo's and what's to be dones (we have a krita+todo and Cyrille is working on getting us all kolab accounts), incoming bugs, outgoing bugs, organizing a hackathon, contacting people who promised a bit of software but may have forgotten it, promises I made (that I may have forgotten all about)... Plans about publicity, all kind of stuff (1).

So I wanted a way to manage my todo's. I thought, well, maybe, if I mark a mail as TODO it'll show up in my kontact todo list. That didn't work, so I was all geared to enter a feature request, when I noticed that a similar thing had already been implemented.

If I drag a mail to the kontact TODO icon, a new todo item is created -- just what I needed, even better than my first idea. I love kontact!

1. That reminds me: next time KOffice has a big release, we need to get more publicity. One difficult to find review is not enough! LWN did a review of a beta, but LWN, Newsforge and Linux Journal should have been raving about KOffice...


2005-07-15

Coincidence? Unlikely

The Stichting Brein -- the Dutch equivalent of the RIAA, or so it seems -- has lost a court case a few days ago. Seems that internet providers are not obliged to provide information about supposedly copyright infringing customers. At least, not under all circumstances.

So, today's news is that the Dutch police and secret service are going to create and maintain a database for matching IP addresses to persons. Of course, this is for the loftiest of goals: we're combating child pornography and terrorism here!

But my bet is that this just means that next time Brein wants to sue a Kazaa user, they can skip the providers and go to the secret service. And that this will happen a lot more often than that the database will be used to catch terrorists. And that catching so-called "pirates" (you're not a pirate unless you kill, maim and rob, I feel) was the actual reason for creating this database.

For a non-governmental organization, Brein (and the BSA) do have an awful lot of powers. And for a free country, we're under an awful lot of surveillance.


2005-07-09

When was the last time

You saw a spreadsheet embedded in an image? What, you say you never heard of such a thing? But here it is:

Yes, I did it. I took the first step making Krita a fully paid-up member of KOffice by enabling it to embed any other KOffice application. While I concede that nobody would really want to embed a spreadsheet in an image (unless you could somehow use not the spreadsheets sheet, but the results of its calculation as input for a layer), and a project planner is silly, too. But think of it this way: we've got a world-class text tool for free now.

Oh, and embedding Karbon vector graphics, too, of course:

I started hacking on this yesterday evening and did most of the work on the train to the Hague and back; so it's not finished yet.

My basic design is pretty simple: I couple every embedded object with a Krita paint device. The embedded layer paints itself on the paint device when it's deactivated, and from that moment, you can use all Krita's composition algorithms with that layer. It also offers possibilities for adjustment layers.

However, there are a couple of problems that I haven't solved yet.

  • KOffice parts are supposed to be tiled, not stacked. They all want a rectangle of their own and are activated if you click on them. This assumption seems to be really deep down in the KOffice code. Activation on selecting the layer is harder.
  • Most KOffice applications assume they'll be rendered onto a white page and they render themselves opaque. I'd prefer if there was a way to make them render on a transparent QImage. I though the transparent flag in the paintContent would help, but it doesn't.
  • KWord and Karbon assume the existence of something like a page, instead of just an expanse of pixels. This doesn't fit with Krita all that well -- an image doesn't have pages.
  • KOffice parts don't agree about things like zooming and resolution. There are comments all over the code about this, but there's no clear concensus. That also hurts when you embed Krita in, say, KWord.
  • Didn't implement saving; on saving your object is discarded and the representation in a Krita paint device is saved. But this is a minor issue.
  • Karbon's dockers don't work well when embedded. Neither do Krita's dockers. Both clash a lot; I have written the beginning of a generic docker library, but I should probably have extended kxmlgui to include support for QDockWindows.

But despite these problems, I'm quite pleased, and impressed, too, by the framework.


2005-07-06

OK, so it is only Wednesday...

And not Friday as it seems to me. Krita progress has been so swift these few days that I have the feeling a much longer time-span has passed.

Bart Coppens has done a lot of work on a Wet Dreams based and ultimately Curtis et al derived watercolor simulation color model for Krita, with very nice results. This is, in essence, what I set out to do when I started working on Krita. We need to work on the user interface, but ideas are slowly gelling in my mind about that.

Michael Thaler has ported the pixelize filter from the Gimp and is now busy with the cubism filter. What Krita needs is indeed a full quiver of artistic filters, and we're quite rapidly filling this area in: filters in Krita are easy enough to code (especially compared to the examples in the Photoshop SDK...), but you need to take care that we support any number of color models. That's an interesting challenge indeed.

Adrian Page has enabled double-clicks to be passed to the tools so I was able to make a double click crop in the crop tool. And he's added a lot of composite operations to our 16-bit/channel color strategy. And he's started on a 32 bit and 16 bit float/channel RGBA color model. And optimizations, too. And a proper colour picker tool.

Sven Langkamp has refactored some very old code to make sure we don't load the same set of brushes, gradients, patterns and palettes for every view, but just once. This was quite a hard task, even if the user notices nothing much about except there's more memory available for his images.

Casper Boemann has been busy adding scaling and shearing to the transform tool and has been bugfixing our scaling and transformation code; currently we have two versions of scaling code in Krita, all of them better than anything else I've seen in open source applications (should do a pictorial comparison).

And finally, I've ported the Gimp's bumpmap filter to Krita, committed a patch for saner keyboard shortcuts created by Alan Horkan, fixed hiding and showing of individual palette tabs, and (at the suggestion of Alan Horkan again), added hiding of all palettes in one go, by pressing F9. That should help people with big images or small screens a lot. Alan is helping a lot with usability in general.

And the various translation teams have been very busy, too. Thanks to them for their work, too -- especially when you realize that Krita in development means that I often have to throw away a complete .desktop file that had already been translated into twenty or thirty languages. And they keep going on translating and fixing typos (esp. Andrew Coles, thanks!)

And now for the second half of the week!

(Oh, and by the way: we've created a wiki page with what every developer is working on currently and with the todo -- and Cyrille Berger is working on getting us all a kolab account so we can share todo's from within Kontact.


Vereniging van Orthodoxen

"H. Nikolaas van Myra"

Last Saturday it was 25 years ago that our parish priest with other Dutch orthodox believers founded the 'Vereniging van Orthodoxen "H. Nikolaas van Myra"'. This society has as its primary aim to bring believers, clergy and laypeople, from all jurisdictions (Russian, Greek, Rue Daru Russian, Serbian, Coptic, Eritrean, Ethiopian, Georgian, Finnish -- and there are more) together. Whether or not we succeed in that aim, the vereniging still exists 25 years later and that we celebrated.

Saturday morning we had an pontifical liturgy (with our own vladyka Gabriel and episcopos Athenagoras) in the 11th century Greater or Lebuinus Church in Deventer. This church belongs to the Protestant Church, but they gave us the freedom of the place. We could even use the old high altar for our altar -- for the first time since the reformation, the Holy Liturgy was celebrated on those steps.

The most touching moment was when our bishop, Vladyka Gabriel, took the little dish with the antidoron after the communion of the priests from me and brought it to the Jansenist (old-Catholic) primate and the Roman Catholic bishop who had been seated in our altar and bade them eat and drink of it in the hope that one they he and they could celebrate together in full communion and as token of esteem and friendship.

(Next day our priest asked me to do the same for the visiting father Antoine from the Roman Catholic monastery of Chevetogne.)

Anyway, we even made it to the website of our town:

I'm the right-most acolyte, the one carrying the dikyrie -- didn't know my beard had reached these proportions yet...


2005-07-03

Potato harvest.

Today, we harvested the potatoes. A little too early, but we had a fantastic meal from our five potato plants:

Which had an amazing amount of foliage:

(Images loaded and cropped with Digikam, and scaled and processed with Krita.)


2005-07-02

A rose bush

Generally speaking, I'm in complete agreement with Tom Chance on the subject of gardening. We've had potatoes (and this years crop looks ready for harvest tomorrow; the ultimate in just-in-time supply logistincs), vegetable marrows and lots more. Peas, too.

This year, however, I also planted, in addition to a goosberry bush and blackberry bush, a rose bush. You see, there's this gap between the fence and the shed, where clumsy me couldn't manage to put some more fence. So I'm trying to teach this rosebush to close the gap for me, with its prickly growth. Nice flowers, too, but they don't last more than a few days.

In general, gardening turns out to be hard, this year. There's invasion of greenfly, the weather is completed messed up and I somehow fail to find the time to properly tend the garden. I blame bugzilla, myself, for that.


Comments

Thanks to Bill Ward's captcha plugin, I've been able to re-enable the comments feature of Fading Memories. With a bit of luck this'll keep the filthy spammers stymied.

There are a number of rough edges, though: the comments plugin uses the old style flavours instead of the new style themes, and I haven't figured out why. My css skills are seriously rusty, so there's not much in the way of nice layout, and I have been utterly unable to enable showing of comments on the frontpage.

And finally, Akregator chokes on the Fading Memories rss feed. That's odd, because Planet KDE can handle it allright, and Irina's blog's rss feed works allright. And it's the same code, same blosxom, same rss file layout...

But this is all the time I want to spend on this project. Back to Wet & Sticky, bump mapping & toolbox redesign.


2005-07-01

Downtime

Yesterday evening all our network traffic seemed slowed down to a crawl -- both wireless and adsl. I couldn't find the culprit (at least, I don't think it was actually caused by Menna plugging a network cable with both ends into the hub "because her Mozilla didn't work anymore" in my absence), so I tried rebooting.

And when calcifer came up again, it couldn't bring up the adsl interface anymore. So I tried again, this time with a kubuntu installation. Kubuntu doesn't support adsl over pptp, apparently. SuSE 9.1 to the rescue -- no joy. So... I tried connecting with OS X and with Windows XP. Nothing doing. By now it was nearly 13:00 CET, and Irina was coming home from choir practice.

Final, desperate attempt. Reset the adsl modem. Five minutes later I had network again. But, and this is important: normally our mailserver handles a few hundred email messages per hour, and I have a strong suspicion we have lost mail, despite having backup mailservers (Hi Mark & Otto!).

So: sent me a mail? Didn't get an answer? Please resend...

(P.s. I'm downloading SuSE 9.3 as we speak. I confidently predict some more downtime in the near future. I need to get rid of SuSE 8.2, it's no longer supported.