
I arrived in Belgium yesterday.
I'm glad to see people that were at DebConf in Bosnia and Herzgovina. I'll try to assistat many conferences about Java, Debian, GNOME and more if I can. I will also participate to the LibreDinner tomorrow.
Well, see you at FOSDEM 2012!

Phew! It's been a crazy ride to release Unity 5.2 once ubuntu precise released its alpha 2, but we finally get there!
Thanks a lot for all the community participation, we actually got 27 testers answering to Nick's call for testing. Those were high quality contributions and enabled us to get closer to the unity release.
So, what's new since 5.0? Well, a lot!
More precisely, we got multimonitor support with screen edge detection, "push to reveal" launcher behavior to avoid false positive when hitting the back button of firefox, per workspace alt-tab switcher, new home dash, automaximize only on netbooks and a lot of small details that matter.
Test results
Here are some feedback after 5 hours that I took to collect and analyze the test results from all the (numerous) comments that were on the test results:
- Testers confirmed that some of the issues spotted on 5.0 are now fixed, which is a great news! Not all of them, and of course, we have some minor regressions. I added those issues to the list of "distro priorities". You can look at them there. This list doesn't show all the defects we have, of course, but give a good overview of the big ones we track to ensure they are fixed as soon as possible.
- Some tests have been updated due to new upstream behavior (like the per workspace scale option and new home dash which now retains its search status). Thanks for people testing it and to have spotted that we missed those changes when updating the tests! We also rephrased with the given suggestions some of them.
- Some people seem to get difficulties to open menus from the application and the indicator when clicking on them in the panel (only Alt or F10 seems to work). I strongly invite them to open a bug repot with a video attached and giving more info as I couldn't reproduce it there.
- There is a bamf bug revealing only on some particular circumstances (8 fails, and last time, we also get some failures on this test) when testing launcher/quicklist-pin. I personnaly couldn't reproduce it here. Then, I asked seb128 to give it a shot and he could get the issue. I tried again and this time, I got it! However, this seems to not be reliable or reproducible 100%. We opened a bug and put it on the priority list. Well spotted everyone!

- Also some testers made some interesting design request, I'm reminding you of this link on how to join the relevant mailing list to participate in unity design (the introduction text stated it though ;)).
- We got also some comments of "key above tab" and why we used this terminology rather than directly telling, let's say "`". Please remember that this is a keyboard dependent configuration! The usa keyboard is normally using `, my azerty keyboard is using ², it seems that for some other configuration it's < or ~. So yeah, we have to keep the test cases as generic as possible, bare with us, please!

- We added some new test cases as well due to a very particular way of triggering some bugs like for instance bug #877778. Thanks to the one adding a comment to explain how to trigger it!
- Despite our strong efforts to make an easy way for unity restarting on a simple click from the tests (and improving it), it seems that the glibmm/compiz bug preventing to restart it reliably on demand is still an issue. It's not a very important bug for everyday use, however, it will be nice that we can get it over for the tests in particular. Fortunately, checkbox enables you to continue the tests where you stopped even if you had to restart your session.
A story of boot time
Finally and probably the most important feedback from the whole list, peope started to feel that "it was longer to start/boot". Jumping on this fact, we made some bootcharts on our machines to get real and precise values and you know what… the comments were right! The multimonitor support made the boot time badly regressing. Consequently, we decided to delay the release until today to get that fixed rather than pushing a version with this performance impact on intel cards. We finally got the fix, push it to trunk and now, this is all old story!
Thanks to all the community for spotting this one, it's better to remark it earlier than later and this participation really had a visible impact (or rather avoided some real visible impact ;)) for a bunch of users. Well done!
The importance of testing defaults
Some testers remarked that in the system settings test, we never told to add gnome control center to the launcher. However, in the introduction text, we clearly expressed that we expect testers having the default settings (you have the guest session for it, use it, love it!) and the system settings is by default pinned in the launcher.
For instance, intellihide is the default behavior and we didn't say anything to ensure that intellihide is there. If we did it, there will be a long list of prerequesites on the top of each test that I'm sure testers don't want to see?
We strongly recommend people using the guest session to ensure all settings and environment are correct for the tests!
To sum up
Unity 5.2 is now building in the official repositories and should soon be available to all precise users. Thanks again to everyone participating in this project and see you soon for… 5.4 (or maybe a little bit before for an incoming compiz release that I heard of) ! 

After several months on hiatus, then some January evenings to process the backlog, I am happy to have the commit digests back to the present day.
What now? I'll try to get back to the weekly updates, whatever the weather.
Of course you can help; whenever you see a noteworthy commit, whenever you make a noteworthy commit, just send me an email, or ping me on IRC, this will help me, and could also bring other perspectives on what constitutes a “noteworthy” commit. And if you love the commit digests, if you have time on your hands, you can help extending the projects to new heights, got an interest in statistics? got an interest in interviews? there's a place for you.
Happy reading!

I've helped again organizing the crossdesktop devroom. Among these talks, I can only recommend the gnome-boxes presentation that Marc-André and Zeeshan will be giving :) While I'm at it, here are a few more shameless plugs: Hans de Goede will be giving 2 SPICE talks in the Virtualization devroom, one general presentation of SPICE, and one where he will describe the USB redirection support in SPICE. And Alon Levy will present his work to interact with an X server through SPICE without using a virtual machine.
Last but not least, there will also be a GNOME booth with some goodies...
See you all there in a few days!

Getting conned: eBay/Paypal fun
In October, I sold my first generation MacBook Air on eBay, and got a buyer within a day for the £500 "Buy It Now" price. "Buy It Now" requires using Paypal, and the £500 (minus commission) appeared in my Paypal account¹. After a bit of to and fro, the buyer got in contact, and suggested that he come and pick it up. Saving about £30 of shipping, and sorting out the sale faster, strike me as good ideas.
The "buyer" said he couldn't come, sent one of his "employees". A very courteous man came to pick the laptop. In hindsight, he seemed slightly uncomfortable, and looked like he was very happy to see how easy it was going to be.
The spooky thing is that within 40 minutes -- note, not 3 hours, not a day after, not the day before) -- within 40 minutes of the laptop getting picked up, the holder of the eBay and Paypal accounts submitted an "unauthorised account activity claim", leading to "payment reversal" (me owing £500 to Paypal²).
During my call to eBay's customer support, I was told that "I had nothing to worry about" (I'm guessing that would be the case as long as I repaid the £500). Paypal promptly sent a mail mentioning they needed my help, but with very little possibilities from my side ("no courier tracking number? Give us the money now").
Surrey Police failed to find the culprits, with the 2 mobile numbers associated with the con only being pay-as-you-go phones (topped up in a little convenience store in North London that only keeps a day's worth of CCTV).
So my advices:
- If you sell anything via eBay using Paypal, send it recorded, and keep the receipt.
- If you bought a MacBook Air first generation with the serial W88500DJ12G, it's stolen, send me an e-mail.
And as opposed to Mssrs Lodge and Reakes, Paypal didn't reimburse me anything, and I'm £500 out of pocket.
¹: I'll pass you the details on eBay referring to a closed Paypal account that meant I got conned two days later than the "buyers" anticipated.
²: On an account that was already closed, see ¹.
Update: Added mention of eBay's ludicrously bad customer service.

The cool stuff first
Go to YouTube directly if you can't see the video here.
A new arrival
As mentioned by Cosimo, we have a new library to help us implement the settings you saw: libwacom.
libwacom is there to give us metadata about tablets, whether or not they are connected to your system, the list of styli it supports, as well as information about the styli themselves. As you can see from the UI, it's pretty important that we know:
- whether the tablet is builtin (so we know whether you can calibrate it)
- which form factor it has
- the list of styli it supports
- for each stylus, its full name, the number of buttons, what it looks like
So if you have a Wacom tablet, send us a definition file for your tablet, so you can configure it with the impression that the software actually knows about your device.
Where's that configuration again
After knowing what each tablet had to offer, we had to have a way to match the definitions to XInput devices, assign settings per-tablet, and importantly, switch stylus configuration when the user switches stylus. This is done using the new GsdWacomDevice and GsdWacomStylus objects, shared between gnome-settings-daemon (which will apply the configuration) and gnome-control-center (which will set the configuration).
This also means we have a few debugging applications, such as list-wacom in gnome-settings-daemon, to show you the attached GsdWacomDevices, or test-wacom in gnome-control-center, to test display of particular tablets if you don't own them (this is the place where I spend a lot of time).
What's next
Peter Hutterer, my input buddy at Red Hat, who made the original Wacom panel for GNOME 3.2, and the first version of libwacom, is currently spending a lot of time on Multi-Touch, and fixing bugs I report in the Wacom driver.
Jason Gerecke, from Wacom, who did most of the initial work on calibration support, is working on the related display-mapping. This will allow choosing whether a tablet's working area is the whole desktop, or a single monitor when in multiple monitors are used.
For my part, after fixing the layout bugs that so annoy me in the settings panel, I'll be starting work on tablet button mapping. I look forward to making the LEDs on the tablet match up with the selected keyboard shortcut!
Many thanks to Cosimo and Monty for helping out with presenting the work, and doing the video.

My last FOSDEM participation was in 2004, and I always keep in mind many good moments with my French and Belgian GNOME's Friends !
Archives
So I'm totally excited to meet them again in 2012 ... :)

Some unity configuration in gnome-control-center.
Just finished some hacking for implementing some unity configuration options that are blessed by the design team, as shown in this official specification.
It contains as well other ui tweaks. You can notice in particular the "Restore defaults" options that work on each tabs and restore every page's defaults.
Those options are impacting both unity and unity-2d. This gave particular challenges as their features don't align (for instance, we don't show the "set launcher icon size" for 2d) and they don't have the same kind of "launcher hide mode". Also, some configuration options have more choices in ccsm than those shown in the ui (like if you want to reveal the launcher on the bottom-left corner, or if you are using the "dodge active window" mode. We tried to be clever on the ui side and not resetting any different setting you can have set in ccsm by just launching the ui.
We also had to do some choices, like what settings to take by default (on first ui launch), when you have different settings between unity 2d and unity 3d? As there are more ui to tweak 3d than 2d, I thus decided to take the settings from 3d at startup (and then, the settings will align).
Note that the "reveal spot" doesn't work right now for Top Left corner, but this is a compiz/unity bug and not yet (but soon will be!) implemented feature in 2d.
Finally, if you are using a non unity session like the gnome-panel or gnome-shell one, you won't be impacted by those new settings. You will still gain a new "Restore defaults" option though. 
The package is currently building and will be available soon in Precise, enjoy!

