Groovy 2.0 va vous plaire !


Si vous aimez Java et que vous ne connaissez pas Groovy, je vous invite à découvrir ce langage très addictif !

Présentation de Groovy

En deux mots, Groovy est un langage dynamique, fortement typé qui s'exécute sur la JVM et qui a l'avantage d'avoir une syntaxe très proche de Java et qui propose :

  • une syntaxe plus concise (avec le support natif des listes, des maps, du JSON, du XML, ...),
Exemple : def codesPostaux = [ 44000 : "Nantes", 75000 : "Paris" ]
  • un JDK Java enrichi de nouvelles fonctionnalités, qui permet d'écrire le code suivant : voir le Groovy JDK,
 Exemple : new File("fichier.txt").eachLine{ line -> println line }
Exemple : use(TimeCategory) { println 1.minute.from.now }
  • permet de modifier le comportement d'une classe ou d'une instance au runtime (via sa métaclasse). Voir définition du monkey-patch,
  • un support du scripting,
  • et plein d'autres choses...

Inconvénients de Groovy 1.8

Malgré tous ses avantages, Groovy, de part son comportement dynamique, concède quelques faiblesses (pour les développeurs Java) :

  • ses performances pures sont moins bonnes que Java (plus significatif sur du calcul que pour des traitements métiers),
  • seule la sémantique est vérifiée à la compilation, pas le code
  • le comportement de votre classe peut être modifié dynamiquement

Groovy 2.0 pour satisfaire tout le monde

Groovy est à l'écoute de la communauté Java et la version 2.0 va certainement plaire à beaucoup de monde.

Pourquoi ?

Tout simplement parce que Groovy 2.0 permettra au développeur de choisir de combler les faiblesses évoquées en activant au niveau d'une classe ou d'une méthode :

  • La vérification statique de code via l'annotation @TypeChecked
  • La compilation statique via l'annotation @CompileStatic

Vérification statique

La vérification statique de code ne change pas le comportement de Groovy mais permet de vérifier à la compilation que tous les attributs ou méthodes utilisés sont connues par le compilateur. Cela évite de faire des erreurs du style :

println "hello world".len() //méthode inexistante

Bien évidemment, si vous avez besoin du comportement dynamique, il ne faudra pas ajouter l'annotation.

Compilation statique

La compilation statique quant à elle désactive toutes les fonctionnalités dynamique de Groovy et produit du bytecode Java plus "standard" (appel de méthode directe, ...). Les impacts directs sont des gains de performances (du niveau de Java) et des erreurs détectées à la compilation (plus stricte encore que lors de la vérification statique).

Cette fonctionnalité est en cours de développement et certains choix d'implémentation reste encore à faire, principalement au niveau des appels de méthodes.

Pour présenter le dilemme, prenons le code suivant :

def foo(Object o){ println 'object' }
def foo(Date d){ println 'date' }
 
Object date = new Date()
foo(date)

En Java, l'exécution de ce code affiche object car le lien vers la méthode est fait à la compilation à partir du type déclaré de l'attribut date. C'est d'ailleurs une erreur que l'on fait souvent en tant que développeur Java. On pense que la bonne méthode sera appelée, ... et non ! En groovy, le compilateur est un peu plus intelligent et sait que le type de l'attribut date est java.util.Date. Selon le code, il est possible que le compilateur Groovy ne puisse pas déterminer le type d'une variable. C'est pourquoi, le comportement standard de Groovy est de résoudre le type au runtime pour appeler la méthode la plus adéquate.

La question qui se pose est donc : "Le lien vers la méthode doit-il se faire" :

  • A partir du type déclaré, comme en Java,
  • A partir du type inféré par le compilateur Groovy.
  • A partir du type exact au runtime.

L'idéal est sûrement la dernière solution, mais ce serait forcément moins "statique", car il faudrait analyser le type de la variable pendant l'exécution puis faire un appel par réflexivité ... et adieu aux perfs.

En tant que développeur, avec Java, soit on est conscient du comportement, et il faut ajouter les (Cast) explicitement pour avoir ce comportement, soit on ne sait pas et l'exécution du code n'est pas toujours celui attendu.

Je me dis donc que si groovy peut en faire une partie, autant le prendre. Donc je pencherai pour la solution 2, mais quoi qu'il en soit, l'important est de connaître la règle.

D'ailleurs, même en Java, il y a plein de "corner case" que peu de développeur connaissent. Par exemple, d'après vous, que ce passe t'il si on exécute ce code :

class Base { 
    public  String name = "Base"; 
    public  String getName() { return name; } 
} 
 
class Sub extends Base { 
    public String name = "Sub"; 
    public String getName() { return name; } 
} 
 
public class Program { 
    public static void main(String[] args) { 
        Sub s  = new Sub(); 
        Base b = s; 
        System.out.println(b.name); 
    } 
}

