Normal ou Décaféiné ?

Par Alexis Moussine-Pouchkine

Dans cette première keynote, Alexis Moussine-Pouchkine nous a exposé sa vision sur l’avenir de Java. Le java saura-t-il s’adapter au cloud, aux mobiles et autres révolutions ? En tous cas, il met en avant que Java possède déjà quelques JSRs permettant de s’adapter à cela notamment quant à la rationalisation des ressources et que certaines évolutions (notamment les lambdas et les multi tenancy) du langage permettront de faire du calcul distribué tout en assurant une meilleure gestion des ressources. Pour cela, les applications, Paas et Saas doivent travailler ensemble pour consommer moins et contrôler au plus juste l’utilisation des ressources. L’informatique doit être responsable et maîtrisée. L’informaticien quant à lui est comme l’artisan qui doit ménager ses outils pour travailler proprement et efficacement.

Du fantasme de l’hyper intégré à la réalité de l’hyper distribué

Par Habib Guergachi

Habib Guergachi, le CEO Zenexity a mis en avant le retard français accumulé au sein des SI. Pour lui, l’avenir des SI doit se tourner vers des systèmes interopérables, déployés séparément et concentrés sur leur business. Les applications composants ce système doivent être hyper scalables, sûres, idempotentes et être capables d’adapter les ressources employées en fonction de la charge. L’architecture moderne technique doit répondre aux contraintes actuelles et futures de constructions d’applications sans hypothèques fonctionnelles pour les 20 prochaines années. Il met en avant pour finir ses convictions : le génie informatique français se doit d’agir pour sauver la FRANCE par l’innovation au service du fonctionnel et par la construction d’architectures techniques hyper distribuées et à entropie toujours plus forte afin de bâtir les meilleures œuvres logicielles de la planète.

Du javascript propre, challenge accepted

Par Romain Linsolas @romaintaz et Julien Jakubowski @jak78

Romain et Julien nous entraînent dans une ballade dans les aspects surprenants de JS et nous proposent une approche pour écrire du javascript proprement et de manière plus fiable et sûre. Pour eux les aspects les plus dangereux sont la pollution de l’espace de nommage, que tout soit public et le manque de tests… mais… ils nous démontrent qu’une fois que nous maîtrisons un peu plus le JS avec ces outils/techniques, alors notre code JS sera de meilleure qualité, la maintenance et l’évolutivité de notre code :

  • Coffescript pour écrire avec lisibilité le code,
  • AngularJS/Backbone.js/Ember.js pour optimiser les temps de réponse puisque ces outils utilisent une architectures MVC côté client communique avec la partie serveur avec du json par exemple,
  • Organisation modulaire du code avec les espaces de nommage,
  • Structurer les dépendances et les chargements avec require.js,
  • Améliorer l’expressivité du code avec jQuery,
  • Utiliser les templates avec mustache.js, underscore.js ou handlebars.js,
  • Écrire des tests unitaires avec Jasmine + CoffeeScript, Qunit ou Mocha,
  • Écrire fonctionnels et d’intégration avec Karma, PhamtomJS, etc…
  • Automatiser les builds, l’analyse du code et les tests avec Jasmine, JSLint et Google Closure Compiler qui s’intègre avec Maven, Jenkins, et Sonar,
  • Gérer ses projets scafolding, dépendances et serveur avec Yeoman : Yo, Grunt et Bower.

WTF, What the fold ?

Par Olivier Croisier