If you want to try it, download this file to /etc/yum.repos.d and then run
yum install gnome-boxes && yum update
yum remove libvirt-glib && yum distro-sync
Keep in mind that this is a new application still in heavy development, so you're likely to find bugs and missing features. But I'm sure you will enjoy it nonetheless :)
Feel free to join us in #boxes on irc.gnome.org if you have any issues, or if you just want to chat with us.

Une extension à Nautilus pour GNOME Split
Bientôt 2 ans après avoir exprimé ma volonté de créer une extension pour Nautilus afin de pouvoir lancer un découpage ou un assemblage avec GNOME Split, cette extension est enfin arrivée.
Le but de l'extension est de proposé deux nouvelles entrées dans le menu contextuel de Nautilus. Lors d'un clic droit sur un fichier quelconque l'item "Découper le fichier..." apparaît, l'utiliser permet de lancer GNOME Split avec les arguments qui vont biens pour découper le fichier sélectionner. Lors d'un clic droit sur un fichier étant considéré comme la première partie d'un fichier qui a été découpé auparavant, l'entrée "Assembler les fichiers..." apparaît permettant de lancer GNOME Split pour assembler les parties.
Concrètement, cette extension de Nautilus est codée en C, publiée sous GPL version 3 et déjà présente dans le PPA pour la version 11.10 d'Ubuntu.
~$ sudo add-apt-repository ppa:gnome-split-team/ppa
~$ sudo aptitude update
~$ sudo aptitude install nautilus-gnome-split
N'étant pas expert en développement d'extensions pour Nautilus toute aide est la bienvenue.
En espérant que cette extension soit utile.

A look to OpenPhoto project, few months later

I wanted to give some news about OpenPhoto Project.
Back in July, I discovered the project OpenPhoto, funded on kickstarter, which aims to provide an open photo sharing web platform, like flickr, without the hassle to have all information and development kept in the hands of someone else. As the future of flickr is each day, less and less clear, finding an alternate solutions could become an option. For the moment OpenPhoto cannot compete, features-wise, to flickr, but is enought to publish a photo stream.
Since my previous post about this project, OpenPhoto has grown gently, reaching the version 1.0 in the meantime, and going further, it’s now at 1.3.2. It provides a solid photo sharing application, with several back-ends to store pictures, like local filesystem, Amazon S3 bucket, or Dropbox and Mysql or Amazon simpleDb for Db back-ends. It features a solid eco-system, like mobile applications (android, iphone, …), a WordPress plugin, OAuth clients in various language, … . You can have a look at https://github.com/openphoto to find all related projects.
OpenPhoto provides also a SAAS on openphoto.me where you can have your own instance of OpenPhoto running in the cloud, but with the photos hosted on the platform you want and you own. Accounts are free (I don’t know how long it’ll last) but it’s not open to everyone, however you just have to request an invite on the site. I don’t know what is the business-model and if there is one, but I guess, there will be a free hosting version and a “pro” version with advanced features.

Feuilles de personnages Star Wars D6
Cela fait un peu plus de deux ans que je me suis mis au jeu de rôle Star Wars, un peu
par hasard. En cherchant des idées de sorties sur le net, je me suis rendu
compte qu'un maître de jeu (celui qui anime les parties de jeu de rôle)
habitait à une rue de chez moi. Et bon, il fallait bien que je complète la
panoplie du Geek :-p. Depuis le virus m'a contaminé...
Dans un jeu de rôle, pour représenter les différentes caractéristiques de son
personnage, on utilise une feuille de personnage. Sur cette fiche sont
regroupés ses attributs (dans Star Wars: dextérité, savoir, mécanique,
perception, vigueur, technique) et les compétences qui découlent de ces
attributs. Par exemple, la compétence "Sabre Laser" qui permet de manier un
sabre laser est une compétence de dextérité.
J'ai utilisé plusieurs fiches en 2 ans. J'ai commencé avec une photocopie du
modèle de personnage que j'avais choisi, un "Jedi Raté". Ce modèle est fourni
avec le livre de règles. J'ai ensuite évolué vers celui de Robin Defives (merci
à lui) que vous pouvez trouver sur scenariotheque.org.
Il a mis deux fiches à disposition : une fiche de personnage, une pour un
vaisseau (utile pour incarner un pilote).
Étant gêné par quelques limitations, j'ai il y a quelques temps commencé à
faire évoluer ma fiche de personnage. J'ai par exemple modifié la fiche pour en
faciliter la lecture, notamment en optant pour un meilleur alignement des
différentes zones. J'ai aussi regroupé les zones qui avaient un lien, comme
celles utilisée lorsque l'on est touché lors d'un combat: "vigueur" et
"protection" (pour vérifier si le coup/tir reçu blesse notre personnage), et
"santé", à modifier lorsque l'on est blessé.
Feuille de
personnage Star Wars D6 (pdf)
Incarnant un "Jedi raté", je trouvais aussi les zones permettant d'indiquer les
pouvoirs de la Force du personnage vraiment trop limitées. J'ai donc opté pour
une page à part (ce qui m'a permis de me perfectionner dans l'utilisation d'
Inkscape par une nuit d'insomnie).
La présentation en diagramme plutôt qu'en texte permet de repérer plus
facilement les dépendances entre chaque pouvoir, et de quelle capacité de la
Force elles dépendent (Contrôle, Sens, Altération). Les pouvoirs représentés
sont ceux de la seconde édition:
Diagramme
des pouvoirs de la Force (pdf)
Il y a également la fiche des caractéristiques du vaisseau que vous pilotez.
N'ayant pas orienté (pour l'instant) mon personnage vers le pilotage, je n'ai
pas modifié celle de Robin:
Feuille de vaisseau Star Wars D6 (pdf)
Selon le personnage que vous incarnez (sensible ou non à la Force, pilote ou non) vous pourrez vous faire une fiche recto-verso sur mesure avec un site de fusion de PDF comme PDF Merger. Bonnes aventures ;-) !

GNOME Beer event at FOSDEM 2012
Despite what some stats may say, my biggest contribution to GNOME is not in bugs or code but in the organization of beer related events!
So I'm pleased to announce that, like each year, we'll have a GNOME Beer party on the Saturday night of FOSDEM (4th Feb). People seemed happy of the location of last year, so we decided to stay at "La Bécasse" in the city center. Feel free to add yourself to the wiki if you are planning to attend.
See you at FOSDEM!

Gtk client for HP TopTools P1218A card
From December 19 to December 28 zarb.org main server was down. This server host(s|ed) many things including this blog, Mageia website, PLF, ... The reason why it took so long is that the server is in the south of France, kindly hosted by Lost Oasis and we have no one nearby to physically access it, and in this case we had lost our main raid array.
This server (kindly donated by HP almost 10 years ago) has a remote administration card (P1218A) but it is not really usable for anything except rebooting the machine. The remote console more or less works with some of the java versions from sun, but most of the time it only displays the top third of the screen, until next refresh when it goes black, and misses many keystrokes. This made it unsuitable for accessing the RAID BIOS and finding the problem.
After about a week, for some unknown reason (I could have done it many times over the last 10 years), I thought of looking at the communications between the applet and the management card. Everything was clear text and very simple. The next days I wrote a ruby-gtk client for the card, accessed the BIOS, found that the 4 disks had been marked has failed without errors and were correctly syncronized, and put them back online.
Login
The first (and longest) part was to find how to login and get the session cookie. The exchange looks like:
GET /cgi/challenge HTTP/1.1
<?xml version='1.0'?><?RMCXML version='1.0'?><RMCLOGIN><CHALLENGE>DJRhNVfOWfuB8fS/6PFazg==</CHALLENGE><RC>0x0</RC></RMCLOGIN>
GET /cgi/login?user=FOO&hash=UtPRDzFS36s0jJBgTmtS4JDR HTTP/1.1
Challenge was obviously 16 bytes of data base64 encoded. Response was called hash and was 18 bytes whatever the password is. Given that it was written more than 10 years ago, I supposed it would be md5, even if it only gives 16 bytes.
I then wrote a small ruby application trying various combinations (md5(challenge + password), md5(xor(callenge,password)), xor(challenge,md5(password)), ...) and found that md5(xor(challenge,md5(password))) was giving me the correct first 16 bytes.
I then used an online CRC calculator to find that the remaining 2 bytes are "CRC-CCITT (XModem)".
Console
The other big part was the remote console.
Getting the current screen content is quite easy, it's a GET on /cgi/scrtxtdump (with an optional force=1 parameter).
In my initial tests there was 0x10 between each character so I just filtered them out. I found later that it actually gives attributes for the character (bold, color, ...) and now support the ones I have seen so far.
Sending a keypress is quite easy too, it's a POST to /cgi/bin with data being <RMCSEQ><REQ CMD="keybsend"><KEYS>space separated scancodes</KEYS></REQ></RMCSEQ>.
The result
The code is now online, still very ugly, but hopeful helpful :)

