Recherche

Coder's IO

Java BarCamp version 8

 

Qu’est ce qu’un Barcamp : 
Un BarCamp est une rencontre, une non-conférence ouverte qui prend la forme d'ateliers-événements participatifs où le contenu est fourni par les participants qui doivent tous, à un titre ou à un autre, apporter quelque chose au Barcamp.

Je pense que vous l’aurez compris en lisant cette petite définition tirée de l’article en lien, ce rendez-vous est l’occasion de passer un moment convivial, amical et surtout autour de Java et son écosystème.
Le rendez-vous est fixé le 5 juillet au jardin des tuileries à partir de 19h.
En plus de ses idées et de son regard sur le monde Java, il faut prévoir d’apporter une petite collation.

60 places sont disponibles. vous trouverez en lien un tableau récapitulatif des personnes déjà inscrites et du nombre de places restantes ainsi que les centres d’intérêts de chacun (toujours autour de Java).

Cet évènement est proposé et organisé par : 
+Katia Aresti
+Mathilde Rigabert Lemée
– Julia Mateo

Une liste de diffusion est aussi disponible pour se tenir au courant des dernières nouvelles.

#java #barcamp #rendezvous  

Domain-specific language en Java

 

Avant d’essayer d’écrire un DSL (Domain-Specific Language), il faut bien  comprendre l’objectif de cette démarche.

Qu’est ce qu’un DSL ?

Un DSL est un langage de programmation qui a pour objectif d’adresser un domaine (un problème ?) bien précis. Toute tentative de l’utiliser dans un contexte en dehors de celui pour lequel il a été créé sera vaine.

Un DSL présente l’avantage de pouvoir rédiger du code de manière très expressive. De ce fait, son utilisation permet de transposer plus facilement le besoin exprimé par des fonctionnels en programme informatique. le travail est facilité pour les deux parties et de trouver un langage commun pour communiquer entre les deux mondes. 
D’un point de vue plus général, il permet de rendre lisible et compréhensible une portion de code par des personnes non habituées à lire du code. 

Aujourd’hui, beaucoup de frameworks se basent sur ce type d’approche : 
– Fest-assert,
– LambdaJ,
– Guava,
– Op4j
– fluentLenium
– etc

L’article que je vous propose en lien aborde ce sujet sous l’angle du langage Java. 
Les auteurs de cet article, +Alex Ruiz et +Jeff Bay, traitent plus précisément de l’écriture d’un DSL interne en Java

Au travers de cet article, vous pourrez voir les différents points à comprendre et mettre en oeuvre pour créer un DSL basé sur le langage Java.
L’article a été écrit en 2008, ça date un peu, mais je pense que les concepts ainsi que l’approche à tenir évoqués sont toujours d’actualité et sont bon à connaître, même si nous n’avons pas forcément l’occasion d’avoir à écrire un DSL.

Dans un premier temps, les auteurs expliquent ce qu’est concrètement un DSL interne, ainsi que les avantages et inconvénients qu’il faut avoir à l’esprit en choisissant de l’écrire en Java.

Ensuite, vous pourrez trouver un exemple mettant en évidence l’avantage que présente l’utilisation d’un DSL. Le cas d’utilisation présenté est celui de l’écriture d’une requête SQL.

La troisième partie donne les ingrédients indispensables pour la création d’un DSL. Les éléments principaux qui compose un DSL sont : 
– Une interface fluent,
– Le chainage de méthode

Ce paragraphe nous explique que les deux points identifiés ci-dessus ne sont pas suffisants pour qualifier à 100% que notre langage est un DSL. 
Un exemple basé sur la StringBuilder (que l’on pourrait assimiler à une approche DSL) nous le démontre. En effet, cette classe, au travers de méthodes append() , propose le chaînage de méthode. En revanche, cette classe n’adresse aucun domaine spécifique.

Un point central (aussi) est l’utilisation de méthodes de factories statiques (import static). Ce dernier point permet, entre autres, de rendre le bloc de code plus lisible.

L’article nous expliquera en détail comment implémenter correctement le chaînage de méthodes ainsi que la mise en place de méthodes factories statiques.

