lundi, novembre 29 2010

Cinquième et dernière journée à Devoxx

La dernière keynote n’est pas faite par James Gosling mais par six représentants de la communauté Java de différents horizons pour débattre sur des questions relatives au futur de Java :

  • Joshua Bloch de Google
  • Mark Reinhold d’Oracle
  • Antonio Goncalves du Paris JUG
  • Jurgen Hoeller de Spring Source
  • Stephan Colleburn
  • Bill Venners

Plusieurs questions sont abordées : compatibilité des prochaines versions, impact d’Oracle sur la communauté, la licence du TCK, Android est il le standard sur les appareils mobiles, .Net peut il inspirer les évolutions de Java, l’utilisation d’OsGI pour la modularité de Java 8, le JCP, ...

 

Creating lightweight applications with nothing but vanilla JavaEE 6

Adam Bien est un excellent speaker possédant une excellente connaissance de Java EE 6 (Java Champion, Java Rockstar, homme Java de l’année).

Après quelques slides, Adam lance Netbeans et code en live pour démontrer la puissance et la simplicité de Java EE 6. L’idée importante à retenir c’est que les design patterns de J2EE ne sont plus adaptés à Java EE.

 

Voilà Devoxx est terminé : la semaine est passée très vite.

Le bilan est très largement positif : une organisation bien rodée, des speakers et des sujets intéressants, de nombreux francophones, les soirées de Devoxx mémorables, ...

Comme d’habitude, on repart de Devoxx avec de nombreux sujets à regarder avec entre autre pour moi : Google Caliber, Vaadin, ...

Comme l’année dernière, les universités et les conférences seront publiées gratuitement sur Parleys.com tout en long de l’année.  Pour les impatients et pour soutenir Devoxx, il est aussi possible de consulter très rapidement toutes les présentations moyennant le somme modique de 79 euros comparativement à la richesse et la qualité du contenu. 

 

dimanche, novembre 28 2010

Quatrième journée à Devoxx

The future roadmap of Java EE

Cette keynotes initialement prévue par Roberto Chinicci est animée par Jérome Dochez, Linda DeMichiel et Paul Sandoz.

Jerome Dochez nous propose les grands axes de réflexions des prochaines versions de Java EE dont la préoccupation majeure sera le cloud.

La modularité devra attendre Java SE 8 donc elle ne sera au programme que dans la version 8 de Java EE mais Java EE 7 devrait revoir les spécifications des classloaders.

Certaines API seront aussi enrichies :

  • JSF : la version 2.1 sera une release mineure mais la version 2.2 proposera un support d’HTML 5
  • JMS : une évolution de cette API historique et importante est prévue
  • JPA : support des procedures stockées, ...
  • JAX-RS 2.0 devrait comporter une API pour la partie cliente, utilisation de @Inject, ...

 

Comparing JVM Web Framework by Matt Raible

De l’aveu du speaker et d’une très large majorité de l’assistance présente dans la salle pleine, le nombre de frameworks pour le développement d’applications web en Java est trop important (JSF, Wicket, Tapestry, Spring MVC, Struts 2, Stripes, Vaadin, ...).

Matt a choisi un sous ensemble de ces frameworks.

Matt nous propose 20 critères de sélection : Developer productivity, developer perception, learning curve, project health, developer availability, job trends, templating, components, ajax, plug-ins/add-ons, scalability, testing support, i18n, validation, multi-language support, quality of documentation/tutorials, books published, REST support, mobile/Iphone support, degree of risk

Cette liste de critères est une bonne base même si quelques un me semblent moins importants que d’autres.

Matt nous livre une matrice de comparaison dont les meilleurs sont : Spring MVC, GWT, Grails, Wicket et Ruby on Rails qui ne fonctionne pas sur la plateforme Java mais il est très répandu.

Il nous précise cependant qu’aucune pondération n’est appliquée dans ces résultats. La définition des priorités dans les critères et l’application de pondérations correspondantes est cependant très importante lors de sa propre évaluation.

Matt nous livre les avantages et inconvénients des frameworks les mieux notés et quelques statistiques (offres d’emplois, représentativité chez Linkedin, Google trends, questions sur StackOverflow, ...).

