05 mars 2010

IE9 ... ça donne envie (presque)



Microsoft publie le positionnement de IE9 sur le blog MSDN

Pas de lange de bois (pour une fois ?) : IE8 est nettement plus lent que ses concurrents, pour ceux qui ne l'auraient pas encore remarqué, et c'est un frein à l'adoption des "applis RIA". IE9 mise donc sur un moteur JS tout beau tout neuf qui devrait rattraper le retard pris sur les challengers. Le billet nous présente IE9 "today" comme comparable aux dernières versions des navigateurs, sans les dépasser, et ne nous sort même pas la promesse d'une version finale encore meilleure - ça nous change du discours habituel.

Autre info clé : MS prend en considération les nouveaux standards du web (HTML5, CSS3), "détail" sur lequel IE s'est jusqu'ici assis sans regrets. Une nouvelle fois, on ne nous promet rien mais on affiche déjà un 32% de réussite au test Acid3, ce qui laisse lire entre les lignes qu'un score plus élevé est envisagé pour la version finale. On a même droit à un bel exemple de bords arrondis, oh comme c'est joli.

Dernier point, IE9 fera appel à Direct2D pour son rendu graphique, ce qui boostera ses performances d'affichage. La première question qui me vient à l'esprit est de savoir COMMENT il est possible que les versions précédentes d'IE ne reposent pas sur cette API de base de Windows, pour un navigateur qui ne vise aucune autre plateforme. Autant je comprend que Mozilla ou WebKit tarde à s'y mettre vu que la couche graphique doit être portable, autant pour MS ça me semble inconcevable.

A ce rythme on va apprendre que Windows Media Player 12 va utiliser DirectShow et consommer 50% de CPU en moins - ce qui expliquerait des choses soit dit en passant :)


19 février 2010

Actu Maven … suite

Après avoir pesté toute la journée d’hier sur Eclipse, je viens de penser à une piste pour résoudre mon problème :

J’ai utilisé dans mon POM le pseudo-plugin org.maven.ide.eclipse::lifecycle-mapping que proposait m2eclipse 0.9.9 pour activer la compilation incrémentale. En conservant ce plugin activé, m2eclipse 0.10 ne prend plus en charge la configuration d’Eclipse et je me retrouve donc avec mes soucis de WTP pas configuré et de target/generated-sources absents.

En virant ce plugin, m2eclipse 0.10 retrouve son mode nominal et la configuration se passe donc “comme dans le manuel”.

mea culpa donc, je suis un bête gars qui a essayé les pré-version et a cru que la compatibilité serait au rendez-vous, mais quel boulet celui-là.

J’ai tout de même posté sur le sujet sur user@m2eclipse.codehaus.org,  en espérant que ça puisse servir à d’autres.

18 février 2010

Actu Maven

L’actu Maven du mois de février est chargé :

Le plugin Maven-Release passe (enfin) en 2.0, vous pouvez donc profiter d’un mécanisme très complet et bien ficelé de gestion des releases sans reposer sur un statut “beta”, ce qui pouvait en effrayer quelques-un.

fini les m2eclipse-0.9.9-dev, avec la sortie officielle de m2e 0.10.0

Non ce n’est pas un erreur, il ne s’agit pas d’une 1.0.0 de m2eclipse, celle qui aurait annoncé enfin l’intégration efficace de Maven dans Eclipse. C’est plutôt une milestone de ce que sera cette intégration .. un jour.

Sans compter que Sonatype a choisi de mettre de côté l’intégration SVN, WTP ou AJDT faute de ressources pour les supporter efficacement, et préfère ce concentrer sur le noyau. Si le principe semble assez logique (on ne peut pas courir plusieurs lièvres à la fois) les utilisateurs vont vite être déçus de voir qu’il ont attendu 8 mois (la précédente version stable 0.9.8) pour ne toujours pas avoir un résultat complètement fonctionnel.

Pour ma part, la configuration de WTP ne marche tout simplement pas, alors qu’elle fonctionnait avec une 0.9.9 récente (?). Aux questions sur ce sujet la réponse est systématiquement, “nos efforts se concentrent sur le code, on verra le reste après”.

