Coder en C : notes du débutant

Depuis un quelque mois je me suis mis à coder en C. Voici quelques notes et références récoltées lors de ce début de parcours.

Trouver la motivation :

Sans motivation, il est difficile d’apprendre, je mets toujours plus de cœur à l’ouvrage, si j’ai un objectif en ligne de mire. Pour moi, cela a démarré avec les cartes Arduino. Elles permettent de faire beaucoup de chose, mais on peut vite être limité lorsque l’on ai pas à l’aise avec le C. Le C est donc devenu une solution pour mes projets.

Trouver le bon media pour apprendre :

Il existe des dizaines de moyen d’apprendre un langage informatique, mais le plus souvent un seul cours vous convient le mieux. Pour moi ce fut le livre « Apprenez à programmer en C » par Mathieu Nebra aux éditions Openclassrooms. Cerise sur le gâteau le bouquin est disponible en ligne ici : /courses/apprenez-a-programmer-en-c

Personnellement je préfère le papier parce qu’il me permet une meilleure lecture et donc une meilleure mémorisation. Certains aspects du livre sont un peu datés, notamment dans le choix des librairies pour les exercices (SDL au lieu de la SDL2) mais ce n’est pas très grave, il m’a permis de faire rentrer les bonnes informations dans les bonnes cases de mon cerveau.

Un outil pour programmer :

Le livre suggère CODE::BLOCK pour coder et compiler ses programmes. Mais comme il avait tendance à planter sur ma Debian Testing et que je n’ai pas trouvé de mode nuit, j’ai opté pour la combinaison Gnome-builder et GCC.

Gnome-builder est un IDE jeune qui progresse rapidement, mais comme je n’en ai pas testé beaucoup d’autre, mon avis reste partiel.

Compiler :

J’ai choisi GCC, avant de connaître « clang », un compilateur doit avant tout être un bon compagnon pour coder et pas seulement un bon organisateur de 0 et de 1. Il doit vous guider et vous aiguiller, c’est le cas de gcc surtout quand on active les bonnes options de compilation. Il est là pour vous aider, et il faut juste savoir l’écouter et en tenir compte.

Voici un exemple avec une erreur:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[]){
     int i = 0;
     for (i=1; i <= 10; i++){
         printf("%d\n",);}
     printf("Je sais compter juqu'a %d\n",i-1);
}

Lorsque je le compile :

gcc test.c -o test

j’obtiens :

test.c: In function ‘main’:
test.c:7:23: error: expected expression before ‘)’ token
printf("%d\n",);
         ^

gcc me fournit une indication claire sur le fait qu’il manque un argument à la ligne 10 pour renseigner %d : printf(« %d\n », i );

(A noter que GCC 6 et le futur GCC7 détaille encore plus. )
Personnellement, je force aussi le standard et j’ajoute les options -Wall -Wextra:

gcc -std=c11 -Wall -Wextra test.c -o test

Cela permet d’avoir des recommandations en plus qui demandent un peu plus de temps au début, mais après on est gagnant, notamment lors du débogage ou des évolutions du programme.

Pour les logiciels avec plusieurs fichiers C je vous conseille aussi d’utiliser l’outil MAKE pour faciliter la compilation et le déploiement. Voir le tutoriel de Emmanuel Delahaye ici .

Les commentaires :

Je vous conseille de lire les bonnes pratique de codage C du même auteur: ici

Notamment le passage sur les commentaires :

Comment bien commenter :

Le moins possible !
Le principe est de ne commenter que ce qui apporte un supplément d’information. Il est d’usage d’utiliser en priorité l’auto-documentation, c’est à dire un choix judicieux des identificateurs qui fait que le code se lit ‘comme un livre’…

Changement multiple dans le code :

Il arrive souvent de se tromper quand l’on code. Surtout au début, on imagine une fonction, on la colle un peu partout, mais il lui manque un argument, il faut changer son nom ou simplement la placer à un endroit plus judicieux.

Trouver :

Pour trouver un élément dans plusieurs fichiers j’utilise grep :

grep -R -n -i "monmotif" *.c

-R fait une recherche dans tous les dossiers, -n affiche le numéro de la ligne, -i permet de chercher un motif sans tenir compte de la casse contrairement à -e et *.c précise le type de fichier