Olivier Croisier nous explique le concept de Fold en programmation fonctionnelle avec Haskell et Java 8. C’est un principe simple, puissant et générique qui est le socle pour d’autres opération map, filter, count…. Le fold a pour objectif de traverser la collection et utilise chaque élément de la collection pour former une valeur finale en commençant par une valeur de début dite seed. Un exemple d’utilisation de Fold est la somme totale des valeurs entières d’une collection. Pour Fold, on distingue deux fonctions : FoldLeft et FoldRight, tout dépend du sens choisi pour traverser la collection. Dans des cas, cela n’a aucune importance sur le résultat final comme par exemple l’addition parce que cette opération est permutative. Dans d’autres cas, cela amène à avoir des résultats complètement différents suivant le sens par lequel la collection est traversée comme par exemple la soustraction. L’objectif d’Olivier est de nous apprendre comment reconnaître le fold dans n’importe quel langage et de montrer que Java 8 permettra de réaliser de la programmation fonctionnelle en Java et notamment d’utiliser des opérations complexes et puissantes sur les collections de manière simple. Toutefois Java 8 aura son fold (nom “reduce”) qui sera limité dans l’utilisation car il traitera des mêmes types, le type en entrée sera celui de sortie (cela permet d’optimiser les traitements, les éléments étant permutables par conséquence). Pour contourner cela, Java laisse la possibilité d’utiliser map avant le reduce pour harmoniser le type des éléments. Le fold existe en Javascript, en Scala, en Groovy.

What I want in Java 9 ?

Par Rémi Forax

Rémi commence par nous exposer la manière dont se déroule le choix des features qui seront intégrées à Java. Ensuite, il nous décrit comment dans Java 8 les lambdas vont fonctionner et nous permettre de faciliter l’utilisation de nos collections. Ainsi, nos programmes vont décrire ce qu’ils veulent et non ce qu’il faut faire (différence avec l’approche impérative plus classique)…. Plus généralement, les lambdas vont nous permettre d’utiliser les Streams, le chaînage et le calcul parallèle. Puis, Rémi Forax nous explique sa vision de Java 9 autour de “invoke dynamic” avec la refonte de l’IoC actuellement utilisée par les containers Java EE.

CAS, un SSO web open source

Par Jérôme Leleu @leleuj

Dans cette conférence, Jérôme présente le principe du “single sign on” et de comment se structure “CAS” (une solution de SSO). Il nous expose le fonctionnement de CAS pour les utilisateurs puis de comment CAS est construit et enfin de comment il permet de faire de la fédération d’identités avec le SAML. Il existe des clients CAS pour Java, .Net, PHP, mod_aut_cas, Spring Security, Apache Shiro… et même des non officiels avec Perl, Python, Ruby, Play (Java&Scala), Vaadin, etc.. Il nous montrer même comment il est simple de configurer un fichier côté application cliente pour la mise en place du client CAS. Pour finir, il nous expose son retour d’expériences avec SFR.

Cloud Best Practices

Par Eric Bottard

Eric nous a présenté les bonnes pratiques à suivre pour réussir ses applications dans le cloud et quelles étaient les conséquences à avoir une application dans le cloud. Dans un premier temps, il a rappelé qu’il était important de choisir où étaient les data center de son hébergeur afin d’optimiser le trafic http. De plus, il a mis en avant qu’il n’appartenait qu’au développeur de livrer une application performante et stateless (scalable). Puis, il a soumis notre attention le fait de maîtriser sa solution de stockage de données et de configuration pour faciliter les montées de versions et la scalabilité. Enfin, il a nous rappeler qu’il était important d’automatiser le plus possible afin de pouvoir livrer de la même manière sur tous les serveurs la même chose.

Pratiques des géants du web

Par Ludovic Cinquin

Dans cette conférence qui présentait une partie du livre Octo “Les géants du Web”, Le directeur France d’Octo nous a exposé quelles étaient les bonnes pratqiues de ces géants. Ces derniers sont : amazon.com, google, yahoo, twitter, dropbox, facebook, ebay, wikipedia, netflix. Ils ont été choisis pour la taille très importante de leurs utilisateurs, de leurs infrastructures ou du business généré. Ces derniers font toujours du sur-mesure pour leur core-business et utilisent des solutions intégrées que pour ce qui n’est pas dans ce core-business. Les progiciels sont en effet inadaptés pour faire du très gros à cause des coûts, de la généricité, et de l’architecture de ces derniers. Ces géants ont des architectures distribuées basées sur des bases “Not only SQL” sur lesquelles ils peuvent déployer en continu chaque évolution créant de la valeur. Ils ont même constitué des systèmes qui s’adaptent aux pannes que peuvent rencontrer leurs serveurs. Ludovic conclut en disant qu’Internet est la troisième révolution après l’écriture et l’imprimerie et que nous en sommes les artisans. A nous de jouer !