Pour faire son choix, Matt nous recommande de mettre une priorité sur les critères de choix, de sélectionner quelques frameworks et de réaliser un même prototype avec chacun et d’utiliser les résultats pour choisir celui qui sera utilisé.

 

OpenJDK par Dalibor Topic

Dalibor Topic d’Oracle nous parle du projet Open JDK.

Oracle prévoit de fusionner la JVM Hotspot et JRockit (la JVM de BEA) et de contribuer à Open JDK avec le résultat.

Le JDK et le JRE seront toujours diffusés gratuitement. Oracle prévoit une version Premium payante qui inclus JRockit Mission Control, JRockit Real Time et Java for Business and Enterprise support.

En octobre, IBM a annoncé sa participation active au projet Open JDK.

Le JCP reste l’organisation en charge des spécifications des évolutions des API et des plateformes Java.

En Novembre, Apple a annoncé aussi sa participation à Open JDK pour permettre le développement d’une version 32 et 64 bits de la JVM sur Mac OS.

Le projet communautaire Open JDK , lancé en 2006, a pour but de fournir une implémentation open source de la plate-forme Java SE.

 

Extending VisualVM par Kirk Pepperdine

Kirk Pepperdine, expert en performance, nous propose dans sa présentation comment développer un plug-in pour l'outil VisualVM.

Kirk nous rappel que le tuning de la performance nécessite une bonne connaissance de la technologie, des outils et de la méthodologie. Il ne faut pas tuner une application mais un système dans son ensemble (hardware/OS, JVM, application, acteur). Il faut prendre en considération les activités de chaque strate mais aussi les interractions entre chacune de ces strates.

VisualVM est un outil qui permet de monitorer un JVM en combinant des fonctionnalités d’autres outils comme JConsole, jvmstat, JVMTI, JMX, ...

VisualVM utilise la plateforme Netbeans Rich Client et propose donc un système de plug-in.

Kirk passe en revu les API à utiliser pour développer un plug-in qui affiche des informations graphiques.

 

HTML 5 fact and fiction par Nathaniel Schutta

Une présentation de l’état d’HTML 5 et de ses perspectives.

Il ne faut plus tenir compte de IE6 qui ne concernerait que 5% des navigateurs utilisés : Google Apps et même Sharepoint 2010 ne proposent plus de support pour IE6.

Le support de HTML5 est partiel dans les différents navigateurs : il est important de détecter si une fonctionnalité précise est utilisable ou non. Cela peut se faire à la main mais il est préférable d’utiliser la bibliothèque Modernizer.

La guerre du ou des formats supportés par HTML5 est loin d’être terminée entre Ogg, H264 et WebM.

Les nouveaux types de saisies de données devraient faciliter leurs saisies notamment sur les appareils mobiles.

 

The Java modular Platform

Mark Reinhold nous présente la prochaine évolution majeure de la version 8 de Java SE : la modularité de la plateforme.

Ceci devrait mettre un terme au jar hell, améliorer les performances (téléchargement et démarrage) et utilisable sur les appareils mobiles.

L’idée de supprimer le classpath et de générer des modules natifs (rpm, deb, ...)

Le projet Jigsaw travail sur l’implémentation de cette modularité qui doit tenir compte de plusieurs fonctionnalités : grouping, dependance, versionning, encapsulation, optional modules et virtual modules :

  • Le grouping se fera en utilisant le mot clé module.
  • Les dépendances seront précisées avec le mot requires dans définition du module.
  • L’encapsulation sera précisées avec le mot permits dans définition du module.
  • Les modules optionnels seront précisés avec les mots requires optional dans définition du module.
  • Les modules virtuels seront précisés avec le mot provides dans définition du module.

Une nouvelle command, jmod, permettra de gérer les modules (add-repo, install, ...)

La commande jpkg permettra de créer des modules natifs.

La préoccupation principale est la compatibilité qui devrait être respectée sauf dans des cas spécifiques.

 

Java Puzzlers – scrapping the bottom of the barrel par Joshua Bloch et William Pugh

Les puzzlers de Joshua Bloch sont une session enrichissante et instructive. De surcroit Joshua est un orateur exceptionnel qui assure le show : la salle est donc pleine. William Pugh n’est pas en reste puisqu’il est co auteur de l’outil Findbugs.

6 puzzlers ont été proposés pour se rendre compte encore une fois que Java et ses API possèdent de nombreuses particularités.

 

