Profile

Cover photo
Java - ʕ๏̮๏ʔ
902 followers|300,662 views
AboutPostsPhotosVideos

Stream

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Le type Optional - Java 8
Bizarre, vous avez dit bizarre?!
by  +Fabrice Sznajderman 

L'objectif de cet article n'est pas de faire une enième présentation du type Optional de Java 8. Personnellement, j'en avais parlé https://plus.google.com/112440333946538821016/posts/Hf7ZTATQhaJ (c'était sur le type proposé par Guava) et d'autres blogs avaient abordé le sujet également.

Aujourd'hui, l'objectif est de vous parler des points étranges proposés par le type Optional de Java 8.
En effet, l'implémentation disponible dans la dernière version du JDK propose des méthodes pour le moins surprenantes. Surtout en regard de ce qui se passe chez les voisins (Guava et Scala par exemple).

Bon rentrons dans le vif du sujet...

Dans cet article nous aborderons 2 méthodes : 

Optional.of();
Optional.OfNullable();


Les choses étranges ne se limitent pas à ces 2 méthodes, j'aborderai les autres dans d'autres articles.

Optional.of et Optional.ofNullable

Ces deux méthodes servent à construire un Optional à partir d'une référence.

Dans le premier cas, il faut fournir obligatoirement une référence valide en paramètre, sinon on se retouve confronté à la fameuse NullpointerException.. 
Etrange comme comportement, en effet c'est un peu ironique d'être exposé à une NPE en manipulant un type censé nous protéger de ce type d'exception.

Dans le deuxième cas, ofNullable(), le contrat est plus souple autorise une référence nulle en paramètre.
Selon le cas, la méthode renverra un Optional 'VIDE' ou 'PLEIN'.

Si on prend ces deux méthodes avec un peu de recule, on peut se dire que 
- of() servirait à gérer le cas où l'on veut encapsuler un objet pour remplir le contrat d'une méthode qui renvoie un Optional.
- ofNullable() servirait à encapsuler une référence dont on n'est pas trop sur de sa validité.

Avec ce bilan, on est en droit de se poser la question de pourquoi ne pas avoir fait un mixe des deux et proposer une seule méthode : of() qui aurait le comportement de la méthode ofNullable(). C'est-à-dire, si le paramètre est null alors cela renvoie une Optional Vide et si la référence en paramètre n'est pas null alors un Optional Plein et c'est tout.. 

Ca simplifierait l'API et les problèmes possibles posés par la présence de ces deux méthodes.
Si on regarde la librairie Guava, on peut constater que les mêmes méthodes sont proposées (et même comportement). en revanche, dans Scala, par un mécanisme spécifique au langage, on ne trouve qu'un seul point d'entrée pour la construction d'un Optional.

Java 8 et Guava -> 0
Scala -> 1
Scala wins! :)

En conclusion, l'introduction du type Optional dans le langage Java est une très bonne chose. Par contre le choix fait pour la construction d'un Optional est un peu étrange. Il implique des erreurs potentielles notamment, et paradoxalement, en générant une NullpointerException.

to be continued....
 ·  Translate
4
2
Nathanaël Roberts's profile photoFabrice Sznajderman's profile photoIvan Pierre's profile photo
14 comments
 
C'est un peu compliqué de sortir un exemple hors contexte surtout que la plupart du temps on utilise #ofNullable car la valeur peut être nulle. J'ai une ou 2 exceptions où j'utilise #of car je sais, et je veux que dans tous les cas la valeur soit non-nulle.
Là où on se rejoint pas c'est que tu dis que #of introduit un risque de NPE, alors que pour moi ce n'est pas le cas, en tout cas pas plus qu'avec le code qui précède ou qui suit la création de l'Optional. Dans certains cas on veut une NPE ! De plus le #ofNullable fait un test supplémentaire qui peut être évité.

