AviGNU - Mot-clé - ValaGroupe d'utilisateurs de logiciels libres du Grand Avignon2024-01-02T17:40:01+01:00Administrateururn:md5:8ed776652564792dba453bac492a5a6cDotclearVoir et revoir les vidéos disponibles sur le site Arte.tvurn:md5:bd422285755564e0ccee7856bdc97ac62016-07-14T19:15:00+02:002016-07-14T19:37:59+02:00Olivier DuchateauProgrammationArteGLibJSONlibsoupVala <p>Ces derniers temps, j'explore les capacités du site <a href="http://www.arte.tv/">arte.tv</a> afin de (re)voir certaines vidéos.</p>
<p>Je peux désormais récupérer la véritable <abbr title="Uniform Resource Locator">URL</abbr> d'une vidéo à partir de leur <em>playlist</em> (j'y reviendrais dans un futur billet). Mais cette fois-ci je me suis intéressé au cas, où l'on connaît déjà le lien.</p>
<p>j'ai donc écrit un script avec le langage <a href="https://wiki.gnome.org/Projects/Vala">Vala</a>. Pour utiliser le programme il vous faut installer les bibliothèques suivantes <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2016/07/14/Voir-et-revoir-les-vid%C3%A9os-disponibles-sur-le-site-Arte.tv#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> :</p>
<ul>
<li>glib</li>
<li>libsoup</li>
<li>json-glib</li>
</ul>
<p>Il faut ensuite le compiler :</p>
<pre>
valac --pkg=glib-2.0 --pkg=libsoup-2.4 --pkg=json-glib-1.0 artetv.vala
</pre>
<p>Si tout se passe bien, on peut le lancer de la manière suivante <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2016/07/14/Voir-et-revoir-les-vid%C3%A9os-disponibles-sur-le-site-Arte.tv#wiki-footnote-2" id="rev-wiki-footnote-2">2</a>]</sup> :</p>
<pre>
./artetv http://www.arte.tv/guide/fr/057398-000-A/quand-l-amerique-sera-latine
http://arte.gl-systemhaus.de/am/tvguide/EUR_DE_FR/057398-000-A_EQ_2_VOF-STF_02421848_MP4-1500_AMM-Tvguide.mp4
</pre>
<p>Le script par défaut recherche les vidéos dont le conteneur est <a href="https://fr.wikipedia.org/wiki/MPEG-4_Part_14">MP4</a> (il est tout a fait possible de voir les vidéos en streaming, grâce au protocole <a href="https://fr.wikipedia.org/wiki/Real_Time_Messaging_Protocol">RTMP</a>).</p>
<p>Je n'ai pas prévu de fonctionnalité pour télécharger le fichier (ce n'était pas le but premier, je voulais surtout m'intéresser aux données au format <a href="https://fr.wikipedia.org/wiki/JavaScript_Object_Notation">JSON</a>). Cependant on peut utiliser un utilitaire prévu pour ça (par exemple avec <code>wget</code>) :</p>
<pre>
wget `./artetv http://www.arte.tv/guide/fr/057398-000-A/quand-l-amerique-sera-latine`
</pre>
<p>Ou tout simplement, visualiser directement la vidéo avec la bibliothèque <a href="https://gstreamer.freedesktop.org/">GStreamer</a>.</p>
<pre>
gst-launch-1.0 playbin uri=`./artetv http://www.arte.tv/guide/fr/048078-000-A/papouasie-expedition-au-coeur-d-un-monde-perdu`
</pre>
<p><em>(Cliquez sur l'image pour la voir au format original)</em></p>
<p><a href="http://avignu.tuxfamily.org/news-custom/public/screenshots/gst-launch-1.0.png" title="gst-launch-1.0.png"><img src="http://avignu.tuxfamily.org/news-custom/public/screenshots/.gst-launch-1.0_m.png" alt="gst-launch-1.0.png" style="display:table; margin:0 auto;" title="Capture d'écran de gst-launch-1.0 en action" /></a></p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2016/07/14/Voir-et-revoir-les-vid%C3%A9os-disponibles-sur-le-site-Arte.tv#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Ainsi que les paquets de développement, généralement.</p>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2016/07/14/Voir-et-revoir-les-vid%C3%A9os-disponibles-sur-le-site-Arte.tv#rev-wiki-footnote-2" id="wiki-footnote-2">2</a>] Par exemple avec cette URL, http://www.arte.tv/guide/fr/057398-000-A/quand-l-amerique-sera-latine </p></div>
L'aventure est en marcheurn:md5:f579de0c2f1eafd4245f90e35ae7290a2015-05-16T22:07:00+02:002015-05-16T21:33:32+02:00Olivier DuchateauFreeBSDPantheon ShellVala <p>Dans un <a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non">précédent billlet</a>, j'expliquais que j'étais en train de « porter » le bureau (Pantheon Shell) sous <a href="http://www.freebsd.org/">FreeBSD</a>, et bien cette après je me suis attaqué à un des <em><a href="https://launchpad.net/switchboard-plug-about">plugins</a></em> du gestionnaire de paramètres (en fixant au passage quelques <em>bugs</em> au niveau de la prise en charge des traductions).</p>
<p><a href="http://avignu.tuxfamily.org/news-custom/public/screenshots/Switchboard-freebsd.png" title="Switchboard About plug"><img src="http://avignu.tuxfamily.org/news-custom/public/screenshots/.Switchboard-freebsd_m.png" alt="Switchboard About plug" style="display:block; margin:0 auto;" title="Switchboard About plug" /></a></p>
<p>La capture d'écran a été faite sous Xfce (mon bureau) avec les thèmes d'icônes et Gtk, Elementary pour un meilleur rendu.</p>
<p><em>Stay tuned!</em></p>Est-ce volontaire ou non ?urn:md5:63b240789c8009dec1ceea8c2445b9852015-05-14T20:59:00+02:002015-05-16T21:17:39+02:00Olivier DuchateauProgrammationGioGLibGObjectPantheon ShellVala <p>En ce moment, je travaille sur le portage de l'environnement de bureau <a href="https://www.assembla.com/code/pantheon/subversion/nodes">Pantheon</a> <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#wiki-footnote-1" id="rev-wiki-footnote-1">1</a>]</sup> pour <a href="http://www.freebsd.org/">FreeBSD</a>. C'est long, fastidieux, car il faut sans cesse lire le code (voir plusieurs fois) pour vérifier qu'il n'y a pas de « <em>linuxisme</em> », et trouver des parades pour les résoudre (si il y en a).</p>
<p>Récemment je suis tombé sur une portion de code, qui m'a laissé perplexe. Pour simplifier, elle consiste à calculer la taille du disque dur <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#wiki-footnote-2" id="rev-wiki-footnote-2">2</a>]</sup>.</p>
<p>En isolant cette partie (<em>Cf.</em> annexe, fichier <code>hdd.vala</code>), je fus surpris du résultat (au départ j'ai cru, que sous Linux le résultat serait différent, mais en fait non).</p>
<h3>Pour l'éxecuter</h3>
<pre>
valac --pkg=glib-2.0 --pkg=gio-2.0 hdd.vala
./hdd
33.2 GB
</pre>
<p>Le résultat sera sans doute différent chez vous, en fait, le calcul se fait uniquement pour la racine (<code>/</code>). Il crée un <em>File object</em> juste pour <code>/</code>, grâce à la méthode <a href="http://valadoc.org/#!api=gio-2.0/GLib.File.new_for_path">GLib.File.new_for_path</a>.</p>
<p>Mais dans mon cas, mon disque dur est partitionné, je dois pouvoir retrouver la (quasi) totalité du disque, en faisant la somme de toutes mes partitions.</p>
<h3>Mais comment fait-on ?</h3>
<p>Ce bout de code s'inspire en fait, de ce que fait GNOME (via le paquet gnome-control-center). En parcourant le fichier <code>panels/info/cc-info-panel.c</code>, on constate, que c'est la fonction <a href="https://developer.gnome.org/gio/stable/gio-Unix-Mounts.html#g-unix-mount-points-get">g_unix_mount_points_get</a> qui est utilisée <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#wiki-footnote-3" id="rev-wiki-footnote-3">3</a>]</sup>.</p>
<p>Avec le langage Vala, il faut utiliser la classe <a href="http://valadoc.org/#!api=gio-unix-2.0/GLib.UnixMountEntry.@get">UnixMountEntry</a>, et faire une boucle sur l'ensemble des points de montage.</p>
<p>Dans mon exemple (<em>Cf.</em> annexe), je stocke la taille de chacune des partitions dans une liste, et ensuite je fais la somme de toutes les tailles.</p>
<pre>valac --pkg=glib-2.0 --pkg=gio-2.0 --pkg=gio-unix-2.0 hdd-02.vala
./hdd-02
266.5 GB
</pre>
<p>C'est déjà plus cohérent.</p>
<p>Il ne reste plus qu'à envoyer un patch aux développeurs.</p>
<div class="footnotes"><h4>Notes</h4>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#rev-wiki-footnote-1" id="wiki-footnote-1">1</a>] Issue du projet <a href="https://elementary.io/">elementary OS</a>.</p>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#rev-wiki-footnote-2" id="wiki-footnote-2">2</a>] À partir de la ligne <a href="http://bazaar.launchpad.net/~elementary-pantheon/switchboard-plug-about/freya/view/head:/src/Plug.vala">234</a> du fichier <code>src/Plug.vala</code> (<a href="https://launchpad.net/switchboard-plug-about">Switchboard-about-plug</a>).</p>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2015/05/14/Est-ce-volontaire-ou-non#rev-wiki-footnote-3" id="wiki-footnote-3">3</a>] Elle lit le fichier <code>/etc/fstab</code> ou <code>/etc/mtab</code>.</p></div>
Go For It! sous FreeBSDurn:md5:eb2ff2dae7cc5ac126b443815a6229482015-01-21T20:58:00+01:002015-01-21T21:04:38+01:00Olivier DuchateauBSDFreeBSDGtk3portsVala <p>Sur le <a href="http://www.planet-libre.org/">Planet Libre</a> je suis tombé sur un <em><a href="http://www.elementaryos-fr.org/gerer-vos-listes-avec-go/">post</a></em> de la communauté elementary OS fr présentant un nouveau logiciel. Il s'agit d'un utilitaire pour gérer une liste de tâches à faire (<em>to-do list</em>). J'en ai fait un « port » pour l'essayer, et voici le résultat <em>(Cliquez sur l'image pour voir la copie d'écran en taille réelle)</em> :</p>
<p><a href="http://avignu.tuxfamily.org/news-custom/public/go-for-it.png" title="Copie d'écran du logiciel Go For It! sous FreeBSD"><img src="http://avignu.tuxfamily.org/news-custom/public/.go-for-it_m.png" alt="go-for-it.png" style="display:block; margin:0 auto;" title="Copie d'écran du logiciel Go For It! sous FreeBSD" /></a></p>Quel est l'équivalent de prctl () pour les BSD avec le langage Vala ?urn:md5:8f458822421164fb530044d6a216654a2014-05-27T22:46:00+02:002014-05-28T21:28:03+02:00Olivier DuchateauProgrammationBSDCCodeDragonFlyFreeBSDNetBSDOpenBSDVala <p>J'écris ce billet ici, au lieu du wiki, pour qu'il ait plus de visibiliter.</p>
<p>Parfois dans certains projets écris en <a href="https://wiki.gnome.org/Projects/Vala/">Vala</a> on trouve ce bout de code :</p>
<pre>
[...]
[CCode (cheader_filename = "sys/prctl.h", cname = "prctl")]
extern int prctl (int option, string arg2, ulong arg3, ulong arg4, ulong arg5);
[...]
</pre>
<p>On dénomme ce fragement par <em>C code attribut</em> (ou CCode attribut). Il s'agit d'une particularité de ce langage, pour utiliser directement des fonctions « externes ».</p>
<p>Sous Linux la fonction <code>prctl ()</code> permet de nommer un processus (on peut le voir avec <code>top</code>).</p>
<p>Sous les BSD (DragonFly, FreeBSD, NetBSD et OpenBSD) cette fonction n'existe pas. En fait elle s'appelle autrement, <code>setproctitle ()</code>.</p>
<p>Or elle n'est pas présente au même endroit dans chacun des BSD.</p>
<p>Sous DragonFly et FreeBSD, on la retrouve dans <strong>unistd.h</strong>.</p>
<pre>
[...]
[CCode (cheader_filename = "unistd.h", cname = "setproctitle")]
extern static void setproctitle (string fmt, ...);
[...]
</pre>
<p>Sous NetBSD et OpenBSD, on la retrouve dans <strong>stdlib.h</strong>.</p>
<pre>
[...]
[CCode (cheader_filename = "stdlib.h", cname = "setproctitle")]
extern static void setproctitle (string fmt, ...);
[...]
</pre>
<p>Voilà, désormais on peut écrire du code « portable ».</p>Déterminer l'origine d'une IPurn:md5:b7e8279e82b41cc8805ee84c5e9986db2014-05-09T23:37:00+02:002014-05-09T23:12:56+02:00Olivier DuchateauProgrammationGLibGObjectIntrospectionJSONlibsoupVala <p>Je viens de publier sur le <a href="http://avignu.wiki.tuxfamily.org/">wiki</a>, un <em><a href="http://avignu.wiki.tuxfamily.org/doku.php?id=snippet:vala#determiner_l_origine_d_une_ip">snippet</a></em>, afin de déterminer l'origine d'une adresse <acronym title="Internet Protocol">IP</acronym> écrit en <a href="https://wiki.gnome.org/Projects/Vala">Vala</a>.</p>
<p>En testant ce programme avec différentes versions de ce langage, j'ai dû mettre en place des tests, qui sont évalués par le compilateur <code>valac</code>. On parle souvent de préprocesseur dans certains langages.</p>
<p>Si on dispose d'une version de Vala >= 0.22, il faut activer la directive <strong>VALA_0_22</strong>.</p>
<p>Si on dispose d'une version de libsoup >= 2.42, il faut activer la directive <strong>LIBSOUP_2_42</strong>.</p>
<h3>Comment déterminer la version d'une bibliothèque ?</h3>
<p>C'est très simple, on utilise l'exécutable <code>pkg-config</code> <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2014/05/09/D%C3%A9terminer-l-origine-d-une-IP#pnote-95-1" id="rev-pnote-95-1">1</a>]</sup>.</p>
<pre>
pkg-config --modversion libsoup-2.4
2.42.3.1
</pre>
<p>En fait <code>pkg-config</code> interroge les fichiers <code>.pc</code>, qui se trouve dans le dossier <code>pkgconfig/</code>. Pour savoir où il se trouve dans l'arborescence :</p>
<pre>
find /usr -type d -name 'pkgconfig' -print
</pre>
<p>Par exemple, sous <a href="https://fedoraproject.org/">Fedora</a>, on le trouve dans les dossier <code>/usr/share</code> et <code>/usr/lib</code>. Sous <a href="http://www.freebsd.org/">FreeBSD</a>, il est situé dans <code>/usr/local/libdata</code>.</p>
<p>Pour Vala :</p>
<pre>
valac --version
Vala 0.20.1
</pre>
<p>Maintenant nous avons toutes les informations, on peut compiler notre programme.</p>
<h3>Compiler</h3>
<p>Si Vala < 0.22.x</p>
<pre>
valac --target-glib=2.32 --pkg=glib-2.0 --pkg=libsoup-2.4 --pkg=json-glib-1.0 geoip.vala
</pre>
<p>Si Vala >= 0.22.x et libsoup >= 2.42.x</p>
<pre>
valac --define=VALA_0_22 --define=LIBSOUP_2_42 --pkg=glib-2.0 --pkg=libsoup-2.4 --pkg=json-glib-1.0 geoip.vala
</pre>
<p>Sous FreeBSD, on peut changer de compilateur, en utilisant par exemple <a href="http://fr.wikipedia.org/wiki/Clang">clang</a>.</p>
<pre>valac --cc=clang --define=VALA_0_22 --pkg=glib-2.0 --pkg=libsoup-2.4 --pkg=json-glib-1.0 geoip.vala
</pre>
<p>Dans tout les cas, on obtient le même résultat :</p>
<pre>
./geoip
fr
</pre>
<div class="footnotes"><h4 class="footnotes-title">Note</h4>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2014/05/09/D%C3%A9terminer-l-origine-d-une-IP#rev-pnote-95-1" id="pnote-95-1">1</a>] Sous FreeBSD, on utilisera plutôt <code>pkgconfig</code>.</p></div>
Contourner le bug #65002 dans Poppler avec Valaurn:md5:ccb3c8630fa84803416c983d6914c9072013-09-27T12:47:00+02:002013-09-27T12:45:29+02:00Olivier DuchateauProgrammationGtk3PDFpoppler-glibValavapi <p>Récemment, je me suis mis à apprendre le langage <a href="https://wiki.gnome.org/Vala">Vala</a> (je ne connais pas encore toutes les suptilités), et en essayant de comprendre <a href="https://wiki.gnome.org/Vala/PopplerSample?highlight=%28%5CbVala%2FExamples%5Cb%29">un</a> des <a href="https://wiki.gnome.org/Vala/Examples">exemples</a>, la compilation a échoué.</p>
<p>J'ai trouvé, qu'il avait déjà été mentionné <a href="https://bugs.freedesktop.org/show_bug.cgi?id=65002">ici</a>.</p>
<p>En parcourant le fichier <code>poppler-glib.deps</code>, on constate qu'il y a une référence à Gtk+2 (en réalité c'est <a href="https://developer.gnome.org/gdk2/stable/">GDK 2</a>).</p>
<p>Donc si on remplace le nom du <em>package</em> <del><strong>gdk-2.0</strong></del> par <strong>gdk-3.0</strong> tout fonctionne correctement.</p>
<p>Pour éviter de modifier un fichier sur le système, le plus simple consiste à le copier <sup>[<a href="http://avignu.tuxfamily.org/index.php?post/2013/09/27/Contourner-le-bug-65002-dans-Poppler-avec-Vala#pnote-85-1" id="rev-pnote-85-1">1</a>]</sup> (dans le dossier où se trouve notre programme vala).</p>
<pre>
$ cp /usr/share/vala-0.20/vapi/poppler-glib.* .
</pre>
<p>On fait le remplacement, et si l'on a besoin de compiler avec le support de <a href="http://poppler.freedesktop.org/">Poppler</a>, voici les options qu'il faut passer au compilateur.</p>
<pre>
$ valac --vapidir=. --pkg poppler-glib ...
</pre>
<p>Pour conclure, je vous présente un programme,qui va rechercher des informations contenu dans un fichier <acronym title="Portable Document Format">PDF</acronym>.</p>
<p>Pour le compiler.</p>
<pre>
$ valac --vapidir=. --pkg poppler-glib --pkg glib-2.0 --pkg gio-2.0 pdf-info.vala
</pre>
<p>Si tout se passe bien (ne faites pas attention aux <em>warnings</em>), on le lance de cette manière.</p>
<pre>
$ ./pdf-info -h
Usage:
pdf-info [OPTION...]
Help Options:
-h, --help Show help options
Application Options:
-f, --filename Path to PDF file
$
</pre>
<p>Quelques exemples de résultats possibles</p>
<pre>
$ ./pdf-info -f ~/Documents/packaging-tutorial.fr.pdf
title: Tutoriel : la construction de paquets Debian
Nb pages: 78
pdfTeX-1.40.13
$
$ ./pdf-info -f ~/Téléchargements/accuseReception.pdf
No title
Nb pages: 2
Apache FOP Version 1.0
$
$ ./pdf-info -f ~/Téléchargements/BSD_08_2013.pdf
title: BSD Magazine
Nb pages: 48
Adobe PDF Library 9.9
$
</pre>
<div class="footnotes"><h4 class="footnotes-title">Note</h4>
<p>[<a href="http://avignu.tuxfamily.org/index.php?post/2013/09/27/Contourner-le-bug-65002-dans-Poppler-avec-Vala#rev-pnote-85-1" id="pnote-85-1">1</a>] La version de vala peut être différente, esayez <code>find /usr/share/ -maxdepth 1 -type d -name 'vala-*' -print</code></p></div>