Je ne leur jetterais pas la pierre, car en tant que mainteneur de l’intégration m2eclipse / eclipse-checkstyle je me rend compte que le développement de plugin Eclispe est un art délicat et que j’y suis bien malhabile. Reste qu’on a pas fini de se plaindre de la piètre intégration du couple Eclipse + Maven comme environnement de développement. Wait & See, encore et toujours…

Boostez votre environnement de dev

Julien Dubois a lancé le débat sur son blog en présentant ses astuces pour un build plus réactif. Entre autres idées, il utilise un disque SSD pour espace de travail.

Je ne suis pas du tout convaincu par cette option, vu que ce type de disque n’est pas très tolérant aux écritures multiples. Je pense que, si les perfs peuvent être meilleures sur le coup, la durée de vie de la bête risque d’en prendre un coup.

Une autre option que je suis en train d’expérimenter, suite à la même analyse venant de Julien -- l’autre Julien, celui du BreizhJug ;)

Comme mon PC est sous Windows XP 32bits je ne peux pas profiter à 100% de mes deux barettes de RAM de 2Go. Windows ne voit que 3Go adressables. Même le mode “PAE” n’y a rien changé. Cependant, il existe des RamDisk comme Gavotte RAMdisk qui savent contourner ce problème et récupérer cet espace perdu. Un RamDisk de 1Go, bien assez pour mettre mon workspace.

mvn clean install -Dmaven.test.skip=true

sur le HD “classique” :

