mercredi 6 avril 2016

GNOME at the 'Journées du logiciel libre'

This April 2–3 2016 the 17th Journées du logiciel libre (Days of Free Software) were held in Lyon (France).

GNOME 3.20 was demoed on the stand, running on Fedora 24 alpha, and goodies such as t-shirts were proposed to our visitors. Lots of persons came to visit us, from complete beginners to seasoned users and I noticed some patterns in the questions of the beginners: lots of visitors asked whether GNOME is an operating system (or "like Ubuntu"), while others asked if they were able to install it on Ubuntu.

On a side-note, we accidentally changed the code of the event box's padlock when locking it at the end of the first day, hopefully Matthieu "starmad" Gautier was there to save the day by brute-forcing the padlock, trying hundreds of combinations, and allowing us to install the stand again and greet our visitors decently.

starmad gauging his opponent, photo by Didier Roche

To participate to this event and to help on the GNOME stand I had to trip from my hometown of Montpellier (France), it was a two hours trip by TGV and I was glad to meet lots of GNOMies again (Mathieu Bridon, Matthieu Gautier, Haïkel Guémar, Bastien Nocera, Frederic Peters and Michael Scherer) and to meet Didier Roche for the first time. We had a great deal of fun together! =)

This event was really nice and I hope I'll be able to help next year too, and more importantly: I hope to see you there!

lundi 22 février 2016

GNOME Games 3.20 development

The last semester was quite crazy for me as I had to work restlessly for my studies, which let me very little time to work on GNOME Games. That being said that doesn't mean nothing happened in Games land! Here is what to expect in the next versions of Games.

What will be new in 3.20

GNOME Games 3.19.90 just came out and brought with him some changes. Besides several small bug fixes, Games have been refactored, polished and hardened to be ready to receive more important features on the next release.


This is the biggest feature that have been added in this cycle.

Game formats in Games are handled by providing several types to handle them:

  • a Game to represent the games of that kind,
  • a GameSource to list the games of that kind (GameSource is a Game factory),
  • other classes could be added if necessary such as a Runner to run the games or a widget to display and control the games in the application's window.

Currently a game source gives its games, a game gives its runner and a runner gives its display.

In the previous stable version of Games, each of these classes existed directly in the application's code, meaning that the application had tons of format specific classes scattered all over its code and was explicitly handling each available game format. This couldn't scale well so we needed to make this even cleaner and more flexible and to do so a plugin system have been added every game format have been ported into its own plugin. Each of these plugins encapsulate the definitions of the GameSource, Game, and other helper classes corresponding to a single game format. Now the roles of each part of the code are clearer, better contained, and the application don't have an explicit list of available game formats but load them by looking at the available plugins.

Having plugins also have several extra advantages. A third party can create a plugin to support a new game format, put it in the right directory and bam, Games will magically support it! Another advantage is that you could disable support for systems you don't care about to make the application lighter, also some extra data that the plugins may need could be shipped directly with the plugin itself and not the application as a whole, making disabling a plugin even more efficient as they are self contained.

You can check the available plugins in the new Preferences window at the Extensions tag.

About dialog

Nothing fancy but we now have one. =)


Games can now be localized, don't hesitate to translate it in your language!

Work in progress

The most interesting stuff is to come. Here are listed features I started working on during the 3.20 cycle but didn't find the time to complete; now that I have some free time to work on them, you may expect them to land in 3.22!

Rich search

Currently we can search for games by their displayed title only. The plan is to make search richer by allowing to look for games by their format, genre, developer, publisher, release date...

We could even imagine crazier ideas such as searching by character names, the number of available player, etc..

Game identification

Most systems that Games handle or will handle have a more or less finite amount of games and no proper way to identify them: I'm talking about retro game consoles and handhelds. Often these game formats are very unconvenient to work with as they ship next to no metadata and are often available with hideous file names from which a title can't be easily guessed.

Some project like TOSEC and No-Intro started to work on a similar problem and produce databases relating fingerprints to well formatted file names.