Pour conclure, si je devais former un débutant à l'utilisation de Optional, je lui dirais d'utiliser par défaut ofNullable, et que of doit être réservé à des cas particulier où on maîtrise la référence. Dans le doute, on utilise ofNullable.
C'est un peu comme Iterator, dans 99% des cas il est préférable d'utiliser un Iterator, les boucles sur les indexs sont à réserver à des cas particulier où on maîtrise la Collection et qu'on vise les performances (bien qu'avec Java 8 on se sert beaucoup moins de tout ça).
 ·  Translate
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Paris Jug : soirée Young blood II
C'est le moment de se lancer...
by +Fabrice Sznajderman 

Le 13 janvier prochain, le Paris Jug organise une soirée un peu particulière. C'est une soirée quickies ouverte à tous. 

Si vous n'avez jamais présenté en public, que vous avez un sujet qui vous tiens à coeur et que celui-ci peut être présenté en 15minutes alors C'est le moment de se lancer!!

Pour postuler, il faut remplir un formulaire que vous trouverez sur le lien attaché à ce post.

Il y aura 6 quickies au total. 
5 seront sélectionnés par un jury entre le 1/12/14 et le 07/012/14 et 1 tiré au sort.

Pour préparer sa présentation, il sera possible d'être coaché entre le 14/12/14 et 13/01/15 à raison de 2 ou 3 soirées durant cette période.

Durant cette soirée, un vote aura lieu sur l'ensemble des quickies présenté et le gagnant pourra présenter son sujet à Devoxx FR 2015.

Cette opportunité ne se rate pas :) alors à vos idées! 

#java #parisjug #quickies  
 ·  Translate
Le Paris JUG est un groupe d'utilisateurs Java ayant pour but de réunir les acteurs du langage (professionnels, communautés open source, institutions, étudiants, enseignants...) afin d'échanger des idées et de discuter des avancées technologiques de la plateforme Java.
2
2
Fabrice Sznajderman's profile photoFabien Baligand's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Intellij IDEA 14 early preview
Nom de code : Cassiopeia
by +Fabrice Sznajderman 

JetBrains vient de sortir la dernière version de son IDE Java.
Cette version est accessible en early preview. C'est à dire que vous pouvez profiter de la version dès maintenant pour la tester. 

Bien entendu cette version n'est pas complètement sèche et il est possible de rencontrer des petits soucis qui seront naturellement corrigés lors de la release finale. 

Voici les principales nouvelles fonctionnalités ou améliorations qui font partie de ce nouvel opus.

En ce qui concerne le debugger Java, il a été entièrement réécrit et la fenêtre de debuggage a été unifiée pour tous les langages.
Les breakpoints peuvent être organisés par groupes d'utilisateurs.
La visualisation des tableaux et des collections peut se faire directement dans le debugger, il n'est plus nécessaire d'utiliser la fonction de visualisation.

En ce qui concerne l'éditeur Java, il est possible de générer des nouvelles méthodes de test dans des tests unitaires existants.

D'un point de vue plus général, le temps de démarrage a été amélioré.
Meilleure intégration de Gradle et Grails.

Cette liste n'est pas exhaustive. Je vous invite à consulter le lien attaché au post pour connaitre la liste complète des nouveautés.

Un autre point intéressant est la mise à disposition dans la version communautaire de fonctionnalité clés : 
 - Code coverage,
 - Structural search and replace,
 - Type migration refactoring.

Pour vous faire une idée plus précise, il suffit de télécharger la version et de commencer à jouer avec !

#java #idea #early #preview #v14  
 ·  Translate
6
3
Guillaume Girou's profile photoFabien Baligand's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
JinQ : Requêtes SQL et Java8
Requête SQL : Simple, efficace et native
by +Fabrice Sznajderman 
 
 
La librairie dont nous allons parler a la particularité d'utiliser les nouveautés de la dernière version du JDK.
Elle a été créée par Dr Ming-Yee lu + pour son projet de recherche lorsqu'il était à l'EPFL.
 
JinQ a pour objectif de fournir une manière simple et naturelle d'écrire des requêtes vers une base de données en Java.
 
JinQ propose une syntaxe basée sur le paradigme de la programmation fonctionnelle, apporté par Java 8. 
Une requête écrite avec JinQ ressemblerait à ça :  
 
