Du screencast sous GNU/Linux

Il y a des soirs où l'on se demande si les coups de gueule réguliers de Cyrille Borne ne sont pas aussi injustes que cela.
Prenez le screencasting, cette technique servant à capturer l'écran, le son et la voix dans le but d'en faire une vidéo pour, mettons, un tutoriel sur l'utilisation de la hache dans Minecraft.
Pour élaborer ces vidéos, sous Windows, il existe le vénérable, célèbre et toujours vaillant FRAPS. Sous GNU/Linux, en revanche… Prenez la page consacrée sur la documentation ubuntu.
RecordMyDesktop étant intégré à RecordItNow, j'ai décidé de tester ce dernier en premier lieu. D'autant plus que la page de documentation à son sujet dit de lui qu'il produit des vidéos fluides. Certes, j'ai 4 Go de mémoire pour un i5 (quadricore, 2,3 GHz)… Eh bien la vidéo produite en OGV est défaillante. VLC refuse de la lire, et MPlayer montre une image toutes les 4 secondes. Or, le OGV est la seule possibilité de sortie de ce logiciel, les autres formats s'obtenant en encodant l'OGV originel de manière transparente avec Fmpeg ou Mencoder.
Ni une, ni deux, ni trois d'ailleurs, j'essaye Pongo, qui embarque Istanbul. Cette fois-ci, c'est Mplayer qui refuse de lire la vidéo, VLC la lisant sans trop de problèmes, hormis un fort ralentissement et un son saccadé.
Bien, testons donc Istanbul, vu qu'il possède un option pour les jeux en 3D. Oui, mais il plante lamentablement au moment où il demande où enregistrer.
Rien à dire de Kazam, il ne veut pas s'installer. J'ai passé l'âge de chercher à faire fonctionner des logiciels unstable.
Bon, passons à GTK-RecordMyDesktop, la GUI de RecordMyDesktop. Remarquons déjà la sélection de fenêtre tellement non-ergonomique (sélection sur la prévisualisation, celle-ci étant un rectangle de 100*50 environ) que je m'y suis pris à plusieurs fois pour pouvoir enregistrer une zone. Toujours un ogv en sortie. Mplayer le lit avec une neige informatique affreuse, VLC avec la plus haute perfection, y compris fluide. Bingo ! Hormis la sélection de fenêtre, GTK-RecordMyDesktop fait exactement ce que j'attends d'un logiciel de screencast : qu'il produise out-of-the-box une vidéo fluide. Reste à comprendre pourquoi RecordItNow, embarquant RecordMyDesktop, ne le fait pas ; sans doute le fait que la version du dépôt est obsolète y est-il pour quelque chose…
Alors, ceci est peut-être un billet d'humeur, et sans doute mon installation de Linux Mint joue quelque peu, mais tout de même ! Un logiciel fonctionnel pour cinq essayés !

Remplacement propre des caractères spéciaux en PHP

Une fonction simple mais qui remplace même les pires chaînes de caractères de façon efficace :


function filtre($string) {
	$search = array ('@(é|è|ê|ë|Ê|Ë)@','@(á|ã|à|â|ä|Â|Ä)@i','@(ì|í|i|i|î|ï|Î|Ï)@i','@(ú|û|ù|ü|Û|Ü)@i','@(ò|ó|õ|ô|ö|Ô|Ö)@i','@(ñ|Ñ)@i','@(ý|ÿ|Ý)@i','@(ç)@i','@( )@i','@(^a-zA-Z0-9_)@', '@(\'|\.)@');
	$replace = array ('e','a','i','u','o', 'n', 'y', 'c','-','', '');
	$in = preg_replace($search, $replace, $string);
	$in = preg_replace('/([^.a-z0-9]+)/i', '-', $string);
	return strtolower($string);
}

Picoloblog 1.0.4 beta

La nouvelle version du Picoloblog est arrivée en beta !
Rien de bien nouveau :
  • Correction du bug de pagination
  • Correction du bug de permalien
  • Mise à jour et sauvegarde des données simplifiées
  • Gestion de l'ensemble du code simplifiée
