DZone RefCardz - aide mémoire Java

20 juin 2009

Vous ai-je déjà parlé de la carte de référence Debian GNU/Linux ? Si ce n’était pas le cas, cet oubli est réparé. :-)

En écoutant l’épisode 5 des Cast Codeurs, j’ai appris qu’il existait à peu près la même chose (essentiellement mais pas que…) pour le monde Java. Ces pense-bêtes porte le doux nom de DZone RefCardz. Ce sont des cartes de référence sur un thème donné de 6 pages environ au format A4. Les sujets semblent issus de livres. A l’heure actuelle, il existe près d’une soixantaine d’aide-mémoire sur des sujets aussi variés que JSF 2.0, Scrum, MySQL, JPA, C#, etc…

Bien entendu, tout ceci est téléchargeable gratuitement au format PDF après s’être inscrit. Je sents qu’il va y avoir des imprimantes qui vont chauffer !;-)

Les cast codeurs - le podcast Java en français

19 juin 2009

Suite à la première réunion du NormandyJUG, j’ai découvert l’existence du podcast Les Cast Codeurs - En français dans le Code. Je ne suis pas un très grand fan des podcasts et pourtant je trouve cette initiative excellente. Pour le moment, je n’ai écouté que le numéro 5 spécial JavaOne. L’ambiance est très bon enfant. :-)

Le podcast se décompose ainsi :

  • Les nouvelles du monde Java
  • Les outils de la semaine
  • Une discussion détaillée sur un sujet peu connu
  • L’interview d’un acteur francophone du monde Java

Vous pouvez retrouver sur leur site tous les liens évoqués dans le podcast. La fréquence des émissions n’a pas l’air d’être fixe (hebdomadaire, bi-hebdomadaire ?). En tout cas, une toute jeune initiative à féliciter !

AjaxLoad - icône animé d’attente

18 juin 2009

A force de mettre de l’Ajax un peu partout, il est nécessaire d’afficher un signal visuel pour indiquer à l’utilisateur que des données sont en cours de chargement ou qu’un traitement est en cours. Ceci se fait avec de simples icônes animés. Le site AjaxLoad propose un générateur gratuit d’icône sur la base d’une quarantaine de modèle et laisse libre choix sur les couleurs !

Rien de bien révolutionnaire mais ça se révèle très pratique. Alors pourquoi s’en priver ! ;-)

NormandyJUG - la première !

17 juin 2009

Il n’y a pas très longtemps, je vous ai annoncé la création du NormandyJUG. Je n’étais pas le seul à l’annoncer. Ça a été dit ici ou bien mais je ne pourrais pas tous les citer… Et bien, ce soir s’est tenue la première réunion.

Je pense que c’est une réussite tant sur la qualité des présentations que sur le nombre de participants ou que sur l’organisation générale. Bon, il y a eu un petit dérapage sur l’horaire de fin mais qui s’en plaindra ? ;-)

Pour rappel, en attendant les présentations, photos et vidéos :

  • Présentation du JUG par Yann Petit et Nicolas Giard
  • Battle GWT vs Wicket par Youen Chéné et Nicolas Giard
  • Intégration continue par Dimitri Baeli et Laurent Deséchalliers

Je reviendrai plus tard sur les présentations mais je ne peux que saluer la bonne ambiance rencontrée. Et je vous invite à rejoindre au plus tôt le NormandyJUG !

Internet Explorer - la fonction window.open() perd le referer

15 juin 2009

Je viens de découvrir que Internet Explorer ne transmet pas le referer lorsqu’une popup est affichée avec la fonction window.open() en Javascript. Bien entendu, votre butineur préféré, Firefox, transmet correctement le referer mais pas Internet Explorer ! :-(

La première idée qui vient à l’esprit est d’utiliser le tag <a />  avec l’attribut target comme ceci :

<a href="monlien"
   target="_blank">Cliquez ici<a>

Cette méthode fonctionne très bien. En revanche, elle ne permet pas de spécifier certaines options propres aux popups qui leurs donnent leur aspect bien particulier. C’est pourquoi, je vous propose une solution qui est un contournement au problème rencontré avec Internet Explorer et qui fonctionne aussi avec Firefox :

<a href="monlien"
   onclick="javascript:window.open('','mapopup','modal=yes,scrollbars=no,menubar=no,toolbar=no');"
   target="mapopup">Cliquez ici<a>

Voilà ! Vous avez un lien qui ouvre une popup correctement. Et ce lien transmet sous Firefox et surtout sous Internet Explorer le referer.

NormandyJUG - un groupe d’utilisateurs Java sur Rouen

3 juin 2009

La Normandie a enfin son groupe d’utilisateur Java ! L’association NormandyJUG vise à regrouper les personnes ayant des affinités avec le langage Java afin d’échanger des avis, expériences, etc…

La première réunion aura lieu le mardi 16 juin à 19H au Pôle Normand (PAT LA Vatine). Au menu, vous aurez droit à un comparatif GWT vs Wicket, puis à une présentation sur le thème de l’intégration continue.

N’hésitez pas à vous inscrire à la première réunion du NormandyJUG !

YSlow - gestion des profils

22 mai 2009

Je vous ai récemment présenté l’outil YSlow qui permet d’optimiser un site web assez simplement. Sur les conseils avisés de Laurent, j’ai découvert qu’il était possible de sélectionner le profil de son site :

  • Classic(V1)
  • YSlow(V2)
  • Small Site or Blog

En choisissant ainsi le profil “Small Site or Blog”, certains critères de notation peuvent changer comme les ETags qu’il n’est plus nécessaire de désactiver pour des sites de moindre importance (en terme d’infrastructure). De plus, le CDN devient hors de propos et il n’est plus nécessaire de modifier la configuration de cette extension Firefox pour obtenir attendu. ;-)