grep -R -n -e "PREF_FILE" *
inc/const.h:25:#define PREF_FILE "preferences.ini"
src/settings.c:36: prefFile = fopen(PREF_FILE, "r");
src/settings.c:53: fprintf(stderr, "Error opening %s: %s\n", PREF_FILE, strerror(errno));
src/settings.c:65: prefFile = fopen(PREF_FILE, "r");

Remplacer :

C’est plus dangereux mais cela permet de changer rapidement le nom d’une variable ou d’une fonction dont le nom ne paraît plus très judicieux.

sed -i 's/ancienNom/nouveauNom/g' main.c

On peut faire un test avant de lancer le changement pour être sûr de son coup :

grep -n - e "ancienNom" main.c | sed -i 's/ancienNom/nouveauNom/g'

Perso, je le fais que sur un fichier à la fois, je préfère assurer l’opération avant de le regretter. A noter qu’un fonction de rechercher/remplacer va arriver bientôt dans Gnome Builder : ici .

Trouver l’information :

La plupart des fonctions possèdent une entrée dans le man. Elle indique comment l’utiliser et où la trouver :

man SDL_BlitSurface

La commande affiche notamment dans quel header on peut la trouver et quel argument elle attend.

SYNOPSIS
#include "SDL.h"

int SDL_BlitSurface(SDL_Surface *src, SDL_Rect *srcrect, SDL_Surface *dst, SDL_Rect *dstrect);

On peut utiliser l’application apt-file pour Debian et ses dérivés pour trouver la lib nécessaire:

libsdl1.2-dev: /usr/include/SDL/SDL.h

libsdl2-dev: /usr/include/SDL2/SDL.h

Dans mon cas je choisirais d’installer la libsdl2-dev pour pouvoir travailler avec SDL2 et j’indique #include <SDL2/SDL.h> dans mes fichiers pour préciser où la trouver.

Le man n’est pas tout et parfois pas toujours explicite, pensez à fouiller le web, il y a toujours quelqu’un qui a écrit la réponse quelque part.

Sauvegarder et partager son code :

Tout projet où l’on passe du temps mérite une sauvegarde régulière. Personnellement j’ai choisi de passer par la plate-forme github, mais il existe plein d’autre moyen. Github demande de se familiariser avec git, mais on trouve beaucoup d’aide sur Internet pour arriver à ses fins.

  • https://git-scm.com/book/fr/v2
  • https://www.grafikart.fr/formations/git/

Conclusions :

Coder en C est faisable même pour un non informaticien, il faut prendre le temps de se documenter, la solution se trouve toujours entre votre chaise et votre clavier. Et si une question n’a pas de réponse, il faut juste reformuler la question.

À noter que la compréhension de l’anglais est indispensable, mais c’est comme coder, avec un peu de temps, de la motivation et un bon manuel, on apprend vite 🙂

Liens :

Arduino, Gedit et Gnome-Builder

Arduino fournit une IDE nommé simplement « Arduino IDE », disponible dans les dépôts Debian :

apt install arduino

L’application permet de coder, compiler et téléverser le code sur les micro-contrôleurs facilement. Mais depuis un certain temps, Arduino IDE est délaissé au profit de Arduino Studio , son futur remplaçant qui n’est pas encore prêt.

En attendant, si l’on souhaite pallier les petits défauts d’Arduino IDE, il faut passer par un éditeur de texte extérieur. En effet, le logiciel ne propose pas de numérotation des lignes, alors que lorsqu’une erreur se glisse, le compilateur indique bien un numéro de ligne ( bug ). Le logiciel ne propose pas de mode nuit, pour limiter la fatigue des yeux. Et le fait devoir relancer l’application et donc l’éditeur à chaque branchement, débranchement de la carte est aussi un peu ennuyeux.

Gnome-Builder et Gedit comme éditeurs extérieurs :

Afin de laisser le choix, le logiciel Arduino permet de choisir un éditeur extérieur. Il faut pour cela aller dans Fichier > Préférences et cocher « Utiliser un éditeur externe ». Une fois cela fait la zone d’édition se grise, et l’application rechargera la dernière version du code, que vous aurez rédiger avec un autre éditeur, à chaque nouvelle compilation.

Arduino demande juste que le fichier .ino soit placé dans un dossier du même nom (~/projet01/projet01.ino).

Personnellement comme j’utilise Gnome, j’ai choisi Builder pour servir d’éditeur. Le logiciel est apparu avec Gnome 3.16, et j’utilise la 3.18. il est donc plutôt récent, mais il progresse rapidement. Il va au-delà des possibilités de Gedit, même si celui-ci peut très bien faire l’affaire.