Troisième journée à Devoxx

La keynotes "Welcome and Intro"

Stephan Jansen nous accueille pour cette première journée de conférences.

Ils nous proposent quelques chiffres qui confirment, même si cela n’est pas nécessaire, l’importance de Devoxx : 3000 participants, venant de 40 pays d’Europe bien sûre mais aussi Canada, Australie, Brésil, …, 110 speakers, 300 étudiants, 67 JUGs (dont le Lorraine JUG et le Yajug), 27 partenaires dont Oracle, JBoss et Adobe, 13000 repas, 7200 croissants, …

Face à ces chiffres, il y a une équipe de 25 personnes pour l’organisation qui est bien rodée.

Cette année, le réseau a été nettement amélioré grâce à 10 modems VDSL2 : utiliser le net n’était plus une contrainte et c’est très appréciable.

L’exposition des données, via des services Restful, concernant les informations relatives à Devoxx a permis le développement de clients dans différentes technologies (Vaadin, Scala, …) pour différentes appareils (IPhone, Android, …) par différents contributeurs.

Stephan nous parle ensuite de Parleys.com : comme l’année dernière toutes les sessions seront diffusées gratuitement tout au long de l’année et il sera possible de souscrire pour 79 euros pour les consulter toutes dans un futur proche pour une durée d'un an. Une nouveauté cette année, les keynotes sont diffusées en live sur Parleys. La version 4 apporte quelques nouveautés sympathiques (nouveau publisher, support mpeg4, client HTML5 pour IPad, …).

 

Java SE : the road ahead par Mark Reinold

La seconde KeyNotes est proposée par Mark Reinhold, chief architect of the Java plateform chez Oracle.

Mark nous propose un rapide historique de Java : de la version 1.0 (1996) principalement utilisé pour développer des applets, 1.1 (1997), 1.2, 1.3, 1.4, 5.0 avec de nombreuses évolutions dans le langage lui même, jusqu’à la version 6.0 (2006).

Les axes de développement des prochaines versions de Java sont : productivité, performance, universalité, modularité, intégration et servisability

Mark aborde plusieurs sujets concernant les évolutions du langage en cours de travail :

  • Le projet Coin propose quelques évolutions syntaxiques : diamond, try with resources, improved integral literals, string in switch, varargs warning, multi-catch et precise rethrow
  • La performance, elle devra être assurée en exploitant le nombre croissant de cœurs des processeurs.
  • Le projet Lambda : http://openjdk.java.net/projects/lambda/
  • La reification des generics pour faciliter leur utilisation
  • Les properties
  • Le projet DaVinci (JSR 292) concernant Invoke Dynamic
  • Le projet Jigsaw : la modularité est un vaste chantier qui vise à supprimer le classpath en utilisant des modules plusieurs formats (jar, jmod, rpm, deb) : un rapprochement vers Maven est envisagé au détriment de OsGi

Java 7 devrait être diffusé courant 2011 et devrait contenir entre autre : le projet Coin, Invoke Dynamic, fork/join framework, NIO 2.0, Unicode 6.0, JDBC 4.1, Swing Nimbus, …

Java 8 devrait être diffusé fin 2012.

D’ailleurs plusieurs JSR ont été soumises au JCP :

  • JSR 334 : Small langage ehancements (Project Coin)
  • JSR 335 : Lambda Expression (Projet Lambda)
  • JSR 336 : Java SE 7
  • JSR 337 : Java SE 8

Mark reprécise l’ordre des priorités concernant Java :

  1. : Maintenir Java comme le numéro un
  2. : Générer des revenus indirects
  3. : Générer des revenus directs
  4. : Réduire les couts

Le projet Open JDK prend de plus en plus d’importance notamment avec l’implication d’IBM et Apple.

 

La keynotes State of the web par Dion Almer et Ben Galbraith

Ben Galbraith et Dion Dalmaer nous proposent une seconde keynotes sur l’état du web avec en ligne de mire les apports d’HTML 5 et de ce qu’il va apporte dans un futur proche.

HTML 5 propose de nombreuses fonctionnalités : CSS3, géolocalisation, web workers, web storage, web sockets, canvas, Web GL, …

Les sites web ont évolués et évoluent encore, la preuve avec les sites web d’Apple et de Disney à la fin des années 90.