Build a WOA app in 50 minutes

Par Guillaume Bort, et Sadek Drogbi

Guillaume et Sadek de Zenexity ont développé devant en 45 minutes ce qu’ils appellent une application web respectant les principes WOA. Ils ont réalisé leur démonstration sur Playframework 2 avec le langage Scala. Leur application consommait l’API Twitter de manière “continue” sans bloquer leur application. Cette interrogation de l’API Twitter se faisait de manière asynchrone en récupérant des streams json qu’ils exploitaient pour afficher en direct les photos contenus dans les tweets.

Comment paraître sexy auprès des développeurs ?

Par Camille Roux

Excellente présentation de Camille Roux, celle-ci parle du recrutement des développeurs et comment beaucoup de SSII sont “inefficaces” dans leur processus de recrutement.
La philosophie de Camille : se mettre à la place du développeur, essayer de le comprendre au lieu de l’assommer avec des offres d’emplois “génériques”.

Ce dernier à réaliser un sondage pour savoir les critères les plus importants dans le choix d’une entreprise plus qu’une autre.

Dans l’ordre décroissant:

  1. L’équipe
  2. Le salaire
  3. La techno
  4. La culture d’entreprise
  5. Le temps consacré pour la veille
  6. Le projet de l’entreprise
  7. La méthode
  8. Les considérations
  9. Les défis techniques
  10. L’activité de l’entreprise (=> les SSII mettent bien souvent ce critère en premier, alors que c’est ce qui intéresse le moins le développeur….)

Ainsi l’entreprise pourra poster son annonce dans des “Job board” spécialisé plutôt que des “usines à gaz”…. La grande valeur ajoutée de cette conférence provient surtout des échanges entre les spectateurs et le speaker. Les retours d’expériences furent enrichissants et les solutions pour le moins originales !

Quelques exemples d’offres créatives :

  • une boîte sur Paris a personnalisé son offre d’emploi sur le thème de Star Wars
  • une autre à carrément créé un niveau dans un jeu vidéo connu. Ceux qui arrivaient à le résoudre étaient embauchés (l’entreprise partait du principe qu’il fallait une certaine intelligence pour terminer le niveau)
  • Vimeo met son offre d’emploi dans le code source de son site (elle part du principe que si un développeur s’amuse à parcourir le code source de son site, c’est qu’il a quelque chose d’intéressant)

Bon ces idées sont difficilement reprenables dans le sens où c’est du déjà-vu, par contre Camille nous montre bien qu’il faut se montrer original, créatif, compréhensif, ouvert pour pouvoir être “sexy” auprès des développeurs.

Somme toute c’est un échange “gagnant-gagnant”.

Creating games with WebGl And Three.Js

By James William

Présentation de Three.JS une librairie js basée sur WebGL qui fournit au programmeur une API de haut niveau lui permettant de créer un environnement 3D.
Avant même d’aller plus loin, pour vous donner envie de savoir ce qu’est ThreeJS, voici ce dont est capable cette librairie : http://hexgl.bkcore.com, bluffant non ?
Concernant la présentation, James William a présenté les différentes composantes de l’architecture ThreeJS :

Scene

Comme son nom l’indique, c’est la scène 3D qui sera rendu par le moteur Three.JS

Rendered

C’est le moteur de rendu 3D utilisé, habituellement WebGL ou Canvas

Camera