database.countryStream().where(
  country-> country.getName().equals("France"));
  
On s'aperçoit de la puissance de la syntaxe en terme de lisibilité et de concision. La ligne ci-dessus sélectionne l'ensemble des pays qui ont comme nom : "France". 
On trouve la possibilité d'écrire du code concis et clair. L'exemple donné ci-dessus est assez simpliste, on peut écrire des choses plus complexes de manière très élégante.

Un des avantages de la librairie est que la requête est écrite en Java natif. Ce qui permet au moment de la compilation de vérifier la validité de la requête.
 
Pour son fonctionnement, JinQ a besoin d'un mapping entre les entités et la base de données (via un fichier xml ou via une description JPA). Ensuite une phase de génération du code instrumenté.
Cette phase de description et génération est très simple à mettre en œuvre.

Aujourd'hui, le framework ne permet de faire que de la lecture. Il propose toutes les fonctionnalités de jointure, d'agrégation, de mapping, etc...
Dans une architecture basée sur le pattern CQRS, cet outil trouverait sa place dans la partie Query.

Ce projet est très jeune  (v 0.1), même si l'on ne peut pas l'utiliser directement en prod, il présente le véritable intérêt d'utiliser les nouveautés du JDK8 (lambda, Stream). Il offre des perspectives intéressantes.

Un projet à suivre...

#java8 #Jinq #orm #lambda
 ·  Translate
10
5
Sylvain Maucourt's profile photoFabien Baligand's profile photoAlexandre Genon's profile photoQuentin Boileau's profile photo
2 comments
 
+Fabien Baligand Je me demandais d'où venait le nom... J'ai ma réponse.
Vivement que l'on puisse coder comme ça en production :P
 ·  Translate
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Easy Eclipse for Java
Nouveau modèle économique
by +Fabrice Sznajderman 

Je viens de lire une news vraiment intéressante concernant une initiative lancée par +Pascal Rapicault.

Le principe est de proposer une version de l'IDE Eclipse exclusivement dédiée à Java. Jusque là, rien de nouveau. La nouveauté est que cette version sera sous licence payante. 

L'objectif de cette licence n'est pas d'enrichir l'éditeur de la version mais de proposer une version stable fournissant une meilleure expérience utilisateur.

Ce modèle économique rappelle clairement l'IDE IntelliJ qui connaît un succès grandissant dans la communauté des développeurs sous la JVM.

La première version de EasyEclipse se focalisera sur les fonctionnalités suivantes : 

-Le support de Java 8,
-Maven et Ant,
-Git, SVN, CVS,
-XML, HTML, CSS.

L'idée est que ces fonctionnalités soient natives, directement dans la distribution.

Les autres principales fonctionnalités seront de fournir, entre autres, une launch bar, une épuration des menus contextuels, un enrichissement des templates de code, etc...

Comme dit précédemment, l'objectif de EasyEclipse est de devenir un outil exigeant en terme de qualité. Pour cela, l'ajout de fonctionnalités n'est pas suffisant pour atteindre cette excellence. Pour atteindre ce niveau d'exigence, l'équipe va se focaliser sur les problématiques de performance et de stabilité.

La première version intégrant toutes les fonctionnalités décrites dans le lien attaché au post est prévue pour décembre 2014.

Actuellement, le projet est exposé sur kickstarter. Vous trouverez l'ensemble des informations sur le projet en suivant le lien attaché au post. Ainsi que la manière d'y contribuer.

Vous trouverez également en suivant ce lien, un article de +Jérémie Bresson sur ce nouvel outil :
http://blog.developpez.com/jmini/p12512/eclipse/easyeclipse-ide-java-payant

Bonne lecture !

#java #easyEclipse #eclipse
 ·  Translate
Streamlined Java IDE + Funding model for the Eclipse open-source ecosystem.
3
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
JSONassert
Simple et efficace
by +Fabrice Sznajderman 

A l'heure du déploiement massif d'API REST et de l'utilisation intensive du format JSON, il est très utile de pouvoir tester de manière simple mais efficace les différents flux que nous mettons à disposition.

