Archive for February, 2010

Votre installation PHP ne dispose pas de MySQL. Extension requise pour WordPress

Friday, February 26th, 2010

Un beau jour, ce message d’erreur (en anglais : Your PHP installation appears to be missing the MySQL extension which is required by WordPress) est apparu à la place de deux blogues WordPress que je gère.

Ces blogues sont situés chez mon hébergeur et se trouvent chacun dans leur propre répertoire.

Le support de mon hébergeur m’a suggéré de désactiver les extensions (plugins) et les thèmes. Pour le faire sans passer par l’interface WordPress (qui n’est bien sûr pas disponible lorsque le blogue est inaccessible), il faut se connecter par FTP au serveur de fichiers et renommer les plugins à désactiver, de sorte que WordPress ne les retrouve plus.

Cette solution n’a pas fonctionné.

Par contre, j’ai découvert en me connectant par FTP que deux fichiers trônaient dans le répertoire racine du blogue : php.ini et fastphp.ini. Je n’avais jamais vu ces fichiers. J’ai tenté de les renommer (plutôt que de les effacer) et bingo ! Mon blogue fonctionne à nouveau !

Ouvrir une invite de commande ici

Thursday, February 4th, 2010

Lorsqu’on développe sous Windows, il arrive fréquemment que l’on ait besoin d’une invite de commande dont le chemin soit directement positionné dans un répertoire spécifique.

Le but serait donc d’avoir dans le menu contextuel du répertoire sélectionné une action permettant d’ouvrir une invite de commande positionnée sur ce répertoire.

Windows XP

La façon la plus simple d’y arriver avec Windows XP est de passer par un petit script VBS dont voici le contenu :

Set objShell = CreateObject("WScript.Shell")
objShell.RegWrite "HKCR\Folder\Shell\MenuText\Command\", "cmd.exe /k cd " & chr(34) & "%1" & chr(34)
objShell.RegWrite "HKCR\Folder\Shell\MenuText\", "Ouvrir une fenêtre de commandes ici"

Une fois ce script exécuté, un clic droit sur un répertoire dans l’explorateur de fichiers affichera un menu contextuel possédant l’action désirée :

La fenêtre de commandes obtenue est directement positionnée dans le répertoire sélectionné.

Windows 7

Avec Windows 7, c’est beaucoup plus simple ! Mais c’est caché !

Voici le menu contextuel standard d’un répertoire :

Il suffit d’appuyer sur la touche Shift (Maj) au moment d’afficher le menu contextuel pour qu’une version étendue apparaisse :

L’action Ouvrir une fenêtre de commandes ici peut être sélectionnée.

Il semblerait que cette technique fonctionne également avec Windows Vista, mais ne possédant pas cet OS, je ne peux pas le confirmer.

Programme en mode console avec Qt Creator

Thursday, February 4th, 2010

Lorsqu’on souhaite développer une application en mode console avec Qt Creator (1.3.1) qui soit multi-plateforme Mac et Windows, il y a quelques problèmes à régler.

Comme exemple, nous allons essayer de faire fonctionner correctement le petit programme suivant :

#include <iostream>

int main() {
   std::cout << "Quel est ton nom : ";
   std::string Nom;
   std::cin >> Nom;
   std::cout << "Salut " << Nom << " !\n";
   return 0;
}

Mac OS X

ur Mac OS X, avec la configuration par défaut, la sortie standard est dirigée sur l’onglet Sortie de l'application de Qt Creator. Cela pose néanmoins un problème de taille : cet onglet ne gère pas l’entrée standard. Notre programme simple ne fonctionnera donc pas.

Pour résoudre ce problème, il faut forcer l’exécution de notre programme dans un terminal.

Pour ce faire, il faut modifier les paramètres d’exécution du projet. Afficher les détails et cocher la case Exécuter dans un terminal.

Malheureusement, cette façon de faire amène encore un petit problème à résoudre.
Sur Mac OS X, c’est un terminal XTerm qui sera utilisé, mais dans la configuration standard de Qt Creator, l’application XTerm n’est pas trouvable. Il faut en fait préciser le chemin complet de l’application.

Ouvrir les préférences de Qt Creator et aller dans la configuration Environnement : Général.

Dans la zone Terminal, indiquer le chemin complet :

/usr/x11/bin/xterm -e

Windows

Sur Windows, la configuration par défaut démarre une fenêtre de commande, dans laquelle s’affiche la sortie standard. L’entrée standard est correctement gérée.

Par contre, il subsiste deux problèmes :

  • Lorsque le programme est terminé, la fenêtre de commande disparaît immédiatement, ce qui empêche de voir la sortie finale du programme.
  • Si l’on souhaite déboguer notre programme, la fenêtre de commande n’est plus ouverte et la sortie standard s’affiche dans l’onglet Sortie de l'application de Qt Creator. L’entrée standard n’est pas gérée.

Pour résoudre ces problèmes, il faut forcer l’exécution de notre programme dans un terminal.