C’est le point de vue d’où l’utilisateur regarde la scène, avec une position dans un espace 3D et un angle de vision

Lumière

Il y a plusieurs types de lumières gérés par Three.JS, on peut notamment citer :

  • ambient
  • direction
  • point
  • spot lights

A noter que leur mise en oeuvre est très simple à mettre en place, une ou deux lignes suffisent.

var ambientLight = new THREE.AmbientLight(0x555555);
scene.add(ambientLight);

var directionalLight = new THREE.DirectionalLight(0xffffff);
directionalLight.position.set(1, 1, 1).normalize();
scene.add(directionalLight);

Geometry

Nativement Three.JS permet de créer des formes géométriques simple :

  •  cube
  • sphere
  • rectangle, etc…

Material

C’est le type de materiaux géré par Three.JS, avec chacun ses propriété physique particulières (rendu de lumière, texture, etc..)
On peut citer notamment :

  • Lambert
  • Phong
  • smooth shading
  • textures

Loader

Une des fonctionnalités majeures de Three.Js est de pouvoir loader des objets 3D à partir de sources externes
Ainsi on peut désigner un objet dans un éditeur 3D tel que Blender, collada, OBJ, MAX, Maya puis l’exporter sous format JSON ou XML pour l’intégrer sous Three.JS

Collision Detection

Three.Js a des fonctionnalités pour gérer les collisions et interagir avec l’environnement 3D, ont notamment été citées :
– BoudingBox
– Bouding sphere
– Rays

Physique

Pour aller plus loin dans l’interaction avec le monde 3D, Three.Js possède de nombreuses fonctionnalités permettant de simuler les propriétés physique.
D’autres librairies compatibles existent aussi, notamment Physijs.

Coté code javascript, voilà le code pour animer un cube, c’est relativement concis et facile à comprendre :

var camera, scene, renderer, geometry, material, mesh;

init();
animate();

function init() {

scene = new THREE.Scene();

camera = new THREE.PerspectiveCamera(50, window.innerWidth / window.innerHeight, 1, 10000);
camera.position.z = 500;
scene.add(camera);

geometry = new THREE.CubeGeometry(200, 200, 200);
material = new THREE.MeshNormalMaterial();

mesh = new THREE.Mesh(geometry, material);
scene.add(mesh);

renderer = new THREE.CanvasRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);

document.body.appendChild(renderer.domElement);

}

function animate() {

requestAnimationFrame(animate);
render();

}

function render() {

mesh.rotation.x += 0.01;
mesh.rotation.y += 0.02;

renderer.render(scene, camera);
}

Quelques ressources pour continuer :

examples simples : http://stemkoski.github.com/Three.js/

on peut faire du Three.JS en java en passant par GWT : https://github.com/vatula/gwt.threejs
attention le portage n’est pas complet et pas maintenu, mais permet déjà de s’amuser avec les scènes, les éclairages, les textures, etc… exemple ici : http://vatula.github.com/gwt.threejs/examples/canvas_geometry_earth/Globe.html

Enfin pour faire un peu de pub, un livre très complet traitant de la programmation graphique HTML5, écrit par James William en personne : Learning HTML5 Game Programming => Buy it !

Le classpath est mort ?

Par Alexis Hassler

Se basant sur cette affirmation effectuée par Mark Reinhold en 2009 qui pronostiquée la disparition du classpath, Alexis rappelle les mécanismes des classloaders actuels en revenant notamment sur ceux employés dans Tomcat et JBoss AS. Après avoir fait le tour des problèmes induits par le classpath (pb de ClassCastException, pb de NoClassDefFound, pb de conflits de version, pb de JAR HELL,…), la granularité et la modularité s’impose comme les clés indispensables pour résoudre les problèmes soulevés. Un tour d’horizon des solutions est effectué ainsi sont abordés tour à tour JIGSAW, OSGi et JBOSS Modules de JBOSS AS 7.