Les deux derniers paragraphes sont consacrés à comment organiser le code du DSL et comment le documenter.

Dans la conclusion, les deux auteurs nous donnent leurs points de vue sur les DSLs écrits en Java. Ils expliquent que l’utilisation de Java pour écrire un DSL est un choix que l’on peut faire en fonction du contexte cible. Il faut mettre en balance les avantages et inconvénients que présente la solution.

Personnellement, je trouve cet article très intéressant sur le sujet abordé, les concepts donnés et les explications fournies sur la mécanique interne d’un DSL.

#java #DSL #concept

iBATIS – MyBatis

 

La gestion de la persistance dans une application se fait dans la plupart des cas par l’intermédiaire d’un framework de persistance type Hibernate, EclipseLink, etc.
Ils  font partie de la famille des ORMs. 

Ces outils apportent un certain confort et permettent de s’abstraire quasiment de la manipulation du SQL.
C’est très pratique et confortable ; en revanche ils peuvent présenter un inconvénient en terme de complexité d’utilisation.
En effet, dans certains cas, le mapping objet-relationnel peut être difficile à formaliser, ce qui oblige à écrire une requête en SQL natif (ou alors tordre l’outil)

Aujourd’hui (et depuis un moment déjà), il existe une alternative aux frameworks évoqués. Elle se situe entre le pur JDBC et l’ORM très sophistiqué.
L’alternative en question se nomme iBatis (ou MyBatis, depuis les versions récentes).

L’article en lien à ce post, fait une présentation de l’outil en question. L’auteur décrit les principes sur lesquels se base le framework.

Ensuite, il décrit la manière de déclarer le mapping entre les objets et la table. Dans ce paragraphe, on pourra voir les positifs et négatifs de l’outil (du point de vue de l’auteur)

Note : Il est important de noter que contrairement à un framework type Hibernate, iBatis n’a aucune connaissance directe de la structure des tables.

Pour résumer rapidement, le mapping se fait entre le résultat d’une requête SQL et les attributs d’un POJO. Ce maping est fait de manière déclarative dans un fichier XML ou par annotation. Il y a aussi la possibilité de faire un mapping dynamique en se basant sur le nom des attributs.

Cela veut dire, implicitement, que la construction des requêtes est faite en SQL standard, et ensuite vient la déclaration du mapping. A aucun moment, iBatis gérera la construction d’une requête. Vous pourrez voir des exemples dans l’article.

Dans le paragraphe suivant, il évoque la notion de sessionFactory pour ce qui est de la gestion du contexte de persistance. 

Note : MyBatis s’intègre avec Spring.

A l’instar du mapping dynamique, il est possible d’avoir des requêtes dynamiques qui, par rapport à un contexte 'données', vont pouvoir conditionner le contenu de la clause WHERE.

Comme tous outils de persistance de type ORM, on a à disposition un outil permettant d’optimiser le temps passé pour faire le mapping initial. C’est ce que nous présente l’auteur dans la paragraphe : MyBatis Generator.

Cet outil présente des avantages et des inconvénients. Je pense que cet outil peut adresser des projets ayant une taille modérée.
Il a le mérite d’avoir une approche très pragmatique vis à vis de la gestion du mapping.

C'est un outil que l’on n'utilisera pas forcément tous jours. Mais je pense qu’il est important de connaitre son existence et de bien comprendre ses mécanismes. A lire donc et à ajouter aux favoris 🙂

#java #myBatis #iBatis #orm #basededonnées  

Clean Code : The Boy Scout Rule

 

Je vous propose de (re)parler d’un sujet périphérique au thème central de cette page, mais qui reste une préoccupation importante de tout bon développeur qui se respecte.
Pour autant, les exemples sont en Java, ainsi que les outils utilisés 🙂

En effet, l’article que je vous propose aujourd’hui traite du sujet : coder proprement.

Le thème principal de l’article se base sur un principe qui avait été écrit par  _Robert Stephenson Smyth Baden-Powell_, le fondateur du Scoutisme :

    Try and leave this world a little better than you found it
    Essayez de laisser ce monde un peu meilleur que vous l'avez trouvé

