Vous aimez ce que vous lisez sur ce blog ?
Envie d'aller plus loin avec véritable formation d'expertise en Java ?
Venez suivre ma formation Masterclasse Expertise Java !

"Même un développeur experimenté a besoin de continuer à apprendre. Et dans cette formation... j'ai appris beaucoup !" - A.G., Java Champion

Sessions intra-entreprises sur demande : contact[at]mokatech.net.
Inscrivez-vous vite !

Paris JUG anniversaire : compte-rendu

Hier soir, le Paris JUG fêtait son premier anniversaire !
A cette occasion, les organisateurs avaient mis les petits plats dans les grands :

  • Accueil sympa au FIAP, avec buffet et massages (hummm)
  • Intervenants de qualité : JUG-leaders français, Christian Frei (Jazoon), Stephan Janssen (BeJug, Devoxx, Parleys)...
  • Goodies (T-shirts, livres) et bonus (réductions pour Jazoon, points pour JavaBlackBelt)
  • Et 6 quickies (courtes présentations), pas forcément techniques pour une fois.

Oyez, Oyez !

Mais tout d'abord, quelques annonces.

  • Le site d'entraînement aux certifications Java Black Belt offrait 15 points sur simple demande. Pour rappel, ce site fonctionne sur le principe de l'échange : vous gagnez des points lorsque vous soumettez une question, que vous pouvez ensuite dépenser pour passer des tests et progresser.
  • Une tombola était organisée pour gagner des places pour Jazoon'09. Cet événement se déroule à Zürich sur une semaine, et le billet d'entrée est habituellement hors de prix (1100 €).
  • Et enfin, quelques statistiques sur le Paris JUG : 1 an d'existence, plus de 200 inscrits sur la mailing-list, et 2500 visites par mois sur le site. A ce sujet, les statistiques Google Analytics révèlent que beaucoup de non-Parisiens fréquentent le site, particulièrement à Lille et Marseille : bientôt des JUGs dans ces villes ?

Présentation de Wicket

Pour ce premier quickie, Tarik Filali Ansary (Sfeir) a présenté Wicket, un framework web par composants hébergé par la fondation Apache.

Hello World

La philosophie de Wicket est de conserver une séparation nette entre la présentation en HTML, et la logique de contrôle en Java. Le lien entre les deux est réalisé grâce à des identifiants placés dans les balises HTML :

<html>
	<body>
		<h1 wicket:id="titre"> Titre factice </h1>
	</body>
</html>
public class HelloPage extends WebPage
{
	public HelloPage
	{
		add(new Label("titre", "Hello World"));
	}
}

Dans cet exemple, la balise <h1> de la page HTML possède l'identifiant wicket "titre", permettant de l'associer à un composant de type Label au niveau du contrôleur. A l'exécution, le contenu par défaut de la balise ("Titre factice") sera remplacé dynamiquement par le texte fourni par le contrôleur ("Hello World").

Les modèles

Dans l'exemple précédent, nous avons affiché une chaîne de caractères statique. Sur un véritable projet, ce cas de figure est rare, car les données proviennent généralement d'une base de données ou sont calculées par l'application.

Là encore, Wicket propose une architecture bien découplée : le rôle des composants graphiques (Label, etc.) se limitant à afficher les données, leur récupération est déléguée à des Modèles. Wicket en propose plusieurs types, allant du simple introspecteur de POJO au modèle dit "détachable" contenant uniquement un identifiant permettant de retrouver la donnée.

Les composants

Puisqu'on parle de composants, Wicket en fournit tout une palette, que ce soit pour l'affichage (Label, MultilineLabel...) ou la saisie (TextField, RadioButton, Button...).
A un plus haut niveau, on touve les notions de WebApplication, WebSession et WebPage (construite à partir de composants).

La composition et l'héritage de ces objets permettent d'assembler rapidement une application web, et de bénéficier des avantages inhérents aux architectures objet : encapsulation, refactoring facile, réutilisabilité maximale.

Les Behaviors

Lorsqu'un comportement est transverse ou réutilisable, il est possible de le capturer sous la forme d'un Behavior (pattern Adapter).
Attaché à un ou plusieurs composants, un Behavior permet d'en modifier le comportement - par exemple, il est possible de modifier la classe CSS des lignes paires d'un tableau pour leur donner une couleur différente des lignes impaires.

Conclusion

Wicket est un framework web par composants très puissant, et malgré tout très simple d'utilisation (comparez son coût d'apprentissage avec celui de JSF...). Une riche librairie de composants répond aux besoins les plus courants, mais il est facile d'en développer de nouveaux.

Wicket.jpg

Les Java User Groups

