Tag Archives: astuce

WordPress NextGEN : navigation avec les flèches de direction

Sous WordPress, avec une galerie NextGEN qui utilise l’effet thickbox, pour faire défiler les images à l’aide des touches directionnelles du clavier (les flèches gauche et droite il faut procéder comme suit :

Dans le fichier “wp-includes/js/thickbox/thickbox.js“, trouver ce bloc de code :

if(keycode == 27){ // close
 tb_remove();
} else if(keycode == 190){ // display previous image
 if(!(TB_NextHTML == "")){
  document.onkeydown = "";
  goNext();
 }
} else if(keycode == 188){ // display next image
 if(!(TB_PrevHTML == "")){
  document.onkeydown = "";
  goPrev();
 }
}

Et remplacer le keycode :

  • 190 par 39
  • 188 par 37

Attention : comme ce fichier fait partie de la distribution WordPress, à chaque mise-à-jour il faut refaire la modification.

Configuration MySQL – quelques astuces

Paramètre Max Packet Size pour les grosses requêtes

Il faut augmenter la valeur du paramètre max_allowed_packet dans le fichier de configuration de MySQL pour permettre de gérer les grosses requêtes : principalement pour les tables qui contiennent des BLOB et CLOB qui peuvent être volumineux.

Méthodes

Éditer le fichier my.ini

Ajouter ce qui suit dans la section [mysqld] du fichier de configuration

#Max packetlength to send/receive from to server.
max_allowed_packet=8M

Utiliser l’interface graphique MySQL Administrator

Modifier le paramètre dans l’interface graphique comme dans la capture d’écran suivant :

MySQL : modification du paramètre "max_packet_size"
MySQL : modification du paramètre "max_packet_size"

Importer une base de Windows à Linux

La gestion des noms de tables est configurée différemment par défaut sous Windows ou Linux :

  • Sous Windows il ne tient pas compte de la casse,
  • Sous Linux il en tient compte.

Le passage du contenu d’une base de données d’un OS à un autre peut donc être problématique, principalement dans le sens Windows -> Linux. En effet, faire le dump depuis Windows va minimiser tous les noms de tables. Et si jamais le code source de votre application référence les tables avec des majuscules, cela peut posser des soucis. Surtout qu’il n’est pas toujours possible de re-écrire le code pour n’utiliser que des noms de tables en minuscules. Voici les solutions que j’utilise dans ces cas-là.

Choix 1 : Modifier la configuration du MySQL sous Linux

Pour importer une base MySQL depuis une machine Windows vers une machine Linux, il est possible de configurer le serveur MySQL sous Linux avec le paramètre lower_case_table_names à 1. Pour cela, éditer le fichier my.ini et placer dans la section [mysqld] la ligne suivante :

set-variable = lower_case_table_names=1

Voir la documentation MySQL pour plus de détails sur ce sujet.

Choix 2 : Transformer le fichier de dump

Si il n’est pas possible de modifier la configuration du serveur MySQL sous linux, il reste la solution – beaucoup plus sport – qui consiste à modifier le fichier de dump. En fait, il va falloir diviser le dump en deux fichiers :

Le premier fichier qui ne contient que la structure de la base :  dump.struct.sql Il peut être créé avec la commande suivante :

 mysqldump -hHOSTNAME -uUSER -p -d DBNAME > dump.struct.sql

Le deuxième fichier qui ne contient que les données de la base : dump.data.sql Il peut être créé avec la commande suivante (–hex-blob pour exporter les binaires en hexadécimal et –extended-insert=false pour avoir une commande INSERT par enregistrement) :

 mysqldump -hHOSTNAME -uUSER -p --hex-blob --extended-insert=false -t DBNAME > dump.data.sql

Il va ensuite falloir transformer ces fichiers pour que les noms des tables soient en majuscules :

Pour le fichier dump.struct.sql

C’est l’opération la plus simple. Utilisez la commande ‘tr‘ comme suit :

$ cat dump.struct.sql | tr '[:lower:]' '[:upper:]' > dump.struct.upper.sql

Et importer le fichier dump.struct.upper.sql résultant dans la base.

Pour le fichier dump.data.sql

Là c’est un peu plus compliqué, car on ne veut pas tout mettre en majuscules, car ce fichier contient aussi les données des différentes tables de notre base.

Note : il est à rapeller que le fichier dump.data.sql ne contient qu’une ligne de données – ie un INSERT – par enregistrement de chaque table.

Utiliser la commande ‘awk‘ pour modifier les commandes ‘INSERT INTO‘ et ‘LOCK TABLE‘ comme suit – chaque commande awk doit être sur une seule ligne :

$ awk '$1 == "LOCK" || $1 == "INSERT" { $3 = toupper($3) ; print $0 };
 $1 != "INSERT" && $1 != "LOCK" {print $0}; ' dump.data.sql > dump.data.upper.sql

En fonction de la structure du fichier d’import des données, il se peut que le nom des tables soit utilisé dans d’autres commandes, comme par exemple des commandes pour ignorer les intégrités référentielles : ALTER TABLE `une_table` DISABLE KEYS. Il faut dans ce cas se baser sur les scripts ci-dessus pour créer un nouveau qui corrigera ce problème.

Il n’y a plus qu’à importer le fichier dump.data.upper.sql dans la base MySQL.

OpenOffice.org Writer – Numérotation des titres

J’ai souvent des problèmes avec la numérotation des titres sous OpenOffice.org Writer. J’utilise logiquement les styles pour définir mes titres de paragraphes mais je ne trouvais pas pratique d’affecter la numérotation correspondante. Je passais par le menu “Format > Bullets and numbering…” (Dans la version française c’est “Format > Puces et numérotation…“).

En fait ce n’est pas ce menu qu’il faut utiliser, mais “Tools > Outline numbering…” (Dans la version française c’est “Outils > Numérotation des chapitres…“). Choisir le niveau (Level) de 1 à 10 (1-10) et affecter la numérotation désirée.

Numérotation des titres avec OpenOffice.org Writer

Simple, mais pas dans le bon menu je trouve. Il suffit de le savoir.

Tunneling SSH – transfert de ports

Le but de ce document est d’expliquer les tunnels SSH. C’est à dire comment utiliser SSH pour faire passer différents protocoles, ce qui permet de sécuriser la communication (une sorte de VPN software). Si vous souhaitez plus de détails sur les différentes possibilités, cet article de Buddhika Chamith vous éclairera : SSH Tunneling Explained.

Quand on se connecte à Internet depuis un lieu public et si ce lieu de connexion ne permet pas d’accéder à des ports particuliers d’un serveur (règles de firewall restrictives), il est possible d’utiliser un serveur intermédiaire sur lequel on a un compte utilisateur et qui fait tourner un serveur ssh. C’est ce serveur qui se connectera au serveur désiré. Cette solution va aussi permettre de chiffrer la communication entre le point d’accès et le serveur intermédiaire.

Pour réaliser cela, on va utiliser un tunnel SSH. Il faut donc que l’on ai accès au port 22 du serveur intermédiaire, mais dans 90% des cas les firewalls laissent sortir le trafic sur ce port.

Le principe

Il faut créer une connexion ssh entre le pc client et le serveur intermédiaire. Cette connexion (le tunnel donc) connectera un port du pc client au serveur intermédiaire. Celui-ci va lire tout ce qu’il reçoit depuis cette connexion et re-expédier le tout vers le serveur destinataire.

attention : sous Linux, on ne peut pas connecter le tunnel sur un port local privilégié si on n’est pas root. Il faut donc prendre un port au dessus de 2000.

Exemple

Je veux lire mes mails par un accés imap. Mon serveur imap est imap.mail.com et je l’interroge sur le port 143 (le porte par défaut IMAP).  Mais le firewall ne laisse pas sortir les connexions vers le port 143.

Je vais donc établir un tunnel SSH entre le pc que j’utilise et un serveur sur lequel j’ai un accés ssh. Ce serveur s’appelle monserveurssh.com et j’ai un compte utilisateur de login moncompte. Je vais connecter le tunnel sur le port 2000 de mon pc client, comme suit :

ssh -2NfC -L2000:imap.mail.com:143 moncompte@monserveurssh.com

Cette commande ne me connecte pas sur le serveur intermédiaire, mais me rend la main de suite grâce a l’option -f combinée avec l’option -N. L’option -2 c’est pour demander à ssh d’utiliser le protocole v2 et l’option -C c’est pour demander de compresser le tunnel.

Il ne me reste plus qu’à brancher mon client mail sur le port 2000 de localhost, et je pourrai lire mes mails, comme si j’étais connecté directement au serveur de mails.

Un détail sécurité

Quand je créé des comptes utilisateurs sur mon serveur juste pour permettre du port forwarding je ne donne pas le droit de connexion au serveur. Pour cela, dans le fichier /etc/passwd je remplace le shell du compte par /sbin/nologin. Ainsi la personne qui a ce compte peut créer des tunnels SSH mais elle ne peut pas se connecter au serveur.

Sous Windows

En utilisant Cygwin et le client ssh fourni avec, cela fonctionne très bien. Putty permet aussi d’établir des tunnels pour ceux qui sont réfractaires à la ligne de commande.

Quelques liens sur le sujet

Faire un backup avec rsync

On peut utiliser ssh pour faire un backup d’une machine distante (pratique pour conserver une copie d’un site web, en ne téléchargeant que ce qui a changé depuis le dernier backup) avec rsync

rsync -v -u -a --rsh=ssh --stats user@serveur.net:/chemin/dossier/distant/a/sauver /chemin/dossier/local

Commandes diff, patch mode d’emploi

Quelques tips pour bien utiliser la commande patch.

La commande diff

Cette commande permet de trouver les differences entre 2 fichiers. Elle vous retourne la ligne du fichier original et la ligne modifiée. Elle va nous permettre de créer le patch que nous pourrons ensuite appliquer. Il existe plusieurs types de patch. Celui qui est le plus répandu est le patch unifié car il apporte de la souplesse dans son application en permettant une certaine variation du fichier à patcher.

La commande patch

La commande patch va prendre en entré le resultat de la commande diff et va appliquer les changements sur le fichier désigné. Le fait d’avoir dans le patch la version originale et la version modifiée permet d’éviter de patcher un fichier qui n’est pas le bon, ou même de patcher un fichier déjà à jour.

Exemple :

diff -aburN --exclude=CVS* repertoire/reference/ repertoire/modifie/ > patch.diff

Cette commande crée un patch unifié. Interêt des options passées :

  • -a : traiter tout les fichiers comme du texte
  • -b : permet de ne pas tenir compte des différences sur les espaces
  • -u : faire un patch unifié
  • -r : parcourrir les sous répertoires
  • -N : permet de gérer les fichiers nouveaux
  • —exclude=CVS : permet d’exclure des fichiers ou répertoire de l’analyse.

Le patch ainsi fabriqué contient des éléments qui vont permettre à la commande patch de retrouver les fichiers à modifier à travers l’arborescense, puis de trouver les bonnes lignes, même si celles-ci ont légèrement été déplacées.

patch -p 1 < patch.diff

L’option -p N permet d’adapter l’aborescence d’origine du patch à l’arborescence que l’on est en train de traiter.

Applications Java serveur nécessitant un serveur X

Comment se passer d’un serveur X pour une application java qui en veut un alors qu’elle tourne sur un serveur qui n’est pas sensé en avoir : vous me suivez ?

Des applications java peuvent avoir besoin d’un serveur X pour faire du rendu de dessin. C’est le cas par exemple en cas d’utilisation de la bibliothèque de rendu de graphiques JChart ou avec JasperReport. On aura par exemple une stacktrace du genre :

java.lang.InternalError

Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable.sun.awt.X11GraphicsEnvironment::initDisplay (native)

sun.awt.X11GraphicsEnvironment::<clinit> ( X11GraphicsEnvironment.java: 134 )

java.lang.Class::forName0 (native)

java.lang.Class::forName ( Class.java: 141 )

java.awt.GraphicsEnvironment::getLocalGraphicsEnvironment ( GraphicsEnvironment.java: 62 )

net.sf.jasperreports.engine.util.JRGraphEnvInitializer::initializeGraphEnv ( JRGraphEnvInitializer.java: 58 )

...

Cependant, sous les serveurs de production, on lance rarement un serveur X. Il faut donc utiliser soit :
– un serveur virtuel xvfb
– l’option -Djava.awt.headless=true [1] si on utilise Java 1.4 ou supérieur

PS : Cette astuce a été trouvée dans la doc de jCharts

[1] ou dans le code avec System.setProperty(“java.awt.headless”,”true”) ;