ParisJUG du 13/03/2012 : Java.next !

Le ParisJUG du 13 mars 2012 présentait les prochaines évolutions de Java en commençant par le classique retour sur l’historique de Java et en particulier Java 7.

Java 7 sorte de version intermédiaire avant la version 8 de Java contenait l’ensemble des améliorations visibles ici : http://openjdk.java.net/projects/jdk7/features/

Pour faire un rapide tour :

  • JSR 334 “project coin” : String dans les switch, Multi-catch, Try-with-ressources (AutoCloseable), Diamond operator pour éviter de repeater le type d’un generic, Simplified varargs, Binary literals and underscores in numeric literals
  • JSR 203 « NIO2 » : Un design facilitant les extensions, accès au metadata des fichiers, des méthodes utilitaires comme move ou copy, une abstraction de plus haut niveau (java.nio.file.Path), une gestion des exceptions consistante
  • JSR 166y Fork/Join et Parallel Array pour encore faciliter la programmation parallèle.
  • JSR 292 InvokeDynamic pour améliorer les performances des langages dynamiques (type Groovy) sur la JVM.

Mais la présentation s’attachait surtout à présenter JDK 8 prévu pour l’été 2013 dont la liste des améliorations contient le projet Jigsaw, le projet lambda, une nouvelle API Date (le retour de la vengeance), une convergence entre les VM JRockit et Hotspot ou encore JavaFX 3.0. Il est possible de suivre les évolutions sur le site d’OpenJDK : http://openjdk.java.net/projects/jdk8/

C’est sur ce premier projet Jigsaw qu’est revenu Alexis Moussine-Pouchkine.

Il y a déjà eu de nombreux essais pour améliorer la modularisation de Java : JSR 277 Java module, OSGi, JSR 294 et maintenant JigSaw

Le problème actuel est que la construction, le packaging et la publication d’une application tombe souvent dans l’enfer des JAR. Il faut donc trouver une meilleure solution pour améliorer la scalabilité par rapport à la plateforme en particulier pour les petits périphériques et améliorer les performances surtout les temps de téléchargement et de démarrage.

Le but est donc de créer un système de modules statiques et simples, assez performant pour modulariser le JDK lui-même, améliorer les performances et utilisable par n’importe quel développeur java.

Les conséquences sont plus de classpath, plus de rt.jar. L’idée est de résoudre les problèmes de dépendances en amont !

La mise en place des modules Jigsaw offrira différentes possibilités : Grouping, Versioning, Encapsultation avec le mot clé permits, splitting, aggregation avec le mot clé provides.

Voila un exemple de modularisation avec Jigsaw :

module com.greetings @ 0.1 {
	requires jdk.base; // default to the highest available version
	requires org.astro @ 1.2;
	class com.greetings.Hello;
}

Vous trouverez tous les détails sur cette page : http://openjdk.java.net/projects/jigsaw/doc/lang-vm.html

Avec Jigsaw, le fichier jmod remplace le jar mais il sera toujours possible d’utiliser des repositories : librairies mis en ligne au bout d’une url. Il est prévu une intéropérabilité avec OSGi. La compatibilité sera toujours existante par on pourra rajouter des informations au jar existant pour les rendre compatible jigsaw.

Le deuxième présentateur Remi Forax qui est venu nous présenter les lambdas ou l’arche d’alliance de java 😉

Pourquoi les lambdas ? L’idée est de se rapprocher des langages fonctionnels et de simplifier l’utilisation des « closures » ou méthodes anonymes dans Java même si une partie du fonctionnement est déjà réalisable avec les Inner Class.

La grosse question est de connaître quel est le type d’une lambda et la solution a été trouvée dans les Single Abstract Method qui sont des interfaces qui contiennent une seule déclaration de méthode. On peut même les nommer interfaces fonctionnelles et Java en possède déjà tel que Runnable ou ActionListener.

