Marcel's blog

digikam 0.9.4 release

Dear all digiKam fans and users!

The digiKam development team is happy to release version 0.9.4. The digiKam tarball can be downloaded from SourceForge.
Noteworthy features added since the last stable release include auto-gamma and auto-whitebalance support for RAW files in 16bit mode, displaying the number of contained items in the overview for all albums, usability improvements, as usual a lot of bug fixes - see below for a complete list of new features and fixed bugs.

digiKam's New Search Functions: A screencast

For the upcoming 0.10 version we have taken the step to completely rewrite the searching functionality, both the backend and the user interface. Our new database layout allows us to offer much more search options, as we now store in the database what we consider useful to the photographer, and storing in the database is prerequisite for searching.

The old search interface from the current stable KDE3 line 0.9 allowed to create quite complex logically combined queries, but had only a limited amount of information about a picture that it could actually search. When adding a lot more options, the UI would not scale well.


Anyone watching digikam's commit messages (I dont know if that's anyone except the core team) might have noticed that since some time I tend to commit in bursts, several within a few seconds, but only a few times a week. The reason I am using git-svn now for my local working copy.

I started with that when I was on holidays and had no internet connection for two weeks. Then git-svn allowed me to commit offline, creating a de-facto local branch and merging later.
I really like this. I can commit when I want, before things are ready to publish, and complete it later, still having good commit messages and splitting the commit so that the others can still review and the patch does not get overly big.

My favorite killer feature of git is: "git grep". It is really fast, much faster than simply grepping on the svn source directory. I dont know why, but I like that even more.

One annoying point in the beginning was the "svn up" equivalent. "git-svn rebase" requires all local changes committed, which "svn up" does not. Git's features to the rescue: Create a temporary commit, rebase, and reset the commit afterwards.
I added this to my ~/.bashrc:

#drop-in replacement for svn up
function git-svn-up {
git-commit -a -m "Temporary commit" && git-svn rebase && git-reset --mixed HEAD^

#use after you have resolved conflicts
function git-svn-rebase-continue {
git-rebase --continue && git-reset --mixed HEAD^

Hello to the planet

I noted that thanks to clee I have been added to now as well. This requires just another "Hello to the planet" message to introduce me briefly.

I am one of the developers of Digikam for about two years now (it's really so long already? Can't believe. Time is running.). Main fields of my work have been e.g. multithreaded image loading and recently the database upgrade we are currently busy with for our KDE4 version.
Yes, not much is more sweet than a mutex and a cond var.

In daily life I am a medical student at the university of Essen, Germany, in the 4th year now, learning for exams and working on my MD thesis in physiological chemistry. No, no computer science, physics or mathematics background here ;-)

Choosing Qt SQL

I promised to blog a bit more about some more technical aspects of current digikam development. Today: Our database backend.

With version 0.7 a few years ago, digikam decided that it was time to use a real database. This meant SQLite2 at the time. For 0.8 and 0.9 we have been using SQLite3 which is a very good choice for local use, (complete unicode support, no configuration for users, in-process, fast) but has its weaknesses for those users who want to access a database from different computers (does not work over NFS).

All the time we were strongly bound to SQLite by using the native C/C++ API directly. Coming from that situation (and not abstracting different DBs already like Amarok) it was a clear and easy choice with minimal work to base the database backend on Qt SQL.

Qt SQL is a low-level wrapper around database APIs, this means, you still write your SQL (which I like) and have to adapt to the peculiar tastes of different db system (which I dont like, but can't be helped). It gives us for free a nice and complete API and some sweets like prepared queries. Previously, we bound values manually:

execSql(QString("SELECT id FROM Images WHERE name=%1 and album=%2;").arg(escapeString(name)).arg(albumId);

now this is wrapped in an very thin API similar to i18n calls I built around QT SQL:

execSql(QString("SELECT id FROM Images WHERE name=? and album=?;"), name, albumId);

and is internally always bound directly using the native API, but that is done for us by Qt.

Now with Qt SQL this does not mean we support MySQL (for those users mentioned above who are not happy with SQLite). We need to audit out SQL, where "we" is someone who knows about the differences...(me not)...

Renovating our foundations: new database schema

For a long time now we have been planning to extend the amount of information we store in the database for the next version, 0.10, which will run on KDE4. As the database is the central storage and digikam is built around it, such a move involves deep structural changes. We have done preparations, discussed on the mailing list what we want and what we need, made up documentation, and then sat down to code.
So during the last weeks I have been working on implementing the new database schema, and tonight I have merged my commits.

As this is the first time that our ideas have found their way into real code that you can build and use from SVN (although you should not use digikam trunk SVN for production currently) it is time to give some insight.
I will give a short overview on digikam's history, what we have reached now and what we intend to do with all the information that we find now at hand.

All Image Plugins now support 16 bit

With committing the port of the "Perspective Adjustment" plugin on Sunday as the last remaining plugin on the Todo list, now all Image Editor Plugins have been ported to support 16 bit images.
There are 24 plugins in the digikamimageplugins package, and about eight are shipped with digikam core.
We have now accomplished full 16 bit support in all parts of digikam and the image plugins, which will be a major feature of the upcoming 0.9 release.
Read on for some technical background.

Syndicate content