Cette nouvelle gestion me permet d'avoir une base plus solide sur laquelle m'appuyer pour y ajouter des fonctionnalités.
Téléchargeable ici.

Picoloblog 1.0 beta

Picoblog était, selon son développeur, « un outil de blog en PHP5 très simple et léger (20Ko, xhtml et CSS compris) fait pour bloguer des petites entrées rapidement ». Seulement, son développement est stoppé depuis 2007. Alors j'ai décidé de reprendre le développement dans l'optique de créer un « bilboblog-like » sans MySQL.
Le Picoloblog est donc un outil en PHP forkant le picoblog. Il est extrèmement simple d'utilisation et ne nécessite pas de base de données MySQL. Toutes les entrées sont enregistrées dans un fichier PHP.
Fonctionnalités de base :
  • Permaliens
  • Flux RSS
  • Choix de l'ordre des billets
  • Pagination et nombre d'entrées par page configurable
  • Accès administration
  • Syntaxe HTML possible
  • Personalisation CSS
Fonctionnalités ajoutées du Picoloblog :
  • Traduction en français
  • Ajout d'un lien sur le titre
  • Bookmarklet possible pour un accès rapide depuis n'importe quel site
  • Barre d'outils pour l'écriture des billets (désactivable)
  • Intégration de vidéos valide W3C de façon native pour Dailymotion, Youtube, Viméo et Google Vidéo
  • Intégration d'images valide W3C
Tout cela à télécharger ici (licence GNU GPL).
Installation : décompresser l'archive dans un répertoire de votre serveur web supportant PHP5.
Notez que le lien de mise à jour pointe encore vers le site du développeur initial du Picoblog, et qu'il s'agit encore d'une beta tirée de la version 1.0.3 modifiée par mes soins. Je proposerai bientôt une version du Picoloblog plus élaborée, avec peut-être ajout des entrées sur Twitter et StatusNet.
Update (17 mars 2011 08:34) : version 1.0.4 beta.

Chargement dynamique d'un Javascript en fonction de l'existence d'une classe dans le DOM

L'idée est d'utiliser un peu de Javascript pour charger un script seulement et seulement si un élément du DOM possède un class name défini. Je l'utilise sur le portfolio pour charger la librairie jQuery et le script utilisés pour la galerie. Cela permet de gagner en temps d'exécution en ne téléchargeant que les scripts nécessaires à l'exécution de la page.

Nous commençons par créer une fonction qui vérifie que le class name se situe bien dans le DOM. Elle retourne true dans ce cas, false dans l'autre.
Notez que le paramètre tag est optionnel mais permet une plus grande rapidité d'exécution.


function isAnyClassOutThere(class,tag){
   // On transforme le string passé en paramètre en une expression régulière
   //(sans cela, test() ne retournera rien)
   var regExpClass = new RegExp(class);

   // S'il n'y avait pas de tag passé en paramètre, on considère que l'on regarde
   // tous les tags
   var tag = tag || "all";
   var elm = (tag == "all") ? document.all : document.getElementsByTagName(tag);
   
   var result = false;

   // Pour chaque élément que l'on a récupéré dans elm
   for(var i=0; i < elm.length; i++){
      
      // On test la correspondance
      if(regExpClass.test(elm[i].className)){
         result = true;
         
         // On sort de la boucle (pas très joli, mais évite de faire un return 
         // dans une boucle)
         i+=elm.length;
       }
   }

return result;
}

Nous continuons avec une petite fonction fort simple qui ajoute une balise <script> au <head>.


function loadJS(url){
   // On crée un élément script
   var elm=document.createElement("script");

   // On lui attribue une url
   elm.setAttribute("src", url);

   // On renseigne le type
   elm.setAttribute("type", "text/javascript");

   // Enfin, on l'ajoute en temps qu'enfant de l'élément head
   document.getElementsByTagName("head")[0].appendChild(elm);
}

Enfin, on ajoute dans le <head> de la page une condition qui appelle la fonction isAnyClassOutThere(), vérifiant la présence de l'élément avant de lancer le chargement des scripts.