Gnome-builder et Gedit versus .ino et .pde

Gnome-builder et Gedit reconnaissent les fichiers .ino et .pde comme du code C et applique la coloration syntaxique qui va avec. Mais le code Arduino, reprends aussi des éléments du langage C++ et ajoute des fonctions de base spécifique notamment pour la communication sur le port série (Serial.print).

Afin d’avoir quelque chose de plus parlant, j’ai créé un fichier .lang spécifique. Le fichier pointe sur le c.lang et cpp.lang et ajoute les mots clés issus du monde Arduino. Vous pouvez le trouver ici : /kaochen/GtkSourceView-Arduino

Les explications d’installation sont fournies dans le README.

Le fichier reprend les éléments de référence : /en/Reference/HomePage mais pas ceux des librairies externes. Je n’ai pas souhaité trop encombrer le fichier .lang. De plus ce fichier a une influence sur l’auto-complétion, je préfère voir à l’usage.

Conclusion :

J’ai placé le fichier sur Github afin de le partager un maximun, d’avoir des retours d’expérience et de le faire évoluer en conséquence, donc n’hésitez pas si vous avez des remarques. En espérant que cela puisse servir à quelqu’un d’autre.

Arduino : logiciel et contrôle de la carte :

Je me suis lancé à la découverte du monde Arduino. Afin de démarrer sur de bonne base, je me suis commandé un Arduino Starter Kit en Français. En plus de contenir, une carte Arduino Uno, un jeu de composant de base, il comprend aussi un bouquin d’exercice très bien écrit et très pédagogique. Cela permet de découvrir en douceur la fabrication d’un circuit et la programmation d’un micro-contrôleur.

Un paquet arduino existe dans Debian et il embarque tout le nécessaire pour programmer et contrôler les différentes cartes.

apt install arduino

CaptureArduino

La carte dispose d’un port USB pour pouvoir interagir avec le micro-contrôleur. Je n’ai pas réussi à faire fonctionner la carte sur un USB 3 mais en le branchant en USB 2, le noyau arrive à voir la carte :

dmesg | tail
[ 280.694367] usb 3-10: new full-speed USB device number 10 using xhci_hcd
[ 280.824363] usb 3-10: New USB device found, idVendor=2a03, idProduct=0043
[ 280.824366] usb 3-10: New USB device strings: Mfr=1, Product=2, SerialNumber=220
[ 280.824367] usb 3-10: Product: Arduino Uno
[ 280.824367] usb 3-10: Manufacturer: Arduino Srl
[ 280.824368] usb 3-10: SerialNumber: 85xx4383xxxxxxxxxx
[ 280.824544] usb 3-10: ep 0x82 - rounding interval to 1024 microframes, ep desc says 2040 microframes
[ 280.824926] cdc_acm 3-10:1.0: ttyACM0: USB ACM device

dmseg permet de voir la mémoire tampon des messages du noyau, tail n’affiche que la fin de la liste en supposant que la carte a été branché au dernier moment.

Ici la carte apparaîtra sous le nom ttyACM0 dans le dossier /dev et si j’en liste le contenu, je vois ma carte qui appartient au groupe dialout .

ls -l /dev/tty*
crw-rw---- 1 root       dialout 166,  0 nov.   6 17:38 /dev/ttyACM0

Je m’ajoute donc au groupe dialout afin de pouvoir utiliser la carte facilement depuis le logiciel arduino sans passer par root ou sudo.

usermod -a -G dialout Nom_Utilisateur

Certaine carte peuvent nécessiter plutôt l’ajout au groupe tty ou uucp .

Une fois l’ajout fait, je me reconnecte à ma session et cette fois-ci je vois bien ma carte depuis le logiciel Arduino directement: CarteSerie

Voilà, la communication peut se faire par port série, dans les deux sens, soit en télé-versant sur la carte le code compilé, soit en écoutant le port et en affichant le résultat :

Arduino Port Serie

Bref tout ça pour dire que ce n’est pas vraiment compliqué et que j’ai été agréablement surpris par la facilité pour construire et programmer son propre circuit.

Adobe Flash à jour sous Debian :

