Archives Mensuelles: novembre 2011

Back from Devoxx : Play! 2, hopes and fears

Le mois de Novembre est de loin le préféré des Javaistes et tous ceux qui le peuvent se rendent à Devoxx, la plus grande conférence européenne sur Java. Plutôt que de commenter chaque session vue, je vais essayer de synthétiser mes impressions sur ces 3 jours de conférences.

Devoxx c’est 5 jours, 2 d’universités et 3 de conférences, à Anvers avec 3300 développeurs. C’est beaucoup de rencontres, des gens que l’on apprécie mais que l’on ne croise qu’aux conférences, et d’autres que l’on voit pour la première fois (et que l’on tente de reconnaître des avatars twitter, avec plus ou moins de succès!). L’organisation est extrêmement bien rodée (10 ème édition) et l’équipe de Stephan fait un travail incroyable (vous imaginez servir 3300 geeks affamés pendant une semaine dans un cinéma où se déroulent 6 tracks en parallèle?).

Il y avait de nombreux sujets traités mais je vais me concentrer sur les sujets qui n’étaient pas ou peu présents l’année précédente, en commençant par Play! dans ce premier article.

Avec aucun talk l’année dernière et 3 cette année, on peut dire que Play! a fait du bruit! Nous avons notamment eu l’annonce de la beta release de la version 2.0 et du rapprochement avec la société Typesafe. Une version qui comme le laisse supposer l’intégration dans la stack de Typesafe s’oriente vers Scala, même si Java sera toujours supporté (l’animation en haut à droite de ce site vous donne une bonne idée de l’évolution).

Fears

Cette décision me gêne un peu personnellement et d’après les échos que j’en ai eu, n’est pas forcément très populaire. Vous pouvez installer cette bêta et vous faire une idée par vous même avec la documentation disponible, mais la simplicité que l’on aimait dans la version 1 disparaît un peu. J’ai attendu quelques jours avant de faire ce billet, car je voulais tester un peu par moi même et prendre la température autour de moi et sur le web. Que nous amène donc cette v2 ?

Même si il est possible de rester sur une version Java pour la partie serveur, le moteur de template est pour l’instant en Scala uniquement, alors que Groovy jusqu’à présent faisait un très bon travail en se faisant oublier. Scala amène un typage plus fort donc une détection plus en amont des erreurs éventuelles, ce qui est louable. Trois exemples d’application sont disponibles avec la bêta, et pour avoir joué un peu avec, ce changement ralentit pas mal la compilation des templates : là où on passait son temps à rafraîchir le navigateur pour avoir instantanément le résultat, on attend maintenant un peu que la compilation se fasse, malgré le fait que mon laptop (MacBook Pro) soit relativement puissant. Le système de template Groovy sera peut être sauvé par la communauté  et réintroduit.

Et Scala est certainement un très bon outil lorsqu’on le maîtrise mais il demande globalement plus d’investissement, et là ou la v1 permettait de se plonger rapidement dans le code, cette v2 inquiète un peu par sa complexification inutile. La documentation est encore un peu légère (normal pour une bêta) donc ces craintes sont peut être inutiles mais j’en doute…

La compatibilité est de plus brisée, vous ne pourrez pas upgrader votre application sans un peu de travail. Le système de build est maintenant confié à SBT, le maven-like de Scala : plus de fichier dependencies.yml donc, et l’ensemble de commande est devenu un wrapper de SBT. A voir à l’utilisation, un peu de lecture si vous voulez approfondir.

Hopes

Tout n’est heureusement pas à jeter dans cette nouvelle version! On peut noter l’utilisation d’IO non bloquant (à la nodejs entre autre), et le traitement asynchrone plus développé (concept Iteratee/Numerator issu de Haskell). L’introduction d’Akka permet de supporter une lourde charge tranquillement et le framework Play! a lui même été en partie réécrit pour en utilisant ces concepts. La démo montre que 10000 requêtes ne posent pas de problème au serveur qui monte au maximum à 15Mo de RAM, et redescend à 2Mo une fois la vague passée : impressionnant, même si les requêtes ne faisaient aucun traitement métier. Play! pourrait devenir un outil de choix pour les applications à très fortes volumétries.

L’abstraction de l’accès aux données est réduite au maximum pour laisser aux développeurs le choix du datastore approprié. On retrouve tout de même les entités avec annotations JPA, et Ebean a remplacé Hibernate et amène un finder pratique pour requêter la base, et plus stateless que son prédécesseur. Dans mes rapides tests, on n’est pas vraiment dérangé par cette nouveauté, à creuser plus en détails.

Côté client, l’objectif est de permettre d’intégrer les excellentes technologies que l’on voit apparaître comme Jade, Less (c’est mon prochain billet de la série Nodejs), Backbone.js, Coffeescript. Un répertoire ‘assets’ a été ajouté à la structure du projet et les fichiers contenus sont automatiquement compilés et disponibles comme si ils étaient des ressources (par exemple les .coffee sont compilés en js et disponibles comme si le js était dans le répertoire public).

Les routes sont également compilées et ça c’est très pratique ! Si le controller ou la méthode indiqué dans le fichier route est inexistant, vous le savez immédiatement.

Dans les petits bonus plaisants, on peut maintenant écrire (en Scala) "def index = TODO" qui permet de continuer à écrire son code sans se préoccuper de l’implémentation du controller. Si on appelle cette méthode, elle affiche dans votre navigateur une belle page avec TODO. Le genre de détail ‘nice to have’.

Si vous voulez approfondir et vous faire votre avis, voici quelques liens qui peuvent vous intéresser :  la page officiellele blog Ipponle blog du Touilleur.

So what ?