La montée en puissance d’HTML 5 est accélérée par l’accroissement des plateformes mobiles et donc des applications mobile. HTML 5 se présente comme la solution multiplateforme. Même Microsoft l’a bien compris avec son repositionnement de Silverlight, lui préférant HTML 5 pour les applications web.

 

Reflection Madness par Heinz Kabutz

Heinz Kabutz diffuse des articles périodiquement sur le site javaspecialists.eu : leur lecture est particulièrement enrichissante.

Heinz nous offre une session technique sur l’utilisation avancée de la reflection.

La reflection est parfois décriée notamment pour ses performances mais elle permet une flexibilité et de faire certaines choses impossible autrement. Le reflection n’est aussi pas utilisable sans risques (code complexe, performance, détections de certains problèmes uniquement au runtime).

Heinz nous propose quelques cas d’utilisation, pour certains potentiellement dangereux, avec du code en live :

  • accès à une variable private
  • violer l’intégrité des objets de type Integer
  • Exemple :

    Field value = Integer.class.getDeclaredField(« value ») ;
    Value.setAccessible(true);
    Value.set(42, 43);
    System.out.printf(“Six times seven = ”, 6*7);
    // affiche Six times seven = 43
  • déterminer la taille d’un objet en utilisant la classe Instrumentation
  • déterminer la classe appelante en utilisant la classe sun.reflect.Reflection
  • utiliser la stacktrace d’une exception pour créer dynamiquement un logger pour la classe
  • modifier le contenu d’un champ déclaré final
  • modifier le contenu d’un champ déclaré static final (sur une JVM sun) en utilisant la classe sun.reflect.ReflectionFactory
  • créer dynamiquement une nouvelle valeur dans une énumération
  • créer un objet sans invoquer le constructeur (sur une JVM Sun) en utilisant la classe sun.misc.Unsafe

Cette session est surement une des plus avancée techniquement auxquelles j’ai pu assister.

 

The next big JVM language par Stephen Colbourne

Stephen Colbourne nous propose sur une réflexion sur ce que devrait avoir le prochain langage phare de la JVM.

Java a 15 ans, plus de 10 millions de développeurs l’utilise et est largement répandu en entreprise. Ces principaux buts lors de sa création étaient : simple, orienté objet, robuste, sécurisé, portable, interprété, multithread et dynamique : il est largement inspiré de C, C++, Smalltalk, Modula, … dont les enseignements ont été pris en compte dans Java (pas d’héritage multiple, pas de surcharge des opérateurs, utilisation des exceptions, …)

Parmi les principales fonctionnalités, on retrouve : OO, typage static, les interfaces, les packages, les exceptions checked, unicode, la reflexion, les classloaders, les threads, …

Les concepts de la JVM ne sont pas nouveaux mais ils assurent le succès de Java : portabilité, sécurité, gestion de la mémoire, ...

Mais Java souffre de son ancienneté : certains choix historiquement bon ne le sont plus forcement maintenant, par exemple :

  • les exceptions checked (bonne idée théorique mais mauvaise en pratique car le code ne peut pas savoir si l’appelant sera en mesure de gérer l’exception)
  • les primitives : utilisées pour des questions de performance
  • arrays
  • les monitors (utilisés avec le mot clé synchronized) : une approche simple mais maintenant peu adaptée
  • static
  • surcharge des méthodes : difficile pour les développeurs et le compilateur
  • wildcards dans les generics : avec une implémentation qui utilise le concept d’erasure pour maintenir la compatibilité ascendante
  • patterns : il y en a énormément dans Java (Javabeans, reflexion, immutability, factory, ...)

Java évolue difficilement car il faut maintenir la compatibilité même si elles sont possibles (voir Java SE 7 et 8)

Le prochain langage majeur de JVM devrait prendre compte les enseignements tirés de Java : avoir des propriétés, les closures, function type, method references, gestion des null, être bien outillé, ...

Le prochain langage majeur de la JVM n’est ni Scala, ni Groovy , ni Fantom : il n’est pas encore là mais cela pourrait être un « Java NG » incompatible avec Java.

 

Vaadin – rich web applications in Java without plug-ins or Javascript

Joonas Lehtinen est le fondateur et CEO de Vaadin.