window.onload=function(){
   if(isAnyClassOutThere("galerie", "ul")){
      loadJS("http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js");
      loadJS("./gallery.js");
   }
}

À noter que cette méthode peut aussi être utilisée avec le chargement de feuilles de style CSS, mais dans ce cas le Javascript n'est plus non-intrusif et perd donc beaucoup de son charme.

Installation de Linux Mint sur Acer Aspire 5740G

Préambule

L'Acer Aspire 5740G-434G32MN

Configuration de la machine :

Processeur Intel Core i5 (2,26 GHz)
Mémoire vive 4 Go
Disque dur 320 Go
Carte graphique ATI Mobility Radeon HD 5470 (512 Mo)
Écran 15,6 pouces (1366x768px)
Carte wifi Atheros AR928X
Carte Bluetooth Broadcom
Divers Lecteur/Graveur DVD, Webcam Crystal Eye, batterie 6 cellules, sortie HDMI, micro intégré, lecteur de carte mémoire

Il était livré avec une version OEM de Windows Seven Home Premium que j'ai tout bonnement supprimé sans même y toucher. Aucun tatouage. Dans l'ensemble, belle finition, très silencieux.

Linux Mint

Utilisation de Linux Mint 9 Isadora en version x86_64 pour bénéficier des 4 Go de RAM de la bête.

Installation initiale

LiveUSB

Le boot sur le liveUSB est bon, aucun problème d'affichage détecté, juste une résolution un peu petite pour l'écran, vite corrigée par l'installation du driver propriétaire d'ATI proposé dès le départ. L'installation n'a posé aucun problème particulier.

Système de départ

C'est impressionnant comme le système tourne bien dès l'entrée de jeu. Les 4 threads du processeur sont reconnus nativement, ce n'est pas un scoop. Mais le wifi aussi, sans Ndiswrapper. Aucun souci au niveau du lecteur DVD. Même la webcam fonctionne out-of-the-box. Quant à l'affichage… Compiz Fusion ronronne tout seul. Quelques bémols cependant :

  • le clavier ne permet pas de faire de la typo ;
  • et il reste quatre touches sans importance à configurer ;
  • la carte bluetooth n'est pas reconnue, même après activation par le clavier ;
  • le touchpad, sensé être multitouch, ne l'est pas ;
  • ya encore un logo Windows sur le clavier, et une étiquette sur la carlingue ;)

Réglages généraux

Bluetooth

Après différents essais non-concluants avec acerhk et acer-wmi, aucune solution potable ne m'est apparue. En attendant d'ouvrir le portable pour le vérifier, je pense qu'il n'y a aucune carte bluetooth d'installée sur l'ordinateur. Un lspci semble le confirmer.

Clavier typographique

La plupart des touches fonctionnent correctement, seulement j'ai toujours eu pour habitude d'insérer des points de suspension par la combinaison de touche Shift+AltGr+,. Il suffit d'utiliser l'agencement France Autre au lieu de France pour récupérer ces raccourcis.

Touches programmables

Il y a une touche Backup Manager, fonctionnalité Acer réservée à Windows et donc totalement inutile ici, ainsi qu'une touche programmable. Les combinaisons de touches Fn+F2 et Fn+F3 ne fonctionnent pas. On peut aussi ajouter la touche Bluetooth qui, s'il n'y a pas de carte sous le capot, est sans intérêt.

Pour paramétrer les touches Fn+F2, Fn+F3 et la touche Programmable, il suffit de les mapper dans les raccourcis clavier de l'environnement de travail (sous Gnome, Préférences --> Raccourcis clavier).

Après un essai de paramétrage, notamment avec xev, il semble que les deux dernières touches doivent se configurer avec keytouch-editor puis l'agencement ainsi créé doit être importé dans keytouch. Voici l'agencement :


<keyboard>

  <file-info>

    <syntax-version>1.2</syntax-version>

    <last-change format="%d-%m-%Y">15-08-2010</last-change>

    <author></author>

  </file-info>

  <keyboard-info>

    <keyboard-name>

      <manufacturer>Acer</manufacturer>

      <model>Aspire 5740G</model>

    </keyboard-name>

  </keyboard-info>

  <key-list>

    <key>

      <name>Backup-Manager</name>

      <scancode>226</scancode>

      <keycode>FRONT</keycode>

      <default-action>mintbackup</default-action>

    </key>

    <key>

      <name>Bluetooth</name>

      <scancode>212</scancode>

      <keycode>COFFEE</keycode>

      <default-action>gedit</default-action>

    </key>

  </key-list>