Play est définitivement devenu populaire, et apprécié par beaucoup. Je fais partie de ceux qui apprécient son côté simple, productif, efficace et fun et qui l’ont utilisé pour faire des sites actuellement en ligne. Cette v2 me laisse un peu sceptique, n’étant pas spécialement un fanatique de Scala. C’est un excellent langage et très puissant, mais aussi très exigeant à produire et maintenir (des personnes autrement plus qualifiées que moi se sont déchainées sur le sujet ces derniers temps). Là où Play! faisait merveille pour commencer une application en 10 minutes après la lecture de 3 pages de tutorial, la v2 s’oriente vers une stack haute performance plus élitiste. Peut être que dans un an Scala/Play nous aura conquis. Dans tous les cas la hype est toujours là, il va falloir tester ça!

Cloud9, Coding node.js in the cloud

Coder du javascript, ca n’est pas forcément simple, et on a toujours besoin d’un bon outil. C’est pourquoi je veux vous parler d’un IDE que j’ai utilisé récemment, et qui change un peu d’Eclipse et d’IntelliJ : Cloud9.

Cloud9 est un IDE un peu particulier : comme son nom le laisse supposer c’est un environnement de développement web-based, open source, écrit en javascript pour faire du javascript. Le back-end est d’ailleurs écrit en node.js, le front est html5 et le tout utilise massivement les websockets, que du hype! Votre code est donc accessible depuis n’importe quel poste de travail, pour peu que vous ayez une connection web, évidemment.

Pour tester rendez vous sur c9.io ou installez le directement dans votre navigateur si vous utilisez Chrome (si vraiment vous n’aimez pas votre navigateur, vous pouvez également récupérer les sources et lancer l’IDE en local). Une fois installé, il faut se connecter : pour cela vous pouvez utiliser votre compte Github ou Bitbucket, ou encore créer un compte cloud9. Le projet utilisé pour cette série d’article étant hébergé sur Github, j’utiliserais donc cette option.

Une fois connecté vous arrivez sur une page d’accueil qui liste les projets de votre compte Github. Pour commencer à travailler, il faut créer ou cloner un projet. La création permet d’héberger son projet directement sur Github, Bitbucket ou un ftp (bientôt sur Dropbox également). Cloud9 adopte un modèle de fonctionnement à la Github : si votre projet est public, l’utilisation est gratuite, si vous voulez faire un projet privé, il faut payer (15$ par mois).

L’IDE permet également de créer des contextes : en haut à gauche, cliquez sur ‘Active context’. Ces contextes permettent de changer rapidement entre vos projets et également de gérer l’aspect collaboratif : il est possible d’ajouter des membres aux différents projets et de travailler à plusieurs (avec modifications temps réel et chat intégré).

Pour faire simple, nous allons cloner le projet du précédent article, pour cela, cliquez sur le ‘+’ à côté de ‘My project’ puis choisissez ‘clone from url’. Entrez alors l’adresse du projet shares : git://github.com/cexbrayat/shares.git. Une fois que Cloud9 a terminé de cloner le projet, on peut commencer à coder en cliquant sur ‘Start editing’ !

La fenêtre qui apparaît ressemble à un IDE traditionnel avec barre de menu, explorateur de fichier et zone d’edition. En bas la zone de saisie sert de console. Si l’on ouvre le fichier app.js, on voit que la coloration syntaxique est présente et agréable. La complétion est elle aussi disponible (et très pratique, mais si elle n’est pas exempte de quelques errements). Le code est également analysé en fond, et des indications vous sont données pendant l’édition. On peut voir par exemple qu’un point virgule est manquant sur la ligne 42 avec un petit warning dans la marge. Beaucoup de raccourcis clavier traditionnels sont disponibles, le debug, l’inspection des variables, bref tout ce dont nous avons besoin. Il est même possible d’ajouter des extensions (et d’en créer) ou de modifier les thèmes (IdleFinger ou Monokai sont assez sympas).

La où Cloud9 se distingue c’est qu’il est réellement pensé pour créer du code et le tester depuis n’importe quelle machine, et particulièrement pour du code node.js. L’intégration de différents composants vont en faire l’un de vos nouveaux amis :

- Github : la ligne de commande (zone de saisie tout en bas de l’écran) vous permet de saisir vos commandes git, avec une autocomplétion bien pratique. Vous pouvez donc directement commiter vos modifications, créer vos branches etc…

- NPM : le gestionnaire de dépendances de node est déjà installé ! Le projet utilisant les modules express et jade, il faut donc les récupérer, pour cela entrez dans la ligne de commande ‘npm install’ et voilà le projet prêt à être lancé.

- Node : évidemment node.js est déjà installé, vous pouvez donc lancer votre projet directement depuis votre navigateur en cliquant sur ‘run’ et en indiquant le fichier principal ‘app.js’. Le projet démarre alors et une url s’affiche en console (pour moi http://shares.cexbrayat.cloud9ide.com/) et me permet d’accéder au projet (ainsi qu’à n’importe qui, voilà qui va simplifier les démos!). La seule modification qu’il soit nécessaire de faire pour lancer le projet est de modifier le port de lancement de l’application par la variable d’environnement process.env.C9_PORT

- Le déploiement : une fois votre application prête pour le monde, vous pouvez la déployer directement depuis cloud9 vers une instance joyent ou heroku.

Les seuls reproches que je lui ferais sont le manque d’outils pour le refactoring et quelques rares plantages (pas beaucoup plus qu’un Eclipse traditionnel cependant. Un troll, où ça ?).

Vous voilà à deux clics de commencer à coder votre première application node.js, sans avoir besoin d’installer moults outils : vous n’avez plus d’excuse pour ne pas essayer !

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 992 autres abonnés