Getting Openismus ready for the Development Documentation and Tools Hackfest

In 2 days the GNOME Development Documentation and Tools Hackfest starts here in the Openismus office. For the past 2 days we’ve spent a couple hours of each day getting things ready. We’ve designated two rooms as hacker rooms. Our central common area will be the main sit-down hacking area.

Common area hacker space (facing the front courtyard)

Common area hacker space (facing the front courtyard)


Common area hacker space (facing the back courtyard)


And the front room will serve as the bean-bag hacking area and provides a little warmth and color to contrast the current weather situation here in Berlin.

Bean bag hacking area in the front room.

On Wednesday we’ll have a welcome dinner for all the attendees sponsored by Openismus. Should be a good opportunity to get to know more of the GNOME hackergotchi heads in real life.

So, Openismus is ready and looking forward to a productive four days.

MeeGo Conference 2010, Dublin

Last Thursday I and the other Openismus folks returned from our visit to Dublin for the first MeeGo Conference. Here is a summary of the conference and my impressions of it.

Note: If this post is a bit long for you jump to the last section.

Day 0:
Six of us from Openismus arrived at the Conference hotel, The D4 Ballsbridge Inn, at about 4pm. It’s located about 10 minutes from Aviva Stadium, the rather unusual conference venue. After getting settled into my room, which was strangely missing a mattress at first, I chose to do some reading and get to bed early while the others chose to explore Dublin a little.

Aviva Stadium field view

Day 1:
The first conference day started out with a series of keynotes. The first of these started the conference off with a bang. AMD announced that they were getting on board and Intel announced that all (well, except for Intel and Nokia employees) conference goers were to get Lenovo S10-3t tablet netbooks. This went over well, to say the least.

The next talk was from Nokia and stressed their commitment to Qt and their optimism that it could provide a unified development platform for creating apps on the various device profiles MeeGo is targeted for. It stressed the significant role Qt Quick and QML would play in this platform. QML was emphasized throughout the conference.

The next keynote was integrator targeted. The last one was a sit down discussion which felt very staged, which made it also rather boring. I’ll spare you.

A nicely catered lunch seperated the keynotes from the afternoon talks. The first talk I attended was MeeGo Infrastructure. This dealt with the server and build infrastructure of the project. It wasn’t exactly what I had thought it’d be but was interesting nonetheless. This was also the first talk of the OBS (openSUSE build service) which would be praised often throughout the conference.

I then attended the talk about running MeeGo on a BeagleBoard. This discussed the motivations of the project, the steps needed to get it running and its current state. I’ve got a BB at home as well as in the office, so I’m hoping by the time I get around to trying it out it’s an easy install.

Afterwards I headed over to the Qt Quick talk. Here we were walked through the creation of a Qt Quick app for viewing photos. This nicely showed how the process of developing apps with QML works. I’ll have to try it out a bit in order to see if it lives up to the hype (probably not). However a small improvement would also be welcome.

Next up was a talk on MeeGo input methods. It was interesting to see how this is shaping up. The architecture seems in place and the default keyboard looks nice. They stressed that one way they are trying to improve over other on-screen keyboards is through customization. They showed various layouts the the programmer can make use of and briefly described how to change the layout and themeing of keyboards. It will be interesting to see whether these customization features will be a good thing or just clutter and confuse.

I skipped the last two sessions, deciding to get some fresh air before the evening reception. The reception was at the stadium and included finger-foods and drinks. After lots of chatting, a contingent of Openismus folks and friends got together to find somewhere for dinner. After a short walk we found a pub and capped off the evening with a nice dinner and more conversation.

Day 2:
It had been announced that the netbook were going to start being given out at 8am, so several of us got an early breakfast and proceeded to the stadium to avoid the crowd. The tickets for the Ireland vs. Norway football match were also available starting at 8, so we were killing two birds with one stone. We quickly got our tickets for the football match but the netbooks were a bit harder to get to. Eventually we found the very long route to the pickup area. It turns out we were lucky that we got there as only 1/3 of the shipment had arrived and many others had to wait till the next day, which meant more waiting in line. The early bird gets the worm I suppose.