Depuis quelque temps, il est possible de ne plus rester coincé à la version 11.2 du lecteur flash d’Adobe. Le plug-in étant une passoire pour la sécurité, il est intéressant de pouvoir le mettre à jour régulièrement.

logo flash Pour faire simple :

  • Adobe publie une nouvelle version de son lecteur flash.
  • Google reconditionne le plug-in flash dans le format « pepper » pour Chrome.
  • En installant le paquet pepperflashplugin-nonfree on va chercher dans la dernière version de Chrome le plug-in flash sous forme pepper afin de pouvoir l’utiliser dans Chromium.
  • et enfin en installant browser-plugin-freshplayer-pepperflash on permet à Firefox/Iceweasel d’utiliser aussi ce dernier.

On peut vérifier la version de son lecteur flash en allant sur cette page : /software/flash/about/ . Il faudra relancer le navigateur après chaque modification pour constater un changement.

  1. Installation du pepper flash :

    On installe le paquet pepperflashplugin-nonfree disponible dans les dépôts contrib depuis wheezy-backports et supérieurs.

    apt install pepperflashplugin-nonfree

    Cela permet de profiter de flash depuis Chromium. Cette manipulation est nécessaire parce que le code téléchargé n’est pas sous licence-libre, il n’est donc par embarqué dans Chromium par défaut.

    Ensuite on installe le paquet browser-plugin-freshplayer-pepperflash qui permet à Firefox/Iceweasel de l’utiliser :

    apt install browser-plugin-freshplayer-pepperflash

    Ce paquet est nouveau dans Debian, il était nécessaire auparavant de passer par une compilation. Cela facilite donc grandement la tâche.

    Il est disponible dans les dépôts contrib depuis jessie-backports et supérieurs.

  2. Mettre à jour le lecteur flash :

    Le paquet pepperflashplugin-nonfree va chercher la dernière version du lecteur flash lorsqu’il a été installé pour la première fois.

    Une fois installé, il faudra passer par deux lignes de commandes pour vérifier les mises à jours et les installer si nécessaire :

    Donc pour voir si une version plus récente est disponible :

    update-pepperflashplugin-nonfree --status
    Flash Player version installed on this system : 18.0.0.233
    Flash Player version available on upstream site: 19.0.0.207

    puis pour l’installer :

    update-pepperflashplugin-nonfree --install
  3. Conclusion :

    En attendant de voir disparaître flash des différents site Web, cette méthode permet de pallier le manque d’effort d’Adobe pour les plate-formes Linux.

    Liens :

Cosmos Laundromat

Frank Cosmos Landromat Il me semble que l’ annonce n’a pas été beaucoup relayée , mais pour les retardataires sachez que la Blender Foundation a publié son dernier court-métrage : Cosmos Laundromat .

Le projet devait être un long métrage plutôt qu’un court, mais la levé de fond par financement participatif n’a pas atteint le plafond fixé. Le projet a donc été adapté au budget et réduit à une douzaine de minutes de film. Cette séquence correspond finalement aux dix premières minutes du film, avec l’espoir de se transformer en long.

Les fichiers sources sont accessibles aux abonnés du cloud : / . Cet abonnement devient un moyen de plus pour financer la fondation et ses projets.

Après un an de travail, le rendu est impressionnant, je suis fan du poil de mouton sous couché de soleil, et j’ai hâte de voir la suite si elle doit avoir lieu.

À suivre donc…

J’ai aussi noté au moins deux versions de blender qui sont sorties pendant le développement du film et qui profitent déjà du retour d’expérience.

Sauvegarder ses DVD vidéo avec FFmpeg.

À l’heure actuelle, tout s’échange sous forme de fichier, mais entre la période de la VHS et celle du tout fichier, il y a eu la période DVD vidéo. La sauvegarde de votre mariage, de votre anniversaire, de vos pires exploits sportifs, se faisaient sur ce support magique : le DVD vidéo. Celui-ci avait l’avantage de pouvoir être lu dans tous les salons, de se copier et d’être distribué facilement à votre famille, enchantée de compléter leurs propres collections. Le tas de DVD vidéo venait grossir celui de vos VHS de spectacle d’enfance et une fine couche de poussière se déposait chaque année permettant de garder une trace de la chronologie des événements.

Mais de nos jours, notre monde moderne offre la possibilité d’enregistrer nos vies sous formes de fichier, avec tous les types de format de résolutions, et tous les types de compression, de la plus pourrie à la plus regardable.