Malgré la simplicité du format Json, la mise en place de test unitaire est toujours un peu fastidieuse sur ce format.
En effet, la représentation du flux est sous forme de chaîne de caractères. Comparer deux flux strictement identiques cela ne pose aucun problème. 
Par contre deux flux identiques sur le contenu mais dans un ordre différent cela se complique. 
Pour traiter ce cas, il va falloir parcourir chacun des éléments et ensuite faire des comparaisons un à un afin de vérifier que tous les éléments d'un flux sont bien présents dans le second. Je vous laisse imaginer le code à écrire et surtout à relire ultérieurement.

C'est précisément là que la librairie JSONassert intervient.
Cet outil permettra de faire des comparaisons de flux Json au niveau de la structure mais aussi des données.

L'exemple présenté sur le site de la librairie est assez éloquent : 

JSONObject data = getRESTData("/friends/367.json");
String expected = "{friends:[{id:123,name:\"Corby Page\"},{id:456,name:\"Carter Page\"}]}";
JSONAssert.assertEquals(expected, data, false);

La librairie propose deux types de vérification : une vérification stricte qui impose que les flux soient strictement identiques et l'autre qui tolérera que tous les champs résultats ne soient pas dans les champs attendus (très pratique pour vérifier quelques champs importants, sans vérifier tout le contenu du flux JSON). Dans tous les cas, l'ordre des champs n'a pas d'importance. Le deuxième mode est recommandé.

Actuellement, la librairie supporte comme framework de test  _JUnit_.

Comme toute bonne librairie, un quick start est proposé afin de rapidement prendre en main l'outil. Vous trouverez aussi un CookBook également très utile pour répondre aux cas classiques.

JSONassert est disponible sur les repos traditionnels Maven.

Bons tests !

#java #json #test
 ·  Translate
Great for testing REST interfaces, JSONassert greatly simplifies testing JSON results in unit tests.
9
9
Frédéric Ensminger's profile photoGrégory Bougeard's profile photoFabien Baligand's profile photoZied Hamdi's profile photo
 
L'API semble intéressante pour valider ses retours JSON avec JUnit et Maven. À tester :)
 ·  Translate
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Un peu d'histoire
Les dates clefs du langage Java
By +Fabrice Sznajderman 

Au travers de l'article attaché à ce post, vous retrouverez l'ensemble des dates clefs qui constitue l'histoire du langage Java.

Depuis le green project en 1991 à aujourd'hui, l'auteur décrit l'histoire de Java.

Pour certains cela rappelera des souvenirs, pour d'autres ils apprendront comment est né le langage.

Si vous constatiez des erreurs ou si vous aviez des précisions à apporter, n'hésiter pas à contacter l'auteur du post.

Bonne lecture!

#java #histoire #oak
 ·  Translate
3
4
Ivan Pierre's profile photoThibaud Vibes's profile photo
Add a comment...
In their circles
2 people
Have them in circles
902 people
Charles Bosquet's profile photo
Geoffrey Garnotel's profile photo
Xavier NOPRE's profile photo
Gaël Nieutin's profile photo
Sebastien Fleury (bubblejuggler)'s profile photo
Guellim Mohamed's profile photo
Christophe Furmaniak's profile photo
Tony Destouches's profile photo
Sylvain Galand's profile photo

Communities

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Java 9 : Les premières fonctionnalités
Un vote pour les départager
+Fabrice Sznajderman 

Lundi dernier, le 11 août 2014, Mark Reinhold a publié une liste de plusieurs JEPs (JDK-Enhancement Proposal), sur la mailling list JDK9-Dev. 

Cette liste a pour objectif de fixer un point de départ pour la future version du JDK. 
Chaque Committer du projet pouvait donner son avis sur la liste.

La clôture des votes était aujourd'hui (18/08/2014). Le résultat de ce sondage permettra de définir les fonctionnalités qui seront traitées pour la version 9 du JDK.