[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 48 seconds

sur le RamDisk :

[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 30 seconds

 

Reste à voir ce que ça donne sous Eclipse …

Autres pistes à creuser :

  • Tuer cette saloperie de process MacAffee
  • Utiliser JRebel (des licences offertes au BreizhJUG !)
  • Utiliser un disque SSD pour le repository maven (moins sujet aux écritures)
  • Se payer un PC (voir un Mac ?) plus adapté aux devs !

Update (pour ceux qui ont la flemme de lire les commentaires)

Placer le workspace en ramdisk booste un peu les perfs, mais pas autant que de placer le repository Maven ! Il faut dire que nos outils passent leur temps à charger des libs en tout genre. En plus, c’est un moyen simple pour faire du ménage dans le repo – à condition d’avoir un repo manager qui fournit les artefacts via le réseau local :)

Ca pourrait être pas mal non plus de mettre l’OS en ramdisk :p

04 février 2010

L'art délicat de la compatibilité ascendante

JavaEE 6 est sorti (oui je sais, ça fait déjà deux mois) et JPA 2.0 avec. Il est donc tentant de passer à Hibernate 3.5 (Beta 4 actuellement) et à Spring 3.0.0 ... sensé être JavaEE 6 compliant

Là où ça se complique, c'est que JPA 2.0 définit (entre autre) de nouvelles méthodes dans l'interface PersistenceUnitInfo, référençant des enums propres à JPA2. Et Spring, pour faire sa cuisine interne, utilise un décorateur autour de cette interface (faut dire, c'est fait pour !)

Le décorateur de Spring doit rester compatible JPA1. Le simple fait d'importer les enums JPA2 casserait cette compatibilité. Résultat: Spring 3.0.0 n'est pas compatible avec Hibernate 3.5-Beta3 et plus :'(

Rassurez-vous, Spring 3.0.1 va corriger le problème, via un proxy construit à la volée si JPA2 est détecté et je vous passe les détails, mais avouez que c'est ballot de se coltiner ce genre de problème sur un changement d'API.

Qu'est ce qu'il aurait fallu faire ?

Peut être définir une nouvelle interface PersistenceUnitInfo2 pour étendre PersistenceUnitInfo ? Pas très joli mais au moins la compatibilité aurait été plus facile à gérer pour les développeurs de middlewares.

Erreur de jeunesse ? Pensez-vous ! On a déjà eu le coup avec javax.sql.Connection lors de l'introduction des Savepoint de JDBC 3. Le build de commons-dbcp doit se tapper une mise en commentaire d'une partie du code pour produire la version JDBC 2, et a du remettre ça avec JDBC 4 !

08 janvier 2010

Oracle XE

J’utilise Oracle eXpress pour les développement. Dans l’esprit “une base par développeur”, cette édition allégée (faut le dire vite) d’Oracle est bien pratique. Le dialecte SQL propre à la base est ainsi testé en phase de développement.

Pour l’intégration continue, j’installe la base sur un système Ubuntu dans une VM, et c’est là que ça se complique … oracleXE n’étant dispo qu’en version 32 bits dans le dépot debian d’oss.Oracle.com

Voici donc pour info la procédure à suivre :

1- installer Ubuntu server 64 (sans blague ?)

2- ajouter le paquet open-ssh. La console VMWare est pas terrible, alors qu’un putty permet de faire des copier/coller à la souris ;) -- se loguer en ssh pour la suite

3- ajouter les paquet bc et libc6-i386

$ sudo apt-get install bc libc6-i386

4- créer un gros swap, nécessaire pour OracleXE

$ sudo dd if=/dev/zero of=/swpfs1 bs=1M count=1000
$ sudo mkswap /swpfs1
$ sudo swapon /swpfs1

5- télécharger les binaires d’oracleXE et de sa dépendance libaio en version i386

$wget -c http://oss.oracle.com/debian/dists/unstable/main/binary-i386/libaio_0.3.104-1_i386.deb http://oss.oracle.com/debian/dists/unstable/non-free/binary-i386/oracle-xe-universal_10.2.0.1-1.1_i386.deb

6- installer tout ça, en demandant à Ubuntu de ne pas tenir compte du conflit d’architecture 64/x86

$ sudo dpkg -i --force-architecture libaio_0.3.104-1_i386.deb
$ sudo dpkg -i --force-architecture oracle-xe-universal_10.2.0.1-1.1_i386.deb

7- configurer OracleXE. Je vous déconseille de changer la conf par défaut, chez moi le choix d’un port autre que 8080 fait que l’appli d’admin Oracle est injoignable. On changera ça après coup

$ sudo /etc/init.d/oracle-xe configure

8- un petit vi pour mettre à jour votre ~/.bashrc

ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server
PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_HOME
export ORACLE_SID=XE

9- on va maintenant changer la conf de l’appli d’admin d’OracleXE, sans quoi on ne peut pas y accéder – seul localhost est autorisé, et sur notre ubuntu server, y’a pas de navigateur puisque y’a pas d’environnement graphique ! sqlplus est dispo sous /usr/lib/oracle/…./server/bin

$ sqlplus /nolog

CONNECT SYS/password AS SYSDBA


EXEC DBMS_XDB.SETLISTENERLOCALACCESS(FALSE);



EXEC DBMS_XDB.SETHTTPPORT(‘8081’);



 



et voilà ! :)

18 décembre 2009

Juggers !

Au printemps dernier j’ai proposé à des collègues de “jouer” avec Google App Engine for Java en développant une application pour gérer l’inscription au BreizhJug. Comme beaucoup nous utilisons JugEvents et comme beaucoup nous trouvons cette appli très moche, sans parler de ses plantages réguliers.

Nous sommes partis sur un truc bien trop gros pour nos petites épaules et ça a donc fait plouf en moins de deux.

La conférence de Didier Girard m’a donné envie de repartir sur ce développement, en utilisant une approche plus pragmatique et plus économique :

Les soirées BreizhJUG sont déclarées dans un Google Calendar public. Lieu, date et sujet y sont indiquées, la description servant à définir le(s) speaker(s) – première ligne – et le sujet du jour. L’intérêt ? L’appli Juggers n’a plus à gérer la saisie des événements et les droits d’accès !

L’application utilise gwt-gdata pour accéder à ce Calendar, et récupère donc une liste d’objets structurés, de manière (presque) aussi simple qu’un appel GWT-RPC.

L’inscription elle même n’est pas développée, peut être dans un premier temps sur la base d’une simple Google Form. L’idée est de progresser par tout petits pas, histoire de ne pas finir le bec dans l’eau.

J’en profite pour expérimenter uiBinder, et comme je commence tout juste un projet Wicket je ne peux pas m’empêcher de faire un parallèle : uibinder c’est la facilité de Wicket + la force de GWT, de la bombe atomique ! J’ai ainsi maquetté un widget sympa en HTML/CSS, et je peux le convertir rapidement en widget GWT utilisable partout.

