Si vous êtes de la région, que vous connaissez du monde dans le coin, faites passez le mot car nous avons très peu de temps pour faire connaître ce nouveau JUG et faire venir du monde. Nous comptons beaucoup sur le bouche à oreille, un petit coup de main sera le bienvenu !
03 avril 2009
Maven au Poitou-Charente JUG !
Je serais vendredi prochain à l'inauguration du PoitouCharenteJUG pour y présenter Maven.

30 mars 2009
Fonzie Coding Fryday
Vendredi dernier j'ai voulu sortir un peu de quatre jours à corriger des bugs en série pour réussir à faire passer le projet dans l'intégration continue Hudson. Le temps d'appliquer une correction, deux nouvelles boulettes appraissaient sous Subversion.

Vendredi donc, j'ai voulu faire du codage cool. J'ai donc délaissé mes bugs (ils seront encore là lundi, d'ailleurs ça c'est confirmé) pour me lancer dans un code expérimental : recoder Grails en pur Java. Pour commencer modestement, je me suis contenté de GORM, la couche d'accès à la base de Grails, et plus précisément à son mécanisme de requête sur les entités "domaine".
Pour faire court, si je déclare une méthode User.findByNameOrderByBirthDate(String) à votre avis quelle est la requête passée en JPA ? Le concept "Don't Repeat Yourself" (DRY) consiste à s'obliger à chercher des outils et des conventions intelligentes pour ne pas avoir à coder ce genre de méthodes. Si un esprit raisonnablement tortueux arrive à deviner ce qu'elle fait, un soft bien ficellé devrait pourvoir en faire autant.
En Groovy, Guillaume et sa bande nous font ça les doigts dans le nez. Sans Groovy, j'ai fait appel à AspectJ. C'est un peu moins classe qu'avec Groovy, mais on reste en pur Java - ne jamais changer les habitudes des gens sinon ça fini toujours par vous retomber dessus ;)
C'est donc comme ça qu'est né Fonzie (il est comment Fonzie ? Il est cool !)
J'espère bien répéter l'expérience du Fonzie Coding Fryday (TM) vendredi prochain, ça apporte un bon bol d'air et plein de nouvelles idées.
26 mars 2009
spring-test-context, JPA et dbUnit
Sur ma toute belle appli d'en ce moment que j'adore nous gérons la persistence avec JPA. Comme je suis un grand fan de la testabilité par POJOs (ce qui est super original de nos jours), je préconise d'utiliser spring-test-context pour tester la persistence.
Seulement, j'aime bien aussi utiliser dbUnit pour insérer des données de test prévisibles avant mes tests. Et là ça se complique sérieusement, car il faut passer à dbUnit la connexion JDBC associée à la transaction utilisée par l' EntityManager JPA (vous suivez ?)
Le problème, c'est que spring-test-context ne propose par de méthode listener au sein de la transaction (SPR-4365) ; seulement avant ou après. J'ai donc du étendre le "TransactionalTestExecutionListener" pour ajouter dans beforeTestMethod l'injection des données dbUnit.
La mauvaise surprise, c'est qu'en l'absence d'une indication explicite, Spring utilise un DefaultJpaDialect incapable d'identifier la Connection JDBC utilisée, mais ce n'est pas considéré comme un cas d'erreur donc dbUnit ne partage pas la même connexion :'(
Ajoutez à ça une connexion qui est par défaut en autocommit, des tables Oracle AQ$TRUC qui viennent pourrir les données de test et ça vous donne une idée de mes trois derniers jours :-/
Pour résumer, si vous voulez faire comme moi :
- N'oubliez pas de préciser le jpaVendorAdapter (HibernateJpaVendorAdapter) dans la définition Spring de votre entityManagerFactory
- Utilisez DataSourceUtils pour récuperer la connexion associée à la transaction JPA en cours
et là, miracle, ça marche enfin :)
Etape suivante : faire un merge à la volée entre les deux persistence.xml qui vont constituer mon contexte JPA (SPR-2598), le permier étant "mutualisé" avec une autre application ...
22 mars 2009
IE6 à l'abris grace à nos DSI
Les dernières stats d'utilisation des navigateurs web sont sans appel : IE6 décline face à IE7 et Firefox3 qui se partagent le marché en 50/50