Voici les JEPs qui ont été soumises au vote :

  - 102: Process API Updates
  - 143: Improve Contended Locking
  - 197: Segmented Code Cache
  - 198: Light-Weight JSON API
  - 199: Smart Java Compilation, Phase Two
  - 201: Modular Source Code

Cette liste est issue de la longue liste des JEPs disponible ici : http://openjdk.java.net/jeps/0

Ci-dessous une brève présentation de chaque JEP proposées :

Process API Updates
Amélioration de l'API permettant de contrôler et gérer les processus du système d'exploitation. Les limitations de l'API existante obligent souvent les développeurs à avoir recours à du code natif.

Improve Contended Locking
Amélioration des performances dans un environnement concurrent. 

Segmented Code Cache
Segmentation du cache du compilateur JIT afin d'améliorer les performances et de permettre des extensions futures.

Light-Weight JSON API
Fournir une API permettant de consommer et générer des documents JSON selon la RFC7159.

Smart Java Compilation, Phase Two
A cause de plusieurs problèmes de stabilité et de portabilité, sjavac (smart java compiler) n'est pas utilisé par défaut. L'objectif premier de ce JEP est de fixer ces problèmes. Il s'agit de s'assurer que l'outil produira un résultat fiable sur l'ensemble des environnements (software et hardware).

Modular Source Code
Il s'agit de réorganiser le code source du JDK en modules. D'améliorer le système de build pour compiler ces modules. Et enfin de bien délimiter l'utilisation de chaque module.

Je n'ai pas trouvé pour le moment les résultats du vote. ils devront être publier dans les jours à venir. J'essaierai de faire un update du post dès qu'ils seront disponibles.

En attendant, vous trouverez sur le lien attaché au post plus de détails concernant chaque JEP.
 ·  Translate
JDK 9. The goal of this Project is to produce an open-source reference implementation of the Java SE 9 Platform, to be defined by a forthcoming JSR in the Java Community Process. Status. The JDK 9 repositories have been open for bug fixes and small enhancements for some time now.
6
2
Fabrice Sznajderman's profile photoFabien Baligand's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
6
4
lionel delbé's profile photoFrédéric Ensminger's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Java 8 : Les lambdas par l'exemple
10 façons d'utiliser les lambdas
by +Fabrice Sznajderman 

Java 8 est sorti ! Ce n'est plus une grande nouvelle... 
Maintenant, plus d'excuses pour ne pas utiliser cette nouvelle version du langage.
Comme nous avons pu le voir au travers de précédents articles. pas mal de nouveautés sont arrivées avec ce nouvel opus.

Parmi ces nouveautés : les expressions lambdas
Cette nouvelle fonctionnalité permet de déclarer en ligne des fonctions. Il était possible de faire quelque chose de similaire auparavant au moyen d'une classe anonyme. L'inconvénient était le nombre de lignes qu'il fallait écrire avant de réellement implémenter le code métier. Avec les lambdas, une ligne suffit..

Pour bien comprendre le mécanisme et la valeur apportée par ce mécanisme (inspiré en partie du monde de la programmation  fonctionnelle), je vous propose l'article attaché à ce post qui décrit 10 exemples mettant en œuvre les expressions lambdas.

Les exemples que vous pourrez découvrir sont : 

- Implémentation d'un thead
- Implémentation d'un listener d'évènement
- Parcourir une liste
- Utilisation de l'interface Predicate de manière fonctionnelle
- Créer une combinaison de Predicate
- Implémentation d'un Map Reduce
- Création d'une liste de String via un filtre
- Appliquer une fonction sur chaque élément d'une liste
- Création d'un sous-liste
- Calcule du Max, Min, moyenne et somme sur une liste d'élément.

Pour les personnes qui découvrent cette syntaxe, cela peut être déroutant voir même pas très intuitif. 
Si vous prenez le temps de bien comprendre, cela vous ouvrira de nouvelles perspectives.

Bonne lecture !

#java #lambda #version8
 ·  Translate
4
4
Quentin Boileau's profile photoEric Leleu's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Java2Scala Cheatsheet
Retrouver ses repères pour débuter sereinement
by +Fabrice Sznajderman 

L'écosystème de Java s'est considérablement ouvert ces dernières années avec tous les langages créés pour la JVM. 
Personnellement, un a retenu mon attention : Scala. 

Sans rentrer dans le détail du pourquoi celui-là plutôt qu'un autre, je me suis rendu compte de la difficulté d'aborder un autre langage mettant en place une nouvelle syntaxe et de nouveaux concepts. 
Pour ma part, le démarrage a été assez rude, j'ai commencé à coder en Scala en faisant la formation sur Coursera (partie 1).

Ce qui est difficile au départ, c'est de retrouver ses points de repère dans le langage. 
Même si le fait de faire des liens, entre notre langage préféré et le nouveau langage abordé n'est pas toujours une bonne idée ; cela permet de monter rapidement en compétence sur notre cible.

Pour cela, je vous propose un document du type cheatsheet décrivant les équivalences entre les deux langages.
Les points abordés permettent de vraiment prendre en main la nouvelle syntaxe très rapidement. 

Naturellement, une fois ce cap passé, il faudra couper les liens de manière plus profonde avec notre de zone de confort et se plonger la tête la première dans les concepts du nouveau langage.

Bonne lecture !

#java #scala #cheatsheet #migration
 ·  Translate
5
2
Fabrice Sznajderman's profile photoFabien Baligand's profile photo
Add a comment...

Java - ʕ๏̮๏ʔ

Shared publicly  - 
 
Google Style
Java coding style chez Google
by +Fabrice Sznajderman 

Les développeurs de chez Google ont mis en ligne un document décrivant les règles (internes) standards de coding Java.

Les règles énoncées dans ce document concernent les aspects esthétiques de formatage du code, mais pas seulement. On en trouve également sur des conventions de codage, de nommage, de structure de fichier source, etc...
Le document se concentre principalement sur des règles universelles simples et rapides à mettre en oeuvre.

Les principaux points abordés sont regroupés selon 6 chapitres : 

- Les fichiers sources de bases
- La structure des fichiers sources
- Le formatage du code
- Les conventions de nomage
- Les bonnes pratiques de coding
- La javadoc.

La première phrase énoncée dans le document montre bien la rigueur des développements réalisés chez Google : 

A Java source file is described as being in Google Style if and only if it adheres to the rules herein

Même si suivre à la lettre toutes ces règles peut paraitre utopique, il peut être intéressant de s'en inspirer et de piocher celle ayant du sens pour son contexte de projet.

Une lecture assidue sera toujours bénéfique.

Bonne lecture!

#java #regle #coding #google
 ·  Translate
1 Introduction. This document serves as the complete definition of Google's coding standards for source code in the Java™ Programming Language. A Java source file is described as being in Google Style if and only if it adheres to the rules herein. Like other programming style guides, ...
10
7
Frédéric Ensminger's profile photoKhalid EL BOUKHARI's profile photo
Add a comment...
People
In their circles
2 people
Have them in circles
902 people
Charles Bosquet's profile photo
Geoffrey Garnotel's profile photo
Xavier NOPRE's profile photo
Gaël Nieutin's profile photo
Sebastien Fleury (bubblejuggler)'s profile photo
Guellim Mohamed's profile photo
Christophe Furmaniak's profile photo
Tony Destouches's profile photo
Sylvain Galand's profile photo
Communities
Story
Tagline
java & son écosystème : libs, actus, articles, conférences, etc...
Introduction
Une nouvelle page s'ouvre pour partager avec vous et en français, des articles courts autour de java et de son écosystème (actualités, libs sympa, articles techniques, annonces de conférence).

Aux commandes de cette page :

Fabien: Passionné de java (et de web) depuis plus de 10 ans. Je fais partie de la Direction de l'Innovation et des Nouvelles Technologies de Sfeir, où j'anime tous les mois une demi-journée d'échange technologique.

Fabrice: Développeur Java. Je suis passionné par tout ce qui touche à la sphère Java / JavaEE, ainsi que par les technologies gravitant autour du web. Je suis actuellement consultant chez Sfeir.
Links