L'appli est également rendue plus sexy grâce à gwt-Fx, en quelque sorte un portage de scriptaculous en GWT (pas juste un wrapper). La dernière version est vraiment bien et très souple d’utilisation.

Vous voulez-voir ce que ça donne ? http://www.juggers.org/ – attention, ce n’est ni une béta ni même une alpha, c’est un early prototype snapshot ;)

NB : ne cherchez pas, ça rend rien de bon sous Internet Explorer. Qui aurait l’idée d’utiliser ce truc de toute façon ?

12 décembre 2009

Idées cadeaux

Pour noël, une idée cadeau amusante : offrez google chrome à vos amis !

Google Chrome est le navigateur massivement adopté par les geeks et autres développeurs technophiles, mais encore peu connu du grand public – un peu comme l’était FireFox à ses débuts.

Pour étendre les parts de marché de ce navigateur, rien de mieux que le bouche à oreille, c’est donc ce que propose http://www.givechrome.com. Une bonne façon de passer un petit mot de “bonnes fêtes” à belle maman pour les fêtes sans dépenser un centime ;)

Vu que pour ma part j’utilise déjà Chrome, je vous suggère une autre idée cadeau : je n’ai toujours pas de MacBook :)

10 décembre 2009

do you speack concurrency ?

Nous sommes toute une génération de développeur qui a été bercée par la course au Méga-Hertz, et si nous constatons un plafond les vieux réflexes perdurent. Face à un programme trop lent, la solution reste le “plus gros” processeur.

Seulement, l’offre des fondeurs de puces est explicite : n’espérez plus de GHz supplémentaire – à la place, on vous propose des cœurs en plus.

La conférence de Brian Goetz à Devoxx ainsi que son livre “Programmation Java Concurrente” sont basés sur ce constat. Fini le Free Lunch sur la puissance CPU. Pour faire plus rapide il va falloir apprendre à penser et à parler parallélisme, concurrence et synchronisation, des sujets particulièrement pointus et mal connus.

scc-h-wafer_low Pas encore convaincu ? Intel annonce avoir dans ses labs un processeur à 48 coeurs ! Vers 2012, un serveur haut de gamme se basera sur ce type de puce, et votre PC portable entrée de gamme en 2020 aussi. Croyez-vous vraiment que vos logiciels sauront en profiter ? Votre super batch d’import de données tire t-il profit d’une architecture à 48 coeurs, ou ressemble t-il plus à un bête programme séquentiel, comme décrit dans votre document de spécification ?

Les traitements lourds comme les encodeurs vidéo, traitement d’image et autres manipulations massive de données ont déjà franchi le pas, mais que penser des milliers d’autres softs, … à commencer par ceux que nous développons nous même !

Aujourd’hui, les mots incontournables sur un CV sont Spring, Hibernate ou Scrum (encore que ça devienne de plus en plus banal). Qui sera le premier à mettre en avant (à bon escient) “Parallélisme” pour sortir du lot ?

06 décembre 2009

un petit tour au ParisJUG

Antonio Goncalves vient lundi animer la session BreizhJug en présentant JEE6

JavaEE6-done_small

 

Pour lui rendre la politesse, je viendrais le lendemain faire un tour au ParisJUG, en tant que simple spectateur, pour un match JEE6 vs Spring3.

563030719 La session sera filmé et retransmise sur NT1 dans Catch Attack :)

L’occasion de participer à une séance dédicace pour souligner la forte présence francophone dans le monde de l’opensource : Antonio pour son livre sur JEE6, Julien Dubois pour Spring par la pratique, Emmanuel Bernard pour Hibernate Search in Action, et Arnaud Héritier accompagné de votre serviteur pour Apache Maven. Pour avoir les liens je vous suggère de passer par le blog d’Arnaud qui a déjà fait le boulot et m’économise ainsi de nombreux copier/coller.

… enfin, à condition de ne pas être bloqués par la grève SNCF qui s’annonce :-/

01 décembre 2009

IE6, mon ami

