Blog myBlog = BlogFactory.getWordPressBlog();
Archives pour septembre, 2010
Spring Roo et Spring Tools Suite
29/09/10
Cela fait maintenant quelques temps que nous utilisons Spring Roo sur des projets professionnels (un outil de développement rapide proposé par SpringSource). Cependant, avant de vous donner mon avis sur cet outil, je vous invite à lire ces deux articles récents sur le sujet, qui m’ont inspiré :
- Un comparatif entre celui-ci et Play! Framework par Nicolas Martignole.
- Un bon tutoriel de Eric Molle (de Valtech).
Une autre manière de résoudre l’énigme de Einstein en Prolog
23/09/10
Ce matin, je suis tombé sur un post de Baptiste Wicht concernant la résolution de l’énigme de Einstein en Prolog.
Cela m’a rappelé des souvenirs : j’ai utilisé le même langage pour résoudre la même énigme il y a quelques années, afin d’apprendre les concepts du langage. Ce qui m’a surpris dans ce billet, c’est qu’à partir du même problème, nous avons utilisé deux approches différentes (même si finalement, elles reviennent au même… et heureusement à la même résolution).
En complément de son billet, j’ai donc trouvé intéressant de proposer une méthode de résolution alternative, toujours en Prolog, en dépoussiérant mes vieux répertoires de codes.
Rappel de l’énigme :
Il y a cinq maisons de 5 couleurs différentes. Dans chaque maison vit une personne de nationalité différente. Chacun des 5 propriétaires boit un certain type de boisson, fume un certain type de cigares et garde un certain animal domestique.
Hypothèses :
- L’Anglais vit dans une maison rouge.
- Le Suédois a des chiens comme animaux domestiques.
- Le Danois boit du thé.
- La maison verte est à gauche de la maison blanche.
- Le propriétaire de la maison verte boit du café.
- La personne qui fume des Pall Mall a des oiseaux.
- Le propriétaire de la maison jaune fume des Dunhill.
- La personne qui vit dans la maison du centre boit du lait.
- Le Norvégien habite la première maison.
- L’homme qui fume les Blend vit à côté de celui qui a des chats.
- L’homme qui a un cheval est le voisin de celui qui fume des Dunhill.
- Le propriétaire qui fume des Blue Master boit de la bière.
- L’Allemand fume des Prince.
- Le Norvégien vit juste à côté de la maison bleue.
- L’homme qui fume des Blend a un voisin qui boit de l’eau.
Question : qui à le poisson ?
Session de rentrée Git-Attitude
20/09/10
Il est temps de faire un petit retour sur ce samedi, passé à la session de rentrée Git-Attitude. Ce fût une excellente journée, très dynamique et instructive. Cette formation intensive m’a permis de progresser bien plus vite que par une auto-formation… et pour un prix dérisoire, petit-déjeuner et déjeuner compris : nous avons donc eu le Git et le couvert (oui, elle était facile, mais je n’ai pas pu résister !).
Présentation des acteurs
Nous nous sommes retrouvés à 9 participants (dont Rik, Gabriel, Rudy, Bob, etc.) dans les locaux parisiens de Clever Age, plus notre formateur. Par un mystérieux hazard, j’ai découvert aujourd’hui que nous travaillons à quelques centaines de mètres, les locaux de Ciblo étant situés boulevard Bessières.
Premier point positif et remarquable : nous étions environ moitié MAC, moitié Linux (l’utilisation de Git étant, il est vrai, beaucoup plus pénible surWindows…). Le deuxième suit aussitôt : nous avions tous une connexion internet sans restrictions. Ca met de bonne humeur pour commencer la journée. Note :Le café et les viennoiseries du matin étant bien entamées, nous pouvons entamer la journée en douceur…
Les bases
Nous commençons par vérifier notre installation de Git (et sa customisation), et nous sur une présentation générale :
- Petit historique rapide des gestionnaires de configuration
- Comparaison de l’approche centralisée avec l’approche décentralisée, et des différents acteurs de chaque catégorie
- Immédiatement après (évangitlisation oblige), les avantages du décentralisé : travail en mode offline, commits plus atomiques, suppression du « single point of failure« , etc.
- Point sur le vocabulaire : commit et checkout sont des opérations locales. Les opérations distantes s’appellent push, pull, fetch.
- Présentation des quatre « zones » de travail sous Git : les « Untracked » (fichiers non encore gérés sous Git) « Working Tree » (espace de travail), « Index » (snapshot des fichiers prêts à être commités), « HEAD » (position du dernier commit)
- Toutes les références (branche, tag, etc.) sont des hachages SHA
Premiers travaux pratiques
- Création d’un premier dépôt, ajout d’un fichier à l’index (add), commit… Nous voyons tout de suite une première possibilité de Git, l’amendement (–amend) un commit (en cas d’oubli de fichier dans un commit)
- Nous voyons aussi quelques commandes de suivi : diff, status et log : ces quelques méthodes sont déjà impressionantes par le nombre de possibilités (différence entre l’espace de travail et l’index, entre l’index et le HEAD, entre l’espace de travail et le HEAD, etc.)
- Premier « Whaou » du jour : l’ajout interactif (add -i) : on peut mettre dans l’index des portions de fichier, et garder le reste des modifications pour un commit ultérieur.
- Encore plus fort, le retour en arrière en cas d’erreur avec Dick Rivers git reset.
Cette fonction reset est impressionnante. Si nous avons oublié de créer une branche depuis 2 commits, elle permet de corriger ça en 3 commandes :
1 2 3 | git branch ma_nouvelle_branche git reset --hard HEAD~2 # master revient deux commits en arrière git checkout ma_nouvelle_branche # Ni vu ni connu |
Après cette entrée en matière plutôt efficace, nous allons déjeuner, et discuter de choses et d’autres… mais en particulier du Paris Web.
Les branches
De retour, nous abordons un sujet assez inconnu sous Subversion (tant il est difficile de faire des fusions) : les branches. Sous, Git une branche n’est qu’une référence vers l’arbre d’origine (un SHA). C’est-à-dire quelques octets et quelques milli-secondes.
Une fois ces branches créées, elles sont aussi faciles à fusionner, avec une résolution automatique de grand nombres de cas. En particulier si des modifications concurrentes sur un fichier concernent des parties différentes, Git les fusionnera. Ca peut paraître simple… mais Subversion en est incapable.
Et comme c’est simple et que ça marche, on peut mettre en place de véritables stratégies et workflows de développement.
En cas d’urgence, on peut changer de branche sans perdre son travail avec la boite à idée « stash« .
Nous abordons ensuite plus en détail les différentes possibilités de fusion :
- résolution d’un conflit (oui, il arrive qu’on ne puisse y échapper…)
- fusion simultanée de plus de 2 branches (trois, dans notre cas) : et ça marche !
Rebase
(Encore) une fonctionnalité impressionnante de Git. « Rebase » permet :
- de modifier le point de départ d’une branche
- de diviser une branche et deux branches distinctes (dans le cas où elle contient deux parties n’ayant finalement pas de rapport)
- de réécrire l’historique en mode interactif (par exemple pour fusionner plusieurs commits successifs en un seul)
Dépôts distants
Travailler en local, c’est bien… mais à un moment, il faut partager son travail. Nous voyons donc comment se connecter à un dépôt distant, et comment interagir avec celui-ci : push, pull, fetch, etc.
Au passage, nous découvrons des nouveautés (simplification de la syntaxe des commandes) de la version 1.7 et effectuons nos travaux pratiques avec des clés SSH et Gitosis.
Une journée bien remplie…
Pour finir, nous voyons la fonction « tag« . La journée se terminera là-dessus : avec tout ça, nous n’aurons finalement pas eu le temps d’aborder les submodules (mais on pourra facilement trouver en ligne des informations sur ces derniers).
Il nous reste à passer un dernier quizz, et à rentrer chez nous méditer tout ça…
Maintenant, si vous êtes en manque d’imagination pour les nombreux commits que vous allez faire sous Git, allez donc lire What the commit…
Soirée ParisJUG de rentrée
16/09/10
Ce 10 septembre s’est tenu le Jug Summer Camp auquel je n’ai pas pu aller (comité de pilotage prévu depuis longue date). Heureusement, les conférenciers et participants n’ont pas été avares en compte-rendus : sur le touilleur-express, les JDuchess France, etc.
Alors, afin de ne pas rater deux fois de suite une conférence JUG, j’avais pointé sur mon calendrier le jour d’ouverture es inscriptions à la soirée Paris JUG de ce mardi. Bien m’en a pris car toutes les places sont parties en moins d’une demi-journée…
Cette soirée consacrée au NoSQL fût très intéressante, et particulièrement sympa. A la pause, j’y ai en particulier fait la connaissance « IRL » de deux connaissances Twitter : Audrey Neveu (des Duchess) et Cyrille Deruel (auteur du blog « Bouzin agile« ). Finalement, la barbe c’est pratique pour être reconnaissable. Mon seul regret, c’est le réveil à 5h le lendemain qui m’a empêché de participer à la troisième mi-temps pour espérer avoir un peu de sommeil.
Mais revenons au thème principal. Un résumé très complet de la soirée (y compris les intermèdes SWPA et ALM) est déjà disponible chez Le touilleur. Je ne vais donc pas paraphraser, et me contenter de compléter par quelques éléments qui m’ont marqué.
En particulier, j’ai été très intéressé par la présentation des bases « graph » (et Neo4J), et j’ai regretté qu’elle passe rapidement sur ce sujet. Le cas d’utilisation qui a été cité est celui des réseaux sociaux professionnels (Viadeo, LinkedIn, etc.), qui établissent des « chemins » et des « distances » entre nos relations (au 1er, 2ème, 3ème degré, etc.).
M’intéressant par ailleurs au web sémantique (qui m’avait attiré à la soirée de mon premier Paris JUG l’année dernière), j’ai pensé que ce type de base aurait un grand intérêt pour la persistance d’informations sémantiques. Après la soirée, une petite recherche m’a rassuré : je ne suis pas le premier à avoir pensé à cette utilisation. Et Michael Figuière, un des conférenciers de mardi, cite cette utilisation dans un de ses billets axé sur Neo4J. Il existe même une extension dédiée à l’utilisation de Neo4J pour le stockage de RDF.
Cette extrapolation de la conférence m’a sérieusement donné envie de me remettre au web sémantique… Une ligne de plus dans ma TODO-List des choses à étudier. Je ne suis malheureusement plus à une ligne prêt dans cette liste… #TropDeSujetsIntéressants comme on dit. Et une autre de ces technologies que j’aimerais étudier, c’est Play! Framework : il va donc falloir que je veille à ne pas manquer le prochain Paris JUG !
Logback ou Log4J ?
13/09/10
Vous l’avez compris, dans mon précédent article, Logback était un prétexte pour présenter une manière détournée d’utiliser mon outil fétiche de manipulation de données. Avec peu de suspens, si j’ai le choix du Framework de logging, je partirais sur Logback, pour des raisons qui ne concernent d’ailleurs pas les performances.
Et, puisque j’ai lancé le sujet, voilà quelques arguments comparatifs issus de mes premiers essais :
La suite >
Créer un benchmark avec Talend Open Studio
7/09/10
Logback
Les vacances sont finies… et le ralentissement estival au travail également. Vous le remarquerez donc certainement, je vais malheureusement avoir moins de temps que cet été pour publier des articles. Mais j’ai tout de même eu le temps de regarder deux ou trois choses qui étaient sur ma « TODO » depuis longtemps.
En particulier le Framework Logback (à ne pas confondre avec le backlog de Scrum), qui est « le successeur » de Log4J :
- le fondateur du projet Log4J, Ceki Gülcü, travaille maintenant au développement de Logback
- le code initial de Logback est un refactoring du code de Log4J, avec un certain nombre d’améliorations (modularité, performances, etc.)
- la communauté de Logback est très dynamique (3 versions dans le courant du mois de juin), alors que les développements de Log4J semble ralentis : une branche 1.3 arrêtée, la branche 2.0 encore expérimentale, et la version qui a précédé la 1.2.16 (parue en avril 2010) datait de 2007
Je n’avais pas jusqu’à maintenant eu l’occasion de l’utiliser car Log4J reste la référence imposée par la DSI sur la plupart de mes projets (et il est vrai que je n’ai jamais eu de soucis avec).
Création du benchmark
Cette étude du Framework Logback a été un très bon prétexte pour détourner le fonctionnement habituel de Talend Open Studio, afin de créer un test comparatif des performances de Log4J et Logback.
J’ai ainsi développé de nouveaux composants dédiés à l’utilisation de logback dans TOS (ceux pour Log4J existaient déjà), afin de réaliser ce test. Une fois ce développement effectué, on peut s’attaquer au développement du benchmark lui-même. Et avec Talend Open Studio, c’est très simple :
- Lecture de la configuration du Framework
- Démarrage du chronomètre
- Génération d’un nombre significatif de lignes de données et log de ces lignes
- Fin du chronomètre
Il suffit ensuite de modifier la configuration du framework pour faire varier le test : la configuration de Logback est très similaire à celle de Log4J, et la prise en main du Framework est donc immédiate.
Afin de réaliser un comparatif entre Log4J et Logback, on réalise un job identique, mais avec cette fois le logger Log4J.
Conclusion
L’avantage d’être passé par Talend pour générer ces petits traitements de test :
- La rapidité de développement (si je mets de côté le temps de développement des composants eux-mêmes) : je n’ai eu qu’à placer et à enchainer correctement les composants pour obtenir le traitement souhaité, au lieu de devoir écrire le code à la main : c’est beaucoup plus rapide.
- Le composant « tRowGenerator » me permet de faire varier très rapidement mes cas de test : niveau de log des messages envoyé fixe, cyclique, aléatoire…
- La génération automatique du code m’assure que le code est le même pour les deux Frameworks. Les différences de temps d’exécution ne proviennent donc que des Frameworks eux-mêmes.
Il ne reste plus qu’à trouver des cas de test pertinents et à les exécuter…
