Blog de David MASCLET

Aller au contenu | Aller au menu | Aller à la recherche

lundi 18 janvier 2010

Configurer et utiliser Google bot comme outil de tests

Lorsque l'on parle de Google bot, on pense souvent à "référencement", mais il existe une autre utilisation : les tests. Je ne parle pas de tests fonctionnels ou unitaires mais de tests pour améliorer la qualité de votre site, comme les tests de liens morts, de pages indisponibles, d'erreurs HTTP etc.

Il y a quelques semaines, je postais plusieurs billets sur comment gérer un serveur de download :

Mais cette configuration peut poser des problèmes pour les bots des moteurs de recherches. C'est pourquoi je voudrais expliquer comment mieux configurer les serveurs pour faciliter le travail des bots.

Lire la suite...

vendredi 8 janvier 2010

Tester le javascript : JSUnit, JSmock, Jstester (partie 1)

Beaucoup de développeurs Java sont familiers avec Junit, EasyMock,... ces librairies qui permettent de tester du code Java afin de rendre les programmes plus robustes. Javascript dispose également de frameworks équivalents. Avec l'apparition du Web 2.0, le Javascript et l'Ajax sont de plus en plus présents dans nos applications (j'avais d'ailleurs poster un billet sur comment mocker une requête Ajax,il y a quelques mois) et représente une part non négligeable de code.

Si vous utilisez GWT, qui permet d'écrire à partir de code écrit en Java, de générer une application en HTML / javascript, vous n'avez pas de problème pour tester votre code, puisque Junit suffit. En revanche, si vous avez du code javascript à tester, il existe des librairies qui permettent de simplifier les tests. Je vous propose de voir comment tester du Javascript au moyen de ces 3 frameworks :

  • JsUnit : Qui fournit des mécanismes d'assertions et d'exécutions de tests.
  • JsMock : Permet de simuler des comportements pour des objets Javascript,tout comme EasyMock le fait
  • JsTester : Permet d'executer du code Javascript en java grâce à Rhino.

les exemples de code sont disponibles en annexe de ce billet

Lire la suite...

lundi 4 janvier 2010

Google goggle

Il y a de cela quelques temps, Google lançait image labeler afin d'améliorer la recherche d'images Google. Tout laisse à penser que ce service a bien fonctionné, car Google expérimente Google goggle, un service disponible à partir d'android 1.6+, et qui permet de prendre une photo ou une vidéo et Google détectera de quoi il s'agit et lancer une recherche à partir de ce qu'il a détecté. Le geotagging devient quasi obsolète.

Le nom n'est pas choisi au hasard, au départ Google aurait du s'appeler Goggle, en référence au nombre gogol de Edward Kasner, mais une erreur de saisie a fait que Google s'appelle Google et non Goggle. c'est donc un moyen d'utiliser son nom initial.

Lire la suite...

Stratégie d'Apple vs stratégie Google

Après la folie commerciale de fin d'année je voudrais bloguer sur les différentes stratégies des sociétés dites "innovantes". je sais dors et déjà que je vais me faire des ennemis et que cette article ne fera pas l'unanimité, mais peu importe, ce post trouvera aussi des personnes allant dans le même sens que moi :)

C'est demain que sort le téléphone de Google : le Nexus One. Ceux qui me connaissent savent que je suis un fervent défenseur de Google. Ce n'est pas que j'aime tout ce qu'ils font (je n'aime pas chrome, par exemple), mais je trouve que leurs produits tapent souvent juste et fort. Et si certains sont frileux d'utiliser des applications et services d'une firme, il est vrai, un peu "big brother", on saluera tout de même leur stratégie qui leur a permis d'être le moteur de recherche utilisé par 90% des internautes et de sortir des produits innovant comme, Google Maps et Google documents, GWT, etc.

Je m'étonne encore de leur modèle économique basé sur la publicité. Pour mémoire, ce même modèle a causé, entre autre, la chute de la bulle internet. De très grosses sociétés (e.g : AOL) ont revu leur business modèle, en passant la publicité de "source de revenus" à "complément d'activité" ;). La stratégie de Google est de sortir des produits les plus complets possible, en sachant très bien ce qu'il amélioreront à la prochaine version, mais en visant un niveau de base déjà très élevé pour un effet "WHAOOOUU". Je voudrais (entre autre) comparer la différence de stratégie d'Apple et de Google pour leur téléphone pour montrer comment Apple est vraiment une société reine dans le marketing :

Lire la suite...

mercredi 23 décembre 2009

Différence entre un hard link et un lien symbolique

Lorsque j'ai voulu faire un système de sauvegarde pour les données de mon serveur, j'ai voulu créer un dossier par date, mais je me suis vite rendu compte que cela allait prendre beaucoup de place. alors j'ai utilisé un hard link pour faire une sauvegarde incrémentale.

Lire la suite...

mardi 22 décembre 2009

Mais qui a comité ça ?!

Lorsque vous développez, Vous pouvez avoir envie de savoir qui a comité un bout de code, pas forcément parce qu'il vous parait mauvais (soyons constructif !), mais peut être pour comprendre certains choix, parce que vous trouvez le code particulièrement beau, ou simplement par curiosité. La plupart des outils de gestion de versions fournissent des moyens de le faire grâce à la commande blame. Même si la commande peut porter à confusion, ce post, n'est pas à placer dans la rubrique "délation" mais plutôt "travail en équipe" : )

