Rolinh

Rolinh' release

Les Avantages Du Libre: Une Expérience Personnelle :)

Je vous ai parlé dans mon dernier article d’un petit programme que j’ai écrit récemment et que j’ai publié sous licence BSD: dfc.

Si je vous en reparle aujourd’hui, ce n’est pas spécialement pour annoncer que le logiciel a fortement évolué depuis la dernière fois que j’en ai parlé sur ce blog (bien que ce soit le cas) mais c’est surtout que j’ai envie de parler de la bonne expérience que je suis en train de vivre grâce au libre.

Voici donc l’histoire:

Tout a commencé avec un script bash. Ce script, que m’avait fourni un de mes professeur à l’université, affichait les informations de la commande df(1) et y apportait un graphe montrant le taux d’utilisation des disques.

J’ai trouvé l’idée très sympa mais ai également trouvé le script limité et j’ai donc souhaité y ajouter des options. Or, l’état du code m’a assez vite effrayé et j’ai donc décidé de le ré-implémenter en C, langage que j’affectionne.

Je suis vite arrivé au résultat souhaité, à savoir afficher les principales informations fournies par df(1) et y ajouter un graphe. J’en ai parlé sur un forum et j’ai remarqué que les gens étaient plutôt intéressés par le concept. Puis, prenant particulièrement mon pied dans le développement de cet outil, j’ai décidé de lui ajouter des fonctionnalités et un peu d’agrément visuel par l’apport notamment de la couleur.

Après avoir amélioré ce programme, j’en ai parlé sur le forum anglophone de la distribution Archlinux. Les personnes l’ayant testé ont vite souhaité y voir plus de fonctionnalités, que je n’ai pas tardé à implémenter et ont également relevé plusieurs bugs que je me suis empressé de corriger.

J’en suis finalement arrivé à une version que je trouvais relativement mature et je me suis dit que plutôt que de garder cet outil pour moi, j’allais en parler un petit peu afin de pouvoir en faire profiter d’autres. C’est dans cet esprit que j’ai proposé une dépêche sur linuxfr dimanche passé et qui a été publiée le 1er avril (un lecteur de linuxfr a d’ailleurs cru à un poisson d’avril :P).

J’étais très loin d’imaginer l’enthousiasme que lèverait cette dépêche! Peu après la parution de l’article, j’ai été contacté par de nombreuses personnes. L’une proposant une amélioration, l’autre relevant un bug ou encore d’autres proposant des patchs (port du code vers FreeBSD notamment).

J’ai maintenant appris que dfc(1) sera vraisemblablement intégré dans les dépôts de la future Mageia, se trouve déjà dans les ports FreeBSD et s’apprête à rejoindre les dépôts de Frugalware et peut-être même ceux de Fedora!

Sincèrement, j’étais bien loin de m’imaginer tout cela lorsque j’ai commencé à taper quelques lignes de code il y a une quinzaine de jours sur mon portable…

Je souhaitais surtout relever à travers cet article le super esprit du libre qui a permis l’amélioration de dfc(1) en raisons de nombreuses contributions d’utilisateurs sous des formes variées. Et sincèrement, je souhaite tous les remercier. Bref, pour moi c’est une expérience personnelle extrêmement positive concernant les avantages du libre!

Dfc: Un Utilitaire Affichant Le Taux D’utilisation Des Disques

J’ai écrit récemment, en C, un petit utilitaire qui affiche le taux d’utilisation des disques.

Pourquoi? Pour le fun surtout. Enfin, pour situer un peu l’histoire, il s’agit en fait à la base d’une implémentation en C de ce que fait un script bash que m’avait gentiment fourni un de mes professeurs à l’université. J’avais souhaité y apporter quelques changements mais j’avoue avoir un peu pris peur face à l’aspect du script bash.

Au final, j’y ai ajouté pas mal d’options et plusieurs autres sont prévues. Pour voir lesquelles, il suffit de consulter la roadmap sur le site officiel. Assez écrit, voilà à quoi cela ressemble:

