Blogounage

Aller au contenu | Aller au menu | Aller à la recherche

Mot clé - tech days

Fil des billets - Fil des commentaires

dimanche 25 mars 2007

Sun Tech Days, mercredi 21

Avec un peu de retard, je prends enfin le temps de faire un billet sur mon deuxième jour aux Tech Days. Cette journée a été très chargée, mais j'ai appris pleins de nouvelles choses. Évidemment, ce sont des choses à approfondir, mais je vais essayer de vous donner aussi envie de le faire. En cherchant un logiciel pour faire des vidéos de démo comme on en voit partout fleurir sur le net, je suis tombé sur Wink. C'est simplissime d'utilisation : avec ça, plus aucune excuse pour ne pas faire de vidéo explicative de l'installation ou d'une démo d'un logiciel (et on peut générer du flash ou un .exe pur windows).

Sun Technical Keynote

Cette introduction a été l'occasion de nous montrer le langage F3 : Form follows function, censé simplifier le développement d'interfaces graphiques. C'est vrai que la partie de la démo montrant comment mettre un fond en dégradé de rouge vers bleu vers jaune (ou d'autres couleurs) a montré que c'était effectivement très simple.

Speach VMWare

En tant que sponsor Platinium, VMWare a eu droit à un speach devant tout le monde. On nous a présenté ce qu'était VMWare, pour ceux qui l'ignoraient encore. Ça a été l'occasion de parler de Lab Manager, une sorte de dépôt central dans lequel on peut stocker des machines virtuelles et les lancer depuis des postes clients. Ça a l'air intéressant dans le cas des recettes par des équipes de tests. En effet, le syndrôme du Chez moi ça marche est effectivement connu de tout informaticien. Avec ce système qui simplifie le partage d'une configuration complète (du logiciel jusqu'à l'OS et sa configuration précise), il devient possible de débugguer un problème dans les conditions qui garantissent la reproductibilité, ce qui est la première difficulté pour un développeur : trouver les conditions permettant de reproduire le problème (essayez de corriger un problème que vous n'avez pas, pour voir !).

Java Jacket Give away

20 minutes pour un mini-show de 4 d'entre nous. Je n'ai pas osé y aller. J'ai eu une idée un peu tard, mais j'aurais dû la préparer la veille. Peut-être pour l'année prochaine :-).

Le gagnant a chanté une petite chanson sur Java et a donc gagné la veste en cuir avec le logo Java :-).

Java scripting: One VM, Many Languages

Cette session a été très intéressante. La démo de Guillaume Laforge m'a notamment donné envie de me mettre au Groovy, pour les apports en rapidité d'écriture par rapport au Java, l'ajout des fermetures, mais aussi pour sa proximité syntaxique et son intégration avec le Java. Ça peut en effet fonctionner directement avec la JVM, être mis dans un jar..., puisqu'on peut générer du pur bytecode Java. L'idée n'est pas de remplacer le Java, mais d'apporter une alternative plus puissante aux scripts shell et une syntaxe plus habituelle pour le développeur Java qui veut déployer un script de batch sur le serveur, par exemple.

Cette présentation a été l'occasion de découvrir la JSR223, la spécification qui permet d'intégrer n'importe quel langage de script à la plate-forme Java. Javascript l'est déjà (cf. la présentation flash plus bas), JRuby, Groovy, etc. En gros, l'architecture mise en place permet à n'importe qui d'intégrer n'importe quel langage de script en implémentant simplement les interfaces de la spéc (pensez à JDBC si vous ne voyez pas ce que je veux dire).

Code Quality issues: Prevention and Detection

C'est certainement l'une des sessions dans lesquelles je me suis senti le plus à l'aise, parce que j'avais déjà mis en place un grand nombre des outils cités. Ça a toutefois été l'occasion de découvrir de nouveaux outils (Selenium, notamment).

La présentation a commencé en citant Dijkstra : Testing can only show you bug presence, not their absence. Et c'est vrai que c'est bien de rappelant l'intérêt essentiel des outils de qualité de code... Ce n'est pas magique.