I would like to have some way to identify a game and to get some useful information about it without having to scrap some online data base, and to empower such information to be more precise when looking for more data online. To do so I started working on a small XML based format called Gameinfo, used to link some game identifier (such as a ROM's fingerprint) to a game identity (mostly a title). I plan to ship such files embedded into the plugins they are related to and to use gettext to localize the games' titles.

Here is an example of a translatable Gameinfo file:

<?xml version="1.0"?>
      <_title>Super Mario World</_title>
        <rom md5="4f17a1a17a098d0a5312703b55ad134b"/>
        <rom md5="7bb0487eacdb78d6635e89d797e5ab74"/>
        <rom md5="cdd3c8c37322978ca8669b34bc89c804"/>

Most of it works on my local branches but the code needs some serious cleanup before being published. Also I don't want to use and release such a file format without proper tooling to easily create, edit and update such databases, particularly from TOSEC ou No-Intro data files.

Keyboard configuration

Lots of games like the ones from retro consoles only support gamepad-like inputs, though you may want to play a game even if you don't have such a device. To do so we can bind keyboard inputs to gamepad inputs, allowing you to create multiple mock-gamepads in the process to allow multiple players at the same time.

We still need to find a proper way to bind such mock-gamepads to a gamepad port on the emulator and to let you select which one you want to use for which player.

dimanche 31 janvier 2016

I'm joining Igalia!

On Monday February the First, 2016 I have the pleasure to join Igalia's WebKit team as an intern for the next five months. I will probably work on WebKitGTK+ and/or GNOME Web, but what's sure is that it will be fun and interesting! =D

mercredi 21 octobre 2015

Games 3.18.0 released

Do you like video games but don't like how inconsistent and annoying it can be to enjoy them on a personal computer? Then read on, I have something for you! And if you're not such a gamer, you'll probably learn fun things in the article nonetheless.

In this article I'll present you the new GNOME application called Games, whose first preview version (labelled 3.18.0) just came out.

Your games library

Video games on personal computers exist in lots of shapes and formats, each of these being accessible in very different ways:

  • games installed from Software are found alongside the applications,
  • Steam games are listed in the Steam client,
  • video game consoles and retro computers games are handled as ROM files, disk images or archives, each one playable with a different application depending on the original platform,
  • some game engines have their games distributed as packages that have to be run with the correct engine, such as LÖVE or the Doom engine,
  • Web based games are available on Web browsers,
  • and there are probably more formats we didn't thought of!

There is no consistent way to access them all, which hide the fact that games are more than files or applications: they all represent the same kind of media, meaning they all share lots of metadata types which could be used to ease your life!

Games tries to solve this problem by automatically listing and presenting you the games available on your computer, letting you browse your collection and play the game you want very easily!

Currently, Games handle these game types:

  • your regular desktop games,
  • your Steam games,
  • your LÖVE games,
  • your NES/Famicom games,
  • your SNES/Super Famicom games,
  • your Game Boy/Game Boy Color games,
  • your PC-Engine/TurboGrafx-16 games.

More games are listed but are not playable yet, and more will come in the future!

Game integration

Games tries to integrate games as tightly as possible. An example of that is the usage of the Libretro API (via the Retro and RetroGtk libraries) which allow it to integrate some gaming console emulators and some video game engines directly into the application, making them installable as plug-ins and avoiding to cripple your file system with support for gaming platforms you don't care about. Thanks to this API, Games can treat emulators and engines just as a music player would treat audio codecs and play the games itself, controlling lots of details in the process, such as:

  • the execution of the game,
  • the outputs (the audio, the video, the gamepad's vibrations, ...),
  • the inputs (the pressed buttons, a camera, ...),
  • serializing the emulator/engine's state,
  • and more!

An obvious feature is that we can integrate the inputs and the outputs into Games' window, but a particularly interesting feature we can offer by leveraging the serialization capabilities of the API is to propose you to resume the game where you left it!

For this release, only the NES, SNES, Game Boy and PC-Engine games are integrated. You can control them using your keyboard with the following hardcoded mappings:

Keyboard NES/Game Boy SNES PC-Engine
Arrow keys D-pad D-pad D-pad
Return key Start button Start button Run button
Backspace key Select button Select button Select button
D key A button A button Ⅰ button
S key B button B button Ⅱ button
W key - X button -
A key - Y button -
Q key - L button -
E key - R button -


Covers, icons and other metadata

Currently, the listed games have very few available metadata, some don't even have an icon or a cover. We obviously want to offer covers or icons for all the games, but we also want to go further by using metadata to offer interesting features such as refined search.

Game controllers

Game controllers can range from regular gamepads to dance mats, via light guns and guitars. Unlike keyboards and mice, game controllers are available in very different shapes and sizes and have equally different kinds of inputs (analog or digital buttons, direction pads, analog or digital joysticks, triggers, spinners, motion sensors...), making them really hard to handle by developers. Even controllers that are very similar — such as the Xbox and PlayStation gamepads — can have buttons placed similarly have different hardware button numbers in the drivers: even wired and wireless Xbox 360 controllers have different button numbers!

These details make game controllers hard to handle, as you have to know the type of the controller, the number and kind of inputs it has, and its layout.

You probably want gamepad support, and not to configure it if possible. To do that we will have to add a gamepad configuration facility — preferably in the Control Center — and to gather the gamepads' layout descriptions and button mappings.

More games

Currently, only a handful of game types are playable and barely more are listed. We want to support (and integrate) as much games as we can!

Improved search

Looking for games should be refined: we want you to be able to filter games depending on their genre, on the allowed number of players, on the required controllers, on their developers...

Deeper integration into GNOME

Games could be a Shell search provider, allowing you to quickly search and run any game.

Also, the Control Center should be leveraged to configure the gamepads.

Help wanted

If you want to test the application, you have some crazy ideas we could implement, you know some crazy game formats and consoles we didn't think of, you know an awesome video game database website we could use, you are a specialist of some particular format/architecture (MD-DOS games, ScummVM, ...), you know OpenGL, GtkGLArea, PulseAudio...: we need your help!

Cake, and grief counseling, will be available at the conclusion of the test.

mercredi 26 août 2015

GUADEC 2015 was awesome!

I went to GUADEC 2015 which was help in Gothenburg between friday 08/07 and wednesday 08/12, here is what I did there.

Deserved thanks

First of all, I would like to sincerely thank the organizers of this GUADEC, they made an amazing job! =)

I also would like to thanks the GNOME Foundation, the GNOME Travel Committee and the persons volunteering to work for this committee as I wouldn't have been able to attend the conference without their sponsorship.


I volunteered to help during this GUADEC and it was a great experience. I only had few work to do as there was a ton of volunteers, all I did is to help cleaning the rooms and to be in charge of presenting the speaker, filming its talk and give him a gift for two talks on sunday.

Being able to see the Beamer theme I wrote used was quite pleasing too. =)

