mardi 22 décembre 2009
Par MD3804-GANDI le mardi 22 décembre 2009, 10:12
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...
aucun rétrolien
lundi 21 décembre 2009
Par MD3804-GANDI le lundi 21 décembre 2009, 10:23 - PostGIS / PostgresQL
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...
aucun rétrolien
vendredi 18 décembre 2009
Par MD3804-GANDI le vendredi 18 décembre 2009, 12:33 - Tests / XUnit
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...
aucun rétrolien
mercredi 16 décembre 2009
Par MD3804-GANDI le mercredi 16 décembre 2009, 17:42 - Encoding
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...
aucun rétrolien une annexe
vendredi 11 décembre 2009
Par MD3804-GANDI le vendredi 11 décembre 2009, 12:22 - Encoding
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...
aucun rétrolien
mardi 8 décembre 2009
Par MD3804-GANDI le mardi 8 décembre 2009, 09:45 - 10 minutes pour...
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...
aucun rétrolien
lundi 7 décembre 2009
Par MD3804-GANDI le lundi 7 décembre 2009, 13:44 - Java / J2EE
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...
aucun rétrolien
mardi 24 novembre 2009
Par MD3804-GANDI le mardi 24 novembre 2009, 17:03 - Divers
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
aucun rétrolien
lundi 23 novembre 2009
Par MD3804-GANDI le lundi 23 novembre 2009, 17:48 - humour
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...
aucun rétrolien
Par MD3804-GANDI le lundi 23 novembre 2009, 11:19 - Java / J2EE
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...
aucun rétrolien
vendredi 20 novembre 2009
Par MD3804-GANDI le vendredi 20 novembre 2009, 11:02 - Gisgraphy
Il y a deux ans, j'envisageais de créer un projet de géolocalisation
opensource sous licence LGPL : Gisgraphy . Mon but était de créer un framework permettant
d'utiliser les données géographiques gratuites sur le Net. Actuellement il gère
les données de Geonames et
Openstreetmap, ce qui
représente 34 millions d'entrées.
Petit bilan de deux ans de développement :
Les 3 webservices disponibles
Liste des fonctionnalités
- Serveur de
téléchargement gratuit avec 28 millions de noms de rue et 8 millions de
lieux en CSV.
- Serveur
fournissant les services gratuitement (pour utilisation non commerciale).
Lire la suite...
aucun rétrolien
jeudi 19 novembre 2009
Par MD3804-GANDI le jeudi 19 novembre 2009, 09:50 - Java / J2EE
Lors du précédent
post je vous parlais des Theories. Aujourd'hui je vous propose d'aller un
peu plus loin dans la définition du jeu de données en faisant de la
combinatoire et en définissant un jeu de données dynamiquement.
Lire la suite...
aucun rétrolien
mardi 17 novembre 2009
Par MD3804-GANDI le mardi 17 novembre 2009, 23:32 - Java / J2EE
Il arrive parfois que l'on ait à faire des tests avec des jeux de données
combinatoires. Par exemple, on a un jeu de données A : disons {A1,A2}, et
un jeu de données B : {B1,B2}, et on voudrait faire un test où toutes les
combinaisons A * B soit testées :
- testMethode(A1,B1)
- testMethode(A1,B2)
- testMethode(A2,B1)
- testMethode(A2,B2)
Il est possible dans ce cas d'utiliser les theories
. Il s'agit d'une
technique, pour l'instant expérimentale (cf : nom du package), disponible
à partir de JUnit 4.4.
Lire la suite...
aucun rétrolien
vendredi 13 novembre 2009
Par MD3804-GANDI le vendredi 13 novembre 2009, 15:23 - Apache
Lorsque j'avais des spams sur mon forum, je prenais l'adresse IP de l'utilisateur et
j'empêchais l'accès au serveur avec iptables, mais j'ai vite vu la limitation
de ce système correctif manuel. Il me fallait un système préventif et
automatisé :
mod_spamhaus est un module Apache qui utilise DNSBL pour empêcher
les spammeurs et les personnes passant par des proxys un peu douteux, d'accéder
à votre site. Il permet de limiter les attaques des bots et de le protéger des
utilisateurs ayant une adresse IP connue pour être une IP 'douteuse'
Lire la suite...
aucun rétrolien
jeudi 12 novembre 2009
Par MD3804-GANDI le jeudi 12 novembre 2009, 14:48 - Apache
Lorsque j'ai voulu offrir la possibilité de pouvoir télécharger les données de OpenstreetMap en
CSV, je me suis dit que je devais préserver les ressources de mon serveur (car
les webservices et le serveur de téléchargement allait être sur la même
machine). Je me suis alors demandé comment limiter la bande passante pour un
host en particulier. Il existe un module apache pour faire cela : mod_bandwith.
Lire la suite...
aucun rétrolien
Par MD3804-GANDI le jeudi 12 novembre 2009, 10:19 - humour
Aujourd'hui j'avais envie de bloguer sur un autre thème que l'informatique,
alors pourquoi pas un peu d'humour.
Moi ! ça me fait rire :)
aucun rétrolien
mardi 10 novembre 2009
Par MD3804-GANDI le mardi 10 novembre 2009, 10:20 - Divers
En regardant les extraits de code de mon blog, je me suis dit que cela
serait plus fun, si j'y mettait de la coloration syntaxique.
Ne voulant pas réinventer la roue, je me suis mis à la recherche d'une solution
"out of the box", et je suis tombé sur syntaxhighlighter qui me semble vraiment
utile au vue du nombre de langages supportés : Bash, Cpp, CSharp, Css, Delphi,
Diff, Groovy, Java, JScript, Php, Plain, Python, Ruby, Perl, Scala, Sql, Vb,
Xml, AS3, JavaFX, PowerShell, Erlang, ColdFusion.
Lire la suite...
aucun rétrolien
jeudi 5 novembre 2009
Par MD3804-GANDI le jeudi 5 novembre 2009, 15:06 - IDE
Certains d'entre vous ont peut être constaté que l'on ne pouvait plus
cliquer sur les boutons d'Eclipse après la Mise à jour en 9.10 (karmic Koala).
Ceci est dû à la nouvelle version de GTK 2.18 qui introduit une nouvelle façon
d'interagir avec GdkWindows.
Pour corriger le problème, ajouter cette ligne dans votre
.bash_profile :
export GDK_NATIVE_WINDOWS=true
et exécutez la commande
. ~/.bash_profile
Et lancez Eclipse à partir de ce shell
Cela devrait résoudre le problème
aucun rétrolien
Par MD3804-GANDI le jeudi 5 novembre 2009, 11:40 - Apache
Il m'est arrivé de devoir limiter l'accès aux webservices de Gisgraphy en
raison d'utilisateurs peu scrupuleux qui récupérent les données directement via
le webservice. J'ai utilisé pour cela un module Apache appelé mod_evasive.
Lire la suite...
aucun rétrolien
mercredi 4 novembre 2009
Par MD3804-GANDI le mercredi 4 novembre 2009, 09:54 - Linux
Il existe un utilitaire très pratique permettant de limiter son débit. cela
peut s'avérer pratique pour faire des simulations ou des tests selon le débit.
l'utilitaire s'appelle 'tc' aka traffic control.
Lire la suite...
aucun rétrolien