Encore merci à Laurent et bons profilages !

YSlow - comment optimiser son site web en quelques minutes ?

13 mai 2009

Votre site est poussif ? Le temps de chargement ou d’affichage des pages est trop long ? Avant de penser à changer d’hébergement et avant de se plonger dans le code afin d’y trouver des points d’amélioration, il est peut-être important de regarder de plus près comment sont conçues vos pages web.

Yahoo propose une extension Firefox très intéressante, nommée YSlow. Il faut prononcer “why slow” pour “pourquoi ça rame ?”. ;-) Cette extension permet de faire des contrôles sur une page à partir d’une checklist qui se compose de 13 points :

  • Réduire le nombre de requêtes HTTP
  • Utiliser un CDN
  • Ajouter des entêtes HTTP d’expiration
  • Compresser le contenu des données échangées
  • Placer les feuilles de style CSS le plus tôt possible
  • Placer les scripts Javascript le plus tard possible
  • Éviter les expressions CSS
  • Extraire un maximum de CSS et Javascript dans des fichiers à part
  • Réduire le nombre de résolution DNS
  • Réduire la taille du Javascript
  • Eviter les redirections HTTP
  • Supprimer les scripts en double
  • Supprimer les ETags

En respectant ces 13 points, votre site web devrait être plus performant si ce n’était pas le cas auparavant. Le plugin permet de donner une note globale pour une page avec une note pour chaque point. La documentation est très bien faite. Alors plutôt que d’expliquer tous les points en donnant des axes d’amélioration, je vais vous détailler un exemple concret. :-)

Je travaille sur un site pour les fans du jeu de cartes à collectionner Magic: The Gathering. Le design est plus que rudimentaire (avis aux artistes ! :-D), c’est pourquoi je n’en ai pas encore parlé ici. La base de données des cartes est assez conséquente et regorge d’information. Il se peut donc que certaines pages puissent mettre un peu de temps à s’afficher. C’est pourquoi j’ai travaillé sur l’optimisation du site.

Comme vous pouvez le voir, la première note obtenue était un D avec un score de 61 (sur 100).

Résultat YSlow avant optimisation

J’ai donc décidé de commencer par le dernier point en supprimant les ETags. En effet, cette information est très peu et très mal utilisée. Alors, pour réduire le taille des données transportées autant l’enlever. Et cela se fait très facilement (si vous utilisez Apache comme serveur HTTP) en ajoutant la ligne suivante dans votre fichier .htaccess :

FileETag none

Après avoir fait cette modification, la note globale était toujours un D et le score est seulement monté à 63. Mais pour ce point, le F s’est transformé en B. :-)

Ensuite, je me suis attaqué au positionnement des entêtes HTTP d’expiration. Ce paramétrage permet de réduire le nombre de requête HTTP faite par le navigateur en lui indiquant de conserver certaines données plus ou moins longtemps. C’est tout aussi simple à mettre en place que l’astuce précédente puisqu’il faut modifier le même fichier en y ajoutant les lignes suivantes :

ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType text/javascript "access plus 7 days"
ExpiresByType application/x-javascript "access plus 7 days"
ExpiresByType application/javascript "access plus 7 days"
ExpiresByType image/x-icon "access plus 7 days"
ExpiresByType image/vnd.microsoft.icon "access plus 7 days"
ExpiresByType image/png "access plus 30 days"
ExpiresByType image/gif "access plus 30 days"
ExpiresByType image/jpeg "access plus 30 days"
ExpiresByType image/jpg "access plus 30 days"
ExpiresByType application/x-shockwave-flash "access plus 60 days"

Les délais d’expirations dépendent beaucoup de la vie du site. En effet, si des fichiers CSS ou Javascript sont menés à changer régulièrement, il faut réduire ce délai sous peine que les butineurs des visiteurs ne prennent pas en compte la nouvelle version. Cette optimisation a permis d’obtenir un B pour ce point et un C en note globale avec un score de 73. Ça progresse…

