PHP et les pièges du typage faible

Le PHP est ce qu’on appelle un langage faiblement typé. Il permet au programmeur de ne pas se soucier du type de variables qu’il manipule (contrairement au Java et C# qui sont dits fortement typés). Si cela offre certaines facilités l’approche comporte toutefois certains pièges dont il vaut mieux être conscient.

Lire la suite

Chargement dynamique d’objets avec Unrealscript

Avant de m’intéresser au Java et au PHP, je programmais en Unrealscript. Il s’agit du langage utilisé par les moteurs de jeu Unreal et qui partage quelques similitudes avec d’autres langages tout en conservant quelques particularités. Celui-ci a connu plusieurs incarnations selon l’évolution du moteur.

Ici je vous montre du code en Unrealscript 1.0 retrouvé récemment qui permet à un programmeur de générer un objet à partir d’une classe et de l’attribuer à un joueur.

Lire la suite

Ne rien modifier en cas de DUPLICATE KEY

Dans certains cas de figure on peut souhaiter d’insérer un record et n’effectuer aucun changement si les informations sont déjà présentes.

Un exemple concret est l’entretien d’une table d’adresses email erronnées qui peut être utile lorsqu’un hébergeur a pour politique de bloquer les envois pour éviter le spam.

Lire la suite

Faire co-habiter jQuery et Mootools

Je me suis de nouveau ré-intéressé aux mécanismes qu’offre Ajax et cela m’a mené à tester quelques scripts utilisant des bibliothèques Javascript tel que jQuery et Mootools. Pour un projet j’ai récupéré deux scripts et c’est alors que je me suis rendu compte de la possibilité de conflit. On peut trouver quelques informations sur Google à ce propos.

Lire la suite

L’affichage en UTF8

Ceux qui ont été confrontés aux problèmes d’encodage de caractères peuvent confirmer que cela peut présenter un véritable casse-tête.

Ce fut le cas hier lorsque j’ai découvert qu’une nouvelle version d’un script imposait l’utilisation de l’utf8. Le résultat c’est que le symbole de l’euro s’affichait sous forme d’un diamant noir et les caractères accentués étaient également transposés sous forme d’autres caractères. Il fallait donc trouver une solution.

Lire la suite

Transformer un ResultSet en ArrayList

La possibilité de transformer un ResultSet en ArrayList est particulièrement intéressante, surtout dans le contexte d’un DAO (Data Access Object) lorsqu’on souhaite récupérer une liste d’objets. Voici un exemple code source qui permet d’effectuer cette transformation.

Lire la suite

Assainir une source HTML avec HTMLPurifier

Pour valider du texte riche (balises html) on m’a recommandé la bibliothèque HTMLPurifier. Première visite sur le site officiel et les promesses semblaient au rendez-vous. La nécessité d’avoir PHP5 n’était pas un souci car facilement changeable auprès de l’hébergeur via un .htaccess.

Ce fut alors que j’ai découvert qu’il y a très peu d’exemples pour s’inspirer et la documentation est assez lourde. J’ai donc passé une journée à essayer de comprendre comment cela fonctionnait avant d’aboutir au code suivant:

Lire la suite

Tenir un journal d’erreurs

Voici un stacktrace qui peut paraître inhabituel aux premiers abords:

java.lang.NoClassDefFoundError: test/CSVTest
Caused by: java.lang.ClassNotFoundException: test.CSVTest
  at java.net.URLClassLoader$1.run(Unknown Source)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
  at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
  at java.lang.ClassLoader.loadClass(Unknown Source)
Exception in thread "main"

Une première lecture de ce message mènerais à penser que Java n’arrive pas à trouver la classe qu’on vient de lancer avec un run. Après tout le ClassNotFoundException mentionne bien la classe en question. Mais cela n’a aucun sens.

Un deuxième réflexe serait de lancer « Project>Clean… ». Il est toujours possible que l’IDE a des soucis pour compiler toutes les classes et qu’un fichier class soit absent. Mais ce n’est pas non plus la solution.

Evidemment, les développeurs plus experimentés savent que ce genre d’Exception est le plus souvent lié à un package manquant. Ce qui fut bien le cas ici car j’avais supprimé spring.jar sans reconfigurer les bibliothèques dans les propriétés du projet.

Ce genre d’erreur peut prendre du temps à résoudre si on y est confronté pour la première fois. C’est pourquoi tenir un journal d’erreurs (voir modèle ci dessous) est une bonne idée lorsqu’on démarre avec un nouveau langage ou framework. Celui-ci vous évitera de rester bloqué sur des problèmes déjà rencontrés et de mieux avancer dans la réalisation de vos applications.

Date: 13/03/2011
Message d’erreur: java.lang.NoClassDefFoundError
Cause: JAR supprimé manuellement du dossier lib
Solution: Remettre le jar ou l’enlever du build path

– James Poulson.