Lire la suite...

lundi 21 décembre 2009

Améliorer les performances de like et recherche partielle de mots dans Postgres

Lorsque j'ai voulu faire un système d'auto-complétion pour un champs de recherche sur une page web, j'ai pensé à utiliser un moteur de recherche fulltext, malheureusement, les recherches fulltext ne se font que sur des mots entiers. j'ai donc pensé à utiliser la fonction like de Postgres. Malheureusement, like n'utilisent les indexes, seulement si '%' est placé en fin de chaine, et cela ne correspondait pas à mon besoin. De plus il fallait absolument que les requêtes soit rapides, pour que l'auto-complétion soit utilisable. Après avoir écumé le web à la recherche d'une solution, et n'ayant rien trouvé de concluant, j'ai décidé de faire un peu de R & D et d'implémenter une solution maison qui utilise les indexes. L'astuce réside dans l'utilisation d'un algorithme Edge n-gram et d'une recherche fulltext qui, elle, utilise les indexes. Voici la solution pour utiliser les indexes dans les différents cas suivants :

  • tous les mots commençant par
  • tous les mots finissant par
  • tous les mots contenant

Lire la suite...

vendredi 18 décembre 2009

Différence entre Bohr bug, Schrödinbug, Heisenbug, Mandelbug

Pendant plusieurs années, j'ai travaillé dans une équipe QA (Quality Assurance), où mon rôle était de trouver les causes et de corriger les bugs que d'autres équipes avaient faits: il y avait les développeurs qui implémentaient les fonctionnalités, les testeurs / bêta-testeurs, et mon équipe qui prenait en charge les bugs un peu retords. J'avoue avoir eu des fois beaucoup de mal à reproduire certains bugs.

J'ai appris par expérience que certains bugs pouvaient apparaitre seulement dans des cas de tests et ne se seraient jamais reproduits dans une utilisation normale, d'autres n'apparaissent plus lorsqu'on tente de les observer. C'est là, la différence entre les Bohr bugs, Schrödinbugs, Heisenbugs, et Mandelbugs. Toutes ses catégories de bugs tirent leurs noms de physiciens. Voici les différences fondamentales :

Lire la suite...

mercredi 16 décembre 2009

Encoding et alphabets internationaux : comprendre et debugger (2e partie)

Après le premier post où j'expliquais ce qu'était l'encoding, je vais, cette fois, aborder comment gérer l'encoding en Java. mon but étant de faire un article qui se veut complet, quitte à être un peu long. Je donnerai, à chaque fois des exemples de code pour illustrer. Sommaire :

  • Comment gérer et débugger les problèmes d'encoding en Java
  • La représentation interne des Strings en Java
  • Encoding du fichier source
  • Manipulation de Strings
  • Ecriture dans un fichier
  • Connaitre et modifier l'encoding de votre JVM
  • Comprendre ce qu'est input method et inputContext
  • Affichage dans un logiciel (navigateur,éditeur,...)
  • Comment gérer l'encoding dans un environnement Web (Apache, Tomcat, ModJK, framework MVC, base de données, navigateurs).

