KDE Imaging Coding Sprint 2010
Last week, from 27th to 29th August, developers of KDE Imaging group met for their third coding sprint organized by digiKam lead developer, in his hometown, the beautiful southern French city Aix-en-Provence. The time was shortly after the end of Google Summer of Code, in which digiKam participated this year with three students. It was therefore a perfect timing for us GSoC students to get to know our mentors in person and get to work with them side-by-side.
On Thursday morning, I met Andreas Huggel, who flew down from Malaysia. Andreas is Exiv2 developer and is working closely with Gilles on metadata support for digiKam. We went together for lunch during which we found out that it was the first event like this for both of us. A few hours later, we met two indian guys having absolved a 24 hour flight, Aditya Bhatt and Kunal Ghosh. Aditya is a GSoC student working on face detection and recognition for digiKam and Kunal is a Summer of Kode developer integrating an ECMAScript support into digiKam.
In the Thursday evening, we met Michael G. Hansen and Marcel Wiesweg at the Maison des Associations Tavans, where we attended local the Linux User Group's meeting, watching Gilles giving a talkabout digiKam. Shortly after that, Gabriel Voicu, another GSoC student working on geotagging features for digiKam, was dropped by bus near Aix-en-Provence, no idea about his whereabouts, he sent us his GPS coordinates and we looked him up using Google Maps, so Gilles could pick him up by car.
On Friday morning, we all met at hotel Paul's breakfast. We could finally put real faces to all the email addresses and IRC nicks. Any social barriers were very shortly overcome and chatty discussions were started, about cultural and national differencies, about our lives, school, work and of course KDE and digiKam. A very lively discussion continued during our way through the really nice city back to the Maison des Associations Tavans, which was also our "coding place". Friday was very hot and dry in Aix. But also very fruitful- in terms of work as well as in terms of awesome fruit markets.
Kunal was working with Gilles on improving the scripting support in digiKam. The main idea is to add a new script interface for digiKam, based on QtScript API. This interface will provide a simple way to manage a list of custom scripts, dedicated to add new tools in Batch Queue Manager. The digiKam API will be exported and available to customized scripts. A settings widget have been designed by Kunal to setup scripts in Batch Queue Manager. Gilles and Kunal have reviewed GUI and current implementation to patch Batch Queue Manager with a new script view, assignable to items to process. This will be available in the upconimg 2.0 version.
Aditya was improving the face detection/recognition stuff, together with Marcel and Michael a discussion about ways to store face tags in metadata was begun. Aditya then worked hard with Marcel on polishing the face detection, debugging the database code, implementing the use of using internal tags, which are not visible to users, for storing face scanning related data. We also checked how other projects work, especially Apple's iPhoto with Andreas' MacBook. Aditya then also discussed the possibility of having a unified batch task manager. "Currently, most of the batch jobs in digiKam run in the GUI thread and make the UI slow, such as the fingerprint generator, metadata read/write, etc. We should have proper multithreading for this (my batch face detector partially implements this), and have a nice unified batch task manager, as one place to control all batch jobs.", he adds. Last but not least, Aditya did a lot of bugfixing in libraries used by face detection/recognition in digiKam - libface and libkface. All the code was then stress-tested on Gilles's whole photo collection. "It works pleasantly well, but also giving us a few directions for debugging (read: crashes)" says Marcel.
In the noon lunch-break, Gilles' wife and son joined us and we all enjoyed a fine French cuisine with Gilles explaining to us what food is what. "Then came the surprise, a menu card which I couldn't read and the menu which consisted of mainly non-vegetarian food. Well my bet on the lunch order paid off and I had a pleasant meal and also identified food I should keep away from :)", says Kunal. As work was waiting for us, we didn't stay too long and soon headed back to coding.
Andreas, besides a lot of coding on Exiv2 project, also discussed with Gilles support of new types of metadata for video files. Then with Marcel he analysed an issue with the algorithm to distinguish images and also got a first-hand update of the current metadata process flow in digiKam. "It was interesting to realize how pronounciation of words becomes important when you talk to each other face-to-face as opposed to exchanging emails and how much a bit of gesturing and scribbling on the black board helps to convey a message.", says Andreas.
Friday evening was in the light of italian cuisine with the menu in Italian (not that it would make much of a difference from French to me). This was a great evening with great amount of talking about KDE and related stuff, but also Gnome, Linux, Microsoft, Android, computers, phones...and all that what you would expect from a bunch of developers. Also Laurent Espitalier, who drove down from Isére, France, joined us that evening.
Saturday we started again at hotel Paul with breakfast, during which we again discussed everything and nothing. Me and Aditya were stoked on FotoWall's animated GUI and we discussed some animation possibilities inside digiKam. We both agreed, that digiKam could use some more "live" UI. I've already started looking into Qt Animations framework and I have a few places in digiKam in mind, which were like directly created for animations. But first things first.
I continued my work on image versioning support for digiKam and managed to extend the functionality of the 'Revert' button in the image editor. Now you can revert to the last saved version, and if this is a subversion of some original image, you can then revert to the original as well. With Marcel we solved hiding/showing all image versions except the current version using internal tags, we redefined the versioning concept a little bit and solved lots of bugs too. I found out, that even though it works ok on my computer, Gilles had some rather severe issues with it on his computer, so this brought me to lookup through the whole code, do lots of cleanups and create a simpler and more flexible design.
Michael worked together with Gabriel on improving the new search UI in the map views. During discussions with Marcel, these three seemed to solve the question of an intuitive workflow for searching, selecting, filtering, zooming and panning on the map, a functionality currently exposed by 12 buttons in a row. Together they came to a UI mockup and an intended workflow where a click willl usually do what the user may expect and images do not disappear, but are greyed out if filtered or unselected. "We're pretty confident that we found a good solution, so Gabriel and I talked about implementation details and Gabriel started coding on it.", says Michael. He also added two new things into GPSSync - a split map view, which shows off the model-view capabilities and a new configuration dialog. With Gilles, Michael got into discussion about how sidecar files should be handled.
In Saturday's noon-break, we went to discover the local markets, with plenty of colorful fruit and vegetables, beautiful flowers, crispy bread and baguettes, souvenirs, and piles of other stuff too - old vinyl and cassette music, historic newspaper from 1894, bars of soaps, silver cutlery, glass, dresses, hunting knives...you name it. During our walks through the city, we all took many pictures of this really beautiful city and its offerings, which you can find on flickr. After quick lunch, we headed back and did more coding and polishing. Luckily it was quite windy that day, so the temperature wasn't as high as friday.
Laurent Espitallier uses and promotes digiKam at his work with one French government agency, where they use Nikon Project software for managing photos taken by team of photographers and which are later used in documentations. With digiKam, he's working on database import from this Nikon software, but also from applications such as iPhoto, Picasa or Aperture. Laurent and Gilles also discussed the importance of XMP sidecar files support for all read-only image formats, for example RAW files. With Nikon Project to digiKam migration, the goal is to be able to patch digiKam database with all Nikon
keywords tree-view and all virtual folders created (in Nikon, Tags and Virtual folders are separated concepts). Only the first feature can be easily achieved when pictures are back-ported without a need to write a specific Nikon database parser. The images are just exported from Nikon collection using right options and then imported in digiKam.
During the day, we had a refreshment in form of the famous Czech beer, which I brought with me and for which Gilles provided proper cooling. Also I can't forget the great French wines we tried during dinners. The Saturday's dinner was really great. We settled in a small quiet and very nice restaurant and as everybody was really enjoying it, no one felt any need to go back to sleep even though the time has advanced very close to the midnight.
I was leaving on Sunday, shortly before noon, so I didn't have much chance to do any coding, but the rest, except Gabriel, who already left during the night, stayed and kept working. It was hard to say goodbye to such a great team after all that awesome time we spent together. I am really glad and very thankful that we could meet each other in person, for which I'd like to use Andreas' words: "It will make future team work easier and more fun". It is most certainly true and this would not be possible if it wasn't for KDE and especially KDE e.V. The most biggest thanks to the e.V. for making this happen. Thank you!