Après avoir réglé ces deux points, la compression du contenu m’a parue être une optimisation essentielle et à moins coût. Ceci réduit considérablement la taille des fichiers HTML ou XML et ainsi les pages se téléchargent plus rapidement. Pour activer la compression GZip des données, il faut encore ajouter dans le fichier .htaccess la ligne suivante :

AddOutputFilterByType DEFLATE text/javascript application/javascript text/css application/xhtml+xml text/html text/plain application/json text/xml

Avec la compression GZIP, YSlow attribute la note A pour ce point et la note globale B avec un score qui continue sa progression en arrivant à 82.

En regardant le comportement du butineur, j’ai remarqué que le composant Javascript Script.aculo.us générait un grand nombre de requête HTTP pour télécharger de nombreux fichiers de scripts. De plus, ces fichiers ne sont pas proposés en version compactée. En cherchant un peu, j’ai trouvé un package nommé Protoculous qui est une version compacté de Prototype et Script.aculo.us en un seul fichier ! Voilà une bonne méthode pour réduire le nombre de requête HTTP.

En remplaçant ces composants par Protoculous, le site obtient la note A pour ce point et la note globale passe à A avec un score de 90.

Le site n’est pas “encore” assez conséquent pour utiliser un CDN. Mais juste pour voir la note obtenue avec un CDN, j’ai ajouté le paramètre suivant dans Firefox (dans la page about:config) :

extensions.yslow.cdnHostnames=www.mtgaddict.net

En réglant ce dernier point le site obtiendrai la note A pour ce point et son score serait de 97. Pas mal, non ? :-)

Résultat YSlow après optimisation

Il y a encore quelques points d’amélioration possibles. Mais j’ai voulu montrer comment améliorer les performances d’un site en fournissant très peu d’effort. Des pages HTML de près de 275Ko ne font plus que 25Ko. Et les temps d’affichage des pages se sont nettement réduits.

Couplé à ces optimisations, j’ai également activer le cache HTML côté serveur pour certaines pages stratégiques à contenu fixe. Si votre moteur de rendu offre cette fonctionnalité, pensez-y aussi.

Eclipse - autocomplétion non disponible

12 mars 2009

Eclipse est un excellent IDE. Cependant, il lui arrive parfois de perdre les pédales. Par exemple, il se peut que l’autocomplétion, appelée également “Content Assist”, ne fonctionne plus dans les fenêtres d’édition de code Java. Cela se traduit par le fait qu’Eclipse ne propose plus automatiquement l’autocomplétion. Et même si vous faites le raccourci clavier CTRL+SPACE, vous aurez en plus le message d’erreur : “No completions available.”.

Cette erreur vient du fait que les proposals de l’éditeur d’Eclipse ont été désactivés. Pour les réactiver, il suffit de procéder ainsi :

  • Dans Eclipse, sélectionner “Preferences” dans le menu “Window”.
  • Etendre le noeud “Java” dans l’arbre d’exploration, puis “Editor”, ensuite “Content Assist” et sélectionner “Advanced”.
  • Cliquer sur le bouton “Restore Defaults”. Cela va sélectionner les proposals par défaut dans Eclipse.

Vous pouvez à nouveau être fainéant et ne plus taper entièrement tous les noms des classes, méthodes, variables et autres… :-)

Eclipse & CVS - supprimer un tag

30 janvier 2009

En utilisant CVS avec Eclipse, il se peut que l’on applique un tag de version CVS qui s’avère être erroné. Or il n’existe aucune fonction dans Eclipse pour renommer ou supprimer un tag CVS.

Tout d’abord, CVS ne permet pas de renommer un tag. En revanche, il est possible de copier un tag sous un nouveau nom puis de supprimer l’ancien tag. Voici donc les commandes CVS pour réaliser l’équivalent d’un renommage de tag :

cvs rtag -r mon_mauvais_tag mon_tag_correct tc

cvs rtag -d mon_mauvais_tag tc

A partir de là, pourquoi ne pas faire la même chose sous Eclipse ? Même si Eclipse ne propose pas de fonction pour copier un tag, il est facile de mettre un nouveau tag à une version récupérée à partir d’un autre tag (vous me suivez toujours ? ;-) ). Cepandant, pour d’obscures raisons de sécurité (cf. Bug 73032), Eclipse ne permet pas de supprimer un tag. Heureusement pour nous, Frank a créé un petit plugin pour Eclipse 3.4 qui permet de supprimer un tag CVS : Remove Tag Tool.

Ce plugin fonctionne très bien. Il faut juste penser à mettre à jour le cache d’Eclipse pour les tags car dans le cas contraire Eclipse affichera toujours ce tag de version même s’il existe plus sous CVS.

Maintenant, vous pouvez enfin effacer tous les tags ratés (faute de frappe, erreur de numéro ou date, etc…). Veuillez cependant à ne pas trop abuser de cette nouvelle fonctionnalité ! :-)