Blog Arolla

[DevoxxFr 2014] : Un autre compte rendu de l’événement 1/2

devoxx_fr_2014_arolla

La troisième édition de Devoxx s'est déroulée dans le même lieu que les précédentes, du 16 au 18 Avril 2014, et ce sera probablement la dernière fois, faute de place. L'année prochaine elle se tiendra au Palais des Congrès à la même période. Devoxx est devenu un évènement incontournable pour la communauté Java.

Les sponsors traditionnels étaient présents, mais avec moins d'ambiance dans les stands que lors des deux premières éditions (No baby foot 🙁 !). Xebia, Google, IBM, Oracle et Ippon (désolé si j'ai oublié votre stand) avaient les stands les plus animés.

Arolla non plus n'a pas manqué le rendez-vous. Deux tiers des consultants Java ont pris part à la manifestation. Deux speakers, Cyrille Martraire (Directeur Technique) et Aude Amarrurtu (Responsable RH) ont animé les session “eXtremist Programming” et “Des SSII aux SS3I”, qui ont eu de très bons retours.

Les principaux thèmes au programme de cette année :

  • Java 8
  • Programmation fonctionnelle
  • DevOps (avec Docker, Puppet, Chef, Git, Gradle, ... )
  • Les process agiles
  • Big-Data, NoSQL,
  • Divers (Sécurité, Bitcoin, Culture informatique, Education, …)

Comme je suis très paresseux, j'ai préféré donner la priorité aux Labs et suivre les Universités plus tard, quand elles seront disponibles sur Parleys. Mais malheureusement les choses ne se sont pas passées comme prévues. Premier jour, première heure, je rate le Lab Docker pour m'être trompé de salle. Je vous laisse donc ici un résumé de ce que j'ai retenu des sessions que j'ai suivies.

Sessions Java EE 7

On a eu droit à deux sessions sur Java EE 7. Ça commence par un lab de trois heures le premier jour (Introduction et mise en pratique de Java EE 7) pour faire un tour, les mains dans le cambouis, des principales nouveautés de Java EE 7. Au troisième jour de la conférence, Arun Gupta reprend la main dans la session “50 new things in Java EE 7” pour une présentation plus élargie des nouveautés.

JEE 7 est la première version sous Oracle depuis le rachat de Java. Les spécifications majeures concernent les WebSockets (JSR 356), le support de JSON (JSR 353) et les traitements Batch (JSR 352). On notera également le support de HTML5 pour Java Server Faces (JSF) (JSR 352). Des API sont fournies par la plateforme pour chacune de ces spécifications. Pour aller plus loin je vous conseille la lecture de l'article d'Arun Gupta.

La première question qu'on se pose quand on découvre JEE7 c'est “Do we really need Spring ?”. La plateforme dispose d'un CDI qui permet de faire de l'injection de dépendance par annotations, sans passer par les fichiers xml qui ont rendu difficile l'adoption de Spring, et en plus elle vient avec certaines implémentations de Spring comme Spring Batch API.

Lors du BOF organisé par le Paris JUG, un débat a été ouvert sur l'intérêt d'utiliser encore Spring dans une application Java EE, avec Arun Gupta et Antonio Goncalvès, auteurs des livres Java EE 7 Essentials et  Beginning Java EE 7. La plateforme fournit des librairies pour la plupart des fonctionnalités courantes (persistance, sécurité, web service, transaction, traitement batch, ...) d'une application classique. Le seul endroit où ça traîne encore c'est au niveau du moteur de templating, il n y a pas encore de spécification. Spring MVC reste incontournable.

Sessions Java 8

L'année 2014 marque un grand tournant pour Java, avec la sortie de la version 8 qui implémente le paradigme fonctionnel tant attendu par les javaistes. C'était la grande vedette de la conférence, avec plus de 5 sessions, et des risques de doublons.

Tout ce que vous avez voulu savoir sur les lambda :

Un tour en profondeur du projet lambda avec Rémi Forax, jusque dans le bytecode. Je n'ai pas trouvé les slides de la prez. J'avais écrit un billet sur les lambda expressions.

Les concepts de la programmation fonctionnelle illustrés avec java 8 :

Comment les patterns de base de la PF sont implémentés en Java.

  • First class function

Function<String, String> hello = (String s) -> "hello " + s;
hello.apply("Erouan");

  • High order function

confs.stream()
	.filter( s -> s.contains("j") )
	.collect(Collectors.toList());

  • Functor ( ou Mapper)

