Archive for November, 2009


People are almost already gone, or are about to leave (myself I am leaving the office in an hour or so). The office is getting empty, the discussion are fading away. But today, started by a presentation from Jos of strigi fame on a metadata project for KWord and KOffice, and a proof of concept implementations of ODF 1.2 metadata, and how to use nepomuk. This trigger a discussion between him and Pierre on a design that could work for change tracking and metadata in the KOffice text library.

The last main topic was about making KOffice ready for end-users. And we decided to define a few use cases with an associated users for each application. And then list the features they need, and what kind of issues they face. While Krita is getting focused on being useful for the artist behind Blender movies. Of course, the biggest challenge is now to find developers resources to implement all this ideas and fixes.

This was the last topic on the general session. Afterward hacking started again, as well as specific discussion between a small group of developers. For instance, the Krita team (or what was left of it after the departure of Dmitry) started a discussion on redesigning our painting operation settings, which are currently a bit messy between GUI elements, and settings used for painting.

And now people are either gone, compiling KOffice on windows or almost asleep.

Yesterday was the first day of the meeting, we had a lot of discussions going on. It started with the move to git, when, what and how ? We decided for a list blocker, and to do the conversion as soon as this blockers were solve, this include solving some of the issues that KDE face for the conversion.

Then we decided to have the 2.2 release on a six monthes schedule, with a release in May, and to experiment a short 4 monthes schedule for 2.3. To be efficient such a schedule require a move to Git, and the ability to work on different branches and only merge what is ready. The main objection to such a schedule was whether it is not too many releases for end users, the advantage is that we solve the problem of schedules alignment with distributions.

Then we had a presentation from the Nokia guys on their work on an Office viewer for Maemo, what they achieved and what they need to have fixed (just 600 bugs…) to consider it end-user ready. And then we talk on how to integrate their work in the community.

Then we went for sandwiches at the Nokia cafeteria.

We started the afternoon with a discussion on how to improve decision making inside the community. The important thing is that we want to take decisions based on a concensus, which require to have people working on finding a solution instead of defending their current solution. But in the end, if there is still a disagreement, we decided that shared component (library and base plugins) would have three maintainers that take the final decision.

In the afternoon, Olivier Goffart gave a presentation on library design, which is interesting since we are planning to export some of our libraries and offer API/ABI stability.

Then we had hacking times, with people fixing bugs, talking design and other discussing on our library organisation.

Then we were invited by Nokia for a pizza party at a nearby restaurant. And concluded the evening with a Krita meeting in the lobby of the hotel.

So I have arrived in Oslo for the KOffice Sprint. We are gathering in the Trolltech headquarter, currently waiting for people to arrive before going to have dinner in the center. Casual discussions have already started about moving to git, about network issues, graphical user interface, distribution flameware. And also doing some hacking.

The topic of the meeting is mostly about finalizing the KOffice libraries, with API reviews with Qt Developers, probably some bug fixing and unit testing. As well as a few “administrative” discussion, like release schedules.

leafes and sky

The removal of GIMP from the default installation of Ubuntu has raised quiet a stir. And as drawn quiet a bit of advertisement for Krita, as some people suggested the use of Krita instead, but for no good reasons, since Krita is not a good replacement for GIMP as a default installation.

You have to consider the use case of the default installation, since the Ubuntu people are trying to make is a distribution that is usefull for the average users, the default installation need to cover the need of the many. And what most people want to do with their picture is to classify them, do light weight retouching (for instance, adjust the brightness, remove red eyes) and then print the image or send it on the Internet. Surely, both Krita and GIMP can do it, but they have way more features than what is needed for most users. As Sven Neumann, one of the core GIMP developer, said GIMP is a high-end application for professionals, and so is Krita. Some might think that Krita has a GUI that is more friendly to the beginner, but that is not the problem, it is still packed with features that are of no interest to most users. And there are tools that are better suited to accomplish the task of those users, this is why a pictures collection management tool, such as F-Spot or Digikam is a much better choice, it covers the main usage of the majority of users. Even if Digikam is designed for professional photographer, I still think it scale nicely to average users. And when the user want to do more with images, he can just go to his favorite package manager, and install GIMP or Krita.

Yesterday, we released KOffice 2.1, the first major release in the 2.x cycle. It brings many improvements over 2.0, providing a much more stable and rich full experience, you can read more details in the 2.1 release announcement.

While 2.0 was clearly a developer release for developer, and for testing. For 2.1, we concentrated on fixing bugs, fixing some of the annoying issues, 2.1 is coming with many improvements in the MS Office filters, but 2.1 is still lacking in many area, for instance 2.1 comes with experimental support for displaying tables and formulas, but there is no support for editing them. Also there are still many rough edge in the UI. But the progress from 2.0 are astonishing, helped by the good base libraries (Qt, KDE and koffice), external help (Kevin Otten’s student and now Nokia).

While, in general, KOffice 2.1 is still not recommended for end-users. There are two exceptions, the first one is Karbon, while far to be feature full, is starting to become a very capable vector drawing editor, in 2.1 it get support for filters (only blur in 2.1, more is coming for 2.2). I personally use it a lot these days to create illustration for my thesis work. And Krita has made big progress in stability, with dozens of crash fixes for 2.1, and also include many of the new fun painting operation from Lukas, improvement in brush dynamic, recording of filters to create macro…