So far I really like the new netbook (my first). Thanks to Intel for this. Not everything is working 100% right now but I look forward to seeing how MeeGo evolves on this hardware. Specifically, it’s got a multitouch display that would be nice to use as such.

Later in the day I was also given an N900 by a Nokia representative. Thanks, Nokia! Working at Openismus, one feels rather out of place without one of these. I’m happy to have a device to test an app I’m currently working on. That’s a later blog post, though.

Lenovo netbook and Nokia N900 freebies

I missed the opening session, while standing in line for the netbook. My first talk of the day was on implementing protocols with Telepathy. This was rather interesting as I haven’t looked at Telepathy deeply at all. Hopefully, I can play around with it some in the future.

I moved on to talk about MeeGo on the N900 next. Unfortunately it looks like there is a long way to go before the N900 will be running MeeGo in a usable fashion. Guess I’ll be sticking with Maemo for a while.

Side note on Maemo: In case your wondering how Nokia views Maemo now, they were promotiing using Maemo 5 as the development device for apps targeted for the MeeGo handset profile.

Next on the schedule was a talk on packaging using the OBS. The was a well presented talk. As a recent openSUSE convert, I’m very interested in getting up to speed with OBS. However, the most interesting thing about the OBS is that for the task of building packages it’s not really related to openSUSE more that any other distro. I think the openSUSE branding is unfortunate as it really seems to be a general tool, as MeeGo is very much showing. One of my next tasks at Openismus will be to learn more about the OBS.

The next talk was about getting 3rd party apps into MeeGo. This presentation was packed with tons of information (probably too much for one talk) about the tools and processes available (and planned) to application developers. There were lots of links and references within the slides, which prompted one attendee to request that the information on the slides be placed on the MeeGo wiki. The presenter agreed this would be a good idea, so keep an eye out for that soon.

Following the last talk was one regarding the community OBS and repositories. The questions following this talk made it obvious that there are many questions left unanswered regarding processes in MeeGo. The most common question was how the community and core OBSs relate and how an app migrates from the community OBS into the core OBS. Unfortunately the presenters were not able to make any definitive comments on this as the release team is in charge of the core OBS and have not yet defined this migration pattern. Additionally, the intention was to retain a similar repository structure to that in Maemo: extras, extras-testing, extras-devel. The naming scheme is subject to change, though.

I took a break but then attended the talk about Zypper. Being a recent openSUSE convert, I’ve been learning the openSUSE-specific tools. I’m not too fond of YaST but Zypper has been a very pleasant surprise. It’s much faster than yum and the apt* tools and seems to be more intelligent at resolving dependencies, too. It also has a very consistent command line UI. It’s easy to see the why it was chosen over the aforementioned tools once one tries it out; and this was discussed during the presentation. Many of the questions afterwards came for yum users who were asking for features that were in yum but not yet found in zypper. The answer was almost always that they were working on it or basically “patches welcome.” Also interesting is that zypper is written in C++;

Next on the agenda was the talk about designing UIs for multiple MeeGo profiles. This was very much a QML presentation and focused on why QML is the right choice over the other alternatives.

The day was getting long so I skipped the last two sessions and rested in the hotel till the buses started to leave for the party.

The evenings party was at the Guiness Storehouse and was the social highlight of the conference. I and several of the other Openismus folks were on the first bus and were greeted by some Irish lads drumming supposedly traditional Celtic drum music. Not sure how traditional it was but it was very loud. The building spread over 7 levels, the top level being known as the Gravity Bar and having walls of glass overlooking Dublin. To get to the top one went through the Guiness museum/tour. I’m not a beer drinker but it was nonetheless interesting. Once we made it to the Gravity Bar there was beer and wine in ample supply followed by appetizers and later small dishes of food, all brought around on platters. At some point everyone was summoned to the 2nd floor where a U2 cover band started playing. They were pretty good but we eventually made it back up to the Gravity Bar where we chatted while rain beat upon the glass walls.