Ce qui est intéressant ici c'est l'effet "dent de scie" sur la courbe, qui montre que de très nombreux utilisateurs sont contraints d'utiliser IE6 5 jours par semaine, et passent sous FireFox le week-end.
Ca ne vous rappelle rien ? Quel est le navigateur "corporate" installé sur vos postes préconfiguré et labellisé par l'entreprise, recommandé par le service technique et nécessaire pour faire marcher correctement vos applications Intranet ?
Autrement dit, les meilleurs clients de IE6 ce sont ... nos DSI, qui continuent à le conserver frileusement (utilisent-ils FF le week-end ?). Malgré toutes les plaintes des développeurs web, ses soucis de performances et tout ce qu'on pourra lui reprocher, IE6 a encore de beaux jours devant lui : avec la crise-qui-fait-peur aucun DSI ne se lancera dans une migration des postes qui ne rapporte rien à court terme.
Et pourtant, avez-vous estimé le temps perdu à adapter votre appli web pour qu'elle marche sous IE6, alors qu'elle fonctionnait déjà très bien sur à peut près tout le reste ?
18 mars 2009
Big Blue croquera t-il Java ?
Vous l'avez sans doute lu un peu partout, IBM pourrait bien s'offrir SUN. La crise aidant, les cours sont au plus bas et donc les rachats deviennent possible, même les plus innattendus.
IBM a beaucoup misé sur Java, aussi devenir propriétaire de la marque Java TM et de la gouvernance de la plateforme serait assez naturel. On peut s'intéroger sur l'orientation qu'IBM donnerait à Java, mais si on considère le temps pris par SUN pour passer à un modèle ouvert pour son JDK, ça ne peut pas être tellement pire.
Pour le reste, que pourraient bien devenir (Open)Solaris, GlassFish et NetBeans face aux projets directement concurrents d'IBM ?
Passons sur Solaris, dont la base d'utilisateur assure au moins la survie. GlassFish vs Websphere, un match qui aurait pu semblé joué d'avance (je n'ai pas testé GlassFish, mais par contre j'ai déjà suffisement subi Websphere). Netbeans est apprécié de ses utilisateurs, mais l'omniprésent Eclispe - malgré ses défauts - est le bébé d'IBM.
Reste les offres "hard" des deux géants. Je ne suis pas spécialistes mais elles semblent plus concurrentes que complémentaires. Alors, un rachat de SUN signifiera t-il le sabordage d'un pan entier de technologies au profit des produits IBM ?
Allez, on a qu'à dire que tout celà n'est qu'un mauvais poisson d'avril ! Ou encore que Google et Oracle vont fonder une Joint-venture pour racheter SUN les premiers...
13 mars 2009
Grails rocks !
Sur mon projet actuel, d'une taille assez colossale, tout (et même le reste) est configurable, si bien qu'il faut une appli de gestion de la conf qui à elle toute seule est déjà une belle appli web.
Les données de configuration qui sont manipulées sont des entités JPA manipulées ailleurs. J'ai donc fait un essai du côté de Grails, que je n'avais fait qu'éffleurer précédement sans rentrer dans le vif du sujet. En quelques heures, j'ai une appli fonctionnelle pour gérer mes données JPA !
Grails permet de définir son modèle en Groovy mais s'accomode très bien d'un modèle "legacy". Les metadonnées Grails (selon une syntaxe de closure Groovy très compactes) peuvent en effet être déportées dans des classes compagnon suffixées "Constraints". Ma belle entité JPA Habilitation peut donc rester 100% java (Groovy fait encore un peu "geek") sans m'interdire de l'utiliser dans une belle application Grails.
Groovy fait son chemin dans le monde professionnel. Les IDE le supportent de mieux en mieux (même Eclipse s'y met, c'est dire :p), les frameworks et plugins pour Grails se multiplient. Reste à le rendre "acceptable" pour nos décideurs ... et paradoxalement ce n'est pas le plus facile. J'ai donc une astuce : plutôt que de coder en Groovy mon application JEE ultra-stratégique holala faut surtout pas prendre de risque avec un truc de geek, j'intégre le support de la JSR 241. C'est la même chose, je sais, mais bizarement ça ne sonne pas pareil ;)
12 mars 2009
A quoi bon ?
Dans le milieu des "architectes Java" on se targe d'appliquer des patterns, de structurer des architectures et d'offrir des applications flexibles, maintenables et évolutives.
Mais dans la vraie vie, ça donne quoi ?
Des concepts abstraits qui perturbent les nouveaux arrivants, de longues heures de formation sur les design pattenrs qui ne laissent que bien peu de traces dans le code produit, un joli tas de voeux pieux qui n'aboutit à rien de concret, et une belle architecture, plus ou moins bien appliquée, mise à mal au moindre bug un peu bloquant qu'il faut corriger en urgence.
Alors à quoi bon. Après tout, du bon vieux code "Plain Old Spaghetti Code" (POSC, à ne pas confondre avec le code de PORC) est-il vraiment si terrible ? De toute façon, d'ici six mois les besoins auront tellement évolués qu'il faudra tout reprendre et que notre magnifique "modèle objet du domaine" sera bon pour la casse - pardon, pour le "refactoring massif". D'ici un an, deux armées de stagiaires seront passées sur le code et auront massacré votre beau modèle en couche faute d'en comprendre les raffinements si subtils. D'ici deux ans, votre magnifique framework de [mettez-ici-le-pattern-que-vous-voulez] sera totalement obsolète. Alors pourquoi se tirer une balle dans le pied ?
Qu'est ce qu'on trouve à pas cher sur le marché ? Des gens pas très expérimentés qui rivalisent difficilement avec leur homologues indiens. Combien celà coute t-il d'en faire des experts à même de comprendre nos architectures hautement modulaires ? Quel bénéfice au final ?
Pourquoi ne pas considérer officiellement le modèle du code kleenex ? Tout pourri, mal ficelé, à peine fonctionnel, mais ça coute de toute façon moins cher de le refaire "from scratch" à bas cout d'ici deux ans que de le maintenir en l'état.
Quelle valeur ajoutée réelle pour nos belles usines à logiciel, toutes automatisées et bardées de contrôle qualité, si personne n'est au commandes ?
Bref je suis de plus en plus dubitatif. D'un côté je voudrais encore y croire, d'un autre côté la réalité est tellement loin de ce beau modèle de développement que je commence à voir venir le sciècle du "code discount" : pas cher, pas terrible, mais pas cher.
Il me reste donc à aller élever des chêvres dans le Larzac ...
08 mars 2009
Des bugs partout !
Ce week-end j'organisais un "apéro Wii". On m'a donc gentillement prêté deux WiiMotes et un Wii Fit, et bien sur les jeux qui vont avec.
Après les 25 écrans de baratin du jeu Wii Fit on peut enfin faire deux trois mini-jeux rigolos. Autant le capteur est une originalité intéressante pour l'interaction, autant les jeux associés manquent cruellement de "fini". Je veux bien croire que la Wii n'a pas les possibilités 3D d'une PS3 mais tout de même...
Quand à Wii Play... à réserver au plus jeunes qui ont du mal à se servir de la WiiMote. Jeux basiques et graphismes à la limite de l'amateurisme.
A croire que Nintendo ne veut pas mettre la barre trop haut pour ne pas dégouter les développeurs ;p
Restait heureusement les lapins crétins pour me sauver la mise. Evidement, ce n'est pas le même public, mais le style comique et décallé du jeu donne à l'ensemble un style caractéristique bien agréable, très loin de l'aspect "c'est offert avec alors n'en demandez pas trop" des jeux Wii-* d'origine de la console.
Je me suis donc vengé en enchainant les mini-jeux des lapins crétins - les enfants aiment bien voir leur papa se trémousser en rythme devant son écran - avant de tomber sur l'impensable : un bug.
Dans le jeu des "radios sur la plage", on doit cogner sur les lapins (les règles sont assez simple) mais bizarement au bout d'un moment on a beau s'exploser le bras rien ne bouge. Il s'avère que c'est un bug qu'on peut corriger en configurant la Wii sur 60Hz :-/ Mais avant de découvrir ça on passe par une sacré suée à s'énnerver sur sa WiiMote.
Terrible pour un informaticien de voir que les bugs nous poursuivent même en week-end... est-ce que le code des lapins crétins est en opensource ? :D
06 mars 2009
Contribution à la doc gwt 1.6
Les petits gars de GWT, n'utilisant pas Maven, sont confrontés à une armée d'utilisateur qui se casse les dents à faire fontionner ensemble les deux outils. En tant que développeur du plugin Mojo gwt-maven-plugin ils m'ont donc demandé de leur accorder un peu de temps pour écrire une page de doc sur le sujet, à intégrer dans GWT 1.6.
N'hésitez pas à me faire part de vos remarques et à improver my english
Ils aimeraient bien aussi que le plugin maven soit prêt en même temps que la sortie officielle de GWT 1.6.final, mais on en est malheureusment pas encore là. Vous pouvez néanmoins m'aider dans cette voie en testant le SNAPSHOT et en traquant les anneries qui pourrait trainer dans la doc
24 février 2009
L'informatique du XXIe siècle
Si vous voulez connaître ma vision de l'informatique du XXIème siècle, un petit tour par la vidéo tournée par JavaBlackBelt lors de l'anniversaire du ParisJug s'impose :
Au programme : EJB1, datacenter d'Amstrad CPC et Offshoring des bugs
09 février 2009
Coup de pub
Juste un petit coup de pub pour vous annoncer l'ouverture du blog d'Arnaud Héritier, développeur et membre du "Project Management Committee" de Maven.
Vous avez probablement déjà lu ses articles sur le blog Octo, alors faites monter ses stats en lui rendant une petite visite, ça le motivera pour la suite ;-)
Rendez-vous au ParisJug
Le ParisJug fête son anniversaire mardi soir.
Je viendrais y présenter le BreizhJug, en compagnie de représentants des nombreux JUGs provinciaux qui ont fleuris fin 2008.
Si vous êtes dans le coin, passez me faire un petit bonjour ;-)
31 janvier 2009
Bienvenue sur Facebook !
Invité sur Facebook, et pour une fois par quelqu'un que je connais vraiment, je découvre l'application de "social networking" qui fait craquer les moins de 25 ans. Comme j'ai (un peu) passé ce cap, je reste relativement septique sur l'utilité au quotidien de cet outil. Il faut reconnaitre tout de même la grande maîtrise de ses créateurs : IHM simple mais très complète, plein de chtit trucs Ajax pour une bonne ergonomie. De quoi passer quelques heures par jour pour savoir qui acheter comme ami.
"Amis à vendre" est probablement l'appli facebook la plus incroyablement inutile, donc absolument indispensable. Vous pouvez d'ailleurs m'aider à prendre de la valeur et me donner un pseudo correct (l'acheteur ayant le privilège de renommer son "achat") :
Je viens donc d'ajouter un twitter à ma page facebook, service que je n'utilise pas tellement plus, mais qui sait, en ayant un comportement de "jeune" je vais peut-être avoir les cheveux qui repoussent ? - allez pépé, arrête de blogger, c'est l'heure de ta tisanne.
30 janvier 2009
gMail offline
Depuis peu, google propose le très attendu gMail offline.
Il faut passer en version US et utiliser l'onglet "labs" qui permet d'activer des fonctionnalités à l'essai. Il faut bien sur aussi un navigateur intégrant Gears (dans mon cas : Chrome).
Le résultat est super : une appli web qui supporte les pertes de connexion, idéal pour les transports, ce qui était tout de même super limitant pour une utilisation "professionnelle" de gMail.
Faudra que je teste l'API Gears pour le BreizhJug, ça m'évitera une fois sur deux d'avoir des soucis avec l'accès au Net pour faire le tirage au sort !
un iPod pour 2009 !
Non, je n'ai pas craqué pour le joujou de Steeve Jobs.
Hier soir avait lieu la soirée annuelle de mon agence. Des prix ont été décernés, et j'ai reçu celui de l'innovation (et oui !). En cadeau, en plus de la bise de mon patron, un iPod 8Go
J'ai merdé pendant dix minutes avant que quelqu'un m'explique que le truc rond est tactile et qu'il faut "tourner" pour descendre dans les menus. Si Steeve est le roi de l'ergonomie - et un génie du marketing aussi - je dois avoir pris un train de retard...
C'est dur de découvrir qu'on est plus dans la tranche d'âge cible de ces joujous :D
20 janvier 2009
GXT ou pas ?
GXT (== ext-gwt) est une adaptation de EXTJs en GWT. Pas juste un wrapper, mais une reécriture. Donc a priori un truc super optimisé et qui s'intègre parfaitement dans la logique GWT.
Soucis, GXT est sous GPL et propose une licence payante pour les développements professionnels. Pour me faire une idée de cette librairie, je fait quelques tests et je tombe vite de haut :
- la librairie utilise des concepts très riches (data binding) mais la documentation est bien pauvre
- j'ai des soucis avec le positionnement qui m'obligent à passer des largeurs en dur, et pire que ça, en fonction du navigateur (voir le code source de l'exemple AdvancedForm : GXT.isIE ? "100%" : "-20";)
- mes CheckBox ne définissent pas le "labelFor" qui permet de cliquer sur le texte pour les sélectionner.
Autrement dit, GXT est opensource mais pas du tout ouvert à sa communauté "libre". Si le code est librement consultable, pour l'utiliser le passage à la caisse est quasi obligatoire.
Par ailleurs, même si les widgets sont très esthétiques, il est délicat de les "plier" pour entrer dans un design visuel prédéfini au détail prêt. Soit ça colle, soit faut tout refaire.
Bref, grosse déception. J'ai peur que GXT, entre le changement de license qui l'a coupé de sa base et cette politique "communauté payante" se coupe des développeurs, malgré des qualités évidentes...
17 janvier 2009
Etes-vous prêt pour Parleys Publisher ?
Le BeJug, à l'origine du site de conférence Parleys.com (si vous ne connaissez pas, c'est le moment d'aller y perdre .. quelques heures) proposera sous peu un espace gratuit pour les Java User Group.
Je suis donc en train d'équiper le BreizhJug de tout le nécessaire pour capturer nos sessions dans les meilleures conditions. Après le caméscope à disque dur (que nous avons depuis le début) qui donne une image correcte - sans plus - du speaker, nous avons désormais un dispositif de capture VGA (vga2usb) qui permet de capturer toutes les démos faites par nos conférenciers et d'un micro semi-pro pour avoir un son irréprochable, ce qui changera du style "caméra cachée" que nous obtenions jusqu'ici avec le micro intégré du caméscope.
Il ne reste plus qu'à apprendre à maîtriser Parleys Publisher, l'environnement d'édition vidéo associé...
Rendez vous en ligne ... sous peu !

Il ne reste plus qu'à apprendre à maîtriser Parleys Publisher, l'environnement d'édition vidéo associé...
Rendez vous en ligne ... sous peu !
08 janvier 2009
blogger pour les développeurs
Blooger n'est pas très adapté pour fournir des fragments de code. La librairie syntaxhighlighter semble fournir une solution fonctionnelle pour contourner ces limitations.
Ceci est un test intégrant du code source Java :
Ceci est un test intégrant du code source Java :
public abstract class ConfigurableBean
{
/** Configurer used to inject dependencies in ConfigurableBean instances */
private static BeanConfigurer configurer;
/**
* Constructeur par d�faut
*/
public ConfigurableBean()
{
if ( configurer != null )
{
configurer.configure( this );
}
}
}
03 janvier 2009
bonne année !
Bonne année à tous !
Tous mes voeux de réussite pour 2009, en ce qui me concerne, un livre sur Maven est en préparation (il reste juste à écrire les 20 chapitres...) et j'espère bien poursuivre mes petits pas dans le microcosme GWT via le plugin maven-gwt et une collaboration entre gwtx et gwt-beans-binding.
Mes prédictions pour 2009 :
- Adobe rachètera SpringSource
- Microsoft rachètera Adobe
- Google rachètera Microsoft
- Un téléphone Androïd sera offert à chaque visiteur de Devoxx 2009
- La fréquentation moyenne du BreizhJug dépassera les 100 membres
17 décembre 2008
beans binding dans gwt
La JSR 295 a été crée pour définir un mécanisme de binding en Java. L'idée simple et supportée par de nombreux langages est que deux attributs de deux beans soit "liés", ce qui permet par exemple à un widget graphique de toujours rester synchronisé avec l'objet modèle qu'il affiche, sans devoir écrire du code de mise à jour fastidieux et répétitif.
beansbinding est l'implémentation associée à cette spec et est utilisé dans NetBeans, ce qui prouve une bonne maturité de la techno. Seulement le projet semble "dormant", et la JSR associée n'a pas bougé depuis 2006. Pourtant le mot clé "bind" utilisé par JavaFX montre bien l'importance de ce concept pour les IHM
gwt-beans-binding est un portage de la JSR 295 (ou plutôt de ses concepts puisqu'elle n'est ni aboutie, ni publique) pour GWT. La mise en oeuvre est très simple. Pour lier deux textBox par exemple, il suffit de déclarer :
Binding.createAutoBinding( READ_WRITE,
textBox, BeanProperty.create( "text" ),
model, BeanProperty.create( "name" ) );
L'équivalent codé "à la main" nécessite de définit de nombreux PropertyChangeListeners (NB: quand seront-ils supportés en standard par GWT ?).
Pourquoi se focaliser sur ce projet, encore en version 0.2, alors que d'autres options comme Gwittir offrent des solutions comparables ?
- D'une part, parce que quelque soit l'évolution de cette JSR, elle sera toujours considérée si un nouveau groupe s'attaque à ce problème de data-binding en Java.
- D'autre part, parce qu'elle propose une API simple et focalisée sur cette unique tâche.
- Enfin, parceque le développeur de cette petite librairie a l'air très motivé !
Pour voir gwt-beans-binding à l'oeuvre : démo
Inscription à :
Articles (Atom)