Nous sommes dans l’aire du fichier pour le pire ou pour le meilleur. Voici donc comment faire transiter vos vielles histoires du support DVD vidéo au monde du fichier.

  1. Choisir les éléments à sauvegarder :

    Première étape, lister le contenu utile du DVD :

    Pour cela il suffit de scruter le contenu du dossier VIDEO_TS et de trouver les fichiers .VOB qui vous intéresse.

    cd '/media/kao/MONDVD/VIDEO_TS'
    ls -lh
    -r--r--r-- 1 kao kao  12K déc.   7  2003 VIDEO_TS.BUP
    -r--r--r-- 1 kao kao  12K déc.   7  2003 VIDEO_TS.IFO
    -r--r--r-- 1 kao kao  25M déc.   7  2003 VIDEO_TS.VOB
    -r--r--r-- 1 kao kao  32K déc.   7  2003 VTS_01_0.BUP
    -r--r--r-- 1 kao kao  32K déc.   7  2003 VTS_01_0.IFO
    -r--r--r-- 1 kao kao 1,0G déc.   7  2003 VTS_01_1.VOB
    -r--r--r-- 1 kao kao 1,0G déc.   7  2003 VTS_01_2.VOB
    -r--r--r-- 1 kao kao 675M déc.   7  2003 VTS_01_3.VOB

    À la taille des fichiers, on voit assez facilement ceux qui contiennent les essences vidéos. Le fichier VIDEO_TS.VOB correspond souvent à la boucle vidéo du menu du DVD.

    Pour en être sûr, on peut faire un test de lecture rapide avec ffplay :

    ffplay VTS_01_1.VOB
  2. Encoder

    Une fois la liste des fichiers utiles établit, on va utiliser ffmpeg en mixant plusieurs options :

    • concat pour concaténer les fichiers qui nous intéressent.
    • -map 0:v -map 0:a pour être certain d’affecter la vidéo au premier flux et le son au deuxième. Certains lecteurs n’aiment pas que l’on commence par du son.
    • et -vf yadif pour dés-entrelacer la vidéo. (À part si vous avez toujours un tube cathodique).

    Ensuite on peut enchaîner avec la compression de son choix :

    • h264 + aac :

      ffmpeg -i concat:VTS_01_1.VOB\|VTS_01_2.VOB\|VTS_01_3.VOB -map 0:v -map 0:a -c:v libx264 -crf 18 -maxrate 4000k -vf yadif -c:a libfdk_aac -b:a 320k /home/kao/Vidéos/MonDVD.mkv

      On peut voir que la conversion se fait dans le bon ordre :

      Stream mapping:
      Stream #0:1 -> #0:0 (mpeg2video (native) -> h264 (libx264))
      Stream #0:2 -> #0:1 (pcm_dvd (native) -> aac (libfdk_aac))
    • h265 + aac

      On peut adopter le h265 pour diviser le poids par deux, mais au risque de rencontrer des problèmes de compatibilité avec certains lecteurs vidéo :

      ffmpeg -i concat:VTS_01_1.VOB\|VTS_01_2.VOB\|VTS_01_3.VOB -map 0:v -map 0:a -c:v libx265 -crf 18 -maxrate 4000k -vf yadif -c:a libfdk_aac -b:a 320k /home/kao/Vidéos/MonDVD-h265.mkv
    • VP9 + OPUS

      On peut aussi jouer les puristes et passer par du format entièrement libre :

      ffmpeg -i concat:VTS_01_1.VOB\|VTS_01_2.VOB\|VTS_01_3.VOB -map 0:v -map 0:a -c:v libvpx-vp9 -threads 8 -crf 14 -vb 6M -vf yadif -acodec libopus -ab 256k  /home/kao/Vidéos/MonDVD-VP9.mkv

      Les réglages pour le vp9 méritent d’être affiné, j’ai rencontré quelques problèmes lors de relecture, notamment pour le calage à un endroit précis sur la timeline. Le format est encore jeune, on pourra aussi ajouter l’option -speed 4 pour accélérer l’encodage ou passer par du vp8, moins performant sur le papier, mais plus mature dans la pratique pour le moment.

  • Conclusion :

    Ce n’est pas si compliqué, mais le plus important est de ne pas dégrader la qualité, quitte à avoir des fichiers un peu lourd. Les multiples transformations et transcodages altèrent à chaque fois un peu plus l’image. Il est important d’être vigilant à chaque passe si l’on ne veut pas le regretter plus tard.