Marco and me in the Gravity Bar at the Guiness Storehouse

After the party everyone was brought back to the hotel. There was a hacker room setup in the hotel for conference goers to hack, play games (ping pong, fussball, Wii, XBox, Chess), chill out and/or munch on the seemingly endless supply of snacks and drinks. Several of us hung out there till about 2am, playing chess (or rather being taught how to play chess by Michael) and chatting. A nice end to a very active day.

Jon and Murray relaxing on the hacker space sofa

Day 3:
The last conference day was designed to be an “unconference.” Basically, if you wanted to talk about something you could through your name and topic on a board and hoped people come. I went to a few of these but by far the most interesting (if not 100% meego related) was Micheal Meeks‘ LibreOffice talk. I pretty sure this was mostly the same talk he gave in Boston a couple weeks ago so maybe this should be considered cheating. Regardless, it was very interesting to see the night-and-day change that has happened since the announcement of LibreOffice. I asked why this had not happened at least 5 years ago. The answer was basically that the stars had not yet been aligned.

unconference schedule

The conference day ended early (16:00) because the stadium needed to be prepared for the Ireland vs. Norway football match. For those who had gotten tickets there was a pre-party in on of the VIP rooms. Again, we were more than adequately supplied with food and drinks and additionally given “Ireland” scarves and noise makers. Just before the match started we were asked to go to our seats. Ireland started out strong and scored first on a penalty kick. Norway then equalized just before the half. At half we were again treated to drinks. I started chatting and never really make it back to my seat. I did manage to catch Norway make the goal that won the match, however.

Ireland vs. Norway pre-game

General impressions

The general impression is that MeeGo has a very enthusiastic and diverse community. There is not a since of contentment, though. Many areas need to be defined regarding processes, especially regarding insuring that it truly is the open platform it describes itself as.

The most talked about technologies were QML and OBS. The OBS was universally praised and QML saw a lot of interest from people trying to see what it actually was, removed from the marketing hype. Nokia reiterated over and over it’s commitment to Qt and MeeGo as a platform.

It was interesting to see GNOME and KDE people in equal number and working on a common platform. There was one talk that I did not attend about MeeGo on the enterprise desktop (I generally run from the word enterprise). Perhaps MeeGo will be the means by which the GNOME and KDE communites come together. …or maybe not.

The conference itself was very well received. There was obviously a slew of money thrown into organizing and executing it. Everyone really appreciated the free netbooks and social events (especially the open bar!). The next conference will be in San Fransisco in May and at least one of the organizers for that has already expressed doubt that they would be able to top this first conference. Furthermore. there will be a MeeGo summit in June. Quim described the Summits as regional events while the Conferences are the General community events after releases designed to resync the community.

What the conference could not answer however was just how much traction MeeGo will receive in a very competitive market. With very well know and very good platforms that are currently available MeeGo is trying to differentiate itself by being an open and inclusive platform. I think this is something the AMD announcement underlined. However, we won’t know how much this differentiation will matter in market terms until there is a major piece of hardware featuring MeeGo. No one really expects Intel to directly introduce a netbook anytime soon so this only leaves Nokia for the immediate future. Until they releases their first phone featuring MeeGo (and targeted at a general audience) we just won’t know how much traction MeeGo can get in a very competitive market.

Of course, as developers we want to work on interesting and relevant projects. If Intel and Nokia were using this conference to spark interest and proclaim relevance I think they have (at least initially) succeeded. However, this coming year will be extremely important to see if this persists.

Using xmodmap to change the keyboard layout

One of the first things I do whenever I get on a new computer is to go the GNOME keyboard preference dialog and switch caps lock and the left control. While this has sufficed in the past, I now have a situation where I’d like to do a more complicated keyboard modification.

Note: The following was done on an Lenovo S10-3t running MeeGo 1.1.

Terminology
A KeyCode is the numerical code for the key. A KeySym is the symbolic code for the key. For example, my Return key has a KeyCode of 36 and a KeySym of Return.