Pour les besoins d’une chouette appli web, je me retrouve avec la casquette de Web Designer pour quelques semaines. Et une fois de plus, pas de HTML5 à l’horizon mais plutôt notre bonne vielle bouse de service : IE6.

S’il existe de nombreux hacks et autres astuces éprouvées pour faire rentrer au forceps dans ce navigateur maudit les CSS et événements JavaScript de nos applications “modernes”, un problème tout bête se pose : comment tester ?

Et oui, je suis passé sur mon PC à IE8, et même en le désinstallant (en supposant que le résultat soit bien un retour à l’état initial) je me retrouve avec IE7 qui ne réagit pas comme IE6 – bien que pas fantastique il est nettement plus conforme aux standards !

J’ai finalement découvert ce petit soft : http://ietester.softonic.fr/

D’autres astuces visant à installer IE6 en “standalone” sont infectées par le navigateur présent et ne permettent pas de reproduire les bugs / défauts spécifiques à ce navigateur. IETester par contre intègre les diverses versions d’IE et on peux bien constater les comportements CSS ou JavaScript différents entre IE6 / IE7 et IE8 (et même IE5.5 pour les passionnés d’archéologie).

Je proposerait bien comme solution de développer l’appli en intégrant Google Chrome Frame, solution à mon avis idéale pour migrer des intranet dans un environnement up-to-date SANS changer pour autant le navigateur “corporate”. Cela supposerait cependant que ceux que j’ai en face soient conscient que leur indécrottable IE6 pénalise leur SI en imposant un socle technique dépassé – discours qui semble se répéter sans fin année après année…

23 novembre 2009

Dans toutes les bonnes libraires

Arnaud a (enfin) trouvé notre bouquin dans les rayons de la FNAC. On sera un peu surpris par la catégorie dans laquelle il a été mis, mais au moins il est dispo en vrai cette fois ;)

44588735

22 novembre 2009

D’une JRE à l’autre

Le projet Mojo publie ce week-end les signatures des diverses JRE, à utiliser avec le plugin animal-sniffer.

Kezako-qu’est-ce-donc ?

Mine-sniffer-rat_1378314iAnimal Sniffer est un outil que l’on doit à Kosuke Kawaguchi, également créateur de Hudson et développeur chez SUN de JAXB et JAX-WS, enfin un gars bien occupé quoi. L’objectif de ce truc au nom improbable est de vérifier qu’un programme Java utilise uniquement des API qui seront disponibles au runtime.

 

Comme le compilateur javac vous autorise à cibler une JRE (option target) différente de celle qui compile, il n’est pas exclu d’utiliser des classes ou méthodes qui ne seront pas fournies par le runtime – gloups. Animal Sniffer va donc contrôler tout ça pour nous. On peut donc vérifier qu’on utilise pas de méthodes spécifiques au runtime Java6 en utilisant le compilo JDK6 et en ciblant Java 5 !

Mais animal Sniffer peut aller plus loin, car en pratique chaque JRE a ses petites extensions. Il est par exemple bien tentant d’utiliser la classe com.sun.binary.Base64, ce qui posera bien évidement quelques soucis si le runtime est un JRockit ou un IBM JDK !

Le projet Mojo est donc en train de nous publier les signatures de toutes les JRE, IBM JDK et Apache Harmony comprises, dans les versions courantes (1.3, 1.4, 5, 6).

Dans le même esprit, pour le développement d’un plugin Google App Engine sur Mojo (délaissé depuis, manque de temps et %#@! de SDK – contributions are welcome), j’ai utilisé animal sniffer et une signature spécifique pour valider la non-utilisation des API du JRE qui ne sont pas supportées sur cet environnement un peu particulier.

Super, mais encore ?

Prenons un instant pour nous intéresser au JDK7, “OpenJDK”. Contrairement aux précédentes version de Java, il n’est pas piloté par une JSR bien cadrée, mais vit sa vie en opensource, avec ce que ça implique d’innovations, mais aussi de conflits divers et de retards – encore 6 mois dans la vue :)