Pour résumer :

  • Test unitaire : Junit, TestNg
  • Couverture de code : Emma (+ pleins d'autres), ce type d'outil permet de savoir quelles parties de votre code ont été testées par les tests unitaires. En gros, vous lancez tous les tests de votre projet et l'outil monitore par où ça passe. Ensuite, vous pouvez généralement savoir quelles parties ont été testées, voire même lesquelles l'ont été plusieurs fois et d'autres une seule. La plupart de ces outils possèdent des plugins pour les principaux IDE qui permettent de voir graphiquement la couverture. Bien sûr, il existe aussi des plugins pour des outils comme Maven, permettant de sortir des statistiques.
  • Montée en charge : JMeter, LoadRunner (j'ajouterais OpenSTA)
  • Mock objects : EasyMock, JMock
  • Qualité du code : PMD, Checstyle
  • Test fonctionnel d'une webapp : Selenium
  • P6Spy pour voir la valeur des "?" dans les requêtes SQL paramétrées.

TP : Les nouveautés de Java 6

Comme j'en ai parlé plus haut, il est possible d'interfacer la JVM avec d'autres langages. Avec Java 6, vous disposez de jrunscript, un interpréteur Ecmascript (javascript normalisé).

En voici une petite démo :(cliquez sur l'image pour voir la démo flash) : jrunscript-presentation.jpg

JMX, Performance et concurrence

JMX

J'ai appris au cours de cette session que l'équipe de développement de JMX était située à Grenoble.

L'objet de cette session a été principalement de développer un MBean et de l'exposer via le MBeanServer. Ceux qui, comme moi, ont déjà développé un MBean et joué avec JConsole juste pour voir n'auront pas été surpris.

Par contre, j'en ai appris sur les différentes espaces mémoires de la JVM :

  • Eden : c'est l'espace mémoire où les objets à courte durée durée de vie sont stockés (la plupart en général) ;
  • Survivor : pour les objets qui ont une durée de vie un peu plus grande ;
  • Tenured : ben euu, encore plus :-).

Autre chose que les conférenciers ont dit, je n'ai pas vérifié, mais à propos des options -client et -server :

  • -client est toujours utilisé sous Windows, quelle que soit la machine
  • -server est utilisé automatiquement sous Linux ou sous Solaris si la machine possède plus de 2Go de mémoire vive.

Truc génial : la possibilité de repérer des deadlocks avec un simple bouton ! (je crois que c'est un ajout dans le JConsole embarqué dans Mustang, parce que je ne me souviens pas de l'avoir dans Tiger).

JSR 262

La façon dont on accède à JMX, JMX Remote, n'est pas liée fortement à JMX. En effet, l'implémentation par défaut dans Java 5 est effectivement en RMI, mais il reste très faisable de permettre l'accès aux fonctionnalités d'un serveur JMX par n'importe quelle autre implémentation.

C'est justement l'objet de la JSR 262 : implémenter une couche WebServices d'accès à JMX. Comme il existe une norme appelée WS-Man qui n'est pas liée au Java. Cette implémentation permettra donc l'accès au management de la JVM d'une façon normalisée. WiseMan est ainsi l'implémentation Java de WS-Man.

Lors de la séance de Q/R, j'ai posé la seule question de ces deux jours à Paris : pourquoi n'y a-t-il pas pour les MBeans, de la même façon qu'il y a l'annotation @WebService pour les Webservices, une annotation @MBean qui indiquerait automatiquement aux MBeanServer quels sont les MBeans à exposer ? Éamonn McMannus a répondu que c'était une question qu'on leur posait souvent, et que c'était justement prévu.

Performance

Bon, ils ont parlé du classique StringBuffer à la place de concaténer des String. Attention : depuis la version 5 de Java, la classe StringBuilder est à privilégier : de la même manière qu'il est recommandé d'utiliser HashMap à la place de Hashtable, il faut utiliser StringBuilder dans un contexte qui ne nécessite pas de synchronisation. En effet, la synchro n'est pas gratuite, donc l'utiliser de façon systématique est une grave erreur.

Concurrence

Ils ont présenté la nouvelle API de gestion de la concurrence ajoutée au JDK5, encore peu connue.

Java Puzzle

Pour finir, on a eu droit à un Java Puzzle (en anglais, puzzled correspond à surpris, étonné), c'est un bout de code qui surprend ou pour lequel on n'a généralement pas une réponse évidente pour tout le monde :

public class PingPong {
    public static synchronized void main(String[] a) {
        Thread t = new Thread() {
            public void run() { pong(); }
        };
        t.run();
        System.out.print("Ping");
    }

    static synchronized void pong() {
        System.out.print("Pong");
    }
}

Qu'affiche ce bout de code ?

  1. PingPong
  2. PongPing
  3. Ça varie

J'avoue sans honte que j'ai répondu correctement à cette question :-). Je mettrai la réponse dans les commentaires un peu plus tard (si personne d'autre ne le fait avant, d'ailleurs).

mercredi 21 mars 2007

Sun Tech Days de l'intérieur, mardi 20

J'étais donc aux Tech Days aujourd'hui. Encouragé par des "moins scrupuleux" que moi, je me suis aussi levé pour dire bonjour à Alexis Moussine-Pouchkine, que je n'osais pas déranger parce qu'il avait l'air à bloc pour préparer/peaufiner sûrement sa session de cet après-midi :-) (ce qu'il m'a confirmé ensuite, la session avec Stéphane Goudeau sur WSIT, plus précisément :p).

De façon très inégale, j'ai pris quelques notes au cours de chacune des sessions. Je vais essayer de vous faire un rapide topo de ce à quoi j'ai assisté et ce que ça m'évoque. Après, je vais dormir pour réussir à me réveiller tout à l'heure :-).