La deuxième séance était une présentation des différents JUGs francophones.
Les différents JUG-leaders ont présenté rapidement leurs associations respectives :

  • Breizh JUG : Basé à Rennes, il attire environ 60 personnes par mois.
  • Riviera JUG : créé en janvier à Nice, il compte déjà 80 spectateurs. L'avantage, c'est qu'il est facile d'attirer des présentateurs dans le sud...
  • Bordeaux JUG : depuis octobre 2008, il est la preuve qu'on peut coder un verre à la main, même si une trentaine de personnes seulement ont tenté l'expérience pour le moment.
  • Tours JUG : créé en avril 2008, il s'agit du second JUG français ; il regroupant environ 35 passionnés tous les mois.
  • Lorraine JUG : en à peine un mois d'existence, il attire déjà 40 codeurs.
  • YaJUG : l'ancêtre de tous les JUGs ! Créé en 2006 au Luxembourg, il attire régulièrement 30 à 50 personnes. A noter qu'il s'agit du seul JUG non sponsorisé, et donc soumis à cotisation (40€/an).
  • Un JUG est en création à Toulouse.
  • Un autre à Lyon (en recherche d'un logo...)
  • Enfin, le JUG de Nantes regroupe une trentaine de fidèles depuis juin 2008.

Comme on le voit, le mouvement prend de l'ampleur. Deux JUGs en création, plusieurs à peine lancés, et sans doute d'autres encore à venir (Lille, Marseille). La communauté Java est dynamique !

Jugs.jpg

Jazoon

Christian Frei, Suisse de son état, est venu nous présenter la conférence Jazoon.

Jazoon.jpg

Pour sa troisième édition, Jazoon'09 se déroulera à Zürich les 22-25 juin 2009.
Ces trois jours sont précédés d'une journée de pré-conférences (tutoriaux, community days) et suivis d'un ou deux jours de post-conférence (tutoriaux, workshops).

Attirant plus de 850 personnes d'une quarantaine de nationalités, il s'agit d'un événement hors normes, très axé sur le partage de connaissances et les ateliers pratiques : formations, conférences, ateliers pratiques, retours d'expériences...

La place est à 1100€, mais il existe plusieurs moyens d'alléger la note : être sponsorisé par un JUG (-20%), s'enregistrer avant le 29 avril (-20%), ou... gagner une invitation à la loterie organisée par Christian lors de sa présentation.

A propos, si vous avez moins de 26 ans, vous pouvez postuler pour animer une présentation (programme Jazoon Rookie). Si vous êtes retenu, le voyage et l'entrée vous sont offerts !

Et maintenant, une page de pub

Un bref interlude a permis de grignoter un peu au buffet, de se faire masser par une jolie demoiselle, et de gagner des goodies (T-shirts, livres, casquettes...) en répondant à des questions techniques. D'ailleurs, un intervenant a répondu à une question sur sa propre présentation (hey, c'est de la triche !)
On notera que la roulette de tirage au sort, écrite en Java FX, est toujours aussi catastrophique et imprévisible. Mais ça fait partie du charme du ParisJUG...

Goodies.jpg

Le temps de faire le tour des participants pour serrer des mains et prendre des nouvelles, et la deuxième partie de la soirée était annoncée.

Parleys, le Youtube du développeur

Stephan Janssen, fondateur du JUG belge et organisateur de Javapolis/Devoxx, est venu présenter la plateforme d'e-learning Parleys.com. Présentation fort réussie, l'enthousiasme et l'humour de Stephan étant fortement contagieux. Et il faut bien dire que le site est très impressionnant !

StephanJanssen.jpg Parleys.jpg

A l'origine, Parleys permettait de mettre en ligne les conférences données à Javapolis (vidéos et slides). Avec plus de 250 présentations disponibles et plus de 10Tb de données échangées par mois, c'est une mine d'or pour les développeurs Java.

La première version, en HTML/Ajax, a rapidement laissé la place à une version Flex.
Par défi et curiosité, des versions Adobe AIR, GWT et JavaFX (ah bon, JavaFX ça marche vraiment ?) ont été développées, proposant les mêmes fonctionnalités que l'originale : redimensionnement de l'interface, recherche, synchronisation entre la vidéo du présentateur et les slides...