APT : Début de simplification

Grande parmi les anciens, l’application APT commence à mixer les possibilités d’ apt-get et d’ apt-cache sous la même commande apt . L’évolution est déjà présente dans Debian Jessie et permet de retrouver sous la même bannière des fonctions disponibles dans les autres commandes d’APT. Le but étant d’avoir une syntaxe plus simple et une meilleure lisibilité des résultats, notamment avec de la couleur.

Donc :

apt install blender

au lieu de :

apt-get install blender

ou encore

apt show blender

au lieu de :

apt-cache show blender

La commande apt simplifie aussi le listing de paquet avec :

apt list
apt list --installed
apt list --upgradable

pour ces commandes il fallait souvent passer par dkpg et la bonne option : dpkg-query -l pour obtenir le même résultat.

Donc si on s’en réfère au man d’apt 1.0 :

apt (Advanced Package Tool) est un outil en ligne de commande pour
gérer les paquets. Il fournit une interface en ligne de commande au
système de gestion de paquets. Voir également apt-get(8) et apt-
cache(8) pour davantage d'options en ligne de commande.

list
La commande list est utilisée pour afficher une liste de paquets.
Il gère les motifs du shell pour chercher les noms de paquets,
ainsi que les options suivantes : --installed, --upgradable,
--all-versions.

search
La commande search recherche le(s) terme(s) donnée(s) et affiche
les paquets correspondants.

show
La commande show affiche les informations sur le(s) paquet(s)
donné(s).

install
La commande install est suivie du nom de un ou plusieurs paquets
dont l'installation ou la mise à jour est souhaitée.

On peut choisir d'installer une version particulière d'un paquet en
faisant suivre son nom par un signe égal et par la version. Cette
version sera recherchée et l'installation sera demandée. On peut
aussi choisir une distribution particulière en faisant suivre le
nom du paquet par une barre oblique et par le nom de la
distribution ou de l'archive (stable, testing, unstable).

remove
La commande remove est identique à la commande install, les paquets
étant alors supprimés et non installés. Veuillez noter que la
suppression d'un paquet en laisse les fichiers de configuration sur
le système. Quand un signe plus est accolé (sans espace
intermédiaire) au nom du paquet, le paquet est installé au lieu
d'être supprimé.

edit-sources
La commande edit-sources permet de modifier le fichier sources.list
et fournit des vérifications de sécurité de base.

update
La commande update permet de resynchroniser un fichier d'index
répertoriant les paquets disponibles et sa source.

upgrade
La commande upgrade permet d'installer les versions les plus
récentes de tous les paquets présents sur le système en utilisant
les sources énumérées dans /etc/apt/sources.list. De nouveaux
paquets seront installés, mais les paquets installés ne seront
jamais supprimés.

full-upgrade
La commande full-upgrade remplit la même fonction que upgrade mais
peut aussi supprimer des paquets installés si cela est nécessaire
pour résoudre un conflit entre des paquets.

Voilà pour le moment, mais les versions suivantes, notamment en vue pour Debian Stretch, proposeront des possibilités supplémentaires, comme l’ auto-remove et l’ auto-clean . ( Annonce APT 1.1 )

Même si cette nouvelle syntaxe prendra un peu de temps à rentrer dans les mœurs, il est intéressant d’y jeter un coup d’œil, notamment pour apt list –installed qui facilite bien les choses.

De plus apt à l’amabilité de prévenir de sa jeunesse :

WARNING: apt does not have a stable CLI interface yet. Use with caution in scripts.

(Attention : apt n’a pas encore une interface CLI stable. A utiliser avec précaution dans les scripts.)

Cette mention est une précaution et devrait disparaître, à ne pas en douter, dans les prochaines versions.

Affaire à suivre donc…

Compiler SimpleScreenRecorder

SimpleScreenRecorder (SSR) est un outil qui permet de capturer en vidéo son bureau.
Le logiciel est complet et permet en quelques clics d’enregistrer tout ou partie de son écran avec l’entrée sonore de son choix.