Vaadin repose sur le concept de server-side RIA. Joonas nous expose les points forts et les points faibles de ce concept notamment la montée en charge puisque l’état est conservé côté serveur et qu’une application Vaadin ne puisse pas fonctionner en mode offline.

J’apprécie toujours lorsque l’on parle des points forts mais aussi des points faibles d’un produit, d’un outil ou d’une technologie.

Les points forts sont la vitesse de développement (vraiment démontrée lors de la démo) et la richesse de l’interface qui utilise GWT.

La démo live de 20 minutes m’a bluffé en développement from scratch une application web capable de lister des documents HTML contenus sur le serveur, d’en sélectionner un pour l’afficher ou le modifier.

La présentation m’a vraiment donné envie de regarder Vaadin dont j’entends parler depuis un moment.

 

Performance anxiety par Joshua Bloch

La salle est archi-comble avec de nombreuses personnes devant l’écran assises par terre (j’étais moi-même dans les escaliers). Joshua Bloch et le sujet de la performance font recette.

La présentation courte mais intéressante insiste sur le fait que la mesure de la performance est maintenant très complexe.

Le benchmarking est une activité très complexe. La performance peut revétir plusieurs aspects : disponibilité, temps de réponse, temps de latence, throughput, ...

La mesure de la performance peut prendre différentes unités : instructions par seconde, utilisation des ressources, utilisation de l’énergie, ...

De nombreux facteurs peuvent modifier les résultats de l’exécution d’un benchmark.

Il faut effectuer des séries de mesures et calculer des statistiques sur les résultats. Les benchmarks doivent reposer sur des outils qui mettent en œuvre des best practices comme Google Caliber par exemple.

 

Improve the performance of your Spring App par Costin Leau

Costin Leau nous présente l’intégration et l’utilisation de caches dans la prochaine version de Spring (3.1).

L’utilisation de cache est la solution la plus commune pour améliorer les performances et ce à tous les niveaux : OS, serveurs, applications (ORM, pages web, injection de dépendances, réplication de sessions, …)

Pour aller encore plus loin, notamment en permettant la distribution des caches, il y a les data grids (GemFire, Gigaspaces, GridGain, Terracotta, Coherence, …)

La prochaine version de Spring (3.1) propose de faciliter l’utilisation des caches dans les applications en offrant une abstraction utilisable via les annotations @Cacheable, @CacheEvict.

 

mardi, novembre 16 2010

Une journée Java EE 6 à Devoxx 2010

J'ai consacré toute ma seconde journée à Devoxx à Java EE 6.

 

Java EE 6 Tutorial : Reloaded

La matinée a été consacrée à l'université d’Antonio et d’Alexis.

Comme l'année dernière, cette université propose un tour d'horizon de la version 6 de la plate-forme Java EE, un petit moins d'un an après sa sortie.

Pour avoir assisté à leur présentation l'année dernière, j'ai particulièrement apprécié les ajouts fait à leur présentation : couverture de CDI, démos avec Oracle Glassfish v3 bien sûre mais aussi RedHat JBoss AS 6 millestone 5, démos de différentes parties clientes (Java FX, GWT, Android) qui consomment des services web de type Restful.

Antonio termine par un bilan de l'adoption de Java EE 6, un an après sa sortie notamment avec le support en cours par un nombre croissant de serveurs d'applications notamment IBM Websphere, Oracle Weblogic, Apache Geronimo mais aussi Caucho qui travaille sur une implémentation du Web Profile.

Avec 15 démos réussies, une salle quasi remplie et des speakers excellents qui maitrisent bien leur sujet, l'université a été un succès.

 

Entre midi, j'ai profité de la session de dédicaces pour en avoir une du livre "Groovy in Action" par Guillaume Laforge.

 

HOL Java EE 6

L'après midi est consacrée à de la pratique avec Java EE 6 pour un hands-on lab dirigé par Alexis et Antonio.

3 sujets ont été couverts pour permettre d'utiliser Java EE 6 with Glassfish 3.0 et Netbeans 6.9.1 : JSF, JAX-RS et CDI

L'idée des hands-on labs proposée cette année par Devoxx est intéressante car elle permet de mettre les mains sur le clavier et de pratiquer en petit comité en profitant de l’expérience et des informations fournies par le ou les responsables du lab.

 