Pour finir sur le choix à propos de l'appel de méthode, pour ceux qui préfèrent le comportement Groovy, il est toujours possible de ne pas activer la compilation statique, ou bien d'ajouter le (Cast) pour avoir ce comportement :

def foo(Object o){
    if (foo instanceof Date){
        foo((Date)o)
    } else {
        println 'object'
    }
}

Et vous, quel est votre avis ? N'hésitez pas à le donner en ajoutant un commentaire à cet article.

Utilisez Groovy comme il vous semble

En résumé, Groovy 2.0 essaye de combler certaines frustrations exprimées par la communauté Java, sans pour autant changer sa philosophie. Groovy reste un langage dynamique, mais permet de désactiver certaines de ces fonctionnalités si vous n'en n'avez pas besoin, pour gagner au niveau de la vérification du code et en performance.

Si vous voulez en savoir plus sur ces fonctionnalités, je vous invite à lire la très bonne présentation de Cédric Champeau de vmware que vous trouverez à cette adresse.

Vous trouverez également plus de documentation sur le site des GEP (Groovy Enhancement Proposal) et sur le blog de Cédric.

Je n'ai pas parlé de l'utilisation de invokeDynamic au niveau du bytecode Groovy qui est aussi une des features proposées pour les utilisateurs de Java7, mais vous pouvez trouver plus d'info sur cette page du site de Groovy

D'ailleurs, si vous souhaitez tester ces fonctionnalités et faire avancer Groovy, vous pouvez télécharger la version 2.0 beta sur le site de Groovy, et pour la compilation statique, qui est présent à partir de la béta 3, vous devez télécharger la version snapshot ici en attendant la version béta.

J'espère vous avoir donné envie d'essayer Groovy !

Manuel

Télécharger la béta de Groovy (pour la compilation statique ;..)

Coherence Part V : optimisations des requêtes avec des index


Dans l'article précédent, nous évoquions la possibilité de créer un index sur le cache afin d'accélérer les recherches en évitant de de-sérialiser l'ensemble des entrées du cache pour appliquer le filtre. Nous allons voir comment faire !

Lire la suite...

Retour sur la Nuit de l'info 2011


Il y a un mois a eu lieu la quatrième édition de la Nuit de l’info. Cet évènement annuel organisé au sein de différentes universités partout en france a pour but de regrouper des étudiants, au cours d’une nuit, afin de relever plusieurs défis associés à un sujet commun révélé uniquement au début de la nuit.

Le sujet de cette année était de développer une application de suggestion de cadeaux basés sur vos préférences définies sur vos différents réseaux sociaux.

Cette année encore, les étudiants ont répondu présent : 1361 participants pour 144 équipes répartis dans 22 villes différentes avec à leur disposition 30 défis proposés par des partenaires académiques et industriels.

Zenika et l’agilité


Pour poursuivre son implication dans le domaine de l’agilité et afin de continuer les différentes actions déjà mises en oeuvre pour promouvoir les méthodes agiles auprès des étudiants; Zenika proposait pour la deuxième année consécutive son défi de l’Agilité. Le but étant de mettre en place, dans un contexte certes spécial (une seule nuit de développement), les bonnes pratiques liées aux méthodes agiles, mais également savoir expliquer en quoi ces méthodes ont pu aider les équipes dans leur travail tout au long de la nuit.

Résultats


De nombreuses équipes ont participé à notre défi et les délibérations ont été longues pour arriver à les départager. Parmi toutes les soumissions, c’est finalement l’équipe “Les Fruits du chêne” de Sophia-Antipolis qui l'a emporté, grâce à une organisation méthodique et une bonne mise en avant de l’utilisation des méthodes agiles.

Leur mur de post-it au cours de la nuit :

Mur_postit

Enfin, pour finir sur une note amusante, voici une vidéo réalisée par l’équipe MiProd de l'Ecole Nationale Supérieure de Saint Etienne dans le cadre des différents défis “buzz” de la nuit, reprenant le concept de la série télévisée “Bref” : http://www.youtube.com/watch?v=mOgumvEVcNk

Coherence Part IV : extracteurs et recherches distribuées sur le cluster


Cet article est la suite du précédent, qui montrait comment réaliser des recherches distribuées sur le cluster avec des filtres. Celui ci va plus loin et expose le mécanisme d'extraction des données à présenter au filtre à partir des entrées du cache.

Lire la suite...

Grails 2.0 - Nouveautés et retours d'expériences


Moins attendu que Spring 3.1 mais pourtant tellement lié, Grails 2.0 est sorti hier.

Mon équipe et moi même étions impatient car la sortie de cette version majeure était planifiée depuis plusieurs mois mais sans cesse retardée pour attendre la release finale (GA) de spring 3.1. Cela fait en effet déjà deux mois que je travaille sur la béta, puis les releases candidates, mais sortir un produit basé sur une RC, c'est pas sérieux.