Logo SSR
SSR est plutôt récent, et il n’est pas encore disponible dans les dépôts Debian, voici comment le compiler et l’installer facilement :

  1. Installation des dépendances :

    dpkg --add-architecture i386
    apt update
    apt install build-essential pkg-config qt4-qmake libqt4-dev libavformat-dev  libavcodec-dev libavutil-dev libswscale-dev libasound2-dev libpulse-dev libjack-jackd2-dev libgl1-mesa-dev libglu1-mesa-dev libx11-dev libxfixes-dev libxext-dev libxi-dev g++-multilib  libx11-6 libxext6 libxfixes3 libxfixes3:i386 libglu1-mesa:i386

    Un peu de liaisons entre les libs :

    cd /usr/lib/i386-linux-gnu
    ln -s libGL.so.1 libGL.so
    ln -s libGLU.so.1 libGLU.so
    ln -s libX11.so.6 libX11.so
    ln -s libXext.so.6 libXext.so
    ln -s libXfixes.so.3 libXfixes.so
    ldconfig
  2. Compilation :

    cd
    mkdir simplescreenrecorder
    cd simplescreenrecorder
    wget /MaartenBaert/ssr/archive/master.tar.gz
    tar -zxvf master.tar.gz
    cd ssr-master
    ./simple-build-and-install
  3. Utilisation :

    Si vous êtes arrivés au bout de la compilation, vous devriez avoir un raccourci dans votre lanceur d’application, ou bien, vous pourrez le lancer  juste avec cette commande :

    simplescreenrecorder

    Pour l’utilisation, il suffit de se laisser porter par les indications, l’outil reste simple mais très complet. Ecran SSR 1 Ecran SSR 2

  4. Le mot de la fin :

    Voilà un logiciel plutôt simple pour enregistrer son bureau, en espérant bientôt le trouver dans les dépôts de Debian directement.

FFmpeg et VP9

Le VP9 commence à pointer son nez comme remplaçant du VP8 et concurrent crédible du H265/HEVC
Le principal intérêt de ces nouveaux codecs et de faire diminuer la bande passante, ou le poids des fichiers pour une qualité équivalente.

Le VP9 commence a bien être géré par un ensemble d’application, et de lecteur même si certaines versions de VLC sont touchés par un bug de lecture.

Donc pour être prêt, ou bien se lancer directement voici quelques commandes pour encoder en VP9 avec ffmpeg rapidement :

  1. Conversion :

    ffmpeg -i fichiersource.mkv -vcodec libvpx-vp9 -crf 10 -vb 4M -threads 8 fichierdestination.mkv
    • -crf 10 servant à établir un niveau de qualité entre 0 et 63 (plus petit = meilleure qualité)
    • -vb 4M servant à donner un objectif de débit, ici 4Mb/s
    • -threads 8 force le nombre de coeur à 8, l’autodétection ne fonctionnant pas encore.

    A défaut de vlc, on peut faire des relectures avec ffmpeg directement :

    ffplay fichierdestination.mkv
  2. Enregistrement du bureau :

    Pour des captures d’écrans en vp9 directement on ajoutera le paramètre « -speed » afin de privilégier la vitesse d’encodage plutôt que la qualité (4 étant plus rapide que 1).

    ffmpeg -f x11grab -r 25 -s 1920x1080 -i :0.0 -vcodec libvpx-vp9 -crf 4 -vb 2M -speed 4 -threads 8 output-vp9.mkv


    FFmpeg n’est pas obligatoire le plus simple pour faire des captures d’écrans, notamment si l’on veut qu’une seule fenêtre et/ou du son en même temps. Il faudra peut-être passer par :

  3. Inclusion dans une page web :

    Grâce au html 5 il est maintenant assez facile d’inclure dans une page web une vidéo en vp9, le mieux étant d’utiliser le container webm pour faire cela :

    <video width="400" height="222" controls="controls"><source src="/output-vp9.webm" type="video/webm" />
    

    Avec toujours un léger doute pour le support de ce format par Internet Explorer, Microsoft préférant mettre en avant ses formats. ( En même temps c’est leur problème pas le notre 🙂 )

  4. Conclusion :

    Voilà, donc une introduction à ce nouveau codec libre déjà prometteur. Pour en savoir plus :

Finaliser l’installation de Jessie