Keynote session : James Gosling

Ça faisait longtemps que je ne n'avais pas entendu quelqu'un parler anglais, j'ai donc mis quelques minutes à m'habituer à son accent, que je qualifierais d'américain malgré le fait qu'il soit Canadien il me semble :-). Une fois lancé, j'ai ensuite pu comprendre facilement Rags ou Rima Patel (soit dit en passant, j'ai été amusé de remarquer qu'ils avaient tous les deux un portable Ferrari, vous savez celui tout en rouge).

Pour rester dans l'anecdotique, ça ne va pas intéresser grand monde, mais comme j'avais déjà joué avec, j'ai pu remarquer que James Gosling utilisait toujours Huckster pour faire sa présentation. J'ai trouvé ça propre et joli. J'avoue que ça m'a donné envie de l'utiliser à nouveau :-).

Sinon, au niveau du contenu, James a survolé un peu tout ce qui fait Java aujourd'hui. Du client léger au mobile, en passant par les tests de l'A380 et le temps réel. Une phrase qui m'a amusé, mais finalement pas tant surpris que ça. Il a dit : For me, the java language is almost uninteresting.. Sorti du contexte, ça pourrait faire une bonne news à troll sur TSS. En fait, ce qu'il a évidemment précisé, c'est que c'est surtout la JVM et sa portabilité sur des plates-formes potentiellement très hétérogènes qui l'intéresse :-).

Sun Technical Demo(s)

En l'espace de quelques dizaines de minutes, nous avons eu droits à 6 démos. Je le dis, les deux les plus impressionnantes ont été pour moi celle de Romain Guy montrant Aerith en fonctionnement et celle d'un certain Peter (pas entendu/noté le nom, désolé) qui m'a bluffé sur du dév sur téléphone portable. De mémoire :

Développement client léger

Pas trop bien compris. Ça ressemblait plus à du flash qu'à du Java sur une page Web (ou alors, c'était sûrement une Applet). L'objectif était de montrer qu'on pouvait faire une jolie page web avec Java EE. Pourquoi pas.

Aerith : Romain Guy

Aerith montre qu'on peut faire en Swing des applis avec un design de fou furieux. Si vous voulez tester, vous pouvez lancer assez facilement aerith directement depuis le lien Java Web Start (jnlp).

Aerith est un Mashup. Il utilise les WS de Flickr, de Google Maps et la localisation Yahoo si j'ai bien compris... Époustouflant.

Développement JSF avec Netbeans : Doris Chen

NetBeans semble effectivement bluffant de simplicité pour du dév Web. Quand je vois comment on rame pour nos JSP avec Eclipse, je m'interroge...

Par contre, JSF, JSF, JSF, JSF, ou alors JSF si j'ai bien compris

Java DB

Dans un client Web (Firefox :)), Francois Orsini nous montre qu'il peut saisir des données et tuer Firefox. Lorsqu'il rouvre l'application, il retrouve ses données telle qu'il les avaient saisies sans avoir pourtant cliqué sur un bouton de soumission. En fait, par Ajax, à chaque modification de champs, le client envoie les données au serveur qui les stocke.

Certes, la fonctionnalité est intéressante pour éviter le syndrôme de la perte des données dans un formulaire en cours de saisie. Mais, je ne vois pas bien le rapport direct avec Derby : la partie la plus grosse du code me semble résider dans l'Ajax qui stocke les données au fur et à mesure, non ? N'importe quelle base côté serveur ferait ensuite l'affaire il me semble.

jMaki : Ludovic Champenois

Sorte de wrapper à framework Javascript, jMaki a été mis à contribution pour développer rapidement quelques pages Web et montrer l'intégration simple et rapide de code Java directement dans le code Javascript. Ceci a notamment permis par exemple d'utiliser java.util.Date en plein milieu d'un code js. À creuser, à mon avis, mais très intéressant.

Développement Mobile

Si j'ai bien suivi, Peter a ensuite fait en live du remote debugging, posant en effet un point d'arrêt sur le code en cours d'exécution sur la JVM du téléphone ! Après avoir pris Doris Chen en photo avec l'appareil, il a imprimé sa photo sur l'imprimante, mais je n'ai pas bien compris ce qu'il voulait montrer. En tout cas, c'était sympa.