Pour ce faire, il faut modifier les paramètres d’exécution du projet. Afficher les détails et cocher la case Exécuter dans un terminal.

Les deux

Notre programme fonctionne maintenant correctement, aussi bien en ce qui concerne la sortie standard que l’entrée standard. Le déboguage se fait également au travers du terminal.

Reste le problème des accents concernant la phrase automatique Appuyez sur ENTRÉE pour fermer cette fenêtre.

Pour se débarrasser de ces caractères cabalistiques, la solution la plus simple est de démarrer Qt Creator en anglais.

Qt Creator en anglais

Wednesday, February 3rd, 2010

Mise à jour avril 2010 :

La technology preview de Qt Creator 2.0 montre qu’il est maintenant possible de changer la langue de l’interface depuis les préférences de l’application, en allant dans la section Environnement : Général des options.

Fin de la mise à jour.

Depuis la version 1.3.0, Qt Creator a été localisé dans plusieurs langues, en particulier le français. Dès lors, Qt Creator utilise automatiquement la langue du système d’exploitation.

Malheureusement, il n’y a aucun réglages au sein de l’application permettant de choisir une autre langue. Il peut en effet être très pratique dans certaines situations de démarrer Qt Creator 1.3.1 en anglais.

La solution diffère selon le système d’exploitation.

Mac OS X

La seule solution que j’ai trouvé avec Mac OS X pour forcer Qt Creator d’utiliser l’anglais est de l’empêcher de trouver le fichier de traductions du français. Pour ce faire, il faut sélectionner l’application Qt Creator, afficher le menu contextuel et choisir Afficher le contenu du paquet.

Lorsque le contenu est affiché, aller dans le répertoire Contents/Resources/translations/. Localiser le fichier qtcreator_fr.qm et le renommer (par exemple en _qtcreator_fr.qm).

Lors du prochain démarrage de Qt Creator, celui-ci ne trouvera pas le fichier de traductions pour le français (la langue du système d’exploitation) et se rabattra sur l’anglais.

Windows

Sous Windows, le plus simple est de définir la variable d’environnement LANG, que Qt Creator utilise en priorité (avant la langue du système d’exploitation) pour déterminer la langue de démarrage.

Pour ajouter une variable d’environnement, afficher les propriétés du Poste de travail.

Dans l’onglet Avancé, cliquer sur Variables d'environnement.

La liste des variables d’environnement apparaît. Ajouter une nouvelle variable pour l’utilisateur en cours en cliquant sur Nouveau.

Le nom de la variable d’environnement doit être LANG. Comme valeur pour cette variable, mettre en, ce qui signifie que que dorénavant, Qt Creator démarrera en anglais.

Trucs et astuces C++

Tuesday, February 2nd, 2010

Initialiser un tableau

Lorsqu’on déclare un tableau d’entiers, il arrive souvent que l’on préférerait que ses éléments soient initialisés à zéro.

Plutôt que de le faire manuellement dans une boucle :

int Tableau[30];

for (int i = 0; i < sizeof(Tableau)/sizeof(int); ++i)
   Tableau[i] = 0;

il est possible de l’initialiser directement ainsi :

int Tableau[30] = {};

Il est possible de n’initialiser que quelques premiers éléments avec des valeurs spécifiques. Les autres éléments seront automatiquement initialisés à zéro.

int Tableau[30] = { 543, 245, 738 };

endl et \n

En mode console, lorsqu’on souhaite faire un retour de chariot, quelle différence entre endl et \n ?

Tout d’abord, il faut préciser que \n est portable. Même si le retour de chariot est codé différemment selon les systèmes d’exploitation, l’implémentation des classes de flux (iostream) prend en charge ces différences.

Pour revenir à la différence, \n provoque un retour de chariot alors que endl provoque un retour de chariot et vide le flux de sortie (flush) ce qui garanti par exemple pour la sortie standard que le flux est immédiatement affiché.

Dans la plupart des cas, cette différence n’aura aucun impact sur le résultat obtenu sur la sortie standard. Elle peut avoir un léger impact sur la performance étant donné que endl fait plus de choses que \n.

Par contre, cette différence peut être importante si l’on travaille sur d’autres genres de flux. Par exemple si l’on envoie des informations sur un fichier de log et que l’on veut être sûr que ce log reflète l’état le plus récent du programme, alors l’usage de endl plutôt que \n permet de garantir que ce qui est envoyé dans le fichier de log l’est immédiatement.

Opérateur ternaire

L’opérateur ternaire est généralement utilisé sous cette forme :

string Texte = (Saisie == NombreMysterieux) ? "trouvé" : "raté";

Mais l’opérateur ternaire peut également être utilisé comme lvalue (valeur assignable) :

(A > B ? A : B) = 0;

ce qui est équivalent au code ci-dessous :

if (A > B)
   A = 0;
else
   B = 0;

Cette fonctionnalité peut néanmoins aboutir à un code illisible et dangereux !