tous les exemples de code sont réunis dans une classe que j'ai appelé 'EncodingProblemsRepairKit', disponible en annexe à la fin du post. Le code n'est pas blindé (pas de tests, pas de vérification des paramètres d'entrée,etc) et n'est donné qu'a titre d'illustration et fournit quelques méthodes pour débugger plus facilement

Lire la suite...

vendredi 11 décembre 2009

Encoding et alphabets internationaux : comprendre et debugger (1ere partie)

Lors de l'affichage de pages avec des mots dans des alphabets différents il peux arriver que des problèmes d'affichages apparaissent avec des � et des é

Dans le cas de Gisgraphy (exemple pour Pékin), j'ai voulu vérifier que tout s'affiche correctement et que ce qui est affiché correspond bien à l'équivalent ASCII.

Je me suis donc rendu sur cette page et j'ai testé 北京, ce qui m'a donne 'bei jing'.ouah ça marche! et mon navigateur affiche le japonais! essayons en arabe avec بكين , cela me donne "bkyn" qui se rapproche de Beijing et Pékin en phonétique, et là aussi ça s'affiche correctement.

Cela m'a donné l'idée d'un post pour démystifier l'encoding par une suite de questions-réponses. (Finalement je le ferai en deux posts car c'est un peu long, et je risque de perdre et décourager pas mal de lecteurs si je n'en fais qu'un). Le premier expliquera ce qu'est l'encoding :

  • Qu'est ce qu'Unicode ?
  • Qu'est-ce que l'encoding, le BOM, le Little et le Big Endian
  • Quel est le meilleur encoding ?
  • Comment fonctionne une police de caractère ?
  • Comment gérer les sens d'écriture différents (par exemple, l'arabe qui s'écrit de droite à gauche)

Le second expliquera comment résoudre les problèmes fréquents avec de cas concrets et des extraits de code :

  • Comment gérer l'encoding dans un environnement web en java (Java, Apache, Tomcat, ModJK, base de données, navigateurs)
  • Comment gérer et débugger des problèmes d'encoding en java

Après ces deux posts vous ne devriez plus jamais voir ça : � sur vos sites, ou si c'est le cas vous saurez comment résoudre le problème :)

Lire la suite...

mardi 8 décembre 2009

10 minutes pour...comprendre OSGI

En regardant les statistiques du blog, j'ai vu que les visiteurs passaient environ 5 minutes sur le blog. Cela m'a donné l'idée de créer une rubrique qui s'appellerait '10 minutes pour...' et dans laquelle je publierai des posts un peu plus long où je traiterai d'un sujet un peu plus en profondeur. Pour inaugurer cette rubrique, je vous propose '1O minutes pour...comprendre OSGI'.

Lire la suite...

lundi 7 décembre 2009

Untar en java

Autant trouver un bout de code pour de-zipper un fichier est assez facile, autant en trouver un pour de-tarrer est déjà un peu plus complexe. Ayant eu à le coder, Je vous propose (ça évitera peut être des galères à certains ;) ) une classe qui permet de le faire. Elle permet de décompresser les fichiers tar, tar.gzip, tar.gz, tar.bz2, et tar.bzip2, le choix du traitement se fait selon l'extension.

Lire la suite...

mardi 24 novembre 2009

Ouvrir l'implémentation d'une méthode plutot que son interface.

Pour ceux qui inlassablement tente d'ouvrir l'implémentation d'une méthode en cliquant sur F3 (open Declaration), puis CTRL+T, et sélectionne l'implémentation, sachez qui existe un plugin implementor. qui permet de le faire plus facilement. Ce plugin est fourni par défaut dans galiléo.

Il ajoute une option "Open Implementation / open Declaration" lorsque vous passez votre souris au dessus de l'appel d'une méthode en maintenant CTRL enfoncé. S'il n'y a qu'une implémentation, il l'ouvre directement , sinon il vous donne le choix.

Pour ceux qui veulent en savoir plus sur les nouvelles fonctionnalités de Galileo, je vous conseille ce lien qui peut vraiment simplifier la vie du développeur.

Liens : HomePage du plugin | Eclipse update site

lundi 23 novembre 2009

Oeuf de pâques (easter egg)

Connaissez vous les œuf de Pâques (ou easter egg en anglais). Les œufs de paques (dixit Wikipedia) sont des fonctions cachées au sein d'un programme accessible à partir d'un mot clé ou d'une combinaison de touches et de clics (ils peuvent aussi désigner des données erronées mis dans des bases de données payantes pour vérifier qu'elle n'est pas utilisée sans autorisation, il suffit alors de démontrer que les données utilisées illégalement contiennent ces œufs de pâques pour mettre à mal l'honnêteté de ceux qui l'utilisent, mais ce n'est pas l'objet de ce post) En voici quelque uns :

Lire la suite...

Retenter l'execution d'une fonction plusieurs fois en Java

Certains d'entre vous connaissent peut être la fonction javascript Try.these de Prototype.

Elle permet d'exécuter plusieurs fonctions et de retourner la valeur de la première fonction qui ne génère pas d'exception. Cela permet d'essayer plusieurs façons de faire, mais aussi de retenter l'exécution d'une fonction, si on lui passe plusieurs fois la même fonction.

Je vous propose un code qui permet de faire l'équivalent en java. Pour cela J'ai utilisé le patron de conception 'template' et les génériques Java 5. J'ai eu besoin de coder cela afin d'être plus tolérant aux erreurs (retenter plusieurs fois une requête HTTP qui pouvait aboutir à un timeout serveur). Je vous conseille de restreindre le catch de la fonction retry() afin de de ne retenter l'exécution, uniquement pour une exception donnée et de propager les autres exceptions le cas échéant.

Lire la suite...

- page 2 de 3 -