Alors qu’on pouvait en principe se baser sur la JSR Java6 pour définir les API accessibles, que fera t-on avec les implémentations de Java7 autres que OpenJDK ? Bien sur, elles sont sensées être compatibles, mais comment définir si un élément d’OpenJDK est une implémentation spécifique ou bien un élément officiel de la plateforme ?

Animal Sniffer pourra répondre à cela : en validant l’utilisation exclusive des API de l’environnement cible, il nous évitera un NoSuchMethodError qui fait bien mal sur le serveur de production.

19 novembre 2009

Maven 3 sur les rails

Jason était sur Devoxx pour une session consacrée à Maven 3.

Pas un mot sur mon bouquin (on est plus très potes tous les deux) et Jason a une curieuse façon de faire des slides en police 8.

Ceci dit, la session était une très bonne mise au point sur ce que sera Maven3 et les progrès accomplis. Par contre, l’approche et le débit de Jason s’adressait à des gens déjà très pointus sur Maven, aussi je doute que l’utilisateur lambda en retienne grand chose. Ce qui est déjà rassurant, c’est que je n’ai pas dit trop d’âneries sur Maven3 dans le livre ;)

  • une refonte des API pour rendre le code plus propre et extensible
  • une abstraction pour la construction du Modèle (POM) à partir du fichier POM.xml, ce qui permet d’utiliser des formats alternatifs (groovy, yaml …)
  • la manipulation des artifacts totalement reécrite et repensée pour être indépendante. Elle peut donc être utilisée dans d’autres outils
  • la construction du ‘build plan’ avant l’exécution des plugins, qui permet de tripatouiller ce plan avant qu’il soit exécuter. Cela permet à m2eclipse de reconfigurer certains plugins pour ne pas remplacer ce qu’Eclipse sait déjà faire très bien tout seul, ou à Tycho de remplacer la résolution des dépendances par les mécanismes OSGi d’Eclipse

On termine la journée par un BOF sur Parleys, l’occasion de faire le point sur cette plateforme géniale et sur son modèle économique. Visitez le channel Breihjug sur beta.parleys.com si vous ne connaissez pas.

Fini Devoxx pour moi, une dernière bière et on rentre pour retrouver la vraie vie :)

Bob fait son Show

La Keynote Devoxx de Jeudi était consacrée au méthodologies. Dans un premier temps, Iva Jacobson (Mr User Stories) présente une initiative visant à créer un lien entre toutes les méthodologies de développement qui prétendent sauver le monde.

Partant du constat que chaque méthode reprend des concepts déjà établis, en changeant parfois juste de vocabulaire, pour apporter quelques idées novatrices noyées dans du bruit, et généralement incompatible avec d’autres méthodes, Ivar a développé (sans prétendre à la solution miracle) un outil permettant de formaliser les méthodes. Décomposées en “pratiques”, il devient possible d’enrichir son existant de nouvelles idées et de compléter son processus de développement. Ivar espère ainsi jeter un pont entre le monde universitaire, les méthodologistes et les industriels.

La seconde partie est animée (c’est le moins qu’on puisse dire) par un show démentiel de Robert C. Martin (“Bob”, celui de Clean Code). Speacker de talent il nous chauffe une salle de 1000 personnes en quelques secondes avec une énergie, un humour et une dynamique sans équivalent ! Sa présentation vise à démontrer que le développeur, malgré 30 an d’informatique et de méthodes dont il nous retrace l’historique avec une invraisemblable débauche d’humour, reste un amateur, vu comme un geek qui ne sait pas maîtriser les délais.

Il veut faire de nous des professionnels, présentant le manifeste software craftsmanship. Dans son style percutant et hilarant, un extrait :

  • Qui parmi vous a déjà perdu du temps à cause de code mal écrit ?
  • (toute la salle ou presque lève la main)
  • Alors, pourquoi l’avez-vous écrit ?

à méditer ;)

un cœur qui bât

La session de Brian Goetz était une piqure de rappel pour ceux qui ont suivi son intervention l’année dernière, mais le sujet reste toujours autant d’actualité et délicat à appréhender pour le développeur lambda.