Java EE 6 tooling

Ludovic Champenois nous propose un rapide aperçu des outils disponible pour mettre en oeuvre Java EE 6.

Deux serveurs d'applications sont disponibles : GlassFish et TMaxSoft. D’autres sont en cours de développement.

Java EE 6 a de gros impacts sur les outils : nouvelles APOI, nouveaux concepts, nouveau packaging.

Les principaux IDE proposent un bon support de Java EE 6 :

_ Netbeans depuis la version 6.8 (decembre 2009) : livré avec Glassfish

_ Eclipse depuis la version 3.6 (juin 2010)

_ IntelliJ depuis la sortie de Glassfish 3.0

JDeveloper n'est pas Java EE 6 compliant pour le moment.

Oracle s'implique fortement dans les outils : glassfish et netbeans bien sûre mais possède aussi de nombreux commiters pour Eclipse et travaille avec JetBrain pour le support de Java EE 6.

Ludovic nous propose une démo avec les trois IDE.

 

Première journée à Devoxx 2010

Pour ma quatrième participation, Devoxx est toujours une conférence incontournable en Europe de part la qualité des présentations et des speakers, du nombre de participants (3000 cette année), de l'organisation bien rodée.

Cette année, le nombre de participants semble plus important que l'année dernière pour les universités mais surtout il y a beaucoup plus de francophones, ce qui est très sympa.

 

Productive programmer

Neal Ford est un très bon orateur qui nous a proposé une présentation inspirée de son livre "Productive programmer".

La première partie "Mechanics" est composée de quatre thèmes :

_ acceleration : pour réaliser ses tâches plus vite en utilisant les raccourcis clavier, utiliser un presse papier multiple, utiliser les commandes pushd et popd pour revenir dans un répertoire, utiliser le clavier plutôt que la souris, rechercher plutôt que naviguer, utiliser des macros et des templates, ...

_ focus : il faut éliminer les distractions pour se concentrer sur sa tâche. Cela passe par des choses simples mais toujours faciles à mettre oeuvre : avoir une chaise ergonomique et confortable, avoir deux écrans et un bon clavier, avoir les droits administrateurs sur son poste, supprimer les distractions (les notifications, les messageries (fermer ses emails et la messagerie instantanée) car un changement de contexte est coûteux), utiliser des bureaux virtuels, ...