1
2
3
4
5
FILESYSTEM TYPE     USED (*)      FREE (-) %USED       AVAILABLE           TOTAL MOUNTED ON
/dev/sdc1  ext4     [************--------]   57%    12989202432B    29941719040B /
/dev/sda7  ext2     [****----------------]   16%       84393984B       99997696B /boot
/dev/sda3  ext4     [*************-------]   63%   138229665792B   370028589056B /home
/dev/sda5  reiserfs [**************------]   68%     4315811840B    13489512448B /var

Et les options disponibles pour la version actuelle (1.1.3):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Usage: dfc [OPTIONS(S)]
Available options:
  -a  print all fs from mtab
  -h  print this message
  -g  size in Gio
  -G  size in Go
  -k  size in Kio
  -K  size in Ko
  -m  size in Mio
  -M  size in Mo
  -n  do not print header
  -s  sum the total usage
  -t  hide filesystem type
  -v  print program version
  -w  use a wider bar

Ce qui peut donner, en combinant plusieurs options (résultat de dfc -wags):

1
2
3
4
5
6
7
8
9
10
11
12
FILESYSTEM TYPE     USED (*)                                    FREE (-) %USED AVAILABLE   TOTAL MOUNTED ON
rootfs     rootfs   [*****************************---------------------]   57%     12.1G   27.9G /
/dev       devtmpfs [--------------------------------------------------]    0%      3.8G    3.8G /dev
run        tmpfs    [*-------------------------------------------------]    0%      3.8G    3.8G /run
/dev/sdc1  ext4     [*****************************---------------------]   57%     12.1G   27.9G /
shm        tmpfs    [*-------------------------------------------------]    0%      3.8G    3.8G /dev/shm
tmpfs      tmpfs    [*-------------------------------------------------]    0%      6.0G    6.0G /tmp
/dev/sda7  ext2     [********------------------------------------------]   16%      0.1G    0.1G /boot
/dev/sda3  ext4     [********************************------------------]   63%    128.7G  344.6G /home
/dev/sda5  reiserfs [***********************************---------------]   68%      4.0G   12.6G /var
/dev/sdb1  ext4     [*************************************-------------]   73%     81.3G  297.8G /mnt/Videos
SUM:                [*********************************-----------------]   65%    255.7G  728.2G

Pour les détails concernant l’utilisation, il suffit de consulter la manpage dfc(1).

Pour les archers, j’ai crée un paquet sur AUR ici. On retrouve également le paquet sur le dépôt archlinuxfr puisque je fais maintenant partie des mainteneurs.

Je profite de l’occasion pour prévenir les quelques personnes utilisant mon dépôt rolinh qu’il sera fermé puisque les paquets se trouvant actuellement dessus vont finir sur le dépôt archlinuxfr où je continuerais de les maintenir.

Pour ceux n’étant pas utilisateurs d’Archlinux mais qui sont quand même intéressés par dfc, il est toujours possible de l’installer manuellement. Pour cela, il suffit de télécharger la dernière archive contenant les sources (ici), de la décompresser, puis, depuis le répertoire obtenu, de lancer les commandes suivantes via le terminal: make pour le construire et make install (en root) pour l’installer (par défaut, il s’installe dans /usr/local).

Quelques Nouvelles

Cela fait près de deux mois que je n’ai pas écrit d’article. Néanmoins, ce blog est bien loin d’être mort. J’étais simplement passablement occupé entre mes examens universitaires et divers autres projets et occupations.

J’ai récemment apporté un léger changement à ce blog. Certains auront peut-être remarqué que la bulle au survol du lien vers le flux RSS affiche maintenant une information en français et que le champ de recherche en haut à droite comporte la mention “Rechercher…” et non plus “Search…”. J’avais omis ces détails lorsque j’avais déployé et traduit Octopress pour ce blog. Cependant, ce ne sont pas ici les seules modifications apportées. En effet, la recherche sur le site s’effectue maintenant par le biais de DuckDuckGo et non plus Google. Pourquoi cela? Et bien par respect pour votre vie privée. Vous n’êtes sans doutes pas sans savoir que Google est omniprésent sur le web est arrive à concentrer une quantité faramineuse de données sur vous et cela notamment via son moteur de recherche. Bref, je ne tiens pas à alimenter leur base de données de votre profil au travers de ce blog et c’est ce qui m’a poussé à effectuer ce changement. J’avais entendu parler de DuckDuckGo la première fois via LinuxFr. Dans un premier temps, j’ai simplement été intrigué puis SebSauvage est venu en remettre une couche qui a achevé de me convaincre de lui donner une chance. Cela fait donc plusieurs mois que je l’utilise et comme je l’ai trouvé convainquant, j’ai trouvé qu’il ferait un bon remplaçant à Google pour ce site.