Durant une bonne partie de la présentation, Brian présente l’évolution des microprocesseurs et les diverses astuces visant à apporter toujours plus de vitesse dans le traitement ‘apparemment’ séquentiel des programmes. ré-ordonnancement des micro-opération, exécution prédictive, utilisation de registrer supplémentaires renommables et j’en passe.

Suit un exemple de synthèse qui permet de mettre en évidence la faiblesse de tout ça : il suffit d’un seul “cache miss” en accès mémoire pour réduire tous ces efforts à néant. L’exécution de plusieurs threads sur un cœur semble une solution pour palier cette faille, récupérant les cycles d’horloge d’attente de la mémoire au profit d’un autre thread.

D’après Brian, l’approche RISC pourrait bien revenir sur le devant de la scène : un die Itanium peut contenir 100 cœurs Pentium III ! Par contre, la programmation de machines aussi massivement multi-cœur n’est ni dans nos habitudes, ni dans nos outils. Ce qui amène donc en fin de présentation à la présentation de java.util.concurrent, et en particulier des fork/join.

La démo est simple mais parlante : un algorithme de tri, écrit en se basant sur le parallélisme massif et les API fork-join permet sur un système multi-cœur un gain de performance très significatif, sachant qu’on ne rencontre pour l’instant que des quad- ou octo-cœurs, mais que les labs nous préparent des processeurs bien plus parallélisés.

Pour approfondir le sujet, je ne peux que vous encourager la lecture de son bouquin, traduit en français chez Pearson. Livre dense à ne pas lire en une fois (sous peine de mal de crane) mais qui restera sur votre bureau pendant quelques années.

18 novembre 2009

Apache Maven@Devoxx

Ca y est, mon bouquin est présent sur Devoxx !

bouquin

Ca aura été un peu compliqué à organiser, Merci à Pearson d’avoir réglé le problème dans l’urgence. Il n’est malheureusement pas disponible à la vente et je ne pourrais pas vous le dédicacer – rendez vous au Monde en Tique où une journée sera organisé bientôt pour cela – par contre vous pourrez tout de même le feuilleter : demandez l’unique exemplaire disponible à la caisse !

Ctrl+Alt+Suppr

Cet après midi, une session bien mystérieuse tout simplement nommée “James Gosling” – le papa de Java y présente store.java.com, une place de marché sur le modèle du apple AppStore ou de l’Android Market, permettant aux indépendants de proposer leur développements maison aux millions de PC et mobiles équipés d’un runtime Java.

Le sujet étant assez peu intéressant (pour ce qui me concerne) je me rabat sur la session de Brian Goetz sur l’évolution de l’informatique vers le parallélisme et son influence sur notre façon de programmer… jusqu’à ce que le son plante !

Les sessions étant enregistrées pour Parleys.com, les speackers sont priés de faire une pause… mais qui donc s’est pris les pieds dans la prise ? Les Twits affichés dans le hall n’attendent pas longtemps:

Comme quoi c’est une arme à double tranchant, ou peut être un moyen de canaliser les réactions du public : 2> /dev/null :)

Quoi qu’il en soit cela laisse de la place pour discuter avec son voisinage et apprendre quelque chose que j’ai raté ce matin lors de la session “JDK7, an update” pendant laquelle a été annoncée l’inclusion des Fermetures (Closures) dans Java 7.

Ce sujet, qui pourrait paraître anecdotique, déchaine les passions depuis pas mal de temps, ces structures étant supportées par de nombreux langages, … sauf Java. Il y a an, au même endroit, l’annonce inverse avait été faite, il faut croire que les groupes de pression ont fait leur œuvre. Reste à confirmer, et à attendre la version finale de Java7 ! 

Keynote Day 3, La crise …

La journée de conférence commence par une réunion plénière, l’occasion pour Stephan de présenter la nouvelle édition de Parleys, que vous connaissez déjà en beta si vous utiliser les channel BreizhJug. Comme toujours, cette appli fait son effet. La version 3 introduit un modèle économique pour ce site qui consommes quelques To de bande passante, avec un abonnement pour visualiser les speach Devoxx dès les premiers jours et des espaces privés pour les entreprises qui veulent diffuser (ou utiliser en interne) ce support. Personnellement je la recommande à tout ceux qui veulent faire de la com’ ou de la formation interne ou publique.