_ canonicality : il faut appliquer le principe DRY (Don'r Repeat Yourself). L'ORM est un des pires contre exemple du principe DRY (database schema + xml configuration + pojo > 1) : il est préférable de partir du DDL est de générer le fichier de mapping XML et le code des POJO

_ automation : il faut faire réaliser certaines tâches répétitives par la machine en utilisant par exemple une commande unique pour faire un build, utiliser l'intégration continue avec un gestionnaire de sources, utiliser selenium ide (remarque perso : lorsque cela est possible car c’est difficile avec certains frameworks) pour reproduire un bug (par les utilisateurs ou les développeurs : l'idée est simple mais je n'y avais jamais pensé), développer sa propre boite à outils de préférence avec des langages de développement (support des IDE, test unitaires, refactoring). Il faut automatiser dès que le ROI se justifie.

 

Dans la seconde partie (Pratices), Neal Force nous propose 10 moyens d'améliorer notre productivité

1. Composed Methods

Les méthodes d'une application doivent uniquement réaliser une tâche bien identifiée et contenir le moins de ligne possible. Cela facilite la réutilisabilité et la testabilité du code. Neal Ford nous propose un exemple de refactoring d'une méthode qui se connecter à une base de données pour retourner des données.

2. TDD (Test Driven Development / Test Driven Design)

Le TDD permet notamment de réfléchir à la façon sont les classes vont être utilisées. Ceci implique de mocker les dépendances, de mettre en oeuvre le principe des composed methods, ...

3. Static analysis

Utiliser des outils d'analyse de code (PMD/CPD) et de byte code (findbugs)

4. Good citizenship

Neal Ford nous rappel qu'il ne faut pas générer automatiquement les getters et les setters : getters + setters != encapsulation !

Il faut éviter les singletons puisque qu'il mixte les responsabilités et sont difficilement testables. Ils sont une version objet des variables globales décriées dans d'autres technologies. Il est préférable de créer un pojo qui contient les traitements et une fabrique pour créer l'unique instance du pojo en utilisant l'introspection pour invoquer le constructeur privé du pojo.

Neal nous fournit un exemple de la pire classe du JDK : la classe java.util.Calendar qui est connue pour sa mauvaise conception. Il est préférable d'utiliser d'autres implémentations comme JodaTime.

5. YAGNI (you ain’t gonna need it)

L'idée est de n'utiliser que ce que l'on a besoin.

Les meilleurs frameworks sont ceux qui sont extraits d'une application et pas ceux qui sont développés from scratch.

Comme exemples, Neal Ford nous propose le « Ten top corporate code smells » (dont certains m'ont bien fait rigoler)

  • 1. There is a reason that WSAD isn’t called WHAPPY.
  • 2. The initial estimate must be within 15% of the final cost, the post-analysis estimate must be within 10%, and the post-design estimate must be with 5%
  • 3. We don’t have time to write unit tests (we’re spending too much time debugging)
  • 4. We keep all of our business logic in stored procedures...for performance reasons.
  • 5. The only JavaDoc is the Eclipse message explaining how to change your default JavaDoc template.
  • 6. We have an Architect who reviews all code precheckin and decides whether or not to allow it into version control.
  • 7. We can’t use any open source code because our lawyers say we can’t.
  • 8. We use WebSphere because...(I always stop listening at this point)
  • 9. We bought the entire tool suite (even though we only needed about 10% of it) because it was cheaper than buying the individual tools.
  • 10. We invented our own web/persistence/messaging/caching framework because none of the existing ones was good enough.

6. Question authority

Il faut être capable de remettre en cause certaines choses établies, par exemple :

_ les conventions de nommages des méthodes de tests unitaires (qui sont plus lisibles avec des underscores plutôt qu'avec le Camel Case)

_ mettre en oeuvre le pair programming : cela prend plus de temps mais le code produit contient moins de bugs

_ le chaînage des méthodes plutôt que d'utiliser les setters imposées par la convention JavaBeans : il est préférable d'utiliser les fluent interfaces

7. Slap (Single Level of Abstraction Principle)

8. Polyglot programming

Utiliser le langage le mieux adapté à la tâche à réaliser, par exemple Scala ou jaskell pour les traitements fortement multithreadés, grails ou jruby on rails pour la productivité sur des applications web

9. Every nuance

Il ne faut pas obligatoirement maintenir certaines idées diffusées historiquement, par exemple le fait que l'API Reflection soit lente (vrai dans les années 90 mais plus vrai et vraiment pratique dans certaines circonstances).

10. Anti-objets

Ce sont des objets qui sont à l'opposé de ce qu'ils devraient faire par exemple parce qu'ils sont trop inspirés de la vie réelle.

Je n'ai pas encore lu son livre mais sa présentation m'a vraiment donné envie de l'acheter

Il est possible de télécharger les slides de ces présentations dans différents événements (dont celles de Devoxx cette année) à l'url http://nealford.com/mypastconferences.htm

 

Extreme Productivity with Spring Roo

Ben Alex et Stefan Schmidt nous ont proposé un tour d'horizon de Spring Roo.

Récemment la version 1.1 de Spring Roo a été publiée et elle apporte de nombreuses fonctionnalités par rapport à la version 1.0.

De nombreuses démos nous ont permi de se rendre compte de la productivité de Roo pour développer des applications web soit en utilisant le shell fournit par Roo ou en utilisant l'outil STS de SpringSource qui est téléchargeable gratuitement et offre un support pour Roo.

L'extensibilité est assuré par un système de add-on qui enrichit Roo de fonctionnalités.

 

Tools in action : Mylyn

Oliver Gierke de SpringSource nous propose une rapide présentation du plug-in Mylyn d'Eclipse et des avantages apporté par ce plug-in pour améliorer notre productivité de codeur (focus, productivity, traceability).

Il permet de gérer des tâches fournies par un gestionnaire de sources (généralement un gestionnaire de bug tel que BugZilla, RedMine, Jira, ... )

L'utilisation du plug-in commence par la configuration de ce gestionnaire de sources.

Une fois une tâche activé, celui ci se charge de maintenir un contexte de travail dans Eclipse.

Oliver termine sa présentation en nous parlant de SpringSource Code2Cloud.