Vous me direz, mais quel rapport avec le monde du développement ?
En fait, Robert C. Martin a repris le concept de cette phrase en l’adaptant à notre univers de développeur. The boy scout Rule est une application du principe d’amélioration continue au niveau du code.
En livrant un code dans un état plus propre que celui où nous l’avons trouvé, alors le code ne risque pas de se détériorer, voire de s’améliorer.

L’article que je vous propose en lien décrit la mise en application du principe énoncé ci-dessus.

La forme de l’article est original. Il décrit l’échange de deux développeurs en train de travailler sur un bug en binôme.
L’objectif final est de corriger ce fameux bug. Les deux codeurs tenteront de mettre en œuvre les règles du Boy scout.

L’auteur, +Mathieu Gandin, à travers ce dialogue, nous montre les différentes étapes réalisées pour :
    – corriger le bug,
    – améliorer la lisibilité du code,
    – augmenter la couverture de code testé

Aussi, ce coding live sur papier est l’occasion de montrer certains tips comme l’utilisation d’un framework de mock.

La forme originale et le sujet traité de cet article en font une lecture très intéressante et enrichissante. A lire et à conserver dans ses favoris !
   
#java #clean #mock #scout #rule

Thread dump java : le casse-tête…

 

Il existe plusieurs manières pour identifier des problèmes survenant dans la JVM. Une des voies que l’on peut exploiter consiste à générer une photo des threads de la JVM à un instant t.

En règle générale, cette piste n’est pas souvent exploitée pour la simple raison que la lecture et l’analyse de cette image n’est pas toujours triviale.

L’article mis en lien fournit les clefs permettant d’appréhender les informations pertinentes contenues dans ce fichier.

Dans un premier temps, l’auteur va rappeler différents points sur Java et les threads. Ensuite, il abordera les différents attributs caractérisant les threads en Java : 
– La synchronisation,
– les états d’un thread,
– les types de thread.

Après avoir fait ces rappels, il nous explique les différents moyens d’obtenir un dump d'un thread : 

– Utilisation de JStack
– Utilisation de JVisualVM
– A partir d’un terminal Linux.

La dernière partie de l’article est consacrée au décryptage des informations contenues dans le dump.

Tout d’abord, il décrit les attributs clefs du fichier : 
– Thread name,
– priority,
– thread Id,
– thread status,
– thread callStack.

Ensuite, l’auteur présente les différents patterns identifiables par rapport à l’état et au status des threads.

On trouvera ensuite les solutions que l’on peut appliquer face à certaines situations :
– Lorsque l’usage du CPU est anormalement élevé
– Lorsque les performances sont anormalement lentes

ainsi que des conseils par rapport à la façon de coder afin d’améliorer la compréhension du dump.

Un article intéressant à lire et à comprendre pour pouvoir appliquer ces techniques dans la vraie vie 🙂

#java #thread #dump #decryptage

LambdaJ

 

Dans un post précédent, je vous avais parlé des différentes façons de manipuler les collections.
Suite à cet article, +Ronan Michaux  a indiqué un pointeur vers une librairie proposant des fonctionnalités vraiment intéressantes pour la manipulation de collections et plus encore.

Un peu d’histoire..
Ce projet a été initié par +Mario Fusco  en 2009. L’idée originelle du projet est d’augmenter la lisibilité du code et d’éliminer les codes répétitifs que l’on retrouve dans chaque boucle que l’on a à écrire.
Au départ, le créateur du projet a commencé par écrire des méthodes utilitaires et un petit DSL afin de rendre le code plus lisible et plus pratique à utiliser.
Les membres de l’équipe dans laquelle travaille Mario adhèrent immédiatement au projet et commence à l’utiliser quotidiennement.
Face à ce succès, il décide de refactorer ses composants et de les intégrer dans une API indépendante.
La dernière étape de cette mutation a été de choisir le nom de la librairie 🙂

Les fonctionnalités

LambdaJ permet, sur une collection, de : 

– Filtrer les éléments d’une collection, 
– Définir statiquement les propriétés d’un objet,
– Agréger les items d’une collection ou les valeurs des items,
– Joindre des chaînes de caractères,
– Transformer, indexer et trier les items d’une collection,
– Effectuer des regroupements d’items,
– Effectuer du mapping d’objet à objet.

