Last weekend from friday 12th till sunday 15th i attended the KDE PIM meeting in Berlin. I never had attended to any KDE meeting yet and i never went to a place that far away. I went there with a main focus on learning a lot about Akonadi, how it works and what it’s goal actually is. Obviously also to meet the people behind akonadi and just to socialize a bit with people that share a common interest: KDE.
When i arrived in Berlin (Thursday evening) i received a warm welcome from Jos Poortvliet and his wife Camila. They generously allowed me to stay at their house during the kde pim meeting days. On the evening/night before the first meeting day Jos and I had a long discussion about various KDE subjects. Conversations like that are really awesome and that alone is already worth attending a meeting like this! The evening ended with a little code hacking in QML Calendar by hacking up a quick way to tie all my – thus far separate - components in a nice overview. Screenshots of that are below.
The sprint: Day 1
Day one of something that you’ve never done before is always special. The initial plan here was for Jos, Camila and me to go to the meeting together. As you can read between the lines, that didn’t happen. Lets just say that Jos doesn’t like needles which “somehow” resulted me in going alone ^_- I leave that up to him to blog about if he wants to. Traveling to KDAB (where the meeting was taking place) was spacial. I actually took the wrong train the first time. I had to take the S-Bahn too some other station to take the U-Bahn. While i did take the S-Bahn, the number wasn’t 41, it was 8. That issue was easily resolved by getting out on the next station and waiting for number 41. After that the trip went fine and i ended up at KDAB (after asking a few people where “Tempelhofer Ufer 11″ was. You’d be amazed to know that even the locals didn’t know where exactly it was. When i saw the street signs it was just a matter of following the numbers.
Once I arrived at KDAB I finally saw the people behind the IRC names that i had “known” for some time but never saw in person. There they where all sitting: volker, jlayt, krake, afiestas, amantia and a lot more. Time to shake hands, connect my crappy notebook and start hacking on the thing i wanted to develop further: QML Calendar. Note: I was the only “new” one in there that nobody had ever seen. Fresh blood!
After a little while the actual “knowledge transfer” started. András Mantia, Volker Krause and Kevin Krammer started talking about Akonadi. Men those guys really do know a lot about Akonadi and KDE as a whole. That talk (along with part 2 on day 2) is one of the reasons why you would want to go to a sprint like this. You just don’t get a better explanation like that on paper or even on a video. They really went in deep and told us the details how it was designed, what it’s intended usage is and why it was designed the way it is. And i must say, it’s massive! A lot of information to absorb and those folks really thought it out well. If you want to learn more about any KDE technology you should certainly attend a sprint in which that technology belongs. The guys (and girls) that are also attending are more then happy to share their knowledge when you ask them face to face. Writing it down in mails, wiki pages or things like that just won’t give you as much detail as the live version.
After this talk it was time too let it sink in, grab a coffee and chat with the fellow attendees. The last part of the day was spend restructuring the calendar day view – yet again – to make it reusable for the week view. It wasn’t something i was looking forward to since i had recreated that exact part already about 4 times already (trial and error approach). Yet I’m very happy with the final results. It looks a lot cleaner now and adding the week overview became a no-brainer. I gained complete flexibility there as in how much days i want to show in a week. Something that was rather difficult before.
The sprint: Day 2
The second day had part 2 of the Akonadi system in the morning. Like the first day it was another amazing talk about the Akonadi internals. There was also a big discussion about database backends. Akonadi is mainly used with MySQL and does that job well. Though it has high memory consumption. There where questions about PostgreSQL and SQLite (both also supported by Akonadi) and I’ve been meaning to ask if NoSQL was ever considered. Sadly i completely forgot to ask that since i was a bit overwhelmed by the massive amount of interesting information. NoSQL is probably a stupid idea, but i do keep wondering that. So if someone would like to comment one that?
Then lunch came. I don’t find it useful to talk about food in a blog post, but this one is an exception. When i am in germany i always try out different kinds of meals. The same this time. We went for lunch, got a menu card and as usual i couldn’t pick one. It all seemed nice. So i simply tried the middle one which was something with goat cheese, potatoes and green beans(?) with rhubarb juice as a drink. In my memory rhubarb tasted nice with a lot of sugar and that’s how you where supposed to eat it. This drink was absolutely horrible! Gladly Chani was sitting at the same table and finished my drink. As for the food, I’ve never ever had something that stinking and distasteful ever! My food choice for that day where kinda poor. Oh well, that evening we all ordered pizza and i took a safe choice of a tune fish pizza.
After the (not so nice) lunch we all went back and started hacking again. Each on our own projects. At that point i was figuring out QML with re-parenting. What i wanted to do was move an event from one day to another. Something that is quite common in a calendar to do, but quite hard in QML to get implemented. Specially if you generate everything dynamically. I did get it working rather quickly but had the amazingly frustrating issue that i could only move it once! That turned out to take the rest of the day. Guess what, the fix was – as usual with issues that take long – a simple one liner. I was using a state machine and was setting it to one state but never resetting it’s state. That resulted in the event being able to execute exactly once! Once i figured that out i fixed it and events could be moved across days as well. Yay!
On this day I’ve also had a nice long discussion with John Layt. John is working on ICU support for Qt and is doing an amazing job there – all alone! However, he is also planning on changing the calendar part of the clock applet in KDE to make it more functional. That part obviously gets close to my calendar intentions so the question became if my components – that already look rather nice – are somehow possible to use in there. Since he also wants to use QML for it. Right now that idea is impossible because my components are not stored in a KDE central import position like org.kde.plasma.<folder> are. So here my suggestion was to make my calendar components available under org.kde.calendar. Or perhaps “org.kde.icalendar” to clarify that all the components required to make an calendar based on the icalendar specification can be found in there. That should only have basic components that are icalendar related. So it should have the following for calendar purposes:
- Day view
- Month view
- Year view
- Events view
And perhaps a few basic filter settings so that you can show the events from a certain calendar. Based on those components you could even make an entire calendar application completely in QML since those components would have the C++ interfacing stuff. This is a very interesting progressing of what i was doing already and i’m intending to follow this path. That would mean that QML Calendar is really going to be a QML only application. I guess even the first QML only desktop application for KDE.
The sprint: Day 3
There where no events scheduled for day 3. It was just a day full of talking with mainly Georg from kdab. He seemed quite interested in my calendar attempt and offered to bring me in touch with a usability expert. That link has been made by now, but there isn’t much for him at the moment to help with since there is nearly no user interaction – yet! For now i’m just going to continue developing the calendar application and get back on the usability expert once i have actually something for him to give a usability voice over. Most of this day was just spend talking, waiting in line (for about 1 1/2 hour!) for a kebab store which made very nice kebab and was worth the wait. It’s just in the last ~ 20 minuts of the sprint that i actually wanted to use Akonadi. My project is still a QtCreator project with QMake. Why do i tell that? Well, when i tried to use akonadi in there i ran into a segmentation fault! That one is reported now. So i had to go through some hoops to compile a QMake project under kdevelop. Then something amayzing happened:
Note: Just merely entering this code in QtCreator (2.5.x till at least 2.6.0 RC) will make it crash instantly! Assuming you also added the right includepath for kdepimlibs.
Q_DECL_EXPORT int main(int argc, char *argv)
QApplication a(argc, argv);
Akonadi::ETMCalendar* cal = new Akonadi::ETMCalendar();
QAbstractItemModel* data = cal->unfilteredModel();
QTreeView* test = new QTreeView();
You see how small that code is? That is all you need to show all your calendar events from Akonadi! Isn’t that amazing? I think this is just a stunningly easy way to use Akonadi. This really makes the use of quite complicated KDE technologies very easy for the app developer. As of right now it looks like that will be possible to use in KDE 4.10 in terms of API since the above part is still living in a calendaring branch.
QML Calendar results
Here are the images of how the QML Calendar project looks like at this moment:
This is the day overview. The red area is going to contain the upcoming events. I don’t have anything for that part yet thus i made it red :)
The week overview. Right now it shows 7 days, but as you can see. Also not finished yet since the days themselves are missing.
The month overview didn’t get any love.
The year overview also didn’t get any love.
In the images you also see a row of buttons to change between view. That’s new as well, but still a bit ugly. The components for those buttons are the plasma component ones, i also tested the Qt Desktop components, but to be honest, both component sets simply don’t look nice in a layout like this. I don’t know how i’m going to resolve that issue, but i’m very much leaning towards making real QML Desktop components with the desktop as their intended usecase. Right now that doesn’t exist yet. Not in Qt nor KDE.
This was my first sprint ever and my first time in Berlin (not that I’ve seen much of it). I have to say that i really liked it. The people are very nice, very helpful and everyone is working on such nice projects for KDE. Like Kevin who is working on a cool looking plasmoid for easy Akonadi control. John Layt is working on ICU and has a very interesting idea on how to improve the calendar that you see in the clock applet. And
our photographer (forgot his name, sorry) Martin is working on a very nice QML social plasmoid. Besides that there has been a lot of work done in those few days in fixing bugs in all of Akonadi and improving KMail. More about that can be read in the sprint notes. For me personally it was a very good thing to attend the sprint and i can’t wait for the next one to start in Osnabrück. More people are always welcome, so please do attend if you have the time for it.
I hope you enjoyed reading my blog. It took me quite a while to make such a long one :)