Suit la Keynote “sponsor”, qui se retrouve scindée en deux : Oracle puis SUN

Le représentant Oracle n’est autre que le directeur technique (excusez moi d’avoir oublié le titre exact, un truc comme “Chief Officier Executive Truc”). Il annonce d’office la couleur : pas d’info sur la fusion, devoir de réserve.

On est fixé. Après quelques blagues à la limite du private joke, on part donc sur un point de vue d’Oracle sur la plateforme Java : rien de très surprenant. Java c’est chouette, ça évolue, y’a plein de monde et encore du chemin à parcourir… Oracle présente aussi sa vision du futur de Java, à savoir OSGi, via une démo d’une appli web déployée sur un micro-noyau OSGi Weblogic. Certes le temps était compté, mais la démo est minable et n’apprend absolument rien, sans compter qu’elle plante à moitié.

La démo suivante montre l’assemblage et le déploiement de cette appli sur une VM Jrockit (une VM qui exécute directement le JDK, sans O/S). On retrouve les bons outils Oracle “clic souris” que les amateurs de BPEL aiment tant.

Bref, on sort de là avec pas plus d’info qu’au début.

Suit la Keynote de SUN, animée par les représentants de la JSR JEE6 et de GlassFish. Cette fois il s’agit plus d’un résumé des deux jours d’université largement marqués par JEE6, mais le ton est net : “vous vous rappelez de ma session l’an dernier ou j’annonçais JEE6 ? et bien cette fois on y es presque”. Pas de langue de bois, c’est bien à des techos qu’on à affaire et ça tombe bien, c’est ce qu’attend le public de Devoxx (moi en tout cas) !

D’autres sessions consacrées à JEE6 et GlassFish sont prévues dans la journée pour se faire une idée plus précise.

Ce keynote ne sera donc pas l’occasion d’annonces fracassantes. Devoxx 09 sera marqué par la crise : moins de sponsors, moins de participants, beaucoup ne viennent que deux ou trois jours. Le statut incertain de la fusion SUN-Oracle ajoute à l’ambiance “on attend que ça passe”.

Un point positif tout de même : mon bouquin devrait être présent sur le stand Pearson – en un seul exemplaire de présentation ! La crise je vous dis…

JEE6, mais qui a commandé ça ?

La session BOF (Birds Of a Feather = réunion communautaire) sur JEE6 réunissait de nombreux experts ou spec leads des différents éléments qui composent JEE6. Le sujet était volontairement provocateur : pourquoi devrais t-on s’intéresser à JEE6 ?

Il faut dire que JEE traine de sacré casseroles, et s’est fait balayer pendant un temps par le succès de Spring. JEE6 semble reprendre les rênes en main en mettant poliment toutes les vieilleries à la poubelle (pardon, en “prune”, si vous y tenez vous pouvez les conserver encore un petit peu) et en proposant un modèle plus modulaire, quasiment à la demande.

La communauté reste assez sceptique, non pas sur le contenu mais sur le fonctionnement du JCP : pourquoi y a t-il parfois deux specs pour une même JSR, qu’est ce qui différencies “Managed Bean” de CDI (aussi connu comme “Web Beans”), pourquoi n’y a t-il pas de spec JEE pour gérer le clustering ?

La réponse, en demi teinte, c’est “ben les gars, c’est pas si simple de mettre tout le monde d’accord”. On est donc content de voir que les choses avancent, même si tout n’est pas parfait et que certaines choses semblent redondantes ou amenées à évoluer.

Reste un constat intéressant : Caucho développe from scratch ce qui sera le tout premier serveur JEE6 “Web Profile” produit par un outsider. Avec le mastodonte JEE on avait pas envisagé un nouveau venu dans la cour des grands depuis belle lurette. JEE6 rend enfin les choses possibles.

Autre bonne nouvelle : la spec Web Profile vit sa propre vie, et pourra donc évoluer rapidement sans attendre JEE7. On peut donc parier qu’il va y avoir de la demande de ce côté.

En conclusion, une session BOF intéressante avec une bonne participation du public et des speackers sans complexe ni langue de bois.