The core days

On Friday

  • Alexander Larsson's talk on xdg-app got me really excited about this big shift the Linux desktop is taking,
  • Emmanuele Bassi's talk on GSK showed us how it will be used as an intermediate layer between GTK+ and GDK,
  • Caolán McNamara taught me about the relation between LibreOffice and GTK+3,
  • Matthias Clasen showed some pretty interesting stuff that GTK+ can do,
  • Alexander Bokovoy's talk taught me a LOT of stuff I didn't now about like double factor identification, and how they are use by GNOME for enterprise desktops,
  • I gave a lightning talk on my work on Boxes this summer.

On Saturday

  • Frédéric Crozat talked about what have been done at SUSE to adapt GNOME to their enterprise customers,
  • Christian Hergert made me actually use Builder =),
  • Jan-Christoph Borchardt gave a engaging talk on how ownCloud and GNOME would have a tighter relationship.

On Sunday

  • Jonas Danielsson got me excited about the future of GNOME Maps =),
  • Pamela Chestek gave an awesome talk on how she helped GNOME to stay GNOME,
  • Jussi Pakkanen talked about the Meson build system,
  • I filmed Markus Mohrhard's talk on LibreOffice integration within GNOME Document, with an interesting first part by Pranav Kant who showed his summer work on LibreOffice and GTK+3,
  • I filmed David King's talk on logging and statistics,
  • The lightning talks were awesome: they features a troll and an helicopter pilot.

The BoF sessions

On Monday

  • I attended the informal GNOME Maps BoF, it was extremely interesting to get more information on the future of the project. I looked at the Mapbox GL C++/ vector tile library to check if it was interesting to bind it/port it to C/GObject.

On Tuesday and Wednesday

  • I hacked on Boxes with my mentor Zeeshan Ali, improving my patches for the new collection filter and the list view.

The faces

  • It was a great pleasure to see lots of known faces,
  • And obviously discovering lots of new ones was great too, =)
  • My face—name—nickname relationships got improved!

The places

  • The free ferry was great =),
  • The Slottsskogen park and its zoo were really cool to visit,
  • The city is full of interesting pubs,
  • Walking in Gothenburg is really enjoyable once you understood were are the bike lane and that you should never ever put a foot on one =p,
  • There are lots of vegetarian and vegan restaurants, and the ones which are not have good veg(etari)an offers, which is nice when you want to eat as a group,
  • Staying at the hostel was a nice experience as you never stop to be in the GNOME communitythis way!