samedi 18 juin 2016

CyanogenMod pour une tablette Google Nexus 7 Wifi 2012

Cela fait longtemps que j'utilise une tablette Nexus 7 version 2012 de chez Google. Je trouve que ce format reste assez pratique à transporter tout en offrant un écran assez confortable.
J'avais bien remarqué qu'elle était devenue un peu moins réactive au fil des évolutions d'Android mais j'en ai toujours été très content.

Cependant après une ultime mise à jour d'Android elle est devenue inutilisable : Extrême lenteur et surtout des plantages inopinés et très fréquents. Elle s'est mise à s'éteindre brusquement aussi bien lorsque je m'en servais que lorsqu'elle était en veille. J'ai cherché un peu et j'ai découvert que je n'étais pas le seul à rencontrer ce problème.

J'ai un peu tout essayé : Vidage des différents caches, désinstallation de certaines applications, limitation du nombre de tâches en arrière plan, réinstallation complète, etc.
Rien à faire, au bout de quelques minutes ou de quelques heures, le problème revenait.

Un peu en désespoir de cause, je l'ai déverrouillée et j'ai installé la dernière version stable disponible de CyanogenMod (12-1) avec Android 5.1.1.
C'était la première fois que je faisais ça mais tout est très bien expliqué ici et l'opération s'est déroulée sans problème.
Aussitôt ma tablette a retrouvé sa réactivité d'origine et n'a plus connu aucune panne.

J'ai attendu un peu avant de crier victoire mais cela fait maintenant deux mois que je n'ai plus aucun problème. Si toutefois ceux ci devaient réapparaître, je pense que je réinstallerai CyanogenMod avec Android 4.4 qui était la version installée d'origine.

lundi 6 juin 2016

Compiler Php pour mettre à jour une vieille distribution

Un des intérêts des logiciels Open Source c'est que l'on dispose des sources et que l'on peut donc les compiler.

Pour mes développements Php, j'utilise encore beaucoup une ancienne machine sous Debian/Lenny.
La dernière version de Php disponible dans les paquets Debian pour Lenny est la 5.2.
Il y a presque deux ans, j'expliquais comment j'avais pu installer la version 5.3 en utilisant les paquets fournis par dotdeb.

Il y a quelques mois, j'ai dû mettre à jour une nouvelle fois ce vieux serveur pour installer Php 5.5.
J'ai cherché un bon moment mais je n'ai pas trouvé de paquets disponibles pour Debian/Lenny. J'ai donc téléchargé les sources de la version 5.5.32 sur php.net et je les ai compilées.
Je n'ai rencontré aucun problème problème notable, j'ai juste dû recommencer deux ou trois fois pour installer des bibliothèques nécessaires au support de nouvelles options que je voulais installer alors que je ne les utilisais pas auparavant et depuis tout fonctionne très bien.

vendredi 6 mai 2016

Firefox 46, texte invisible dans la barre d'adresses

Je travaille le plus souvent sur une machine Ubuntu 12.10. Firefox est mon navigateur par défaut et jusqu'à la semaine dernière j'utilisais sans aucun problème la version 45.0.2 du navigateur avec l'option de mise à jour automatique activée.

Lorsque la version 46 de Firefox s'est installée, j'ai remarqué que le texte de la barre d'adresses était invisible, comme si on utilisait une police blanche sur un fond blanc.
Après quelques recherches dans le support de Mozilla, j'ai essayé de désactiver l'accélération matérielle de Firefox et aussi de passer à false la valeur de gfx.xrender.enabled (via about:config).
Ces essais n'ont rien changé, le problème était toujours là. Comme je n'avais pas vraiment le temps de chercher à en savoir plus, je suis revenu à ma dernière version stable : 45.0.2 et j'ai désactivé les mises à jour automatiques.

Hier soir, mon navigateur m'a signalé sans l'installer que la nouvelle version 46.0.1 était disponible.
J'ai effectué la mise à jour en pensant que le problème avait pu être corrigé mais non, toujours pas de texte dans la barre d'adresses.
En cherchant un peu, j'ai remarqué que le problème disparaissait lorsque j'abandonnais le thème par défaut de Firefox au profit de celui appelé Douce lumière. J'avais presque décidé de me mettre à utiliser ce nouveau thème lorsque je me suis rendu compte que si le texte de la barre d'adresses était bien visible, celui des fenêtres d'authentification http et celui de certains champs de formulaires étaient eux invisibles.
Je n'ai pas cherché à comprendre si ces problèmes que je venais de remarquer étaient liés au nouveau thème ou à la version de Firefox et je suis revenu une nouvelle fois à la version 45.0.2.

