Outils pour utilisateurs

Outils du site


issue132:mon_histoire

Welcome to these few articles where I share how I tackled and solved a problem using a little of my past knowledge and leveraging the marvellous open source world. In other words, I had an issue with a piece of software (rhythmbox) and addressed it by writing a little program.

Bienvenue dans la lecture de ces quelques articles où je partage comment j'ai abordé et résolu un problème en utilisant un peu de mes connaissances passées et en tirant parti du merveilleux monde de l'Open Source. Pour tout vous dire, j'ai eu un problème avec un logiciel (rhythmbox) que j'ai résolu en écrivant un petit programme.

Why have I decided to write this? Open source communities are about giving back, and I believe this is a way for me to give back, not only to the Ubuntu community, but also to Full Circle, that, as you will see, has a lot of credit in this. After you read this, I hope you’ll be even more enthusiastic about the possibilities that OSS offers, and maybe give it a go, try doing something yourself (it shouldn’t necessarily be coding).

Pourquoi ai-je décidé de raconter cela ? Les communautés de l'Open Source offrent la possibilité de contribuer, et je crois que, pour moi, écrire ici est une façon de contribuer, pas seulement en faveur de la communauté Ubuntu, mais aussi pour le Full Circle, qui, comme vous le verrez, a beaucoup de mérite dans ce domaine. Après avoir lu ceci, j'espère que vous serez encore plus enthousiaste sur les possibilités qu'offre l'OSS (les logiciels Open Source), et peut-être essaierez-vous vous-même d'apporter quelque chose en retour (cela ne devrait pas nécessairement être du codage).

What you will not find in these pages is how to learn to program, or a quick course on Python, also because there’s already a superb column by Greg D. Walters. I will use my program to tell my story, and to share some specific tips that show why open source is called “open” and why that is a benefit for everyone. You don’t have to be a coder or a geek to enjoy it. I know how to write a program because that was my job 30 years ago; since then I moved into a different field. When I wrote the piece of software I am sharing, I had no technical knowledge of writing code for Linux and Gnome, and didn’t know Python at all.

Dans ces pages vous n'apprendrez pas à programmer, vous n'y trouverez pas un cours rapide sur Python, parce qu'il y a déjà une superbe chronique écrite par Greg D. Walters. Je vais utiliser mon programme afin de raconter mon histoire et partager quelques conseils spécifiques qui démontreront pourquoi l'Open Source est appelé « open source » (fourniture libre) et pourquoi c'est bénéfique à tous. Vous n'avez pas besoin d'être un codeur ou un geek pour en profiter. Je sais comment écrire un programme car c'était mon travail il y a trente ans ; depuis lors, j'ai changé de domaine. Quand j'ai écrit le logiciel que je partage, je n'avais aucune connaissance technique de l'écriture de code pour Linux et Gnome, et je ne connaissais pas du tout Python.

So here is my story. I switched to Linux 12 years ago, a bit for curiosity and a bit because I was fed up with the idiosyncrasies of Windows (XP at the time): getting slow, and every six months format and reinstall to clean up the system. I started with Fedora Stentz, upgraded to Bordeaux, and then moved to Ubuntu.

Voici donc mon histoire. Je suis passé sous GNU/Linux il y a 12 ans, un peu par curiosité et un peu parce que j'en avais assez des bizarreries de Windows (XP à l'époque), qui devenait lent, et tous les six mois il fallait réinstaller le système pour le nettoyer. J'ai commencé avec Fedora Stentz, que j'ai ensuite mise à niveau vers Bordeaux [Ndt : la version de Fedora, non la ville du vin], puis j'ai migré vers Ubuntu.

I don’t remember when I stopped dual-booting, probably 6 years ago when I realised I was doing everything in Linux and never using any other OS. Like many, one of the things I do with my computer is listening to music; as a matter of fact, I’m writing this with the rhythm of Beautiful Day from U2! In those years, I tried a few music players but I tended to stick with the default one provided by Canonical. Thus, for a little while I used Banshee, but mainly Rhythmbox which is described as “a reliable, dependable, and extensible GTK music player that uses the Gstreamer backend”.

Je ne me souviens plus à partir de quand j'ai arrêté le dual-boot. Il y a probablement six ans, quand j'ai réalisé que je faisais tout sous Linux et que je n'utilisais plus d'autre système d'exploitation. Comme nombre d'entre nous, j'écoute souvent de la musique sur mon ordinateur (en fait, j'écris ces lignes au rythme de « Beautiful Day » de U2). Durant ces années, j'ai essayé quelques lecteurs de musique, mais j'ai eu tendance à m'en tenir à celui par défaut fourni par Canonical. Ainsi, pendant un certain temps, j'ai utilisé Banshee, mais surtout Rhythmbox qui est décrit comme « un lecteur de musique GTK fiable et extensible, qui utilise Gstreamer en arrière-plan ».

It definitely satisfied my needs and ticked all the boxes for me. I had only one little issue: sorting. It is a nice feature that offers you the possibility of showing artists and albums in a different order from the mere alphabetical one. It does that by adding more fields to the standard MP3 ones: artist sort order, album sort order, album/artist sort order, and composer sort order – see the Illustration. I wanted to use this approach, so that, for example, ‘The Script’ would show up under ‘S’ and not ‘T’. To do so, I just need to populate the proper field (artist sort order) with “Script, The” and so I did. It worked exactly as I wanted. You can see the result in the Illustration. My next step was to sort all the albums for an artist in a chronological order – to achieve this, I simply put the year of release in the album sort order field. Of course this is how I would like to see my music, you may want it completely different.