Lorsqu’il s’agit de définir des conditions, typiquement pour la première fonctionnalité citée, LambdaJ se base sur Hamcrest, le framework utilisé principalement dans le cadre de tests unitaires sur la base d’un DSL.

L’ensemble de ces fonctionnalités, comme nous l’évoquions en introduction, vient remplacer les bonnes vieilles boucles itératives (for, while, do).

La syntaxe se base sur un DSL qui permet de rendre le code produit très clair et très expressif. Je vous laisse voir les exemples en suivant le pointeur suivant : http://code.google.com/p/lambdaj/wiki/LambdajFeatures
Comme la syntaxe, les exemples proposés sont très clairs.

Les closures

Le projet propose également une implémentation des Closures. Les closures donnent la possibilité de rendre du code générique pour 95% et de spécialiser les 5% qui restent en respectant le pattern ouvert/fermé.

Les closures proposent un certain nombre de méthodes permettant de gérer facilement le nombre de paramètres que l’on pourra transmettre à la closure.
Aussi, dans le cadre d’une closure définissant un nombre de paramètres fini, il est possible de fixer la valeur de certains de ces paramètres.

Il est possible  de caster des closures dans certaines interfaces afin de pouvoir les manipuler au travers de ces interfaces.
La liste des possibilités concernant les closures n’est pas exhaustive, je vous invite à vous référer à la documentation pour approfondir le sujet.

Étendre la librairie

LambdaJ offre plusieurs interfaces afin de pouvoir introduire les problématiques métier de chacun.

Par exemple :
– personnaliser la conversion d’objet en implémentant l’interface Converter
– enrichir un filtre en étendant la classe LambdaJMatcher

Les performances

Sur le site du projet, on peut trouver un benchmark permettant de mettre en évidence le gain apporté par LambdaJ par rapport à l’utilisation classique des boucles.

En conclusion

Je trouve que par rapport à Guava, la syntaxe proposée ainsi que les fonctionnalités dans LambdaJ sont un cran au-dessus.

Cette librairie est en avance sur son temps, si l’on considère les fonctionnalités proposées dès sa création. En effet, depuis un certain temps maintenant, l’idée d’avoir les lambda expressions natives dans Java est évoquée dans les futurs versions du JDK. Aujourd’hui, nous ne l’’avons pas encore dans le langage ; il faudra attendre la sortie de la version 8 du JDK pour cela.

En attendant, cette librairie permet d’adresser largement les possibilités  de manipulation des collections et des closures. 
Le projet a encore de beaux jours devant lui avant que la version 8 du jdk ne sorte et que celle-ci soit intégrée dans les entreprises.

De mon coté, j’ai ajouté la dépendance sur le projet sur lequel je travaille 🙂

#java #lambdaj #collection #closure #manipulation #data

Google IO Extended

 

Cette année, la conférence Google IO se tiendra du 27 au 28 juin. Google IO a lieu aux États-Unis, plus précisément à San Francisco. Ce rendez-vous annuel est l’occasion de faire un tour d’horizon de toutes les nouveautés autour de l’écosystème technologique de Google.
De par la distance, la participation à l’évènement peut être compliquée.

C’est pour cette raison (entre autres) que le GTUG Nantes organise "Google IO Extended".
L’évènement se déroule autour de la retransmission en direct des différentes sessions de la conférence originale. La participation est entièrement gratuite.

Cela se passera sur 2 jours, les 27 et 28 juin à partir de 18h. Le programme des deux soirées est le suivant : 

Mercredi 27 juin 

– Validation des inscriptions
 – KeyNote Jour 1
 – Interview Q/R avec Google
 – BarCamp
 – Retransmission Live des sessions

Jeudi 28 juin 

– Validation des inscriptions
 – BarCamp
 – Retransmission Live des sessions

Lors de la première soirée, un espace démo sera ouvert afin que les participants puissent présenter leurs travaux réalisés autour des technologies Google.