Animez vos pages HTML5 : un tour d’horizon complet des techniques d’animation en HTML5

Par Martin Gorner

Comme le sujet l’indique par son titre, il s’agissait de balayer durant cette conférence les technologies s’articulant autour d’HTML 5 pour accompagner d’exemple pratique :

Déclaratif :

  • CSS3
  • SVG / SMIL

Programmatique :

  • Canvas + Javascript
  • WebGL + Javascript

Une nouvelle fois, des problèmes de compatibilité cross-browser apparaissent avec IE 10 sur certaines fonctionnalités.

La présentation (incomplète) est disponible à l’adresse suivante : http://animateyourhtml5.appspot.com/

Technologies vocales pour développement WEB

Par Sébastien Bratières

En 2013, la reconnaissance vocale est devenue incontournable et commence à être intégrer dans un grand nombre de plateforme OS/navigateur (Google, Apple, Microsoft,…). Après avoir exposé les notions de base de la reconnaissance, Sébastien rappelle les principaux cas d’utilisation :

  • Dictée vocale (ASR = Automatic Spreech Recognition / TTS = Text to Speech)
  • Choix dans une liste (ex : choix d’un contact)
  • Assistant virtuel (ex : intéraction en aveugle)
  • Sésame (wake-up word)
  • Voice commands
  • Biométrie (ex : identification pour l’empreinte vocale)
  • Portail téléphonique

Après un focus sur les étapes nécessaires à l’ASR, un comparatif est dressé entre les 2 modèles ASR existants :

  • Modèle base grammaire (exemple d’entrée : appel Martin Dupond)
  • Modèle statique (exemple d’entrée : combien pèse une baleine ?)

La conférence se termine sur un examen des solutions open source et commerciales du marché (CMU Sphinx, Google Web Speech API, Julius, Windows Phone 8 Speech API) avec pour conclusion que les technologies vocales commencent à arriver à maturité malgré quelques lacunes techniques.

Java EE 7 and EJB 3.2, what made it and what got the axe

Par David Blevins

Java EE 7 marque une évolution importante dans les évolutions de Java EE. Cette conférence est l’occasion de se pencher quelques minutes sur la JSR-348 qui introduit une nouvelle version du JCP (2.8). Les règles édictées de cette nouvelle JSR sont présentés par David en anglais comme :

  • Be transparent
  • Have open Mailing lists
  • Have public issue trackers
  • Be an active spec lead
  • Allow anyone to participate

En présentant à chaque fois, besoins et propositions retenues, David détaille les évolutions apportées au niveau des EJB sur les thématiques suivantes :

  • Logging
  • Asynchronous
  • Thread pools
  • Thread priority
  • Meta annotations
  • Global CDI Enablement
  • Modernized Connector / MDB

The Spring update: looking at Spring 3.1, 3.2, and 4.0

Par Josh Long

Dans sa présentation Josh nous rappelle le calendrier des dernières versions du framework Spring :

  • Spring 3.1 à déc 2011
  • Spring 3.2 à déc 2012
  • Spring 4.0 à T4 2013

Josh fait le tour  des évolutions amenées par chaque version, explique comment les utiliser et surtout pourquoi les utiliser. La complémentarité avec les évolutions de Java EE 7 est largement soulignée.

Après être une synthèse  des évolutions les plus intéressantes de Spring 3.1, les fonctionnalités de Spring 3.2 sont détaillées :

  • Binaries buil against Java 7
  • Inlined ASM 4.0 and CGLIB 3.0
  • Async MVC processing on Servlet 3.0
  • Spring MVC Test support
  • MVC configuration refinements
  • SpEL refinements
  • General Spring MVC niceties

Puis celles de Spring 4.0 :

  • Comprehensive Java 8 support
  • Revised application event mecanism
  • WebSocket support in Sping MVC
  • Next-generation Groovy support
  • Grails bean builder finally making it into Spring proper