Determining KeyCodes and KeySyms
The first thing to do is to determine the KeyCode and KeySym for the keys your want to change. This can be done by generating a list for all keys or interactively. The former approach is done by issuing the following command.

xmodmap -pke > kbd_mapping.txt

Here I’ve redirected the output to a text file so that I can view the results in a text editor. A small section of the contents look like this.

keycode 36 = Return NoSymbol Return
keycode 37 = Control_L NoSymbol Control_L
keycode 38 = a A a A ae AE
keycode 39 = s S s S ssharp section
keycode 40 = d D d D eth ETH
keycode 41 = f F f F dstroke ordfeminine
keycode 42 = g G g G eng ENG
keycode 43 = h H h H hstroke Hstroke
keycode 44 = j J j J
keycode 45 = k K k K kra ampersand
keycode 46 = l L l L lstroke Lstroke
keycode 47 = semicolon colon semicolon colon dead_acute dead_doubleacute
keycode 48 = apostrophe at apostrophe at dead_circumflex dead_caron

The different columns to the right of the equals sign corrospond to the way modifier keys change the key. Obviously the second column is the effect of the shift key being pressed. As always, the man page is the place to look for more details.

The interactive approach uses the following command.

xev | grep -A 4 KeyPress

Because xev produces a lot of output we use grep to filter only for ‘KeyPress’ events.

Here is some example output

KeyPress event, serial 29, synthetic NO, window 0x2400001,
root 0xaa, subw 0x0, time 3663762, (159,-24), root:(582,207),
state 0x0, keycode 36 (keysym 0xff0d, Return), same_screen YES,
XLookupString gives 1 bytes: (0d)

Here the KeyCode is 36 and the KeySym (also given in hex) is Return.

Once you’ve got the code and symbol combination you want, you you can place them in a file named .Xmodmap. The format for entries is the same as the output from the ‘xmodmap -pke’ command. A section of my file looks like this.
keycode 66 = Control_L NoSymbol Control_L
clear Lock
add Control = Control_L

keycode 135 = ISO_Level3_Shift Multi_key ISO_Level3_Shift Multi_key
keycode 108 = Alt_L Meta_L Alt_L Meta_L

Here I’ve turned my Caps Lock key into a control key. I’ve also moved ‘Alt Gr’ to the menu key and ‘Alt Gr’ is now an additional Alt key. The clear and add commands are necessary to redefine modifier keys. Again, see the man page for more info.

While I’ve put the commands in .Xmodmap so that it’ll persist acrooss restarts, you can also use the ‘xmodmap -e’ to test these changes out. For example, the first 3 commands would look like this.

xmodmap -e 'keycode 66 = Control_L NoSymbol Control_L'
xmodmap -e 'clear Lock'
xmodmap -e 'add Control = Control_L'

On MeeGo and openSUSE the .Xmodmap file is detected at session start. However, I’ve read that’s not always the case. So, consult your distro’s help if you have problems with loading.

Tweets for week ending 2010-11-07

  • Openismus day 100: This is the last daily update. Worked out ConferenceGoer's initial data acquisition class hierarchy. Implementing now. #
  • Openismus day 99: Did some admin stuff. Helped P. Finished off small sample conference schedule. Blogged about Merkmal: http://ur1.ca/29lpv #
  • Openismus day 98: Fleshed out microformats to be used in ConferenceGoer and started making example conference pages to scrape. #
  • Openismus day 97: Did some sketches and wrote down some thoughts for my next small project, ConferenceGoer. Few small changes to Merkmal. #
  • Openismus day 96: Couple small code changes to Merkmal. Released cluttermm 1.1.2 at Murray's behest. Attempted to get GNOME ftp access. #

Introducing Merkmal, a concentration game for GNOME.

For the last few week I’ve been working on a version of GMemory written using the gtkmm and cluttermm bindings. The project is called Merkmal.

Merkmal 0.1.0 screenshot

Currently the functionality is on par with that of GMemory. It requires at least cluttermm 1.1.2, clutter-gtkmm 0.9.6.