Krita and XCF

Last week, I blogged about the removal of the graphics magick file format filter in Krita, and that it would mean that we need to write directly our own support for many file formats, using low-levels library when relevant and available. And by forcing us to do this work, the support for file formats in 2.2 will rock.

Among the three mostly usefull file formats that were delivered by the gmagick file format filter, there is XCF, the file format of the Gimp. After my blog, pusling (Sune Vuorela of the debian KDE team) reminded me about xcftools, a tool written by Henning Makholm that extract information from XCF files. Despite not being a library, the code to parse XCF files is well seperated from the command line logic, and I imported it in Krita (might be a good idea to turn it into a real library ?).

As mentioned, the previous filter was not really good, we were only able to get the layers, but no masks or no composite information, or opacity, as reported in this bug 106730. And with the xcftools based filter, we can read all that information, making XCF a first class citizen in Krita. There might be some issues with composite ops that behaves differently on some cases between application, but that something that we would need to fix as well.

For the other way around, to import from Krita into the Gimp, the OpenRaster Archiving format would be the way to go.

About other file formats, Boudewijn is already working on PSD support. The last important one is GIF support, which will probably be done using libgif.

OpenGTL 0.9.12

Earlier today I made a new release of OpenGTL (download page), version 0.9.12, for that release 23 tasks were completed, the main changes are:

  • Fixing thread safety issues at run time.
  • Progress report.
  • Many new mathematical functions for the Shiva standard library.
  • Replacement of the Shiva kernels random functions.
  • OpenGTL is now compiling and running on Mac OS X.

The first two points are important changes for krita, since the first one meant that with the previous releases we had to use mutex while executing Kernels, preventing to benefit from multi-core. The second one means the user can see something is happening in Krita when a filter is processed.

Random functions in Shiva

This new release also break the Shiva language compared to previous release, I try to prevent that, but since the language is still very young it was bound to happen. In previous releases I quickly introduced a rand() function, because I wanted to write a perlin noise generator. The problem with rand() is that it does not take a seed parameter, meaning that the function use the global seed, meaning that two consecutive call to ther perlin noise generator kernel gives two different results, without any kind of control. For graphics, we need to make sure that the result are reproductible, so now in 0.9.12, the function rand() has been replace by one that takes a seed parameter rand(output int seed).

Such a function is usefull at init time, to construct random structures, like those needed by the perlin noise. But this is not sufficient, we also need a random function that can be used while processing a pixel, and one that would always return the same value for a given pixel and a given seed, for instance to write a salt and pepper noise generator.

The problem of the rand(output int seed) function is that it works by incrementing the seed parameter, so that next time you call it, it gives a different result, so as long as the call are made sequentially it would work fine. But in case of Shiva (or Krita, for that matter), we cannot guarantee that those call will be made sequentially, and it is not possible to keep a value between the computation of two different pixels. Because we might just be interested in generating part of the image, or we might be executing the kernel in a multi-threaded environment. To solve this problem, about six monthes ago, in Krita, we developed an algorithm that takes the pixel coordinate and the seed, and return a pseudo-random number. For 0.9.12, I copied that algorithm in Shiva, giving birth to the second new function for random number generation, which is rand(int x, int y, int seed).

The code for the salt and pepper noise generator is:

kernel Noise
{
  void evaluatePixel(out pixel4 result)
  {
    int x = result.coord.x;
    int y = result.coord.y;
    for(int i = 0; i < 3; ++i)
    {
      result[i] = frand(x, y, 32);
    }
    result.setAlpha( 1.0);
  }
}

The code for the perlin noise generator is slightly more complicated and can be watch in the opengtl mercurial repository.

And the resulting images, salt and pepper noise on the left, and perlin noise on the right:

 

Since its birth, Krita has been depending on ImageMagick (or the GraphicsMagick fork). The original idea was to build Krita as a GUI on top of ImageMagick. When the current team (or at least its veterans) started to work on Krita, ImageMagick was only used for exporting and importing files.

But using an abstraction of file formats did not give us enough control on how the files are loaded and saved, so four years ago, we decided to have our own implementation of the most used file formats: png, jpeg and tiff. Then later, tired of having to adjust our code for each releases of ImageMagick, we turned to GraphicsMagick, a fork that claim to have API stability. But the long term plan has always being to remove the dependency, and to have our own implementation of the file formats (or to use libraries when relevant).

Things have been accelerated recently, when we discovered that recent version of GraphicsMagick crashes Krita in a very weird way, so we decide to remove the GraphicsMagick files filter, and to finish implementing the format ourselves. This has started with the PPM filter that was finished yesterday, and now I am taking care of the JPEG 2000 format using the OpenJpeg library. But this might mean that in the near future, some important file format such as Photoshop’s PSD or Gimp’s XCF will not be available (but there is a Gimp plug-in to export to ORA which can then be imported in Krita).

Powered by WordPress. Theme: MyMotion by Cyrille Berger as a modification of Motion by 85ideas.