Note : A mon avis, la méthode la plus simple pour revenir à une ancienne version de Firefox est de sélectionner celle que vous souhaitez et de la télécharger à partir de http://ftp.mozilla.org/pub/firefox/

vendredi 11 mars 2016

Php, passthru une autre fonction pour exécuter des programmes externes

La méthode la plus connue lorsqu'il s'agit d'exécuter un programme externe en php est sans doute la fonction exec().
Passthru permet quelque chose de très similaire tout en envoyant directement au navigateur les sorties du programme externe exécuté.

Cela peut être très pratique et permet d'éviter des manipulations de fichiers temporaires sur le serveur, lorsque l'utilisateur doit télécharger du contenu généré de façon dynamique.
Par exemple, je m'en sers souvent pour le téléchargement de sauvegardes de bases MySQL.
Avec passthru, quelques lignes comme celles ci dessous suffisent.

<?php
header('Content-Type: application/octet-stream');
header('Content-disposition: attachment; filename=sauvegarde.sql');
passthru('mysqldump -host MonServeur -u Utilisateur -pMotDePasse MaBaseDeDonnees');
?>

dimanche 6 mars 2016

Html2pdf, n'oubliez pas d'utiliser composer pour installer les versions récentes

Dans un ancien article, j'indiquais que html2pdf est une très bonne solution, facile à mettre en oeuvre, pour générer des documents PDF en Php.

Il y a quelques jours, je travaillais sur une vieille application et j'en ai profité pour mettre à jour html2pdf.

Premier essai, vite fait mal fait, j'ai simplement téléchargé la dernière version et remplacé mon dossier html2pdf par celui que je venais de télécharger.
Résultat : un message d'erreur me prévient qu'il y a un problème de dépendance car tcpdf n'est pas installé.

Du coup, je creuse un peu dans ce que j'ai téléchargé, arborescence des dossiers, code source, etc et comme je ne voyais pas où installer et configurer tcpdf, j'ai fini par ouvrir le fichier LISEZMOI.md et je me suis rendu compte que les dépendances étaient gérées par composer.

Il suffisait donc :

  • De lancer php composer.phar install pour télécharger et installer correctement les dépendances.
  • De remplacer dans mon application
    require_once("include/html2pdf/html2pdf.class.php")
    par
    require_once("include/html2pdf/vendor/autoload.php")

Remarques :

lundi 25 janvier 2016

Linux, pidof pour vérifier qu'un script n'est pas en train de s'exécuter avant d'en lancer une nouvelle instance

Il arrive parfois que plusieurs instances du même programme ne doivent pas être exécutées simultanément. Par exemple pour assurer l'intégrité des ressources utilisées.
Dans ce cas, il est indispensable au démarrage du programme de vérifier qu'une autre instance n'est pas déjà en cours d'exécution.

Dans le cas de scripts bash très utiles pour automatiser certaines tâches il existe une solution simple et fiable : utiliser la commande pidof.

De façon générale la commande pidof nomprocess sert à retrouver les identifiants de tous les process portant le nom nomprocess.

Par défaut, cette commande ne prend pas en compte les scripts shell.
Pour corriger cela, il faut lui ajouter l'option -x de la façon suivante : pidof -x nomscript

Si dans le script nommé monscript j'utilise pidof -x monscript je vais bien récupérer les identifiants des éventuelles autres instances de monscript mais aussi celui de l'instance courante.
L'option -o identifiant_à_omettre permet de remédier à cela. En effet, cette option indique à pidof de ne pas retourner l'identifiant identifiant_à_omettre.
Sous bash, la variable $$ contient l'identifiant du script courant.
Donc, la commande pidof -x -o $$ monscript renvoie bien les identifiants de toutes les instances de monscript sauf celui de l'instance courante.

Pour être sûr que plusieurs instances de monscript ne soient pas exécutées en même temps, celui ci peut donc être écrit de la façon suivante :

#!/bin/bash
# dum verifie qu'il n'y a pas d'autres instances du script en cours d'execution
dum=$(pidof -x -o $$ monscript)
if test -z "$dum"
then
   actions à effectuer
fi