Here is a video of Merkmal in action. As you should see, basic game play is working but there are tons of things to be added to make the game more interesting. I listed some of those in the GMemory post.

Merkmal 0.1.0 screencast from Chris Kuehl on Vimeo.

Cluttermm

Now that I’ve ported the game to C++, adding these features should be much easier. However, there are some issues that I’ve been running into. I seem to be among the first (if not the only) consumer of cluttermm at the moment. This has of course meant that I’ve been running into bugs here and there. I’ve fixed the ones I’ve run into. I’ve also started filing bugs for missing api. For example, the new layout classes and animation framework have yet to be wrapped. I’ve filed some bugs for the ones that I’d most like to use.

GNOME Bindings

Having written the same application in both gtk+ and gtkmm, I don’t see why one would not use one of the bindings to write user apps. One of the beauties of GNOME is that there are so many high-quality bindings available. Bindings are a top priority for the project and it shows. With the introspection work that is going on, the situation will only get better.

Tweets for week ending 2010-10-31

  • Openismus day 95: Offered Merkmal up for review. Basically spent the day reworking code based on feedback. Release should be coming soon. #
  • Openismus day 94: Got game play working in Merkmal now. Also cherry-picked Fridays fixes in cluttermm master to cluttermm-1.2 branch. #
  • Openismus day 93: Reworked some code and got cards responding to clicks and such in Merkmal. Game play should be be working very soon. #
  • Openismus day 92: Got initial layout and card interaction working as well as logic for menu item sensitivity implemented for Merkmal. #
  • Openismus day 91: Had to backport my patch from yesterday to cluttermm tarball due to crashes using master. Moving forward w/ Merkmal now. #

Tweets for week ending 2010-10-24

  • Openismus day 90: Filed bug http://ur1.ca/25b19 for cluttermm issue. murrayc helped fix my bad patch. Merkmal layout code almost finished. #
  • Openismus day 89: Made progess on Merkmal until I ran into an issue initializing a Clutter::Cairo::Texture. Found the problem @ end off day. #
  • Openismus day 88: Back from baby leave! Caught up on email. Helped P w/ her app. Got back to full speed on my Merkmal game. #

Tweets for week ending 2010-10-10

  • Openismus day 87: Made changes to Merkmal that Murray proposed. RefPtr'd objects. Son, Rigby, born. #

Tweets for week ending 2010-10-03

  • Openismus day 86: Got initial class structure of Merkmal compiling and commited. Doesn't do anything and still needs considerable changes. #
  • Openismus day 85: More Merkmal hacking. Detour into what it would take to build clutter-gtk to gtk3. Reviewed signals and refptr's in gtkmm. #
  • Openismus day 84: Remember kids, if you wanna waste time w/ weird errors just forget to call clutter's init function in your clutter app. :( #
  • Openismus day 83: Small change to clutter-gtkmm: http://ur1.ca/1ur4h. Fought with jhbuild a bit. Getting weird error in Merkmal. #
  • Openismus day 82: Learning more Gtkmm. Added menus and toolbar using UIManager and Actions. http://ur1.ca/1sh08 Started basic Clutter stuff. #
  • Openismus day 81: Read 2nd half of Clutter Cookbook. Got Merkmal into Gitorious… just autotools and i18n stuff. Signed up for MeeGo conf.! #

Tweets for week ending 2010-09-26

  • Openismus day 80: Accompanied Vada to 2nd day of pre-school. Small jhbuild dep fix. Started on gmemory C++ port. Dinner with #ds2011 team. #
  • Openismus day 79: Read half of http://ur1.ca/1rhny. Spent rest of day in #ds2011 kick-off meeting. Tried to fix some gtkmm build issues. #
  • Openismus day 78: Fixed another small bug in cluttermm_tutorial. Set up Merkmal project. Spent rest of time with jhbuild issues. #
  • Openismus day 77: Fixed another example in cluttermm tutorial. http://ur1.ca/1pgel Wrote a blog post. http://ur1.ca/1pge5 Ate PB&J sandwich. #