Au delà du fait de suivre en direct la conférence se déroulant aux États-Unis, ce sera aussi l’occasion de partager un moment d’échange et de convivialité autour d’un verre. Aussi, d'éventuelles sessions de CodeLab et Hackathon pourront être organisées.

Le programme des retransmissions est disponible en suivant le lien joint au post. Il est important de souligner que l’ensemble des conférences retransmises sont en anglais.

Aussi, en allant directement sur le site de Google IO, vous trouverez un jeu/animation. Cette réalisation est très réussie et donne un avant goût de la teneur de la conférence de San Francisco.

#java #android #googleio #conférence

Spring for Android 1.0.0 Released

 

Le 30 mai 2012, SpringSource a annoncé la sortie de la première release du projet Spring pour Android.
L’objectif de ce module est de permettre l’usage du framework Spring au sein d’un environnement Android.

Les fonctionnalités actuellement proposées sont : 
– un client REST pour android
– Le support de OAuth

4 milestones et une release candidate ont été nécessaires pour sortir la première release.

les archives nécessaires pour intégrer ce module dans votre application Android sont disponibles sur les repositories Maven.

Cette annonce peut adresser deux types de profil : 
– les inconditionnels de Spring, souhaitant faire une application Android
– Les experts Android qui souhaiteraient se mettre à Spring

(choisissez votre profil 🙂 )

La documentation est assez complète.

#java #android #mobile #spring

Oracle : Sortie de NetBeans 7.2 bêta

Oracle vient de publier la version 7.2 bêta de NetBeans.

Pour mémoire :

NetBeans est un IDE qui a vu le jour en 1997 au travers d’un projet d’étudiant au sein d’une université à Prague.
Le projet évoluera vers la création d’une société et la vente de versions commerciales. En 1999, l’entreprise est rachetée par Sun. Au mois de juin de l’année suivante, NetBeans passe sous licence CDDL et GPL2.

Les fonctionnalités de base :

– Traitement du code source,
– Fonction d’import / export depuis ou vers un autre IDE,
– Accès et gestion de différentes ressources (BDD, Serveur, etc),
– Gestion des tâches,
– Support de plusieurs langages,
– etc.

Fonctionnalités avancées
Support de plusieurs langages

La couverture des langages supportés est large :
– Java
– Ruby / Ruby on rails
– Groovy / Grails
– PHP
– Javascript
– Python
– XML, HTML
– CSS3,
– etc

Outils JVM
L’environnement de développement comprend un profiler Java, ainsi qu’un debugger Java. Une interaction est possible aussi avec les debuggers PHP.

Bases de données

L’ensemble des bases de données du marché sont supportées via une interface JDBC.

Les types d’application supportés

Avec cet outil, il est possible de coder aussi bien une application Web qu’une application client lourd ou encore une applet. L’exploitation de service web est facilitée par la mise à disposition de l’ensemble (ou presque) des standards autour de cette technologie.

Enrichissement de la plateforme

La plateforme peut évoluer au travers d’un système de plugin.

OS supportés
NetBeans est exploitable sur la plupart des OS du marché.

Nouveautés de la version 7.2

Après cette petite rétrospective, voici les nouveautés apportées par cette dernière version en phase de finalisation :

Des améliorations ont été apportées afin d’obtenir de meilleures performances globales.

Au niveau des langages :
– Support de PHP 5.4
– C++ 11
– Java 7 update 4
– Groovy 1.8.6

Au niveau des outils :
– FindBugs est intégré nativement,
– Maven 3.0.4
– SVN 1.7
– Support de la synchronisation FTP à distance

Coté PHP, les frameworks suivants sont supportés :
– Symphony2,
– Doctrine2,
– ApiGen.

Et enfin, un élément central dans cette nouvelle version : le support cloud au sein de l’IDE.
Les utilisateurs auront la possibilité de déployer directement leurs applications sur le Cloud d’Oracle et sur Amazon Elastic Beanstalk

La release est prévue pour le mois de juillet. En attendant, la version est en phase de test et disponible en téléchargement. Faites vous une idée par vous-même ! 🙂

#java #netbeans #ide #oracle

Propulsé par WordPress.com.

Retour en haut ↑

Concevoir un site comme celui-ci avec WordPress.com
Commencer