La prochaine version devrait frapper très fort :

  • Un nouveau serveur écrit en Spring/Hibernate/JPA pour de meilleures performances (l'actuel est basé sur un wiki)
  • De nouvelles fonctionnalités comme des "Spaces" et des "Channels", permettant de regrouper des contenus et de définir des espaces privés
  • Et surtout, un nouveau modèle économique : la plateforme pourra accueillir des contenus tiers, réalisés avec le module de publication intégré. Au demeurant, celui-ci est également bluffant : écrit en Flex/Air, il détecte les changements de scènes dans la vidéo et réalise le chapitrage automatiquement, et permet d'associer facilement les slides correspondants. En moins de cinq minutes, Stephan a mis en forme une présentation d'une heure... La publication de contenus devrait être payante pour les entreprises, mais restera gratuite pour les JUGs. On attend de voir ça avec impatience !

ParleysPublisher.jpg

En conclusion, encore peu connue, la plateforme Parleys.com devrait s'imposer comme la référence dans le domaine des conférences techniques. La liste des conférences déjà disponibles est alléchante, et je regrette de ne pas avoir davantage de temps libre pour les regarder...

Java 7 : le menu

Thomas Chamas est venu ensuite présenter un récapitulatif des API et technologies retenues (ou non) pour Java 7.

Alors, au menu :

  • Jigsaw : c'est le projet de modularisation de la JVM. Pratique pour éviter d'embarquer ou de télécharger (JNLP...) des parties du JDK dont on ne se sert pas (swing, webservices...)
  • Swing, justement, gèrera désormais la notion de cycle de vie de l'application, et des mécanismes plus haut niveau pour construire des interfaces graphiques (intégration du Swing Application Framework ?).
  • NIO 2 : la nouvelle version devrait enfin supporter le multicast. Par contre, l'élément central de l'API ne devrait plus être File mais Path.
  • java.util.concurrency sera complété avec de nouvelles classes comme TransferQueue et Phaser, et fournit un nouveau framework de Fork/Join.
  • Une API XQuery devrait faire son entrée, apportant une manière uniforme de parcourir des structures comparables aux arbres XML.
  • JMX 2 pourra gérer des namespaces pour les objets exposés, autorisant ainsi une hiérarchisation des groupes d'objets.
  • Des annotations supplémentaires seront disponibles, comme @NotNull, @ReadOnly...
  • La déclaration de types paramétrés sera allégée : List<String> ls = new ArrayList();. Enfin !
  • De nouveaux langages dynamiques seront supportés, comme Python et PHP. On remercie Caucho pour leur boulot sur Quercus ! A mon avis, le support de PHP sur les serveurs d'applications JEE pourrait révolutionner le monde du développement web, et inciter les hébergeurs à proposer des solutions Java/Tomcat en standard.
  • Un opérateur "?." ferait son apparition. Il permettrait d'éviter les infâmes NPE (NullPointerException) en renvoyant simplement null au premier élément null rencontré dans le graphe d'objet parcouru. Mais pourquoi un nouvel opérateur ? Pourquoi ne pas implémenter ce comportement directement avec l'opérateur habituel "." ?

Les points suivants seront peut-être intégrés :

  • L'API DateTime, basée sur JodaTime, devrait remplacer les classes préhistoriques Date et Calendar !
  • La surcharge des opérateurs de comparaison avec les Enums (ex: Duration.MONTH > Duration.DAY). Bien.
  • L'utilisation des Strings dans les blocs switch. Là encore, j'approuve. Les Strings étant immuables, il ne devrait pas y avoir de problème.

Par contre, Java 7 ne contiendra apparemment pas les closures... mais on s'en doutait. Malgré plusieurs années de débats acharnés sur la blogosphère et 3 prototypes parfaitement fonctionnels, cette fonctionnalité est repoussée sine die. A vrai dire, ce n'est pas plus mal. On évite ainsi une complexification importante du langage, notamment au niveau de l'intégration avec des fonctionnalités déjà sensibles du langage, comme par exemple les types paramétrés. Et puis, pour ceux qui en ont vraiment besoin, il reste toujours Groovy...

Sans lui jeter la pierre trop fort (un petit gravier tout de même), je dirais que la présentation de Thomas n'était clairement pas au niveau des précédentes. Trop jeune, apparemment sans expérience de la prise de parole en public et ayant mal préparé son sujet, il a frôlé la crise de panique sur scène...

Java7.jpg

Java 3D et JOGL

La dernière présentation, animée par Julien Gouesse, portait sur l'intégration de la 3D en Java avec JOGL.

Nous n'avons malheureusement pas vu grand chose, puisque Julien a passé la majorité du temps à commenter des descripteurs de déploiement JNLP ou du code OpenGL brut... Sans aucun intérêt, à part le fait que DirectDraw sous Windows est incompatible avec Java3D.
Rectification (merci Julien) : ce sont OpenGL (via son binding JOGL) et DirectDraw qui sont incompatibles entre eux.

On a malgré tout eu droit à 20 secondes de démonstration d'un jeu de tir à la première personne (FPS) assez moyen (TUER), à cent lieues de Quake premier du nom, et malheureusement présenté comme le summum du jeu 3D indépendant en Java. Du côté des jeux commerciaux, à peine une dizaine sont disponibles, la faute aux éditeurs de jeux sur consoles paraît-il, qui imposent leurs outils et leurs moteurs graphiques en C/C++.

Conclusion

De cette soirée JUG anniversaire, il faut surtout retenir l'aspect communautaire. Les développeurs Java s'organisent dans toute la France, et c'est une bonne chose. Les présentations techniques étaient dans l'ensemble peu intéressantes, mais celles sur Jazoon et Parleys ont retenu toute l'attention de l'auditoire.

A partir de la soirée de mars, je vous rappelle qu'il est nécessaire de s'inscrire (ce sera vérifié à l'entrée).
Je vous tiens au courant !

A lire aussi...

D'autres comptes-rendus :


Commentaires

1. Le jeudi 4 juin 2009, 10:56 par Julien Gouesse

Bonjour

Je n'ai jamais présenté mon jeu comme le summum du jeu 3D indépendant en Java!!! C'est de la calomnie! C'est facile de descendre le travail des autres ainsi! Je ne pense pas que je reviendrai à Paris JUG afin d'éviter ce genre de réaction. J'ai toujours dit que mon FPS était modeste et que comme je suis seul sur ce projet et que je ne suis pas infographiste, je ne peux pas faire de miracle! Démonter plus de 2 ans de programmation et de rechercher algorithmique en qualifiant le tout de "catastrophique" n'est pas le genre de comportement que j'attends d'un public avisé. Je ne vais pas écrire le nouveau Quake 5 tout seul, ça me paraît évident!

De plus, j'ai essayé d'expliquer tout le code que j'ai présenté. Si ça ne vous intéressait pas, vous n'aviez qu'à ne pas venir! J'ai également montré des captures d'écran d'autres jeux mais ça, vous ne le mentionnez même pas. Vous avez complètement mis les choses à votre sauce.

Enfin, j'avais parlé de la 3D en Java et non de Java 3D, encore une preuve que vous n'avez pas essayé de comprendre.

2. Le jeudi 4 juin 2009, 11:14 par Julien Gouesse

Ton impression n'a pas été partagé, regardez ici : http://www.insideit.fr/post/2009/02...

{{Le dernier quicky traitait de l'état de l'art et de l'utilisation de Java dans les jeux vidéo (avec Java Binding for Open GL) par Julien Gouesse.
J'avoue qu'il m'a bluffé. Je ne savais pas que des jeux développés en Java étaient commercialisés même s'ils se comptent sur les doigts.
Pour les personnes intéressées par ce genre de développement, le code source du doom-like TUER développé par Julien est dispo ici.
Par ailleurs, la fluidité de la démonstration du jeu TUER a également bluffé l'ensemble des spectateurs : voir un jeu 3D développé en java aussi fluide, j'avoue que je ne m'y attendais pas.}}

Olivier, tu peux garder ton venin pour toi tout seul :) Mon jeu est moche, je suis programmeur, pas artiste.

3. Le jeudi 4 juin 2009, 12:10 par Olivier Croisier

Salut Julien,

J'étais au contraire très intéressé de voir ce qui se faisait en matière de 3D avec Java. J'avais déjà vu un cas d'application industriel (imagerie médicale) qui m'avait impressionné, et comparativement j'ai été assez déçu.
Quant aux jeux 3D en général, le premier d'entre eux (quake) était déjà d'une excellente qualité (et codé 100% à la main sans librairie graphique).
La barre était donc très haute.

Maintenant, je mesure tout à fait ton effort : la 3D est un sujet fort complexe, et en plus tu es seul sur le projet. Sous cet angle, rien à dire, ton travail est parfaitement respectable.
En ce qui concerne ta présentation proprement dite, j'aurais été davantage intéressé par tes algorithmes (BTrees, etc.) et tes astuces d'optimisation et de parallélisation du code, que par les fichiers de déploiement que tu as détaillés. A ta décharge, le format des quickies n'était peut-être pas adapté non plus...

Au final, je suis donc resté sur ma faim.
Après, je n'exprime que mon avis strictement personnel (qui n'a que l'importance qu'on veut bien lui accorder), et je suis content de voir que d'autres ont été plus enthousiastes.

Si tu viens au prochain JUG, on pourra en discuter de vive voix !

4. Le jeudi 17 mars 2011, 21:25 par Julien Gouesse

Pour ta gouverne, mon jeu (TUER) et le jeu dont tu parles (Jake 2) utilisent tous les deux JOGL, bibliothèque dont je suis un des contributeurs. C'était assez délicat de se lancer dans l'explication de l'algorithme de division de l'espace en cellules et en portails en si peu de temps. Cordialement.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.