Ceci dit, vous me direz que c’est aberrant de parler du respect de votre vie privée et de continuer d’utiliser Google Analytics. Inutile de vous dire que lui aussi va disparaitre et ce probablement au profit de Piwik. Seulement voilà, pour l’instant il ne me donne aucunes statistiques et je n’ai pas eu le temps de me pencher sur le problème afin de savoir pourquoi.

Dans un tout autre registre, j’ai mis en place un ChiliProject pour mes divers projets de programmation. Pour ceux n’étant pas au courant, ChiliProject est un fork au développement dynamique de Redmine qui se révèle être extrêmement simple à déployer (au contraire de ce dernier…). Il s’agit donc d’une plateforme complète comprenant notamment un visualiseur de dépôts (git dans mon cas), un wiki, une page de nouvelles, un bug tracker, etc. Bref, un outil vraiment complet pour gérer des projets que je vous invite à retrouver ici.

D’ailleurs, je partage cet outil avec mon ami Gilliek qui vient ce soir même de finir la version 1.0 de son projet de gestion de DVDs en mode web nommé MyDVD. Il s’agit d’une application Rails permettant de recueillir des informations à propos des films de sa DVDthèque (bandes-annonces, synopsis, etc.) et de les visionner dans un navigateur web grâce à HTML5. L’idée est donc de stocker ses films sur un ordinateur faisant office de serveur de films les rendant ainsi accessibles depuis n’importe quel appareil disposant d’un navigateur internet dans sa maison. Je précise maison car je doute que beaucoup de monde dispose d’une bande passante suffisante chez lui pour permettre le streaming sur internet. Néanmoins, ceci est bien évidemment possible si cette condition est remplie. Les prochains développement concerneront le support des langues (pour le moment, seul le français est disponible) et une fonction de recherche améliorée.

De mon côté, je profite également de ChiliProject pour ma bibliothèque de widgets pour Awesome (Precious), pour le gestionnaire de copies LinCopier qui a profité de l’occasion pour se débarrasser de SourceForge.Net et enfin pour Rubyckup, un outil de backups pour serveurs écrit en Ruby.

Convertir Simplement Ses M4A en MP3 via Un Script

En faisant un tri dans ~/Music, je me suis aperçu qu’un certain nombre de mes fichiers audio étaient en format M4A. Cela ne me plaisant pas trop et afin notamment d’uniformiser ma médiathèque, j’ai cherché une solution me permettant de les convertir en MP3. Seulement, je ne voulais pas perdre les tags ID3v2 associés.

Après avoir un peu parcouru la toile, je suis tombé sur un script de conversion conservant ces tags et basé sur les outils faad, lame et id3v2.

Je l’ai adapté à ma sauce afin notamment de supprimer les fichiers M4A originaux une fois la conversion effectuée. Lame n’étant pas optimisé pour les processeurs multicoeurs, l’opération de conversion peut prendre un certain temps en fonction du nombre de fichiers à convertir. Bref, il faut être patient.

Le script cherchant les fichiers M4A dans le dossier courant, il est préférable de le lancer à partir du dossier contenant votre collection de fichiers musicaux.

Alors oui, c’est du bash donc moche et lent mais je l’ai utilisé pour convertir pas moins d’une centaine de morceaux et j’ai été vraiment content du résultat. Bref, je partage car ça peut toujours servir.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/bin/bash
# converts m4a files to mp3
# song tags should be preserved

if ! which faad >/dev/null; then
  echo "faad executable not found." >&2;
  exit 1;
fi
if ! which lame >/dev/null; then
  echo "lame executable not found." >&2;
  exit 1;
fi
if ! which id3v2 >/dev/null; then
  echo "id3v2 executable not found." >&2;
  exit 1;
fi

echo -n "Delete m4a file(s) after conversion?(y/n) "
read yn
case $yn in
  y|yes)
      echo -e "All right $USER, m4a files will be removed."
      del=0
      ;;
  *)
      echo -e "Ok $USER, m4a files will be preserved."
      ;;