</keyboard>

Une fois keytouch configuré, les touches sont utilisables dans les raccourcis clavier de Gnome. À noter qu'une fois programmée, la touche Bluetooth aura la même fonction que la touche Fn+F3.

Voici enfin l'exemple de mon mappage actuel :

Fn+F2 Ouvrir le Moniteur Système gnome-system-monitor
Programmable Ouvrir le lecteur CD eject
Bluetooth Éteindre l'écran COFFEE
Backup Manager Ouvrir le dossier Home FILE
Touchpad

Le touchpad est sensé être multipoint, c'est indiqué sur un autocollant publicitaire placé sur le pavé lui-même ! Or, après l'ajout de Option "SHMConfig" "true" dans le fichier /usr/lib/X11/xorg.conf.d/10-synaptics.conf tel qu'indiqué ici, puis redémarrage du serveur X, la commande synclient -m 50 me sort 1 finger quel que soit le nombre que j'en pose sur le pavé. Je suppose donc que le driver synaptics ne reconnait pas totalement mon pavé.

Logo Windows

J'ai réalisé deux planches d'autocollants avec les mascottes Gnu et Tux pour faire disparaître les différents logos de la marque à la fenêtre.

En résumé
Bluetooth Non résolu
Touchpad Non résolu
Clavier typographique OK
Touches programmables OK
Logo Windows OK
Total 3/5

Problèmes ponctuels

Bandes floues/baveuses à l'écran

Quelques bandes peuvent apparaître sur l'écran, rendant baveuse la police de caractère. Après quelques essais de réglages des optimisations de la police, la solution m'est venue : la résolution d'écran doit être configurée en 1366x768 (16:9) et non pas (16:10) soit le réglage 1366x768 (préférée) dans l'outil de configuration d'ATI.

Touches multimédia et VLC

VLC ne gère pas les touches multimédia, et les raccourcis globaux de ses préférences ne fonctionnent pas avec les combinaisons à base de Fn. Pour palier à ce problème, il suffit de remplacer les combinaisons de Fn avec Ctrl+Alt.

Touchpad non-reconnu après GDM

Il peut arriver que le touchpad reste bloqué après avoir appuyé sur la touche blocage du clavier, même après redémarrage. Pour résoudre ce problème, il suffit de taper :


gconftool --type bool --set /desktop/gnome/peripherals/touchpad/touchpad_enabled true
	

À propos de ce blog

Certains ont des carnets de notes, les développeurs web ont tendance à avoir des blogs. Ça leur permet de partager leurs découvertes, de garder une trace de leurs hacks beaucoup plus simplement. Voici le mien.

Vous trouverez ici pas mal de trucs de geek, principalement des bouts de code en développement web, mais également quelques scripts bash pour faciliter l'utilisation quotidienne de GNU/Linux (je tourne sous Linux Mint 17.1 actuellement). La catégorie Veille comporte quelques articles d'actualité, mais rien de bien folichon.

Si l'envie vous prend de me contacter, vous trouverez toutes les informations utiles dans le footer (le bas de page, pour les burnes en anglais), ou bien vous pouvez utiliser la page de contact dédiée.

Enfin, si vous trouvez ici des informations utiles, n'hésitez pas à m'offrir un café en cliquant sur le bouton :

Offrir un café  
-----BEGIN GEEK CODE BLOCK-----
  Version: 3.20
  GCS dx s:- a- c+ C++ B+++ 7-- w E- O- L++ M- u++ W+++$ 
  H++++ Z+++ F--- PS+++ PE-- Y+ PGP++ T++ S J+++ t@ X- 
  R+++ m+ !tv b+++@ DI? D++ G e* h+ A- r y++
------END GEEK CODE BLOCK------
					
Haut de page