confs.stream().
	map( s -> s.toUpperCase() )
	.collect( Collectors.toList() );

  • Reduce

confs.stream()
	.reduce((s1, s2) -> s1 + ", " + s2 )
	.get();

Les slides de la prez sont disponibles ici.

50 nouvelles choses que l’on peut faire avec Java 8 :

Quand on parle des nouveauté de Java 8 on pense en premier aux lambda expressions. Ensuite viennent les méthodes virtuelles, les interfaces fonctionnelles et les streams. José Paumard passe en revue d'autres features non moins intéressantes qui vont nous simplifier le code.

  • Date
    Que ce soit java.util.Date, (qui n'est pas une vraie date) ou java.util.Calendar (qui n'est pas un vrai calendrier), la manipulation des dates est toujours un casse-tête. Avec l'ajout de nouveaux packages (JSR 310) ça devrait être plus intuitif.

The new java.time API consists of 5 packages:
java.time - the base package containing the value objects
java.time.chrono -provides access to different calendar systems
java.time.format - allows date and time to be formatted and parsed
java.time.temporal - the low level framework and extended features
java.time.zone - support classes for time-zones

http://www.infoq.com/articles/java.time

  • Duration (pour la duration) : une durée (en nanosecondes)

Instant start = Instant.now();
Instant end = Instant.now();
Duration duration = Duration.between(start, end);

  • LocalDate : date tout court (sans heure, ni minute, ni seconde)

LocalDate now = LocalDate.now();
LocalDate birthday = LocalDate.of(1956, Month.APRIL, 23);

  • Period : temps écoulés exemple, "3 years, 2 months and 6 days"

Period period = birthday.until(LocalDate.now());
int year = period.getYear();

… voir (TimeZone, Instant, ...)

  • String : on peut streamer un String avec la nouvelle méthode méthode chars()

IntStream stream = "bonjour".chars();
stream.forEach(.........);

  • List : avec la nouvelle sort(), on peut effectuer un tri directement sur la liste sans passer par Collections

Avant Java 8:

Collections.sort(people,new Comparator(){...});

Avec Java 8 :

people.sort(new Comparator(){...});

Les slides de la prez sont disponibles ici

Les IDE (Idea, Eclipse, Netbeans) sont déjà prêts, reste à savoir si l'adoption de Java 8 par la communauté sera rapide.

Git ++

git_logoIl y a deux choses à retenir dans cette session, comment structurer les messages de commit pour mieux exploiter l'histoire de son repository et la puissance du rebase interactif. Pour la plupart du temps on a tendance à utiliser Git comme on le fait avec le bon vieux SVN, sans prendre le temps de lire la documentation (pourtant très bien fournie). Les commandes git add, git commit et git push suffisent pour ajouter une nouvelle ligne dans le CV. Ce qui fait qu'on passe à côté de choses simples pourtant très utiles qui font la magie de Git.

Une fois la commande git commit lancée, le terminal nous laisse la main avec l'éditeur de notre choix (Vim, pico) pour écrire notre commentaire. La convention de commit proposée est inspirée du projet AngularJS. Le commentaire d'un commit est composé de plusieurs champs :

<type>(<scope>): <subject>
    <BLANK LINE>
<body>
    <BLANK LINE>
<footer>
  • type : peut être soit un feature, du refactoring, de la documentation, un fix, …
  • scope : l'endroit des commits (module, couche, projet, … )
  • subject : une description des changements effectués dans le commit
  • body : décrit les motivations du commit
  • footer : les références du commit (Jira, User Strories, ...)

Avec le rebase interactif “git rebase -i” on peut effectuer plusieurs actions sur les commits avant de les pusher. Renommer, réordonner, supprimer, fusionner, modifier ou insérer.

A la fin une question a été soulevée plusieurs fois sur les risques de perdre une histoire en modifiant un commit. D'abord les modifs ne concernent que le repo local et non celui qui est partagé, ensuite il faut savoir qu'un commit est immutable, il n'est jamais modifié. . Quand on tente une action de modification sur un commit C Git crée un nouveau commit C' qui est le clone de C + les nouvelles modifications.

If you’ve used Git, you’re probably aware that you can update your latest commit by using commit --amend. But can you really update a commit? In fact, you cannot. Git simply creates a new commit and moves your branch pointer to it. The old value can still be found using git reflog, and can be referred to by its hash value

http://www.jayway.com/2013/03/03/git-is-a-purely-functional-data-structure/

… la suite bientôt!

Plus de publications

1 comment for “[DevoxxFr 2014] : Un autre compte rendu de l’événement 1/2