Voila des exemples du futur code utilisant les lambdas :

	(int x, int y) -> x + y

	FileFilter java = (File f) -> f.getName().endsWith(".java");

	new Thread(() -> {
		connectToService();
		sendNotification();
	}).start();

Contrairement au Inner class, une lambda peut capturer les valeurs des variables du scope : le this ne référence pas la pseudo inner class mais l’englobant. Pour clarifier les choses, les inner class sont des classes, les lambdas sont des fonctions anonymes.

Les lambdas ajoutent beaucoup d’expressivité au langage Java mais l’idée est aussi d’ajouter les librairies pouvant en tirer partie. Ajouter des nouvelles fonctionnalités aux librairies existantes est quelque chose  de très difficile en Java actuellement si on veut garder la compatibilité. Il a donc fallu trouver une solution et celle-ci a été de mettre en place les « Default methods »

Par exemple :

interface Iterable<E> {
	public  Interable<E> filter(Predicate<E> predicate) default {
		//code
	}
}

Les defaults methods sont en fait des traits (Scala) ou mixins (Ruby) simplifiés.

Les defaults methods et les lambdas sont bien sur faits pour fonctionner ensemble. Actuellement si on veut écrire du code qui trie les personnes par leur nom on va écrire :

Collections.sort(people, new Comparator<Person>() {
	public int compare(Person x, Person y) {
		return x.getLastName().compareTo(y.getLastName());
});

Demain avec les lambdas, de l’ajout de l’interface Mapper et de l’ajout de la default method comparing à Collections, il suffira d’écrire :

Collections.sort(people, comparing(p -> p.getLastName()));

La encore vous trouverez tous les détails sur le site d’OpenJDK : http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html

Paris JUG du 10/01/2012 : soirée DevOps

Le Paris JUG du 10 janvier 2012 était consacré à DevOps.

Pour ceux qui ne connaîtraient pas, le terme « DevOps » a été donné au mouvement cherchant à améliorer la qualité des services fournis par les solutions informatiques ou encore aligner le SI sur les besoins de l’entreprise en rendant l’infrastructure plus agile. L’idée sous-jacente est de rapprocher les parties développement et opération du SI, deux fonctions qui se retrouvent en opposition. D’ailleurs DevOps est tout simplement la concaténation des deux mots.

Comme le dit très bien la définition de Wikipedia, le problème commun actuellement est que, si une équipe d’exploitation est primée sur la stabilité du système alors que l’équipe de développement est récompensée à chaque nouvelle fonctionnalité livrée, il est évident que ces 2 équipes vont se retrouver en conflit perpétuel.

Le but de DevOps est alors de promouvoir la coopération, industrialiser et motiver chacun individuellement sans noyer l’ensemble dans la masse. Le mouvement DevOps en plus de réfléchir à une nouvelle organisation de l’entreprise, vise à trouver des technique et des outils pour favoriser cette coopération.

C’est ce qu’est venu nous présenter Henri Gomez et Carlos Sanchez..

Henri Gomez a commencé par définir le packaging natif.

D’abord la définition d’un livrable : un livrable est un artefact utilisable par les équipes en aval, c’est-à-dire les équipes de production. Jar, War, Zip ne sont pas des livrables car ils ne sont pas directement utilisables.

Avant de créer un livrable, il faut se poser un certain nombre de questions :

  • Gestion des pré-requis
  • Cycle de vie (mise à jour, suppression)
  • Quid du déploiement
  • Localisation dans le FileSystem (FHS ? règles ?)
  • Les droits d’exécution et accès dans le FileSystem

A coté de ça, le packaging natif est une sorte de livrable très souvent utilisé par les équipes de productions. C’est le cœur de la pile applicative des OS type Unix. Il permet la gestion des dépendances, la mise à jour automatique ou sélective. Les formats les plus connus sont RPM pour Redhat, DEB pour Debian et PKG pour Solaris.

Qu’est qu’un package ?

C’est un fichier avec des données (fichiers de configuration par exemple) et des programmes (Tomcat, code de l’application, etc). C’est du code exécuté lors de l’installation, la mise à jour ou la suppression du package

Il y a des points communs avec Maven :

  • Construction par DSL connu par les Ops (simple, quelques macros, appuyé par le Shell)
  • Gestion des dépendances pour la construction mais aussi pour l’exécution
  • Dépôt de package (Nexus et Artifactory peuvent servir de dépôt)
  • Mise à jour automatique ou contrôlée

Le package offre différentes possibilités qu’on peut établir lors de la construction du RPM avec hook de pre-install et post-install ou pre-uninstall et post-uninstall.

Le hook de post-install peut par exemple être utiliser, après déploiement, pour activer des services. Alors que le hook de pre-uninstall peut servir à arrêter correctement l’application et nettoyer le système.

Il permet la déclaration du contenu (droit d’accès, paramètre de la mise à jour des fichiers de config …) et offre un historique !

Le packaging natif offre une grosse autonomie car un package est auto-suffisant, il permet par exemple la mise en place des comptes utilisateurs d’éxecution et il permet un contrôle total sur le cycle de vie avec les hooks par exemple en effectuant le lancement automatique de programmes annexes comme l’analyse des logs !

C’est un système d’installation automatisé et déterministe donc réplicable (peut être utilisé par les logiciels Puppet ou chef)

Puppet était d’ailleurs le sujet de la 2ème partie de la soirée présentée par Carlos Sanchez auquel je n’ai pu assisté.

Si cela vous a intéressé vous pouvez aller voir les videos des deux présentation ici http://www.parleys.com/#st=5&sl=0&id=2979 et la http://www.parleys.com/#st=5&sl=0&id=2980

Henri Gomez fourni une « forge » avec l’ensemble des packages nécessaires pour se mettre en mode DevOps : https://github.com/hgomez/devops-incubator

Quelques liens sur DevOps : Un twitter parodique excellent, http://devops.com/ ou encore Un article du Touilleur 🙂

Petit résumé de ces mémorables 3 ans du Paris JUG !

En ce lundi 28 février, j’étais avec quelques autres membres d’Objet Direct Paris au 3 ans du Paris Java User Group sur le thème « Siffler en travaillant ».

Personnellement cela fait maintenant plus d’un an que je vais assez régulièrement au Paris JUG qui par sa communauté et ses présentations m’ont déjà apporté beaucoup. J’étais donc parti sur le menu complet : les présentations entre 18h et 22h30 ainsi que l’after pour les personnes qui avaient réussi à s’inscrire.
J’arrive donc à la cité universitaire un peu après 17h30. Déjà on voit qu’ils ont fait les choses en grand vu la qualité de l’amphithéâtre avec deux ailes réservées pour les partenaires (Objet Direct y était bien sur représenté).

La soirée se lance vers 18h avec une intro complètement décalée par les organisateurs déguisé en blanche neige et les sept nains. Antonio Goncalves nous explique qu’il en est venu à ce thème de soirée en regardant Blanche Neige et se demande si nous aussi, développeur, nous venions au travail en sifflant et avec le sourire aux lèvres.

1ère présentation : Le télétravail par Nicole Turbé-Suetens
Pour ceux qui ne connaissent pas les conférences TED, Nicole Turbé-Suetens a déjà fait cette très intéressante présentation au TEDxParis 2011 (la vidéo ici : http://www.tedxparis.com/nicole-turbe-suetens-teletravailler-autrement).
Elle part du constat que la région parisienne (entre autre) arrive à saturation niveau transports. Or le travail d’un ingénieur (parmi tant d’autres) se passe principalement derrière un écran ce qui pourrait se faire de beaucoup d’endroits en dehors du lieu de travail. Le stress lié aux déplacements jusqu’au lieu de travail ont pour conséquence de nombreux jours d’absence, une forte consommation de psychotropes et des troubles psychosociologiques au travail.
Pour elle la vraie solution est, un autre mode d’organisation du travail, le télétravail. Elle présente alors les possibilités et surtout l’état des lieux. Mais il y a encore beaucoup de travail tant au niveau droit que du management direct (ou de proximité). Le manque de confiance, le besoin de contrôle et la pression qui s’exerce aussi sur ces manageurs représente souvent le plus gros frein.
Elle parle aussi des possibilités de Co-working comme à la Cantine qui offre les possibilités de rencontrer d’autres personnes, de partager !

2ème présentation : L’indépendance par Mathilde Lemée
http://www.parisjug.org/xwiki/bin/download/Meeting/20110228/freelance.pdf
Mathilde est une personne qu’on a l’habitude de croiser au paris jug avec son homme. Pour la petite histoire, je la connais depuis longtemps vu qu’elle a la même formation que moi (la FIIFO qu’elle n’a pas nommée !!! ). Elle vient ici nous parler de l’indépendance en tant que freelance. L’indépendance est pour Mathilde nécessite juste de faire un choix et offre de nombreuses possibilités : gagner plus bien sur mais aussi négocier plus facilement afin d’améliorer ses conditions de travail (télétravail par exemple 😉 ).
Elle insiste sur le fait que rien nous empêche de devenir freelance et qu’il n’est pas obligé d’attendre une grande expérience ou les bonnes conditions. C’est aussi la possibilité de vivre l’inter contrat différemment par exemple pour lancer des projets personnel ou encore partir autour du monde !

3ème présentation : Réinventer l’indépendance, donner du sens au collectif par Oliver Jouan
Membre de Port Parallèle, il est venu présenter cette coopérative de créateurs d’entreprise et tous avantages que cette structure peut représenter pour amorcer son entreprise. Pour lui c’est un excellent moyen de concilier l’indépendance et le collectif.
Bon j’avoue pas très concentré pour cette présentation, je pense que le mieux est d’aller voir le site : http://portparallele.com/

4ème présentation : Office code par Catherine Gall
Catherine Gall nous ramène sur les conditions de travail en entreprise notamment dans l’organisation de nos bureaux. L’ensemble de la présentation s’articule autour d’un décryptage des codes culturels liés à l’organisation suivant quatre éléments et deux extrêmes:
– La distance hiérarchique avec l’orientation autocratique ou consultative
– Le degré d’invidualisme ou de collectivisme
– La motivation basée sur la compétition ou la collaboration
– L’incertitude ou l’ambiguïté
Elle met ces quatres variables dans le contexte de différents pays (France, Anglosaxons, pays nordiques, Allemagne)
Elle parle aussi de la culture organisationnelle d’une entreprise (par exemple la différence entre les bureaux d’Intel et de Google) et son adaptation lors de la création d’une filiale à l’étranger.

5ème présentation : Getting Thing Done par Emmanuel Bernard
Bon vu que je connaissais déjà bien cette méthode je me suis permis de faire des commentaires sur twitter. C’est une méthode d’organisation pour gérer ces tâches journalières (au travail mais aussi en dehors). Le but principal est de ne pas se perdre dans une myriade de tâches qui vont venir parasiter notre concentration en mettant en place un « workflow ». C’est justement ce que je regrette dans cette méthode : la lourdeur du processus ne conviendra pas à la majorité des développeurs. Je pense que cette métode s’adresse plus à des managers. Il faut aussi trouver les bons outils numériques pour pouvoir la mettre en place.
Au final je conseille d’aller voir la méthode Zen To Done qui reprend GTD qui l’allège tout en gardant les idées fortes. http://zenhabits.net/zen-to-done-ztd-the-ultimate-simple-productivity-system/

6ème présentation : Réflexion sur le métier de développeur par Didier Girard
http://www.parisjug.org/xwiki/bin/download/Meeting/20110228/developpeurs.pdf
Ah enfin le show de Didier Girard arrive enfin. Comme à son habitude, sa présentation est entrainante et vivante ! Il nous pose la question de notre carrière et de notre avenir en tant que développeur. Pour lui, un développeur est en béta permanente. Pour progresser, il doit allier technicité, carrière et entrepreneuriat. Il doit aussi gérer son employabilité par rapport à une techno : ne pas se lancer trop tôt ni attendre la fin de la vague.
Il insiste qu’il n’y a aucune connaissance valable sans réelle pratique. Pour lui, un manager qui ne code pas, c’est l’opposé d’un chef d’un grand restaurant, c’est un manager chez MacDo 🙂
Il met aussi en parallèle 4 niveaux pour un développeur Junior, Confirmé, Sénior, Cadre avec respectivement 4 niveaux de compétence Candide, Autonome, Référent, Solide (sa réputation le précède).
Enfin il reprend un de ces slides favoris où il montre qu’actuellement un développeur peut communiquer directement avec le client en éliminant les intermédiaires (sysadmin, commercial, marketing et même manager)

7ème présentation : Devops par Patrick Debois
Cette 7ème présentation en anglais va un peu à l’opposé de celle de Didier Gérard en remettant en place le contexte du développeur dans l’entreprise et notamment leur relation avec les opérationnels.
Quelque soit le super framework, le super langage, le cloud, etc, il arrive souvent que ca ne marche pas. Les premiers en ligne sont alors les opérationnels (« the IT guys »). Il tient à remettre en question la mentalité de « rock star » de certains développeurs. Le développement n’a aucune valeur tant qu’il n’est pas en production. Il faut travailler en collaboration avec l’ensemble des équipes, faciliter le déploiement, fournir des métriques mais surtout utiliser les connaissances de tout le monde.
Mention spéciale sur la mise en forme de la présentation remplie d’humour et très bien choisie (la réalisation d’un projet informatique était comparé à un barbecue).

8ème présentation : Mettre une application sur Android Market avant la fin de la soirée par Stéphane Jacquemain
Deux jeunes viennent présenter leur belle histoire sur les téléphones Android. Un soir ils ont décidé de tester le développement Android et en profiter pour sortir leur première application Android. Résultat 3000 téléchargements ! Ils ont alors continué en développant d’autres petites applications (Tazer, corne de brume pour le mondial, briquet ..) . J’admire d’ailleurs cette pratique d’apprendre les fonctionnalités par la pratique et surtout en développant une vrai application à chaque fois !
Le nombre de téléchargement grandissant (des millions au total sur l’ensemble des applications) ils ont décidé d’y mettre de la pub et la encore le succès n’a pas manqué !
Bon juste un petit bémol, j’ai eu la chance de discuter avec eux et certaines de leurs applications leur ont pris beaucoup de temps de développement (oui un briquet en OpenGL ca ne se fait pas en une soirée 😀 )

9ème présentation : Du bancaire au Nabaztag par Julien Cheype
Julien Cheype, ancien développeur dans le domaine financier, a changé complètement de sujet pour remettre à jour l’architecture du Nabaztag, le lapin communiquant. Il explique son approche destinée à simplifier l’architecture logiciel au cas par cas et par itération tout en répondant aux besoins très spécifiques du projet !
Au final je trouve qu’il empile beaucoup de framework mais je pense que c’est inévitable
actuellement !

Ensuite pour ceux qui avaient pu réserver une place, la soirée c’est terminé par un tour de Paris dans un bus dansant, du champagne, une photo devant la tour Eiffel et le classique diner au Vavin.
Les irréductibles ont même passés la nuit au Falstaff (un membre émérite d’Objet Direct aurait même oublié de rentrer chez lui 😉 )

Voila pour ce retour accéléré des trois ans du Paris JUG !
Si vous voulez plus d’info cherchez le tag #parisjug2011 sur twitter !