Cela a pleinement satisfait tous mes besoins. Je n'avais qu'un seul petit problème : le tri, fonctionnalité intéressante qui vous offre la possibilité de montrer les artistes et les albums dans un ordre différent du simple ordre alphabétique. Cela se réalise en ajoutant bien plus de champs à ceux qui sont standards au MP3 : ordre de tri de l'artiste, ordre de tri de l'album, ordre de tri de l'album/artiste, et ordre de tri du compositeur (voir l'illustration). Je souhaitais utiliser cette approche pour que, par exemple, « The Script » apparaisse sous la lettre 'S' et non pas sous la lettre 'T'. Pour cela, il suffit de remplir le champ approprié (ordre de tri de l'artiste) avec « Script, The » et c'est ce que j'ai fait. Ça a fonctionné exactement comme je le désirais. Vous pouvez voir le résultat dans l'illustration. L'étape suivante a été de trier tous les albums d'un artiste dans un ordre chronologique. Pour y parvenir, j'ai simplement mis l'année de sortie dans le champ d'ordre de tri des albums. Bien sûr, c'est comme ça que j'aimerais trier ma musique, mais vous préféreriez peut-être une classification complètement différente.

There were only two issues. First of all, I had to enter all of this information for every track, albeit using multiple selection helps, it is still a time consuming process. Second, at times the information was lost… after I closed Rhythmbox and relaunched it, some tracks had the sort fields blank. I believed it was a bug, but a search on internet showed I was the only one suffering so I was undecided what to do. I could have lived well without sorting the information, but at the same time it was a pity. Being a former programmer and user of the Rhythmbox OSS, I took a look at the source code of Rhythmbox to see if I could tinker with it. I found it too complicated for me, I had to understand too many new concepts (Gnome, Gtk, data structures), and soon discovered it was too much for me.

Il n'y avait que deux problèmes à résoudre. Tout d'abord, j'ai dû entrer toutes ces informations pour chacune des pistes ; même si l'on peut s'aider de la sélection multiple, cela reste un processus qui prend beaucoup de temps. Deuxièmement, il arrivait que les informations soient perdues : entre la fermeture de Rhythmbox et la réouverture du logiciel, les champs de tri de certaines pistes se retrouvaient vides. Je pensais qu'il s'agissait d'un bogue, mais une recherche sur Internet m'a démontré que j'étais le seul à subir cela, me plongeant dans le doute quant à ce qu'il fallait faire. J'aurais pu me passer de ce tri des informations, mais en même temps cela me semblait regrettable. En tant qu'ancien programmeur et utilisateur de Rhythmbox OSS, j'ai jeté un coup d'œil au code source de Rhythmbox pour voir si je pouvais le modifier. Je le trouvais trop compliqué pour moi, car il me fallait apprendre trop de nouveaux concepts (Gnome, Gtk, structures de données), et j'ai vite compris que la tâche était titanesque.

I have read Full Circle since the first issue, and I noticed the Python column by Greg – that gave me the idea to try to learn Python, solve my issue, and possibly offer the community a piece of software that made it easier to enter sort information. This for me is the spirit of OSS, and, during the course of this article, we’ll see why the same thing would have been way more difficult in a closed source environment.

Je lis le Full Circle depuis le premier numéro, et j'ai relevé les articles sur Python de Greg, ce qui m'a donné l'idée de tenter d'apprendre Python afin de résoudre mon problème, et pourquoi pas d'offrir à la communauté un logiciel qui facilite la saisie des informations de tri. C'est, selon moi, l'esprit de l'OSS, et dans la suite de cet article, nous verrons pourquoi la même chose aurait été beaucoup plus difficile dans un environnement fermé.

I went straight to Greg’s lesson number 1 and tried to practice a little with the classic “Hello World” program. In a short time, I started addressing my sorting problem and began writing my first program in Python. I called it fixrhy and tried to figure out how Rhythmbox uses the sort information. Looking at the documentation (https://developer.gnome.org/rhythmbox/stable/RhythmDB.html), I saw there is an “Object” that provides access to the song DB. Again, it proved to be a little too much to chew on at the time and therefore I decided to go along a different road. I discovered that the information is saved in a XML file, so I tried to play with it. Before the next chapter, where I talk about my first program, I would like to point out that the route I took is not the ideal one. Writing a plugin and using the official API would have been more appropriate and future-proof. But, at the time, I just wanted to try Python and come up with a quick fix, and so I did.

Je me suis directement reporté à la leçon numéro 1 de Greg et j'ai essayé un peu de me familiariser avec le programme classique « Hello World ». En peu de temps, j'ai entrepris de résoudre mon problème de tri et j'ai ainsi commencé à écrire mon premier programme en Python. Je l'ai appelé « fixrhy ». J'ai alors tenté de comprendre comment Rhythmbox utilise les informations de tri. En regardant la documentation (https://developer.gnome.org/rhythmbox/stable/RhythmDB.html), j'ai vu qu'il y a un « Objet » qui donne accès à la base de données des chansons. Encore une fois, à cette époque, je trouvais qu'il y avait trop à ingurgiter et j'ai donc opté pour une autre voie. J'ai découvert que l'information est sauvegardée dans un fichier XML ; aussi, j'ai essayé de le bricoler. Avant d'aborder le prochain article, où je parlerai de mon premier programme, j'aimerais souligner que l'itinéraire que j'ai suivi n'est pas le plus judicieux. Ecrire un plugin et utiliser l'API officielle aurait été plus approprié et à l'épreuve du temps. Mais, à l'époque, je voulais juste essayer Python et trouver une solution rapide, et c'est ce que j'ai fait.

issue132/mon_histoire.txt · Dernière modification : 2018/05/10 14:46 de andre_domenech