Suite à mon billet précédent , Debian est maintenant déployée sur ma machine, mais à mon goût il reste incomplet, voici donc, quelques trucs à faire après une installation toute fraîche :

  1. Ajouter les dépôts contrib et non-free à son sources.list.

    Le sources.list référence l’ensemble des dépôts sur lesquels on veut pourvoir aller chercher des paquets. Par défaut, le sources.list de Debian ne présente que les dossiers des dépôts contenant des paquets libres. Les paquets propriétaires, dont les codes sources ne sont pas fournis, se trouvent dans non-free, contrib hébergeant des paquets libres mais qui peuvent avoir besoin de paquet situé dans non-free pour fonctionner. Personnellement j’ai 3 paquets non-free et 6 paquets contribs d’installés pour 3000 paquets entièrement libres.

    On édite le fichier sources.list avec l’application de son choix.

    gedit /etc/apt/sources.list
    

    puis on rajoute la mention contrib et non-free aux lignes :

    deb http://http.debian.net/debian jessie main contrib non-free
    deb-src http://http.debian.net/debian jessie main contrib non-free
    
    deb http://http.debian.net/debian jessie-updates main contrib non-free
    deb-src http://http.debian.net/debian jessie-updates main contrib non-free
    
    deb http://security.debian.org/ jessie/updates main contrib non-free
    deb-src http://security.debian.org/ jessie/updates main contrib non-free

    Et enfin, on met à jour la liste des paquets disponibles avec la commande :

    apt update

    lien : /fr/SourcesList

  2. Mettre à jour le microde de son CPU :

    Une fois que l’on a activé les dépôts non-free, on peut mettre à jour le microde/firmware de votre processeur.
    On vérifie la version :

     cat /proc/cpuinfo | grep -i microcode

    Puis pour des processeurs AMD :

    apt install amd64-microcode

    Ou pour des processeurs Intel :

    apt install intel-microcode

    Le changement sera visible au prochain démarrage.

    Lien : /fr/Microcode

  3. Activation des pilotes graphiques libres :

    Les pilotes libres de cartes graphiques fonctionnent souvent très bien, il n’est pas nécessaire de se jeter sur les pilotes propriétaires pour que cela fonctionne correctement. Les pilotes propriétaires peuvent proposer plus de fonctionnalités notamment 3D mais apportent souvent plus d’instabilités et de bugs pas toujours facile à détecter. Croyez-en mon expérience, fuyez les pilotes propriétaires, pour avoir plus de tranquillité.

    Première étape, connaître sa carte :

    lspci -v | grep VGA

    Qui ici m’indique la présence d’une carte graphique Intel :

    00:02.0 VGA compatible controller: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller

    Afin de savoir quel pilotes j’utilise, je regarde le résultat de la commande glxinfo :

    glxinfo | grep -i opengl

    notamment les premières lignes :

    OpenGL vendor string: Intel Open Source Technology Center OpenGL renderer string: Mesa DRI Intel(R) Haswell Desktop OpenGL core profile version string: 3.3 (Core Profile) Mesa 10.3.2 OpenGL core profile shading language version string: 3.30

    Ici, je peux voir que j’utilise le pilote Mesa (libre) sur une carte Intel et que ma machine peut gérer de l’OpenGL 3,3.
    Si la mention llvmpipe est présente, c’est que l’OS utilise le CPU et non le GPU pour calculer l’affichage. Cela peut être normal pour une machine virtuelle, mais pour une machine physique disposant d’une carte radeon, il faudra ajouter le paquet firmware-linux-nonfree afin que la carte soit bien prise en compte.

  4. Installer le plug-in flash :

    Le plug-in flash n’est pas un cadeau, notamment en termes de sécurité, il est conseillé de le fuir si possible mais si vous n’avez pas le choix :

    apt-get install flashplugin-nonfree 

    ou alors pour avoir une version plus récente : /fr/Freshplayerplugin

  5. Monter automatiquement les partitions EXT 4 à chaque démarrage :

    Créer un point de montage:

    mkdir /media/Documents

    Lui donner les droits du user courant.

     chown user:user /media/Documents/

    Trouver l’UUID de la partition que l’on souhaite monter

    ls -l /dev/disk/by-uuid

    On édite le fichier fstab

    gedit /etc/fstab

    Et on y ajoute une ligne en combinant UUID et point de montage

    UUID=df566ec1-f2c3-4453-b5de-04d19ca29a2f /media/Documents          ext4    defaults        0       2

    Une fois enregistré, on monte la partition sans même redémarrer.

    mount -a
  6. Activer le verrouillage numérique au démarrage :

    apt install numlockx

    Et voilà, c’est un bon début, ensuite on hésite pas à consulter la documentation et les forums pour en savoir plus: