Profile

Cover photo
Java - ʕ๏̮๏ʔ
868 followers|250,908 views
AboutPostsPhotosVideos

Stream

 
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
Eric Leleu's profile photoFabien Baligand's profile photo
Add a comment...
 
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...
 
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
11
7
Frédéric Ensminger's profile photoFabien Baligand's profile photo
Add a comment...
 
Plugin Jenkins pour Intellij
Ne sortez plus de votre IDE(A)
by +Fabrice Sznajderman

Sur mon projet actuel, nous utilisons classiquement Jenkins.
Nous avons mis en place du continuous delivery. Pour cela, nous avons un certain nombre de builds configurés. Chacun de ces builds constitue un pipeline.

A chaque commit, nous avons un oeil sur les écrans de monitoring proposés par Jenkins.
La conséquence est qu'il faut switcher régulièrement entre notre IDE et le navigateur. Même si cette action n'est pas d'un coût énorme, elle nous fait changer de contexte régulièrement.

Je me suis demandé s'il n'y avait pas un moyen d'intégrer l'outil directement dans l'IDE.
Naturellement, je me doutais bien qu'il existait un plugin permettant cette intégration.

J'ai donc trouvé un plugin vraiment intéressant.
Il a été développé par +David Boissier.
Il est compatible à partir de la version 11 d'IDEA.
Le projet n'est pas encore publié sous une version majeure, néanmoins la version proposée est très stable.

Le plugin permet d'afficher dans un espace dédié l'ensemble des builds disponibles sur Jenkins. On retrouve la traditionnelle pastille d'état ainsi que la météo du build.
Pour chaque job, il est possible de cliquer dessus pour ouvrir la page web correspondante.

Evidemment, lorsqu'un build est en train de tourner, l'interface graphique l'affiche en suffixant le build concerné par (Running)

Bien que les builds soient déclenchés par un commit, il est possible de lancer un build spécifique.

Il est également possible de filtrer sur le nom des builds selon une liste déroulante.
Actuellement, je trouve qu'il manque une petite fonctionnalité qui permettrait de clarifier un peu plus la vue lorsque le projet contient beaucoup de builds différents. Cette fonctionnalité serait la possibilité de filtrer l'affichage à l'aide d'une expression régulière.

L'installation et la configuration sont vraiment simples et rapides : efficace.

D'autres fonctionnalités sont disponibles (je n'ai pas pu encore les tester).
La documentation du projet est assez claire et permet une prise en main rapide.

Toutes les infos disponibles dans le lien attaché au post.

#java #plugin #idea #jenkins 
4
5
Quentin Boileau's profile photoFabien Baligand's profile photo
Add a comment...
 
Java vs Scala : Question de performance
Se pose t-on les bonnes questions ?
by +Fabrice Sznajderman 

Java et Scala sont souvent mis en concurrence sur un tas de sujets.
On compare leur syntaxe, leurs paradigmes et aussi leur performance...
Justement parlons de cette course contre la montre qui se joue entre ces deux langages. L'article en lien dans ce poste fait justement un état des lieux concernant cette fameuse question.

L'auteur nous explique que la question posée n'est pas la bonne.
En effet, quel que soit le langage utilisé et tournant sur la JVM, in fine le code exécuté sera du bytecode.

Lors du benchmark mis en œuvre, on constate que Scala est sensiblement plus rapide que Java sur l'implémentation d'un quicksort.
Petite particularité dans ce use case, c'est le style adopté pour l'implémentation en Scala, c'est-à-dire le style impératif.

L'avantage obtenu par Scala est lié à des optimisations (tailrec) mis en place par le compilateur du langage.

En revanche, lorsque l'on adopte un style fonctionnel et plus concis, les performances résultantes deviennent catastrophiques.

Ce petit résumé vous donne un aperçu du propos contenu dans l'article. Je vous laisse lire l'article original pour compléter cette synthèse.

#java #scala #performance #question
9
3
William Delanoue's profile photoSylvain Maucourt's profile photoLudovic Borie's profile photoFabien Baligand's profile photo
12 comments
 
Ah ça troll ;)
Je ne connais pas la gestion des i/o scala donc je ne peux pas comparer.
Mais je ne considère pas que la gestion des i/o java soit pourrie, bien au contraire.
Il y a vraiment beaucoup d'outillage très sympa dans java pour ça. Les inputstream pour a peu près tout, les filterinputstream pour "piper" un stream de manière transparente, les Readers, NIO2 pour les usages avancés, ...

Pour ce qui est de la fermeture de stream, java 7 améliore les choses avec le "try with resources", qui permet de déclarer une ressource dans un bloc try pour qu'elle soit systématiquement fermée en sortie du bloc. 
 ·  Translate
Add a comment...
In their circles
2 people
Have them in circles
868 people

View all
 
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
3
2
Fabrice Sznajderman's profile photoFabien Baligand's profile photo
Add a comment...
 
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
9
9
Pierrick Vandenbroucke's profile photoFélix-Antoine Bourbonnais's profile photoFrédéric Ensminger's profile photoFabien Baligand's profile photo
 
L'API semble intéressante pour valider ses retours JSON avec JUnit et Maven. À tester :)
 ·  Translate
Add a comment...
 
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
Thibaud Vibes's profile photoFabien Baligand's profile photo
Add a comment...
 
Scalex : ...doc une nouvelle approche
La javadoc, la scaladoc et...
by +Fabrice Sznajderman 

La documentation est une ressource précieuse pour comprendre et appréhender une librairie, une api, ou un projet. 
Il existe différents formats de documentation adaptés à différents besoins. Pour le langage Java, la ressource principale est la Javadoc

Celle-ci est générée directement à partir du code. Elle se base sur des commentaires et annotations particulières et adopte une template spécial. 

Ce template n'a quasiment pas évolué depuis sa création. La manière de naviguer est toujours la même. récemment, la CSS a évolué pour donner un coup de jeune (et aussi marquer le passage de Sun à Oracle).

J'évoquais précédemment que la navigation au sein de la documentation n'a pas évolué. Après un certain temps d'utilisation on arrive à retrouver (ou découvrir) les informations cherchées. Néanmoins, le côté très statique implique de bien connaitre sa structure et ne permet pas d'accéder rapidement à une information inconnue. 

Par exemple, si un collègue vous indique le nom d'une méthode d'une classe répondant à la problématique à laquelle vous êtes confronté depuis quelques semaines . S'il ne vous précise pas les informations sur le package ou le nom de la classe, il va falloir chercher et tâtonner (exemple tiré un peu par les cheveux :) ).

Les nouveautés arrivent avec les nouveaux langages tournant sur la JVM. Par exemple le langage Scala (comme par hasard...) propose des fonctionnalités intéressantes et pratiques au sein de sa documentation (scaladoc). En effet, la scaladoc met à disposition deux moteurs de recherche. 
le premier permet de rechercher dans les types (soit en tapant le nom du type, ou en sélectionnant la première lettre du type recherché).
Le deuxième permet de faire une recherche directement au sein d'un type sur les fonctions qui le compose.

Une nouvelle approche est mise en place par le projet 
nommé Scalex. Ce projet propose de manipuler la documentation au travers d'une recherche fulltext. Cette approche permet d'être (selon moi) beaucoup plus efficace dans l'utilisation de la documentation sous-jacente.
Pour l'instant, le projet permet d'accéder à deux indexes de documentation : 

Scala 2.9.1-1
Scalaz 6.0.4

La recherche se fait à partir de l'expression de mots ou alors à l'aide d'un pseudo langage permettant d'affiner sa recherche.

L'outil propose plusieurs moyens pour l'utiliser (ou s'interfacer). Le service est accessible via : 
-La ligne de commande
-IRC
-Web (javascript)
-XMPP
-SBT

Scalex s'est inspiré de Hoogle, le moteur utilisé pour Haskell.

Vous trouverez l'accès au moteur de recherche ainsi qu'à des détails sur le pseudo-langage en regardant le lien attaché à ce post.

#java #documentation #javadoc #scalex.
 ·  Translate
5
4
Fabrice Sznajderman's profile photoZied Hamdi's profile photoZied Hamdi OneView's profile photoFabien Baligand's profile photo
2 comments
 
Pour l'instant c'est essentiellement le langage Scala ainsi que l'api Scalaz.. Mais c'est une initiative qui pourrait être reportée sur Java. 
 ·  Translate
Add a comment...
 
Parlons sans détour, Parlons cache
Les patterns de cache
by +Fabrice Sznajderman 

Lors d'un précédent article je vous avais parlé d'un podcast technique : Une tasse de thé : Quelques minutes de technique logicielle animé par +Eric Lefevre-Ardant 
Pour rappel, le principe de ce podcast est d'aborder des sujets techniques de manière assez synthétique avec un invité expert sur le sujet.

Dernièrement, le 27 octobre 2013, un épisode sur les patterns du cache a été publié. L'invité est +Mathilde Rigabert Lemée. Elle travaille actuellement chez Terracotta L'enregistrement a eu lieu pendant la conférence SoftShake.
Les problématiques de cache sont transverses à toutes les plateformes.

Mathilde présente les différentes stratégies de cache que l'on peut mettre en oeuvre sur une application, comme :
- Cache Aside
- Cache as system of Record,
- TTL,
- TTR.

Les premières stratégies sont expliquées de manière assez générale. En revanche, elle donne une explication plus détaillée sur les stratégies de type : 
- Read-Through,
- Write-Through,
- Write-Behind,
- Refresh-Ahead.

Elle donne aussi des conseils sur les choix de mise en oeuvre de la bonne stratégie. Elle explique qu'il n'y a pas de stratégie permettant de répondre à toutes les problématiques. 
Comme tous les outils, chacun répond à une problématique précise. 

Le format des épisodes est assez court néanmoins il donne une bonne vision et les connaissances minimales permettant d'approfondir la question sur les problématiques de cache.

Sur le lien attaché au post, vous retrouverez tous les pointeurs permettant d'approfondir les différentes stratégies, ainsi que l'épisode au format MP3.

Bonne écoute! 

#Java #cache #pattern
 
5
3
hatim kanas's profile photoFabien Baligand's profile photo
Add a comment...
People
In their circles
2 people
Have them in circles
868 people
Communities
Created by Java - ʕ๏̮๏ʔ
View all
Java FR's profile photo
1,130 members
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