Glassfish : Alexis Moussine-Pouchkine et Ludovic Champenois

L'une des principales choses que j'ai retenue, ça tombe bien parce que j'ai le sentiment que c'est l'une des choses sur lesquelles Alexis a voulu insister : Glassfish n'est pas seulement une implémentation de référence dans le sens où on pouvait l'entendre habituellement[1]. Glassfish est parfaitement utilisable en production.

L'interface d'administration est agréable et l'outil asadmin permet de gérer des choses comme l'ajout de Datasources, etc.. (euu, là, chui pas sûr du tout). Glassfish intégre JAX-WS, beaucoup plus rapide qu'Axis 2, qu'y disaient.

Quelques notes en vrac :

  • Intégration de Comet : permet de créer des connexions persistantes HTTP, et donc de permettre au serveur de faire du callback.
  • Shoal : implémentation de clustering dynamique avec JXTA.
  • L'admin se fait avec JMX
  • Des extensions à JMX, des Application Servers Management eXtensions donc ? :-), des AMX sont aussi présentes.

Extreme Gui Makeover : Romain Guy

Là, j'ai un peu merdé. Comme je n'avais pas re-regardé le planning. Je me suis retrouvé à assister aux quelques premières minutes de la session VMWare. J'ai donc changé de salle pour aller suivre une "Track" a priori plus développement, plus code. J'ai pu voir quelques trucs bien agréables pour améliorer la tronche des composants Swing ou en simplifier le développement :

  • un peu de code maison, pas forcément difficile mais qu'il faut tout de même trouver :-),
  • SwingX
  • Timing Framework

WSIT : Tangoing with .Net

Cette session a permis de rappeler les normes existantes ou en cours de développement liées à WS. C'est Rags qui s'est occupé de la partie "magistrale" :-). Alexis et Stéphane Goudeau (de MS), nous ont quant à eux fait une jolie démo de l'interopérabilité Java/.Net, projet sur lequel ils ont travaillé pour la DGME. Il a notamment été question d'optimisation du transport des pièces jointes avec les WS en utilisant deux protocoles/principes (?) :

  • W3C SOAP Message Transfert Optimization Mechanism : MTOM
  • W3C XML-binary Optimized Packaging : XOP

La session s'est ainsi terminée par l'envoi depuis le code .Net d'une image affichée ensuite sur le portable d'Alexis.

SOA, WS, BPEL : Rima Patel

Après la session WSIT, j'ai quitté la grande salle pour rejoindre Rima Patel afin de découvrir un peu ce qu'était BPEL, dont j'entends tant parler mais dont je ne savais toujours pas ce qu'elle permettait de faire concrètement.

Cette session a été intéressante pour rappeler une fois de plus ce que doit être une Architecture Orientée Services. Un peu en vrac :

  • Un WS est une boite noire avec une interface bien définie (elle n'a pas utilisé le mot contrat, je trouve pourtant qu'il convient parfaitement bien).
  • SOA apporte de la valeur ajoutée sur le métier, pas sur la technique. Elle a même dit : c'est pour ça que ce sera votre CEO qui vous parlera peut-être de SOA, en raison de la valeur ajoutée métier qu'elle apporte (Nota de moi : et qui donc est remontée dans les articles de 01 Informatique :-)).

On a eu droit en fin de session à une démo de BPEL dans NetBeans. Comme je voulais en savoir plus sur BPEL, je suis ensuite allé au TP pour faire les exercices moi-même. J'avoue que le plugin BPEL, notamment le debugger, de netbeans est impressionnant de simplicité. Le problème, c'est que je n'ai pas eu le temps de faire le troisième exercice où on rentrait un peu plus dans le code. Les deux premiers n'étant presque que du clic-clic-bouton sur l'interface de netbeans sans forcément prendre le temps de comprendre un peu plus BPEL. Comme j'ai le support, j'essaierai de finir l'exercice pour voir s'il y a des choses intéressantes à dire.

J'aurais aimé terminer la journée en allant au "FOSSDAY" sur "Langages Libres, machines virtuelles et Web 2.0", mais j'ai préféré ne pas arriver chez moi à 21h. J'ai pu voir un peu plus la famille pour une fois que je passe dans la région parisienne (en coup de vent, en plus :p).

Voilà pour aujourd'hui, bonne nuit :-).

Notes

[1] Lorsqu'une spécification est publiée, Sun développe toujours une implémentation de référence pour montrer la faisabilité du principe. Ces implémentations sont donc souvent basiques et impropres à un usage en production. Ce n'est donc pas le cas de Glassfish.