Développeur Grails depuis 3 ans, je vais vous détailler les nouveautés les plus marquantes de Grails 2.0 et de son écosystème en essayant d'aller un peu plus loin que ce qu'on peut trouver habituellement dans les RELEASES NOTES.

Lire la suite...

Nouvelle formation : Java Concurrency In Practice


JCIPNous avons le plaisir de vous annoncer qu'une nouvelle formation exclusive devrait être disponible en 2012 : Java Concurrency In Practice.

Si le nom vous dit quelque chose, c'est normal : c'est le titre du livre de Brian Goetz, Doug Lea, Tim Peierls, Joshua Bloch... qui fait référence sur le domaine de la programmation parallèle/concurrente en Java.
La formation est basée sur le livre, sous la supervision des auteurs, et est développée par Heinz Kabutz, auteur de la fameuse newsletter et de la formation Java Specialist que nous vous proposons déjà.

Il s'agit donc d'une formation d'excellence, ciblant particulièrement les architectes et leaders techniques.

La formation devrait être disponible à partir de mi-2012, nous aurons donc le temps de vous en reparler.

Coherence Part III : Filtres


Les datagrids fournissent des mécanismes de recherche de données adaptés à leur caractère distribué. Chaque requête est envoyée à chaque noeud du cluster qui retourne une partie du résultat, à la manière de Map/Reduce. En parallélisant le traitement, les datagrids tirent parti de toute la puissance de calcul du cluster.
Dans cet article, nous allons voir comment utiliser les filtres Coherence pour effectuer des recherches optimisées.

Lire la suite...

Eclipse Day Paris 2011 : Retour sur les 10 ans


Mardi 08 novembre, nous avons eu le plaisir de fêter les 10 ans d'Eclipse lors de la conférence dédiée aux technologies Eclipse, l'Eclipse Day Paris.

A cette occasion toute la communauté, y compris la Fondation Eclipse , s'est réunit au Pavillon Royal pour échanger et partager autour de la plateforme.

Ce second rassemblement a rencontré un véritable succès regroupant plus de 130 personnes qui ont bravé les grèves pour venir assister aux 14 conférences et workshop de la journée.

Lire la suite...

Salle comble pour la What’s Next Replay ! Lyon


Beau succès pour la What's Next Replay ! Lyon organisée par Zenika ce jeudi 10 novembre en partenariat avec le Club Agile Rhône-Alpes Lyon et le Lyon JUG.

Bandeau What's Next Replay Lyon

Une cinquantaine de personnes ont assisté à cet évènement qui a permis de revenir sur les moments forts de la conférence What’s Next 2011, avec le décryptage technique de trois des principales sessions par nos consultants Zenika.

Arnaud Cogoluègnes a lancé la matinée en présentant la Keynote « Quel avenir pour le développement des applications d'entreprises ? » d'Adrian Colyer (CTO de SpringSource). A quoi ressemblent les nouvelles applications d’aujourd’hui voire de demain ? Comment des outils tels que le cloud computing et les bases de données NoSQL peuvent vous aider à les construire ? Et enfin, comment des technologies telles Spring et Cloud Foundry permettent de répondre à ces problématiques ? Voilà quelques questions auxquelles Arnaud a répondu.

Guillaume Darmont a ensuite fait le point sur l’intégration continue et ses évolutions suite à l'avènement de technologies comme la virtualisation, le Cloud ou encore les DVCS (Distributed Version Control System). Il s’est pour cela appuyé sur la présentation « Allez plus loin dans l'intégration continue avec Jenkins » de Kohsuke Kawaguchi (Jenkins/CloudBees). Après ses explications, nous avions tous envie de nous précipiter sur Jenkins ou sur un DVCS tel Git !

Cette matinée technique s’est terminée par la présentation de la keynote « Accélérez et optimisez vos développements d'applications mobiles » de Michaël Chaize (Adobe) par François Fornaciari (Zenika). François nous a notamment donné un aperçu de la technologie Flex Mobile qui permet de développer une seule fois son application, en technologie Flex, et de la déployer ensuite indifféremment sur plateforme, Android, iOS ou BlackBerry. Le buzz généré autour de l’annonce récente de l’abandon de Flash Player Mobile par Adobe et du recentrage de sa stratégie autour de Flex ne pouvait pas mieux tomber ;)

Vous trouverez ci-dessous les supports des trois présentations ainsi que le lien vers les vidéos filmées pour l’occasion et publiées sur Developpez.tv.

Lire la suite...

What's Next 2012 : RDV le 14 et 15 juin !


A vos agendas : le compte à rebours pour la nouvelle WSN est lancé !


Réservez vos 14 et 15 juin prochains, la What's Next Conférence revient pour une seconde édition !

La technique sera indéniablement au cœur de ce nouveau rassemblement des technologies IT, avec plein de surprises en perspective.

Passez le mot aux passionnés de votre entourage et rendez-vous donc les 14 et 15 juin 2012 !

WSN 2011

- page 1 de 25