C'est un peu tard pour le signaler, mais le 31 décembre 1996, Blizzard North engendra ce monstre qu'est Diablo. C'était il y a 15 ans. A l'époque, j'ai entendu parler du jeu sur Micro Kids, une des premières émissions de télé dédiée aux jeux vidéos, dans les années 90, dont on peut d'ailleurs retrouver de vieilles vidéos sur abandonware-videos.org. Je n'ai commencé à jouer à Diablo que l'année suivante, une fois que j'ai eu mon premier PC (j'étais auparavant un Amigaïste comme certains le savent peut être). Déjà à l'époque, la sauce prenait bien. La collectionnite aigüe d'armes, et d'items en tous genres dans une ambiance bien glauque fonctionnaient du tonnerre : qui n'a pas frémi devant The Butcher et son "Ah... Fresh meat !"... Certains se rappellent de ces longues heures passées à finir ce jeu (là où certains mettent 3 minutes 12 secondes).
Et puis en juin 2000, il y a eu Diablo II. Peut être un poil moins attachant, mais au moins votre personnage pouvait enfin courir plutôt que se traîner, utiliser des sets complets d'armure (c'est beau, le vert), de nouvelles classes, un système de compétences complètement revu et bien d'autres choses. C'est le seul autre jeu (le premier étant Starcraft) auquel j'ai joué en LAN party entre potes. Ah, évidemment en te temps là j'étais jeune et sous Windows. Autre temps, autres moeurs...
Depuis, Diablo III a été annoncé, est en beta test... Sans qu'on ne sache quand il sortira vraiment. Le jeu est encore plus beau, mais... toujours pour Windows et Mac OS. Bon, de toute façon, quand je vois la configuration minimale requise (dual core à 4GHz), je me dis que je ne vais pas changer de machine pour un jeu. Mais il y a peut être de petits Linuxiens qui ont le matériel qu'il faut, eux. Et j'entends leurs grosses larmes perler le long de leurs joues... Pour ce profil rare et atypique qu'est le linuxien-gamer, un espoir subsiste pourtant: Diablo I et II étaient tout de même plus ou moins jouables sous WINE, alors qu'en est-il de Diablo III ? Hé bien Diablo III semble fonctionnel sous Linux, toujours via WINE. Bien des nuits blanches (autant pour l'installer que pour jouer j'imagine :-p) et des destructions de souris en perspectives^^.
En prime, Blizzard nous offre une petite rétrospective Diablo (à défaut d'une date de sortie).

Petite annonce personnelle / Small personal announcement

Connecting Apache httpd to Tomcat with mod_jk: The bare minimum
Earlier this week, I wrote:
I hate docs that tell you what to do, but not why. As soon as a package name or path changes, you’re dust. This is maybe the 4th time I’ve been configuring Apache to delegate stuff to Tomcat using mod_jk, and every time is just like the first.
For those who don’t know, mod_jk is a module inplementing the wire protocol AJP/13, which allows a normal HTTP web server to forward on certain requests to a second server. In this case, we want to forward requests for JSP pages and servlets to Tomcat 6. This allows you to do neat things like serve static content with Apache and only forward on the dynamic Java stuff to Tomcat. The user sees a convenient URL (no port :8080 on the hostname) and the administrator gets to serve multiple web scripting languages on the same server, or load balance requests for Java server resources across several hosts.
I have spent enough time on it at this point, I think, that I understand all of the steps in the process, and have stripped it down to the bare minimum that one would need to do in terms of configuration to get things working. And so I’m putting my money where my mouth is, and this is my attempt to write a nice explanation of how mod_jk does its thing, and how to avoid some of the common mistakes I had.
First, a remark: Apache is one of those pieces of software that has gotten harder, rather than easier, to configure as time has gone on. Distributions each package it differently, with different “helpful” mechanisms that make common tasks like enabling a module easier, and to enable convenient packaging of modules like PHP, independent of the core package. But the overall effect is that a lot of magic done by distributions makes it much harder to follow the upstream documentation. Config files are called different names, or stored in different places. Different distributions handle the inclusion of config file snippets differently. And so on.
This is not to say that Apache, Tomcat and mod_jk don’t have some nice docs – they do, but often the docs don’t correspond to the distros, or haven’t been updated in a while, and often they don’t explain why you have to do something, putting emphasis instead on what you need to do. After all my reading, I finally found the Holy Grail I was looking for – the simple document of how to configure mod_jk – but even this has its shortcomings. The article doesn’t mention Tomcat, for example, which left me digging around for information on the configuration I needed to do to Tomcat, which led me to this, which led me to over-write the sample workers.properties file in the simple set-up document.
But if you understand the First Principles, you can figure out what’s going on with any organisation of configuration. That’s what I’m hoping to get across here.
How does mod_jk do its thing?
The first issue I had trouble getting my head around was how, exactly, all this was supposed to work. In particular, I didn’t quite understand how the configuration worked on the Tomcat size of things.
As I understand it, here’s what happens:
- A GET request comes in to httpd for http://localhost/examples/jsp/num/numguess.jsp
- Apache processes the request, and find a matching pattern for the URL among JkMount directives
- Apache then reads the file specified by the JkWorkersFile option to figure out what to do with the request. Let’s say that config file says to forward to localhost:8009 using the protocol ajp13
- Tomcat has a Connector listening on port 8009, with the protocol AJP/13, which handles the request and replies on the wire. Apache httpd sends the reply back to the client
Apache httpd configuration
There are two steps to configuring Apache:
- Enabling the module
- Configuring mod_jk
Apache provides a handy utility called “a2enmod” which will enable a module for you, once it’s installed. What happens behind the scenes for modules depends on the distribution. On Ubuntu, module load instructions are put in a file called /etc/apache2/mods-available/<module>.load optionally alongside a sample configuration file /etc/apache2/mods-available/<module>.conf. To enable the module, you create a symlink to the .load file in /etc/apache2/mods-enabled.
On my Ubuntu laptop, my jk.load contains:
LoadModule jk_module /usr/lib/apache2/modules/mod_jk.so
On OpenSuse, on the other hand, a line similar to this is explicitly added to the file /etc/apache2/sysconfig.d/loadmodule by sysconfig, based on the contents of a field in the configuration file /etc/sysconfig/apache2 – remember how I said that distro packaging makes things harder? If you added the line directly to the loadmodule file, the change would be lost the next time Apache restarts.
In both cases, these files (on Ubuntu, the mods-available/*.load files, and on OpenSuse the sysconfig.d/* files) are loaded by the main Apache config file (httpd.conf) at start-up.
Configuring mod_jk
The minimum configuration that mod_jk needs is a pointer to a Workers definition config file (JkWorkersFile). Other useful configuration options are a path to a log file (JkLogFile – which should be writable by the user ID which owns the httpd process) and a desired log level – I set JkLogLevel to “debug” while getting things set up. On OpenSuse, I also needed to set JkShmFile, since for the default file location (/srv/www/logs/jk-runtime-status) the directory didn’t exist and wasn’t writable by wwwrun, the user that owns the httpd process.
This configuration, and the configuration of paths below, is usually in a separate config file – in both Ubuntu and OpenSuse, it’s jk.conf in /etc/apache2/conf.d (files ending in .conf in this directory are automatically parsed at start-up). To avoid errors in the case where mod_jk is not present or loaded, you can surround all Jk directives with an “<IfModule mod_jk.c>…</IfModule>” check if you’d like.
The JkMount directive configures what will get handled by which worker (more on workers later). It takes two arguments: a path, and the name of the worker to handle requests matching the path. Unix wildcards (globs) are accepted, so
JkMount /examples/*.jsp ajp13_worker
will match all files under /examples ending in .jsp and will pass them off to the ajp13_worker worker.
If you want Apache to serve any static content under your webapps, you’ll also need either a Directory or Alias entry to handle them. Putting together with the previous section, the following (from Ubuntu) was the jk.conf file I used to pass the handling of JSPs and servlets off to Tomcat, and serves static stuff through Apache:
<IfModule mod_jk.c>
JkWorkersFile /etc/libapache2-mod-jk/workers.properties
JkLogFile /var/log/apache2/mod_jk.log
JkLogLevel debug
Alias /examples /usr/share/tomcat6-examples/examples
JkMount /examples/*.jsp ajp13_worker
JkMount /examples/servlets/* ajp13_worker</IfModule>
I should use Directory to prevent Apache from serving anything it shouldn’t, like Tomcat config files under WEB-INF – I could also just use “JkMount /examples/* ajp13_worker” to have everything handled by Tomcat.
Now that Apache’s config is done, we need to configure mod_jk itself, via the workers.properties file we set in the JkWorkersFile parameter.
workers.properties
Sample workers.properties files contain a lot of stuff you probably don’t need. The basic, unavoidable parameters you will need are the name of a worker (which you’ve already used as the 2nd argument for JkMount above), and a hostname and port to send requests to, and a protocol type (there are several options for worker type besides AJP/1.3 – “lb” for “load balancer” is the most important to read up on). For the above jk.conf, the simplest possible workers.properties file is:
worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
And that’s it! The last step is to set up Tomcat to handle AJP 1.3 requests on port 8009.
Configuring Tomcat
In principle, Tomcat doesn’t need to know anything about mod_jk.It just needs to know that requests are coming in on a given port, with a given protocol.
Typically, an AJP 1.3 connector is already defined in te default server.xml (in /usr/tomcat6 on both Ubuntu and OpenSuse) when you install Tomcat. The format of the connector configuration is:
<Connector port=”8009″ protocol=”AJP/1.3″ redirectPort=”8443″ />
I am pretty sure that this will work without the redirectPort option, but I haven’t tried it. It basically allows requests received with security constraints specifying encryption to be handled over SSL, rather than unencrypted.
In addition to this, Tomcat does provide a facility to auto-create the appropriate mod_jk configuration on the fly. To do so, you need to specify an ApacheConfig in the Tomcat connector, and point it at the workers.properties file. This facility looks pretty straightforward, but I know I found it confusing in the past when I lost edits to the jk.conf file – I prefer manual configuration myself.
Gotchas
I have had quite a few gotchas while figuring all this out – I may as well share for the benefit of future people having the same problems.
- All the documentation for mod_jk installedd with the packages refers to Tomcat5 paths – for example, on OpenSuse, in the readme, I was asked to copy workers.config into /etc/tomcat5/base – a directory which doesn’t exist (even when you change the 5 to a 6)
- If your apache web server uses virtual hosts (and, on Ubuntu, it does by default) then JkMounts are not picked up from the global configuration file! You need to either add “JkMountCopy true” to the VirtualHost section, or have JkMounts per VirtualHost. If you used Alias as I did above, and you try to run a servlet, the error message is just a 404. If you try to load a JSP, you will see the source.
- If you make a mistake in your workers.property file (I had a typo “workers.list=ajp13_worker” for several hours) and your worker name is not found in a “worker.list” entry, you will see no error message at all with warnings set to error or info. With the warning level set to debug, you will see the error message “jk_translate::mod_jk.c (3542): no match for /examples/ found” The chances are you have a typo in either your jk.conf file (check that the name of the worker corresponds to the name you use in workers.properties), or you have a typo somewhere in your workers.properties file (is it really work.list? Does the worker name match? Is it the same as the worker name in the .host, .port and .type configuration?
- Make sure you get Tomcat working correctly first and working perfectly on port 8080 – or you won’t know whether errors you’re seeing are Tomcat errors, Apache errors or mod_jk errors.
I’m sure I’ve made mistakes and forgotten important stuff – I’m happy to get feedback in the comments.

Community Software Development training course
For the past few months, I have been offering a new service – a training course tailored to helping a team be effective working with community projects – whether that is engaging an existing community, or growing a community around new code. Details of the topics I cover are up on my site. Developing software in community is as much a social activity as it is a technical activity – and engaging an existing community, like moving into a new neighbourhood or starting at a new school, can be very daunting indeed. This course covers not just the technical issues of community development, but also the social, management and strategic issues involved. Some of the questions that I try to help answer are:
- What are the tools and communication norms?
- How can I get answers to my questions?
- Is there a trick to writing patches that get reviewed quickly?
- How do I figure out who’s in charge?
- How much will it cost me to open source some code/to work with an existing project?
- How does managing volunteers work?
- Is there anything I can do to help my developers be more vocal upstream?
- What legal issues should my developers be aware of?
All of these things, in my experience, are challenges that organisations have to overcome when they start engaging with community projects like Apache, GNOME or the Linux kernel.
If you’re having trouble with these issues, or some subset of them, and are interested in a training seminar, please contact me, and we’ll talk.

Whoops: water resilient Linux
I forgot my motorola android phone in my pocket while sitting in the hot spring pool yesterday, I quickly realized
though, rushed it out of the water, disassembled, removed the battery in a hurry. Funilly the display did stay on as "normal" but the system didn't like this. Dried it and kept the pieces overnight on the UPS to dry out thoroughly, and replugged SIM and battery this morning ... working :-) . Except for that incident the hot spring trip was great, and Cheng definitely loves playing in the water !
libxml2
In the category of stable software, libxml2 is relatively quiet though I need to do a release incorporating various XPath bugs. I'm quite slow at the maintenance those days (which I think is fine considering the project is really in maintenance mode), but I should get that release out ! Someone kick me :-)
libvirt
In contrast libvirt development is *not* slowing down as I was expected. We still roll a release a month, each incorporating 300+ patches, and the trend is that the patch number is still increasing, leading to more volume on-list. I was naively thinking that since most APIs were done, the volume would start to decrease around one year ago, but nope, people still want more features, better hypervisors support, etc... and that's just fine :-)
libstoragemngt
One of the new library project I am looking at now is libStorageMgmt the goal is to provide management APIs for those external storages arrays like SANs. Right know they each have their own specific ways to manage partitionning, provisionning, etc... and we hope to be able to improve that, but it will take a while. The project is starting and currently looking at design options, if that field interrest you, get on the list and provide some feedback, it may be more useful to you when it gets usable :-)
The GNOME Montréal Summit was held a month ago now, and not only was it lots of fun, but also a very productive time. Marina held a session about the outreach in GNOME, and we spent time discussing different ways to improve welcoming and attracting people in GNOME. Let me share some of the points we raised, supplemented by my own personnal opinions, that do not reflect those of my employer, when I’ll have a job.
A warm welcome
There has been a lot of nice work done structuring and cleaning up GNOME Love page. We now have a list of people newcomers can contact if they are interested in a particular project. Feel free to add your name and project to the list, the more entry points we get, the better for them!
I tend to think there is still a bit too much content on the GNOME Love page, maybe we could use more pretty diagrams (platform overview, ways to get involved) to keep the excitement growing and to reduce the amount of text we have right now (GUI tutorials, books about GNOME, tips & tricks). Feedback appreciated!
Start small
We tend to think of contributions as patches and a certain amount of code added in a project. Howeverit’s not easy at all for newcomers to just pop in and work on a patch, especially in GNOME where most software follows strict rules (as in coding style, GObject API style, etc.). And since GNOME maintains (again, for the most part) a very high quality in its code backed by many hackers, whether they’re part of a company or independent contributors, it makes the landing of a patch even tougher.
Which is why we should encourage everyone who wants to get involved to work on small tasks, would it be fixing a string typo, rewording or marking plural forms for translation. Working on manageable changes ensures that the patches are completed and landing these patches builds confidence to work on bigger patches. Having your name in the commit log is a great reward, that encourages sticking around and digging for more.
Advertise early, advertise often
If we want to get loads of people coming toward GNOME, we should definitely talk more and spread the word about the GNOME Outreach Program for Women (GOPW) and the Google Summer of Code (GSoC) earlier.
Google doesn’t announce the program very far in advance and approved organizations are only published three weeks before the application deadline, but we should encourage students to get involved in GNOME early and keep an eye out for such announcements. Having a list of mentors who can help newcomers anytime throughout the year and having that list included on the Google Summer of Code wiki page of organizations that provide year-round informal mentorship should help attract students to GNOME.
On our side, we could definitely gather ideas and promote the programs earlier. Don’t have exact dates in head, but our KDE fellows promote the Summer of Code early March if not before. Not only will that help better spreading the word, but students might get involved earlier, and get to know the tools/community before the actual program.
Communication is key to success
We have to get better at communicating with interns, and make sure they get the help and feedback they need. We have different channels of communication in GNOME, mainly IRC and mailing lists. Both are a bit intimidating to the newcomer (I still proceed with extreme care when I use them), so it would be good to have a short tutorial about the main mailing lists around, how to connect on IRC and what to expect out of it.
Always two there are, no more, no less
In order to increase the chances of success for the interns, we need good mentors. Most people underestimate what it takes to be a good mentor: being nice, supportive, competent, enthusiastic. You have to remember you’re helping someone to land in the big GNOME land without too much hassle, so consider it carefully. I encourage you to read this very informative blog post if you’re thinking about mentoring a student.
The Summer of Code administrators at GNOME could perhaps keep an eye on mentors as well as students, not with weekly reports but just by poking them from time to time and making sure everything is going well.
Show me the way
To help students set up their workflow, it would be great to have full-length screen-casts demonstrating how to fix a bug in GNOME, starting on the Bugzilla page and finishing on the same page when attaching the final patch. This means going through cloning the module with Git, using grep to find the faulty line, editing the code, using Git to look at the diff and format the final patch. All this in one video would really help connect the parts and suggest a way to work for students.
GNOME Love bug drive
Please consider attaching the gnome-love keyword when you file or triage a bug that is easy to fix. A selection of current GNOME Love bugs is essential to help newcomers figure out how they can start contributing.
Good GNOME Love bugs are trivial or straight forward bugs that everyone agrees on, e.g. paper cut bugs or corner cases. It’s helpful to specify the file or files that will need to be modified and any reference code that does something similar in the bug. Even most trivial bugs are suitable candidates, because in the end, fixing a GNOME Love bug is as much about learning the process, as about the fix itself!
Get involved
If you want to help us gather more people around GNOME and help them find their spot in our community, make sure to suscribe to the outreach-list mailing list.
Thanks for reading!
And thanks to Marina and Karen for reviewing this post!

GUPnP 0.18 (and GSSDP 0.12) harmful to VoIP calls
Due to unintentional behavior breakage in the newest versions of GUPnP and GSSDP, the UPnP NAT traversal in all VoIP applications that use Farsight2 is currently broken. This includes Empathy, Pidgin, aMSN, etc. I advise distributors to just stay with the older GUPnP 0.16 (and GSSDP 0.10) releases until this is sorted out. For those who care, the details are on bugzilla.
Update: I’ve released GUPnP-IGD 0.2.1 that works around these problems.

openSUSE 12.1 RC1 is out, with GNOME 3.2.1
At the end of last week, we unleashed RC1 of our next openSUSE release (12.1, scheduled for November 16th), and it comes with GNOME 3.2.1, which went out only a couple of days before RC1. Go grab a live image if you want to play with either openSUSE or GNOME 3 :-) There are still a few bugs here and there to iron out, but overall, the experience is very solid!

"I upgraded to openSUSE 12.1, and this dramatically improved my life!" — Anonymous
It really feels good to have this openSUSE release nearing, as we missed the GNOME 3.0 boat (openSUSE 11.4 was released one month before GNOME 3.0): I, and I assume a few others, felt that we were stuck in the past with GNOME 2 in our world for so long. Sure, the work on backporting GNOME 3.0 and then 3.2 to openSUSE 11.4 helped, but we really wanted to share what was in Factory... Especially as there was really a lot of work to properly integrate this new GNOME.
I'm obviously really glad to see the GNOME 3 love in openSUSE, but looking back at the last few months, what is even greater to me is that we got many amazing people contribute to the GNOME team through-out this cycle. I'm sure I'll forget some of them (apologies for that, let me know so I add your name!), but here's a quick list:
- Atri Bhattacharya
- Bjørn Lie
- Casual J. Programmer
- Dominique Leuenberger
- Frédéric Crozat
- Gary Lin
- Guido Berhörster
- Joey Zheng
- Kirill Kirillov
- Malcolm Lewis
- Nelson Marques
- Richard Brown
- Sankar P
- Scott Reeves
- Stephen Shaw
Their various contributions include updating packages, fixing bugs, testing, polishing the experience, supporting users, providing ideas, and more! Go ahead and thank those people when you meet them (virtually or in the real life): they all make the GNOME team rock! And who knows, maybe next time you'll also be one of those rock stars?

Early last month, we had a GNOME-FR annual general meeting. It was a while since the last GNOME-FR meeting, and it felt good to get things moving forward again! For those who don't know, GNOME-FR is the french-speaking non-profit organization (association loi de 1901, to be exact), and while it's not the most active organization, it's quite useful to help organize the GNOME presence at events — usually french-speaking events, but also international events (like FOSDEM, for which GNOME-FR handles the t-shirts and more, since a bootstrapping fund given by the GNOME Foundation a few years ago).
We mostly discussed administrative details, like changing bank, relocating GNOME-FR to a new address (thanks to Frédéric Crozat for hosting it until last month, and thanks to Didier Roche for being the new host!), and updating the by-laws. You can go read the minutes (in french, obviously) if you want the details.
The real news is that we got a new GNOME-FR board (and new officers, obviosuly):
- Alexandre Franke (treasurer)
- Luis Menina (secretary)
- Baptiste Mille-Mathias (president)
- Claude Paroz
- Frédéric Peters
- Didier Roche (vice-president)
They are all people caring very much about GNOME, and it's great to have them in the board! Congratulations!
What makes me even more happy about this board is that we have people from Belgium, France and Switzerland: this really reflects the fact that we have people from different countries in the french-speaking community. And arguably, Alexandre could be considered German! ;-) Obviously, this board doesn't have as many tasks to deal with as the other board, but it's nonetheless important to me to know that GNOME-FR is in good hands!
And who knows, maybe GNOME-FR will participate again to a bid to host GUADEC or the Desktop Summit in 2013?

After 5 months with GNOME 3.0, I'm really happy with the experience. At the end of work day,
my mind is no more exhausted of windows placement fighting and application finding.
GNOME 3.0 is really stable, except with the Open Source driver on my Radeon 5870 (4 crashes in 2 months).
I really like the behavior of dual-head where the secondary screen has only one virtual screen.
For me, there are just 3 annoying points:
- Ctrl + Del to remove a file in Nautilus, may be it's a Fedora settings but this change is just @!# I've already a Trash to undo my mistakes (http://www.khattam.info/howto-enable-delete-key-in-nautilus-3-fedora-15-2011-06-01.html)
- Alt key to shutdown, no I don't want to waste energy for days and my PC boots quickly.
- only vertical virtual screens, I found a bit painful to move down two screens when the screen is reachable with one move with a 2x2 layout but I understand this layout doesn't fit well with the GNOME 3 design.
To have a good experience with GNOME 3, I use:
- Windows key + type to launch everything
- Ctrl + Shift + Alt + arrows to move the application between the virtual screen
- Ctrl + click in the launcher when I really want a new instance (the default behavior is perfect)
- snap à la Windows 7 is great
- Alt + Tab then the arrow keys to select an app
Don't forget to read https://live.gnome.org/GnomeShell/CheatSheet or the Help (System key + 'Help').
It's not specific to GNOME 3 but you can change the volume when your mouse is over the applet (don't click, think hover) and a mouse scroll.
With GTK+, do you know you can reach the end of scrolled area with a left click on the arrow and a specific position by middle click?
I'm impressed by the new features of GNOME 3.2 and I'm waiting for Fedora 17 to enjoy it!

Calling phone numbers in GNOME 3.2
One of my favourite feature of my N900 is the ability to very easily call a contact using my SIP account. Calling phone numbers in Empathy through SIP is possible since a while using the New Call dialog but you have to enter the number manually which can be annoying. Thanks to Folks's evolution-data-server backend, GNOME 3.2 will allow you to very easily call contacts from your address book!
First step is to mark a SIP account as being able to call phone numbers. We added an option for that in the accounts dialog.
Then if an IM contact is linked to an Evolution one having at least a phone field, you can call him from the contact list! Soon you should be able to call IM contacts publishing their phone numbers in their personal personal info as well.
You can also call any contact using gnome-contact directly; just click on the phone icon next to the phone number.
This is pretty cool because thanks to gnome-shell's contact integration it's now easier than ever to call a contact. Just search for him in the Shell overview and then start the call from gnome-contacts. That's the kind of integration we were aiming for when we started the Telepathy and Folks projects and it's great to see that we are finally getting there!

coreutils is a really active project
I'm impressed by the activity of the coreutils project (unix commands such as ls, df, etc). At first glance, you might think command line tools are written for good and only few changes are applied to ensure compatibility with the platforms. With several releases a year and new features for each, it's really an active project indeed.
You want to show the local time for 9AM next Friday on the west coast of the US, it's possible:
$ date --date='TZ="America/Los_Angeles" 09:00 next Fri'
The maintainers/contributors (Pádraig Brady, Jim Meyering and Eric Blake) are nice and quick to commit your patches.
So don't be intimidated it's not the glibc project!
PS: I'm waiting for the tag on translationproject.org to be able to push the latest French translation.

GNOME 3.0 Live image release 1.5.0 available

I just push a new GNOME 3.0 live image labelled as 1.5.0 (yes, I forgot to push 1.4.0 after I built it, so we are at 1.5.0 now ;)
No big changes, it is based on GNOME 3.0.2 + some additional fixes.
As always, it can be downloaded from http://www.gnome.org/getting-gnome/
For people interested, here are some download hits (it doesn't include SUSE Studio appliance nor promo dvd which is also available from GNOME ftp) :
on GNOME 3.0 release day : 4526 hits
April : 145904 hits
May : 46551 hits
June : 24747 hits
July : 23611 hits
August (from 1 to 15) : 13063 hits
Enjoy !

GNU Hackers Meeting 2011 in Paris
In case you are in the Paris area and don't know already, there is a a GNU Hackers Meeting event being held from Thursday 25th to Sunday 28th August, 2011 at IRILL If you are a GNU user, enthusiast, or contributor of any kind, feel free to come. I guess you can still drop an email to ghm-registration@gnu.org.
For folks around on Wednesday (yeah, that's tomorrow), we are having a dinner around 8 PM at the Mussuwam, a Senegalese restaurant in Paris, near Place d'Italie. When you get there, just give them the secret password (which is 'GNU') and they'll show you were the rest of the crowd sits. Be sure to keep that password secret though. No one else should be in the know.
Happy hacking and I hope to see you guys there.

How to install a digital CA certificate on Red Hat based GNU/Linux distributions
This is just as a reminder for myself, as I keep forgetting about this stuff.
If like me you run a server with services that depends on SSL and need to install a certificate issued by a Certificate Authority (CA) like CACert, this might be interesting to you as well.
On Red Hat based systems the CA certificate for SSL is usually installed in the /etc/pki/tls/certs directory. The certificate is basically just dropped there in a file which name is its hash – built with the openssl program.
I wrote the shell scriptlet http://dodji.seketeli.net/install-ca-cert.txt. Download it, save it as install-ca-cert.sh and turn it into an executable.
Then, assuming your certificate is in a file named your-ca.crt, install it by doing:
sudo ./install-ca-cert.sh ./your-ca.crt
Voila. I don't know how that works on other distributions, though.
Update
A wise person taught me about the c_rehash utility from openssl, that does the same thing as my dirty script above. To use it, you need to install the openssl-perl package. Thank you, Daniël.
Desktop Summit schedule for smartphones (N900 and others)
Good news for the people who want to access the Desktop Summit Schedule via their smartphone !
I just made it available the xml/pentabarf format, which in practice mean you can use import it directly in applications such as sojourner (for n900) and giggity (for android)
If you have an N900 this is directly implemented in wjt's excellent sojourner (thank afranke for the icon), so you just need to install or update sojourner and it will automatically have the schedule for the desktop summit.
For giggity and others applications (anyone know a proper application for IPhone?) you just need to input the url
I will try to keep the schedule up to date during the summit in case they are modifications (just need some time to wire the website scrapper script to cron)
Again thanks to afranke, wjt and the desktop summit organizers for their help.
Obviously, I'm going to desktop summit too !
see you all this weekend !
Update: There was an error with the favourite not being saved in sojourner once you relaunched the application, it has now been fixed in the xml but unfortunately sojourner don't update it correctly so you need to remove sojourner cache in .config/sojourner/conference/desktopsummit2011 to fix it.

Just like everyone else on Planet GNOME,

You are all cordially invited to my talk: Improving the quality of video calls on the Free Desktop. I will try to explain why Skype’s video calls look so much better than ours and what I’ve been doing to fix it, and how there is much more to do.
Now that WebRTC and RTCWeb are coming, it is more critical than ever that we can have good quality video calls in the GNOME platform so we can stay relevant.
I’d also like to thank my employer, Collabora, for once again sponsoring my trip. And don’t forget the Collabora party on Tuesday night!

It is available here, you can also get KML file or import this map in your favorite software (for Android users, I suggest using Locus Free which can download offline OpenStreetMap data and merge our map on it, no roaming data needed !).

Going to RMLL (LSM) and Debconf!
Next week, I’ll head to Strasbourg for Rencontres Mondiales du Logiciel Libre 2011. On monday morning, I’ll be giving my Debian Packaging Tutorial for the second time. Let’s hope it goes well and I can recruit some future DDs!
Then, at the end of July, I’ll attend Debconf again. Unfortunately, I won’t be able to participate in Debcamp this year, but I look forward to a full week of talks and exciting discussions. There, I’ll be chairing two sessions about Ruby in Debian and Quality Assurance.

Almost 9 months ago, Mageia was forked out of Mandriva by many former Mandriva employees and contributors. At that time it did not exist yet, everything had to be done, but we are now happy to announce that it's ready!
The first technical work was to get a build system, and the result is pretty nice. With only 2 build hosts it is faster and more reliable than Mandriva's one, while reusing most of the code. The various improvements could have been done at Mandriva but having to deploy a new one (with less resources) is a good time to simplify the architecture and the code.
Then the massive work: importing rpm packages, fixing them as quite a few did not build, and cleaning them. The result is 7389 source packages (Mandriva has 12390, Fedora has 10283) and mageia 2 will probably have much more as only packages needed/requested by packagers and early testers were included.
More than the number of packages, the interesting data is that they all got built recently, and there are 0 broken dependencies or orphan binary packages! For comparaison Mandriva currently has 4059 src.rpm older than 6 months, 1065 binary packages without matching source, 4756 binary packages with broken dependencies.
Of course this could have bben done inside Mandriva again, but when you see a list of 4756 problems, and spend a week-end fixing 100, the list still look the same size. If you only have a few to fix then you can spend an hour fixing everything! Growing from a sane base is much better and easier than trying to cleanup the huge mess.
Given the amount of work to get everything in place, don't expect much bleeding edge stuff in version 1. No GNOME3, no switch to systemd, ... the goal was to have all the infrastructure and teams setup, and have a strong basis for a great version 2, and I think the result is quite nice!
All the teams did a great job, and thanks to everyone Mageia 1 is now out!
It is available as DVD, LiveCD or dual-arch CD as Mandriva used to be. Enjoy!

Inspired by my friend Bram's script Mobify which convert a webpage to a Kindle Ebook, I decided to made my own version in Python.
I used to keep a ton of open tabs in Firefox as a list of articles to read later. This script allowed me to transform all of them into kindle ebooks and read them later at my ease in public transportation, instead of always keeping them around and never getting the time to read them. As a result I got a lot more reading done.
The general mechanism of this script is to download the page and all its affiliated images, pass it to decruft (a python implementation of the readability algorithm to extract the content of a webpage) and convert it with kindlegen. The nicest improvement over Bram's script is that it doesn't create any files in the current directory but instead write everything in the /tmp directory and move the generated book in a common directory. It also automatically determine the name of the file.
The source code is available on GitHub

It is amazing how fast time flies when you are busy. I was about to finally write down the last words of this article about the Gnome Python Hackfest from Prague, but I'm realizing now that one month ago, we were going out for our last beerful evening in Prague!
We had a really wonderful time there with the pygobject team, and despite we probably didn't have enough daylight to visit most of the nice city of Prague, we got acquainted to the local culture of huge glasses of light beer and simple and nice (but very caloric) cooking. Check out the pictures on the right of this page!
Bringing more predictability into pygobject
My week at the hackfest started out by fixing what I'd call a "predictability bug", in the sense that what happened before was logical according to code and history, but quite weird and unexpected when you don't know it.
Historically, pygobject with static bindings didn't register a new GType when you were subclassing an existing, bound GType, unless either you asked for this registration explicitely or some conditions where fulfilled for auto-registration to kick in. When the type gets registered, the eventual method overriding happened and everything was just fine. If you didn't register your new class as a GType, then the methods were not overriden.
But then, GObject introspection made an appearance into pygobject. The way the dynamic python bindings for introspected types were created was very different, and, for very understandable reasons, the subclassing support hooked into it didn't work exactly the same way as it did with the static bindings. One of the consequencies was that the method overriding happened sooner than before, and weird bugs started to pop here and there when subclasses didn't trigger auto-registration.
This is quite easy to understand: since the method overriding happened directly
when the python class was created (without giving a chance to the programmer to
call gobject.type_register() himself), methods could be overriden on the
wrong GType. In other words, if you used the following bit of code:
class MyWindow(Gtk.Window):
def do_show(self):
print "Shown!"
super(MyWindow, self).do_show()
You would think that you just created a new GtkWindow subclass which would
print something in the console when you show it. But you guessed wrong. Once
that bit of code had been run, all the windows of your application would
actually start to display such messages in the console, because since we didn't
register a new GType for this class, the new implementation of the show()
virtual method would have been hooked up on the actual GtkWindow type.
Weird isn't it?
The fix for this issue was to make the pygobject behaviour much more predictable.
From now on it would automatically register a new GType as soon as you create a
subclass in Python, even if you don't override anything of don't touch the
properties. Since your own application window is not the same as a bare
GtkWindow, it makes sense to be able to tell them appart even at the C
level... The only remaining special casing in this area of the pygobject code is
to avoid creating GTypes for overrides, as it would quite obviously defeat the
purpose of overrides, ie providing an alternative python class with refinements
for an introspected type.
Are we leaking references?
The rest of my hackfest week revolved around fixing bug 639597 from EoG. Apparently, when using libpeas, at least one reference of the Eye of Gnome main window was leaked because when the window is closed, it wouldn't get finalized.
This was the occasion for me to discover how to use refdbg and gdb to track down
missing unrefs. I finally put my finger on an issue related to GtkWindow.
This class is a strange beast: it is a widget (so, it's a GInitiallyUnowned),
but a toplevel one (as such, it doesn't have a floating reference when its
constructor returns). This reference can be understood as a reference owned by
the windowing system, and will get released when using gtk_widget_destroy().
To understand this issue, we first need to know and understand that the objects
we use from python are actually proxies: PyObject subclasses which forward
python calls to the actual GObject instance. There is one proxy for each
object instance, and it needs to own a reference to the object to ensure this
object will continue to live while the proxy itself lives. But the issue with
GInitiallyUnowned subclasses is the floating reference they have, which is
helpful when you are programming in C but need to be converted into a full
reference when you are managing references automatically. This can be done using
g_object_ref_sink(), whose doc says:
If the object is floating, then this call "assumes ownership" of the floating reference, converting it to a normal while leaving the reference count unchanged. If the object is not floating, then this call adds a new normal reference increasing the reference count by one.
By reading the excerpt above, you can easily understand that if you end up
calling this function more than once, then your refcount will increase and
you'll leak references. And you can not just say "do this if the reference is
floating", because you need to handle the GtkWindow case.
And the problem is that it can end up being called several times, because during an object's lifetime, several wrappers can be created, because they get discarded when they get out of scope, and get recreated when an object is returned by some introspected method.
So the fix here was to ensure this function was only called once. The fix is actually different in the master and stable branch due to ABI stability issues with static bindings.
I also came across a python reference count issue and changed pygobject to
always use pygobject_ref_sink() to take ownership on an object when
gobject introspection's meaning for a floating reference got altered from
"one reference" to "zero reference". Again, the fix is not the same in
master and in the stable branch due to the guaranteed ABI stability for static
bindings in the stable line.
I also wrote a bunch of tests to check the resulting reference counts in various scenarios. This is an advice I can give to all the contributors of bindings: Add checks for the expected reference counts in your test suite!
There were other people, too
Of course I wasn't the only one working at the Hackfest, but I must say my personal favourite improvement from there was Laszlo's efforts to make pygobject start much faster than before. With several enhancements in the pythonic side of the introspected API with overrides, it wasn't long before Gtk would take a long time before starting up properly.
Laszlo basically managed to reduce the import time of the Gtk 3 module from 2.5 seconds to 0.4 seconds, "just" by sanitizing the logics in the way python methods were hooked up into the python classes.
At the same time, Martin Pitt, which has been a wonderful roommate, was enhancing the GVariant and GDBus APIs, John Palmieri was working on his overhaul of the method invocation code, Tomeu Vizoso was fixing Cairo, Simon van der Linden was giving a shot at rewriting the import logic in C, while Ignacio Casal, Simon Schampijer and Sebastian Pölsterl were porting pygtk code to the new introspected bindings. At the same time, remotely, Pavel was providing us a huge patch fixing a lot of Gtk+ annotations.
After the Hackfest
Since the Hackfest, there were a bunch of releases in the stable pygobject-2.28 branch, giving GI to the masses. It contains most of the fixes and improvements which were done by the team at the Hackfest. Only a very few are still waiting in the master branch, because those break the support for the static bindings. This is fine, because the plan is to break the ABI and remove most of the legacy cruft remaining in pygobject in the master branch, and make a clean start for Python 3.
But most importantly, this Hackfest had a notable effect of involving quite a lot of people into coding on pygobject, bringing back pygobject from a quasi-unmaintained state to a very active state.
For that and for all the drinks we had, I think both the Gnome Foundation and Collabora should be thanked. And, of course, everyone involved in pygobject and in Gnome ;-)

On my side, I thought that Hackfest would be a good way to get back on track coding on Gnome, but unfortunately I've been very busy lastly... and I still have a few half-baked patches from the Hackfest to finish and submit. Time...
It’s been a long time since I blogged about Libgda (and for the matter since I blogged at all!). Here is a quick outline on what has been going on regarding Libgda for the past few months:
- Libgda’s latest version is now 4.2.4
- many bugs have been corrected and it’s now very stable
- the documentation is now faily exhaustive and includes a lot of examples
- a GTK3 branch is maintained, it contains all the modifications to make Libgda work in the GTK3 environment
- the GdaBrowser and GdaSql tools have had a lot of work and are now both mature and stable
- using the NSIS tool, I’ve made available a new Windows installer for the GdaBrowser and associated tools, available at http://www.gnome.org/~vivien/GdaBrowserSetup.exe. It’s only available in English and French, please test it and report any error.
In the next months, I’ll work on polishing even more the GdaBrowser tool which I use on a daily basis (and of course correct bugs).

As some of you might know by now, I will be attending to GUADEC tomorrow and Thursday

Despite being involved in Gnome for nearly four years now, this will be my first GUADEC! There, I will be available for anyone having questions on the ''libpeas'' plugins engine, and to drink a few beers. As I'm a bit shy sometimes, don't hesitate to call me out if I pass by! :-)

Ouch, it seems I didn't wrote any blog entry for nearly 2 years, since our wedding. Well I would say that I have been fairly busy :-) !
Baby Cheng 程
Our son is born end of last august, so obviously
this tends to keep the parents busy, but it's such a
pleasure too !
this has been a wild ride ! The project has grown a lot, in community and contributor size, as well as code and features during the last couple of years. It acquired support for most well known virtualization hypervisors (QEmu/KVM, Xen, ESX, VitualBox, ...) the only notable exception being Microsoft Hyper-V I think. Our latest release is 0.8.0 so we are not at 1.0 yet, but we are really getting closer, for example this release now adds snapshotting support which was a big feature request.
About updates to Fedora
There was a discussion last month about forbidding direct built to the stable branches, and I really think this makes sense, except for security erratas, one really should not push directly an updated build onto the users without some testing. But on the other hand we entered beta on Fedora 13 and apparently it's too late to push libvirt latest release and features, meaning users who don't try to update either via the virt-preview special repository or by rebuilding from the source rpm, will see libvirt features when Fedora 14 is being released i.e around the end of the year. I see people bouncing between both extreme of the features vs. stability tradeoff, and I wonder if there isn't a better way than building absolute rules. Maybe a general profile per machine where the user indicates whether he want updates, just bug fixes or just security errata, and let him do the picking. This would require some policy from package builders, and some changes at the repo level I guess, but having the user ultimately in control might be worth it.

Webkit fun, maths and an ebook reader
I have been toying with webkit lately, and even managed to do some pretty things with it. As a consequence, I haven’t worked that much on ekiga, but perhaps some of my experiments will turn into something interesting there. I have an experimental branch with a less than fifty lines patch… I’m still trying to find a way to do more with less code : I want to do as little GObject-inheritance as possible!
That little programming was done while studying class field theory, which is pretty nice on the high-level principles and somewhat awful on the more technical aspects. I also read again some old articles on modular forms, but I can’t say that was “studying” : since it was one of the main objects of my Ph.D, that came back pretty smoothly…
I found a few minutes to enter a brick-and-mortar shop and have a look at the ebook readers on display. There was only *one* of them : the sony PRS-600. I was pretty unimpressed : the display was too dark (because it was a touch screen?), but that wasn’t the worse deal breaker. I inserted an SD card where I had put a sample of the type of documents I read : they showed up as a flat list (pain #1), and not all of them (no djvu) (pain #2) and finally, one of them showed up too small… and ended up fully unreadable when I tried to zoom (pain #3). I guess that settles the question I had on whether my next techno-tool would be a netbook or an ebook reader… That probably means I’ll look more seriously into fixing the last bug I reported on evince (internal bookmarks in documents).

Renouveau dans ma vie professionnelle
Bonjour à tous,
je vous délaisse depuis quelques temps. Est-ce le temps qui fait cela, une période dans ma vie ou simplement autre chose, je n'en ai pas la moindre idée.
Je tenais juste à vous annoncer que je vais quitter mon employeur actuel qui est un Agence Gouvernementale pour chercher de l'expérience dans le secteur privé. En effet, je suis de plus en plus déçu par l'Administration.
Depuis quelques années, comme vous le savez, je me passionne pour la sécurité de l'Information. Ceci ajouté à une formation en Management de la Sécurité de l'Information, j'ai l'ambition de faire valoir mes expériences auprès d'un employeur (à définir) qui pourrait me permettre de les améliorer tout en lui faisant bénéficier de mes compétences.
Si vous avez de bonnes adresses, je suis preneur évidemment. ^^
With the beginning of the year comes new releases of Libgda:
- version 4.0.6 which contains corrections for the stable branch
- version 4.1.4, a beta version for the upcoming 4.2 version
The 4.1.4′s API is now considered stable and except for minor corrections should not be modified anymore.
This new version also includes a new database adaptator (provider) to connect to databases through a web server (which of course needs to be configured for that purpose) as illustrated by the followin diagram:

The database being accessed by the web server can be any type supported by the PEAR::MDB2 module.
The GdaBrowser application now supports defining presentation preferences for each table’s column, which are used when data from a table’s column need to be displayed:

The UI extension now supports improved custom layout, described through a simple XML syntax, as shown in the following screenshot of the gdaui-demo-4.0 program:

For more information, please visit the http://www.gnome-db.org web site.
Attending XMPP Summit and FOSDEM, 5th-8th of February in Brussels
For the third year in a row, I’ll be flying to Brussels, Belgium next month to attend the XMPP Summit/FOSDEM combo. I didn’t look through the FOSDEM schedule yet but when it comes to XMPP, I’m looking forward to some discussions on Jingle Nodes and Publish-Subscribe. I’ve been working more and more with XMPP in the past months, especially hacking on ejabberd, and attending is a good motivation to get some of my Jingle Nodes related code shaped up on time. See you there!

Le hacker est un passionné d'informatique, souvent très doué, dont les seuls objectifs sont de "bricoler" programmes et matériels (software et hardware) afin d'obtenir des résultats de qualité pour lui-même, pour l'évolution des technologies et pour la reconnaissance de ses pairs.
Les conventions de hackers sont des rassemblements où ces férus d'informatique se rencontrent, discutent et comparent leurs travaux.
Depuis de nombreuses années, la tendance est de confondre à tort le hacker avec le cracker, dont les buts ne sont pas toujours légaux.
Or, on ne le répétera jamais assez, les objectifs du hacker sont louables et contribuent de manière active aux progrès informatiques et aux outils que nous utilisons quotidiennement.

I have been a little stuck for some weeks : a new year started (no, that post hasn’t been stuck since january — scholar year start in september) and I have students to tend to. As I have the habit to say : good students bring work because you have to push them high, and bad students bring work because you have to push them from low! Either way, it has been keeping me pretty busy.
Still, I found the time to read some more maths, but got lost on something quite unrelated to my main objective : I just read about number theory and the ideas behind the proof of Fermat’s Last Theorem (Taylor and Wiles’ theorem now). That was supposed to be my second target! Oh, well, I’ll just try to hit my first target now (Deligne’s proof of the Weil conjectures). And then go back to FLT for a new and deeper reading.
I only played a little with ekiga’s code — mostly removing dead code. Not much : low motivation.
I just released the first version of gwt-strophe, GWT bindings for the Strophe XMPP library. Nothing much to say else than it is pretty young, with all that can imply. The project is hosted at https://launchpad.net/gwt-strophe

Slides from RMLL (and much more)
So, I’m back from the Rencontres Mondiales du Logiciel Libre, which took place in Nantes this year. It was great to see all those people from the french Free Software community again, and I look forward to seeing them again next year in Bordeaux (too bad the Toulouse bid wasn’t chosen).
The Debian booth, mainly organized by Xavier Oswald and Aurélien Couderc, with help from Raphaël, Roland and others (but not me!), got a lot of visits, and Debian’s popularity is high in the community (probably because RMLL is mostly for über-geeks, and Debian’s market share is still very high in this sub-community).
I spent quite a lot of time with the Ubuntu-FR crew, which I hadn’t met before. They do an awesome work on getting new people to use Linux (providing great docs and support), and do very well (much better than in the past) at giving a good global picture of the Free Software world (Linux != Ubuntu, other projects do exist and play a very large role in Ubuntu’s success, etc). It’s great to see Free Software’s promotion in France being in such good hands. (Full disclosure: I got a free mug (recycled plastic) with my Ubuntu-FR T-shirt, which might affect my judgement).
I gave two talks, on two topics I wanted to talk about for some time. First one was about the interactions between users, distributions and upstream projects, with a focus on Ubuntu’s development model and relationships with Debian and upstream projects. Second one was about voting methods, and Condorcet in particular. If you attended one of those talks, feedback (good or bad) is welcomed (either in comments or by mail). Slides are also available (in french):
- L’écosystème du Libre: interactions entre projets amonts, distributions et utilisateurs – l’exemple de Debian et Ubuntu
- Méthodes de vote: Comment consulter un groupe de personnes sans fausser le résultat ?
On a more general note, I still don’t understand why the “Mondiales” in RMLL’s title isn’t being dropped or replaced by “Francophones“. Seeing the organization congratulate themselves because 30% of the talks were in english was quite funny, since in most cases, the english part of the talk was “Is there someone not understanding french? no? OK, let’s go on in french.“, and all the announcements were made in french only. Seriously, RMLL is a great (probably the best) french-speaking community event. But it’s not FOSDEM: different goals, different people. Instead of trying (and failing) to make it an international event, it would be much better to focus on making it a better french-speaking event, for example by getting more french-speaking developers to come and talk (you see at least 5 times more french-speaking developers in FOSDEM than in RMLL).
I’m now back in Lyon for two days, before leaving to Montreal Linux Symposium, then coming back to Lyon for three days, then Debconf from 23rd to 31st, and then moving to Nancy, where I will start as an assistant professor in september (a permanent (tenured) position).

fatal: protocol error: expected sha/ref
Dear Lennart,
You should probably know that typing the correct URL would work better for cloning a bzr branch (yes a branch, not a repository).
This is what I get when I try to feed git a random invalid URL:
$ git clone git://github.com/idontexist
Initialized empty Git repository in /home/asabil/Desktop/idontexist/.git/
fatal: protocol error: expected sha/ref, got ‘
*********’No matching repositories found.
*********’
Now is probably the time to stop this non constructive “my DVCS is better than yours”, and focus on writing code and fixing bugs.

The first beta of Ekiga 3.1.0 is now available on GNOME FTP.
Please note that I started the development of Ekiga 9 years ago.
Here is the list of changes :
- Added support for the G.722 audio codec: G.722 is a 16 kHz wideband audio codec advertised as HD Voice by the famous Polycom. It is a great boost in quality and interoperability.
- Added support for the CELT ultral-low delay audio codec: CELT delivers high quality audio at 32 kHz or 48 kHz, allowing to transmit music in high quality, with low delay and low bitrate.
- Added support for SIP dialog-info notifications: they allow displaying notifications of incoming calls in the roster. With software like kamailio or Asterisk, it allows being informed of incoming calls reaching your colleagues.
- Largely improved LDAP support: the OpenLDAP guys contributed several patches to provide state-of-the-art LDAP support in the Ekiga address book. The new code even supports authentication.
- Added support to disable STUN detection: some routers do not need it anymore as they implement NAT traversal for SIP.
- Killed the gconf_test_age test: when GConf was released, Ekiga was among the first to adopt it. That annoying ‘gconf error’ was a relique of those early times.
- More efficient memory handling using gmref_ptr.
- Better handling of multiple network interfaces with dynamic addition and removal.
- libgnome is not required anymore when using GTK+ 2.14.
- Many code cleanups, new GObjects, …
The Ekiga developers team is also working on interesting new features that should be available after the 3.2 release :
- XCAP support & Resource List support: It allows storing the contacts list on the Ekiga.net server.
- GStreamer audio and video capture support.
Stay tuned for more news!
Thanks to all contributors and welcome to Eugen Dedu, our new release manager!

It's all for the moment :)

Few people know that maintaining Ekiga also means maintaining Ekiga.net, the VoIP service platform for our users.
Today, we upgraded Ekiga.net, and that’s a lot of work !
Ekiga.net is now running Kamailio as frontend (recently renamed to SIP Router due to the merge between Kamailio and the old SIP Express Router project)
and Asterisk 1.4.
Among others, it allows to run the echo test with codecs like H.264, and better SIP presence support.
The old WEB interface has been replaced by a more intuitive one thanks to
Yannick Defais. The look and feel is now similar to the one you can see on the
brother ekiga.org website.
I would also like to thank Jan Schampera who helps me daily maintaining
ekiga.net and who helped a lot for the upgrade.
You can enjoy to the new infrastructure daily by signing up for an account at
http://www.ekiga.net.

On September I finish my studies of computer science, so I start to search a job. I really enjoyed my current job at Collabora maintaining Empathy, I learned lots of things about the Free Software world and I would like to keep working on free software related projects if possible. My CV is available online here.
Do you guys know any company around the free software and GNOME looking for new employees? You can contact me by email to xclaesse@gmail.com
La parallaxe de Suzumiya Haruhi
On peut, au regard des concepts développés par Slavoj Zizek dans "La Parallaxe", tenter une nouvelle interprétation, plus fondamentale, des aventures de Suzumiya Haruhi.
La mélancolie de Suzumiya Haruhi est due au sentiment de malaise créé par l'incomplétude fondamentale qui nous caractérise tous. Haruhi part donc à la recherche du grand Autre, réponse censée venir combler ce vide, ici fétichisé dans les extra-terrestres, extra-lucides et voyageurs dans le temps. Ce comportement peut être vu comme semblable à ceux des individus cherchant la réponse à leur malaise constitutif dans la religion, voir, et nous y reviendrons, dans la philosophie et la politique.
Cependant, la réalité du monde de Haruhi est qu'il n'existe pas de grand Autre, aucun extra-ordinaire comblant les vides ennuyeux de la réalité, aucun personnage tirant les ficelles dans l'ombre. Ou plutôt, de façon plus importante, que ce grand Autre est Haruhi elle-même, ce qui constitue la réponse fondamentale : c'est bien elle-même qu'elle cherche en voulant résoudre cette incomplétude.
Selon ces hypothèses, le récit de ses aventures peut donc ultimement être vu comme celui de la recherche de la Vérité par les humains, les réflexions autour de son comportement précisant de façon très intéressantes plusieurs problématiques liées à ce processus.
L'interprétation de la fin de la série, où Haruhi semble trouver son bonheur avec Kyon, reste toujours problématique. Il n'existe pas de grand Autre, le manque ne peut donc pas être réellement comblé par quelque chose d'extérieur, donc pas par quelque chose qui soit matérialisé dans un fétiche, même humain, comme Kyon. Cependant Kyon n'est pas non plus quelque chose d'extérieur, puisqu'il est, comme tous les objets du monde de Haruhi, un produit de son imagination. Il s'agirait donc d'une pure matérialisation à figure humaine de la véritable réponse à son manque, ce qui ferait de Kyon une partie de Haruhi et non un personnage distinct. On peut donc avec un peu d'audace avancer que Kyon et Haruhi ne sont qu'un, qu'il est réellement sa moitié, ce qui n'est pas sans rappeler tout en lui redonnant une piquante nouvelle perspective le "happy end" chrétien par excellence. Malgré tout, le fait que Haruhi ne le reconnaisse pas comme tel, puisqu'ils sont clairement toujours deux personnes distinctes, laisse supposer que le problème n'est pas réglé.
On ne reconnaît habituellement qu'une religion pose problème que lorsqu'elle constitue un risque potentiel pour le système capitaliste libéral dans lequel nous vivons. De fait, ces religions ont donc on potentiel subversif.
C'est à cause de celui-ci que les nombreux individus touchés de plein fouet par le malaise créé par cette société se tournent en nombre de plus en plus important vers ce type de communautés religieuses.
Or, qu'est-ce que le processus de laïcisation tel que nous l'entendons dans la bouche des libéraux, sinon le fait de rendre les religions aptes à rentrer dans le cadre libéral, ou, à défaut, de marginaliser et stigmatiser celles qui ne le feraient pas, leur retirant ainsi tout aspect nocif pour lui ?
Ce processus peut donc être vu comme la condition sine qua non du fonctionnement de l'opium du peuple comme instrument des puissances qui font l'ordre social, même si la résurgence des intégrismes en période de crise nous montre qu'il est de toute façon voué à l'échec.
L'attitude ambivalente de la laïcité promue par la droite, qui dit oui à, voir encourage, la croyance qui se veut inconditionnelle, et simultanément y porte des restrictions, reflète d'ailleurs cette contradiction.
Pour illustrer ceci, on peut prendre l'exemple des lois interdisant à la religion tout caractère visible en public, par lesquelles on leur enlève tout caractère choquant pour ceux qui n'y prennent pas part, tout en ne faisant rien contre leur effet idéologique sur les populations concernées.
La gauche radicale n'a donc aucun intérêt à aider l'ordre libéral à se maintenir en normalisant la religion pour l'intégrer, puis se renforcer, par cette laïcité.
Ce qu'elle devrait favoriser, c'est la prise de conscience par la classe dominée du fait que son malaise est dû à la structure de la société et que le seul moyen d'y remédier est la lutte politique permettant de le dépasser. Par conséquent, la seule laïcité qu'il ait un sens pour elle de défendre est celle qui permette l'émancipation de chacun, pour parvenir à ce fait.

Enterprise Social Search slideshow
Enterprise Social Search is a way to search, manage, and share information within a company. Who can help you find relevant information and nothing but relevant information? Your colleagues, of course
Today we are launching at Whatever (the company I work for) a marketing campaign for our upcoming product: Knowledge Plaza. Exciting times ahead!
There was some blog entries this week about GNOME stable updates on Ubuntu. There is no reason new bug fix versions could not be uploaded to stable out of the fact that the SRU rules require to check carrefully all the changes and doing this job on all the GNOME tarballs is quite some work, or the ubuntu desktop team is quite small and already overworked.
There is a list of packages which have a relaxed rules though, we have discussed adding GNOME to those since the stable serie usually has fixes worth having and not too many unstable changes (though the stable SVN code usually doesn’t get lot of testing) and decided than the stable updates which look reasonable should be uploaded to hardy-update.
There was also some concerns about gnome-games, 2.20.3 has been uploaded to gutsy-proposed today which should reduce the number of bugs sent to the GNOME bugzilla. The new dependencies on ggz has also been reviewed and 2.21 should be built soon in hardy.
The FOSSCamp and UDS week has been nice and a good occasion to talk to upstream and people from other distributions. We had desktop discussions about the new technologies landing in GNOME this cycle (the next Ubuntu will be a LTS so we need a balance between new features and stability), the desktop changes we want to do, and how Ubuntu contributes to GNOME.
Some random notes about the Ubuntu upstream contributions:
- Vincent asked again for an easy way to browse the Ubuntu patches and Scott picked up the task, the result is available there
- The new Canonical Desktop Team will focus on making the user experience better, most of the changes will likely be upstream material and discussed there, etc
- Canonical has open Ubuntu Desktop Infrastructure Developer and Ubuntu Conceptual Interface Designer positions, if you want to do desktop work for a cool open source company you might be interested by those
GNOME updates in gutsy and hardy
- Selected GNOME 2.20.1 changes have been uploaded to gutsy-updates
- The GNOME 2.21.2 packaging has started in hardy, some updates and lot of Debian merges are still on the TODO though
- We have decided to use tags in patches to indicate the corresponding Ubuntu and upstream bugs so it’s easier to get the context of the change, technical details still need to be discussed though
Update: Scott pointed that you can use http://patches.ubuntu.com/n/nautilus/extracted to access to the current nautilus version

I’ve been working wit git lately but I have also missed the darcs user interface. I honestly think the darcs user interface is the best I’ve ever seen, it’s such a joy to record/push/pull (when darcs doesn’t eat your cpu)
I looked at git add --interactive because it had hunk-based commit, a pre-requisite for darcs record-style commit, but it has a terrible user interface, so i just copied the concept: running a git diff, filtering hunks, and then outputing the filtered diff through git apply --cached.
It supports binary diffs, file additions and removal. It also asks for new files to be added even if this is not exactly how darcs behave but I always forget to add new files, so I added it. It will probably break on some extreme corner cases I haven’t been confronted to, but I gladly accept any patches
Here’s a sample session of git-darcs-record script:
$ git-darcs-record
Add file: newfile.txt
Shall I add this file? (1/1) [Ynda] : y
Binary file changed: document.pdf
Shall I record this change? (1/7) [Ynda] : y
foobar.txt
@@ -1,3 +1,5 @@
line1
line2
+line3
line4
+line5
Shall I record this change? (2/7) [Ynda] : y
git-darcs-record
@@ -1,17 +1,5 @@
#!/usr/bin/env python
-# git-darcs-record, emulate "darcs record" interface on top of a git repository
-#
-# Usage:
-# git-darcs-record first asks for any new file (previously
-# untracked) to be added to the index.
-# git-darcs-record then asks for each hunk to be recorded in
-# the next commit. File deletion and binary blobs are supported
-# git-darcs-record finally asks for a small commit message and
-# executes the 'git commit' command with the newly created
-# changeset in the index
-
-
# Copyright (C) 2007 Raphaël Slinckx
#
# This program is free software; you can redistribute it and/or
Shall I record this change? (3/7) [Ynda] : y
git-darcs-record
@@ -28,6 +16,19 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+# git-darcs-record, emulate "darcs record" interface on top of a git repository
+#
+# Usage:
+# git-darcs-record first asks for any new file (previously
+# untracked) to be added to the index.
+# git-darcs-record then asks for each hunk to be recorded in
+# the next commit. File deletion and binary blobs are supported
+# git-darcs-record finally asks for a small commit message and
+# executes the 'git commit' command with the newly created
+# changeset in the index
+
+
+
import re, pprint, sys, os
BINARY = re.compile("GIT binary patch")
Shall I record this change? (4/7) [Ynda] : n
git-darcs-record
@@ -151,16 +152,6 @@ def read_answer(question, allowed_responses=["Y", "n", "d", "a"]):
return resp
-def setup_git_dir():
- global GIT_DIR
- GIT_DIR = os.getcwd()
- while not os.path.exists(os.path.join(GIT_DIR, ".git")):
- GIT_DIR = os.path.dirname(GIT_DIR)
- if GIT_DIR == "/":
- return False
- os.chdir(GIT_DIR)
- return True
-
def git_get_untracked_files():
Shall I record this change? (5/7) [Ynda] : y
# On branch master
# Changes to be committed:
# (use "git reset HEAD file..." to unstage)
#
# modified: document.pdf
# modified: foobar.txt
# modified: git-darcs-record
# new file: newfile.txt
#
# Changed but not updated:
# (use "git add file file..." to update what will be committed)
#
# modified: git-darcs-record
#
What is the patch name? Some cute patch name
Created commit a08f34e: Some cute patch name
4 files changed, 3 insertions(+), 29 deletions(-)
create mode 100644 newfile.txt
Get the script here: git-darcs-record script and put in somewhere in your $PATH. Any comments or improvements is welcome !