esac

echo -e "\nBe patient if you convert lots of file."

while read m4afile; do

  mp3file=$(echo "$m4afile" | sed s/\.m4a/.mp3/g)
  ARTIST=$(faad -i "$m4afile" 2>&1 | grep '^artist: ' | sed 's/^artist: //')
  TITLE=$(faad -i "$m4afile" 2>&1 | grep '^title: ' | sed 's/^title: //')
  ALBUM=$(faad -i "$m4afile" 2>&1 | grep '^album: ' | sed 's/^album: //')
  GENRE=$(faad -i "$m4afile" 2>&1 | grep '^genre: ' | sed 's/^genre: //')
  TRACKNUMBER=$(faad -i "$m4afile" 2>&1 | grep '^track: ' | sed 's/^track: //')
  DATE=$(faad -i "$m4afile" 2>&1 | grep '^date: ' | sed 's/^date: //')
  COMMENT=$(faad -i "$m4afile" 2>&1 | grep '^comment: ' | sed 's/^comment: //')
  CONGROUP=$(faad -i "$m4afile" 2>&1 | grep '^contentgroup: ' | sed 's/^contentgroup: //')
  COMPOSER=$(faad -i "$m4afile" 2>&1 | grep '^writer: ' | sed 's/^writer: //')
  PERFORMER=$(faad -i "$m4afile" 2>&1 | grep '^performer: ' | sed 's/^performer: //')
  ALBARTIST=$(faad -i "$m4afile" 2>&1 | grep '^album_artist: ' | sed 's/^album_artist: //')

  echo -en "\n$ARTIST / $ALBUM [$DATE] / $TRACKNUMBER - $TITLE"
  echo -en "\nConverting *$(basename "$m4afile")* to *$(basename "$mp3file")* ..."
  faad -q -o - "$m4afile" 2>/dev/null | lame -m j -q 0 --vbr-new -V 0 -s 44.1 - "$mp3file" 2>/dev/null

  id3v2 -t "$TITLE" -T "${TRACKNUMBER:-0}" -a "$ARTIST" -A "$ALBUM" -y "$DATE" -g "${GENRE:-12}" -c "$COMMENT" --TORY "$DATE" --IPLS "$ALBARTIST" --TCOM "$COMPOSER" --TIT1 "$CONGROUP" --TIT2 "$TITLE" --TOPE "$PERFORMER" --TPE1 "$ARTIST" --TPE2 "$ALBARTIST" --TRCK "$TRACKNUMBER" "$mp3file" 2>/dev/null

  if [[ ${del} ]]; then
      rm -v "$m4afile"
  fi

done < <(find . -iname '*.m4a' -or -iname '*.M4A')
echo -e "\nConversion complete!"

PS: j’ai trouvé un workaround pour mes soucis de coloration syntaxique. C’est pour l’instant assez moche mais mieux que rien… en attendant la résolution du bug upstream.

Thinkpad T420 Sous Archlinux: Corriger Les Problèmes De Son

Je vous ai déjà parlé à plusieurs reprise de mon Lenovo Thinkpad T420. Et bien je vais revenir dessus encore une fois!

Presque tout le matériel est très bien reconnu par Linux dans l’ensemble mais il subsiste quelques détails: le bouton permettant d’activer/désactiver le microphone ne fonctionne pas*, le son des haut-parleurs est relativement faible et ne marche carrément pas du tout via la sortie jack de la docking station. Enfin, ne marchait pas aurais-je dû dire car pour ces deux derniers points j’ai trouvé la solution et elle est extrêmement simple à mettre en place.

Il suffit d’éditer /etc/modprobe.d/modprobe.conf et d’y ajouter cette ligne:

options snd-hda-intel model=thinkpad

Le module est ainsi chargé avec les bons paramètres et permet ainsi au son de fonctionner via le jack du dock et de gagner légèrement en volume à travers les haut-parleurs intégrés au portable. Il est à noter que cette astuce est sûrement valable pour les autres Thinkpad et adaptable à d’autres configurations.

* N’utilisant pas de microphone, je n’ai même pas cherché s’il existait une solution. De même, je n’ai jamais testé le lecteur d’empreintes digitales car je ne m’en servirais de toute façon pas.