Bruno Michel's blog

Rails 3 vient de sortir. Je vous encourage à lire l'annonce de la sortie sur le blog officiel, Riding Rails si vous ne l'avez pas déjà fait. Pour les nouvelles applications, il n'y a pas de doutes à avoir : Rails 3 est la route à suivre. Mais pour les applications existantes qui utilisent actuellement Rails 2.3, qu'en est-il ? C'est ce que nous allons voir en quelques questions-réponses.

Ai-je intérêt à passer à Rails 3 ?

Oui, Rails 3 apporte de nombreuses améliorations, et à peu près n'importe quelle application va tirer parti de l'une ou l'autre de ces améliorations. Par exemple, la protection par défaut contre les attaques XSS est un grand pas en avant et va simplifier la vie des développeurs. Rails 3 est également plus performant et permet de remplacer plus facilement ActiveRecord par un autre ORM. Bref, les raisons ne manquent pas de passer à Rails 3.

Puis-je passer dès aujourd'hui à Rails 3 ?

Cela dépend des projets. Rails 3 a été bien testé au cours des derniers mois avec 4 versions beta et 2 release candidates, il n'y a pas de problème de ce coté là. Mais passer à Rails 3 ne se fait pas magiquement. Il faut prendre le temps de découvrir la nouvelle version et migrer son application. Cela prend un peu de temps (de quelques jours à quelques semaines, selon la taille de l'application). Il faut donc voir si l'intérêt de passer à Rails 3 est suffisant pour justifier de passer ce temps, puis planifier cette migration, si possible lors d'une période calme.

Et pour les gems/plugins ?

La plupart des gems courants ont des branches sur leur dépôt pour fonctionner avec Rails 3. Des versions stables de ce plugin sont sorties ou vont sortir dans les jours à venir. Vous pouvez vérifier sur le site RailsPlugin.org que les gems que vous utilisez sont compatibles avec Rails 3.

Que faire si une gem n'est pas compatible avec Rails 3 ?

Si la gem n'est plus maintenue, c'est peut être l'occasion de passer à une gem équivalente plus évoluée. Vous pouvez aussi décider de reprendre le projet à votre compte en contactant l'auteur initial.

Si la gem est maintenue mais n'est pas encore fonctionnelle avec Rails 3, vous pouvez aider son auteur de différentes façons :

  1. Ouvrir un ticket sur le bug tracker du projet
  2. Suivre les développements en cours, les tester et remonter les problèmes
  3. Participer au développement en proposant des patchs, voir en créant une branche de code Rails3 spécialement pour l'occasion.

Pour une gem critique, une possibilité peut être de sponsoriser le passage à Rails à son auteur ou à un expert Rails 3.

Je suis décidé à passer à Rails 3, comment je fais ?

La première chose est de migrer vers la version la plus récente de Rails 2.3. La version 2.3.9 va sortir (demain si tout va bien), et permettra de migrer en douceur vers Rails 3. Si vous utilisez des API dépréciées, vous serez prévenu dans les logs. Cela vous permet de préparer une partie du terrain avant le grand saut. Ensuite, vous pouvez utiliser le plugin Rails upgrade pour vous aider à migrer, en suivant les explications de Jeremy McAnally.

Je vous conseille également la lecture de The Rails 3 Upgrade handbook. Le temps gagné grâce à sa lecture remboursera largement les quelques dollars qu'il coûte. Pour ceux qui aiment les vidéos, les 3 Railscasts valent également d'être regardés : partie 1, partie 2 et partie 3.

J'ai un dernier conseil pour la route : utilisez une branche séparée dans votre dépôt git/svn pour faire la migration. Vous aurez probablement besoin d'aller voir plusieurs fois votre application avant la migration et les changements faits depuis si vous rencontrez un point de blocage.

Et pour apprendre Rails 3, quelles ressources sont à ma disposition ?

Certains ont été plus rapides que moi, je vais donc me contenter de donner deux liens :

Sachez également qu'un livre en français est en cours de rédaction et devrait sortir dans les semaines à venir.

Et pour les autres questions ?

Vous pouvez poser votre question en commentaire de ce billet ou sur http://questions.rubyfr.org/.

Node.js est un environnement Javascript pour faire tourner applications réseau scalable. Sa particularité, qui en fait aussi sa force, est de reprendre le modèle événementiel bien connu des développeurs Javascript et de l'utiliser pour des applications coté serveur.

Chez af83, nous nous intéressons à Node.js depuis un bout de temps, mais il était assez difficile de développer sérieusement des applications avec, les versions mineures s'enchaînant et cassant l'API.

Toutefois, ceci devrait devenir de l'histoire ancienne : Ryan Dahl vient d'annoncer Node.js v0.2.0 et il va s'employer à conserver une API stable pour les versions 0.2.x. Ceci devrait permettre aux bibliothèques et frameworks autour de Node.js de pouvoir se développer plus sereinement et de construire plus facilement des applications Node.js sans avoir à se compliquer la vie pour trouver une version de Node.js qui fonctionne avec toutes les bibliothèques que l'on souhaite utiliser.

For the Whyday, I've hacked two ZSH scripts for completion of RVM and bundler 1.0. You can find them on my dotfile repository on github: http://github.com/nono/dotfiles/blob/master/zsh/Completion/_rvm and http://github.com/nono/dotfiles/blob/master/zsh/Completion/_bundler.

To install them, you can put these 2 files in $HOME/.zsh/Completion (create this directory if it doesn't exist), and add it to fpath by adding this line to your .zshrc:

fpath=(~/.zsh/Completion $fpath)

A quick example of completion:

% bundle install --[TAB][TAB]
--binstubs    -- generate bin stubs for bundled gems to ./bin
--deployment  -- install using defaults tuned for deployment environments
--frozen      -- do not allow the Gemfile.lock to be updated after this install
--gemfile     -- use the specified gemfile instead of Gemfile
--local       -- do not attempt to connect to rubygems.org
--no-color    -- disable colorization in output
--path        -- specify a different path than the system default
--quiet       -- only output warnings and errors
--system      -- install to the system location
--without     -- exclude gems that are part of the specified named group

Voici de nouveaux événements qui viennent compléter la précédente liste.

1er juillet : Drumbeat Paris - http://www.drumbeat.org/events/drumbeat-paris
Est-ce que le Web sera ouvert dans dix, vingt – voire dans 50 ans ? Mozilla pense qu'il peut – et doit – l'être. C'est pourquoi nous lançons l'initiative Drumbeat, une invitation à tout passionné du Web à participer à des projets qui améliorent le Web et le rendent plus ouvert à long terme.

21 juillet : WebPerf User Group - https://sites.google.com/a/survol.fr/webperf-user-group/evenements/21-ju...
Le WebPerf User Group une réunion informelle où tout le monde est le bienvenu, quel que soit son rôle ou sa connaissance du sujet, pour discuter et échanger à propos des performances web.

19 août : Whyday - http://whyday.org/
Le 19 août sera l'occasion de célébrer le Whyday, en l'honneur de Why the lucky stiff. Ce hacker a très fortement influencé la communauté Ruby, par ses écrits et notamment le guide poignant de why, ses projets Ruby (Camping, Shoes, RedCloth, Try Ruby, etc.), et plus généralement par sa présence en ligne. Le 19 août de l'année dernière, il a décidé de supprimer toute son activité en ligne, probablement pour préserver son anonymat. Le Why Day sera l'occasion de lui rendre hommage et de se lancer dans des projets fous.

28 et 29 août : Node.js Knockout - http://nodeknockout.com/
Le node.js knockout est une compétition qui consiste à construire un site web avec node.js en moins de 48h. Les équipes d'au plus 4 personnes seront jugées, et les sites les plus impressionnants récompensés.

15 au 17 octobre : Rails Rumble - http://blog.railsrumble.com/
Le Rails Rumble a les mêmes règles que le Node.js knockout, mais pour Rails à la place de Node.js. Ce n'est pas étonnant car les précédentes éditions du Rails Rumble ont inspirées le Node.js Knockout.

9 et 10 novembre : Forum PHP - http://afup.org/pages/forumphp2010/
Le Forum PHP est la grand messe française autour de PHP. Il sera placé sous le signe des 15 ans de PHP et des 10 ans de l'Afup. A cette occasion, l'Afup organise un Forum plus ambitieux que jamais, prévoyant de multiples conférences, des ateliers et débats, des invités renommés, mais aussi des espaces d'intervention et d'exposition plus nombreux !

12 novembre : fullfrontal - http://2010.full-frontal.org/
Fullfrontal est une conférence javascript qui promet d'être bien sympathique.

Vous avez peur de vous ennuyer cet été ? Alors, voici un petit programme pour vous occuper :

21 juin : MongoFR à la Cantine - http://www.10gen.com/conferences/event_mongofr_21june10
Cette journée organisée par 10gen et sponsorisée par af83 sera entièrement consacrée à MongoDB.

26 juin : Social Innovation BarCamp Paris à la Cantine - http://barcamp.org/SocialInnovationBarcampParis
Ce barcamp autour du thème de l'innovation sociale sera la rencontrer de plein de gens intéressants. Rappelons que l'innovation sociale est toute forme d'innovation économique, organisationnelle ou technologique appliquée à des problématiques à caractère social ou à toute problématique liée aux individus et à la façon dont la société fonctionne ou pourrait être améliorée.

3 juillet : Web Workers Camp, organisé par af83 (Pierre et Louis A.) à la Cantine - http://barcamp.org/WebWorkersCamp
Ce barcamp sera l'occasion de parler de plein de technos cools comme Node.js, les bases NoSQL, les websockets, les files d'attentes, etc. Nous aurons la chance d'accueillir Ryan Dahl, le créateur de Node.js.

Du 6 au 11 juillet : RMLL 2010 à Bordeaux - http://2010.rmll.info/
Les RMLL 2010 sont un cycle non commercial et d’accès gratuit de conférences, ateliers et tables rondes autour du Logiciel Libre et de ses usages. L’objectif est de fournir un lieu d’échanges et de rencontres entre utilisateurs, développeurs et acteurs du Logiciel Libre. N'oubliez pas de venir à ma conférence sur Ruby 1.9 ;-)

Tout l'été : NoSQL Summer Paris - http://nosqlsummer.org/city/paris
Le NoSQL Summer Paris est l'occasion de découvrir des papiers sur les bases de données, relationnelles ou non, et d'en discuter avec d'autres dévs.

28 et 29 août : Pycon Fr 2010 - http://zope.afpy.org/Members/jpcw2002/pycon2010news
L'Association Francophone Python organise comme à son habitude son rendez-vous annuel autour de Python : Pycon FR. Venez échanger sur Python avec des passionnés à la Cyberbase de la Villette à Paris les 28 et 29 août. Des dizaines de conférences, courtes présentations et tutoriels seront égrainés tout au long du week-end, sur des sujets tout public ou parfois un peu plus techniques.

25 et 26 septembre : JSConf.eu à Berlin - http://jsconf.eu/2010/
La JSConf.eu est l'événement européen autour du javascript (coté client et coté serveur) à ne pas manquer. Vous pouvez encore répondre au call for speakers, mais il ne vous reste plus beaucoup de temps.

14 au 16 octobre : Paris Web - http://www.paris-web.fr/
La cinquième édition de la conférence Paris Web explorera les thèmes de l’accessibilité Web, du design numérique et des standards ouverts.

Quill and ink well at the State House

RDoc

RDoc est l'outil utilisé par les développeurs Ruby pour générer une documentation à partir des commentaires dans le code. Il est très souvent décrié, car il oblige à mettre en forme les commentaires d'une certaine manière qui a tendance à rendre les commentaires difficilement lisibles directement dans le code. Il est également difficile de produire des templates différents pour la génération HTML de la documentation.

Il semblerait que 2010 soit l'année du grand changement pour cela. En 2008, la mode pour les développeurs Ruby était de faire son propre framework web, en 2009, ce fût les outils de tests/specs, et dans cette lignée, il semblerait que les outils de tests soient à la mode pour 2010. Je vais vous présenter les premiers candidats.

Yard

Yard n'est pas nouveau, mais revient en force. Il se place dans la continuité de RDoc en termes de fonctionnement, et cherche notamment à assurer la compatibilité avec RDoc. Il est ainsi utilisé par rdoc.info pour générer de jolies documentations à partir de dépôts git.

Mais Yard propose également une syntaxe alternative, en rupture avec celle de RDoc. Celle-ci est dans l'esprit de ce que javadoc ou doxygen propose : @param pour documenter un paramètre, @return pour la valeur de retour, @see pour faire une référence, etc.

Rocco

Rocco est un portage en Ruby de docco. Ce n'est pas exactement un outil de documentation, plus un outil de literate programming, mais il peut servir à documenter du code.

Son rendu HTML est sur deux colonnes. La colonne de droite affiche le code, coloré avec Pygments. La colonne de droite affiche les commentaires qui correspondent au code. La langage de markup utilisé pour les commentaires est Markdown, une syntaxe wiki généralement bien connue des développeurs.

TomDoc

Tom Preston-Werner, un des créateurs de Github, n'était pas satisfait par les solutions précédentes. Il cherchait un format qui soit facilement lisible directement dans le code, mais qui permette néanmoins de générer une documentation pour les utilisateurs qui leur conviennent : un template agréable, pas de méthodes privées... Il a donc proposé son propre format : TomDoc.

Je trouve que ce format convient pour lire les commentaires directement dans le code, mais je ne suis pas entièrement convaincu. Devoir marquer chaque méthode comme étant Public pour qu'elle apparaisse dans la documentation me semble contraignant, et remplacer attr_accessor par attr_reader plus attr_writer carrément casse-pieds.

Conclusion

Au final, ces différentes initiatives me paraissent intéressantes mais je ne sais pas trop laquelle choisir. Je pense que je vais attendre encore un peu que la situation se décante et que je puisse expérimenter les possibilités pour voir celle qui me convient le mieux.

af83 aime organiser et participer à des événements. Voici quelques événements que nous avons en vue :

Dès maintenant : the Riak Fast Track - http://blog.basho.com/2010/05/04/introducing-the-riak-fast-track/
Riak est une base NoSQL qui mérite d'être mieux connue. Pour cela, le Riak Fast Track a été mis en place : c'est un guide pour découvrir en moins d'une heure les possibilités de Riak. Et les premiers à envoyer des retours aux organisateurs gagnent le « butin secret de Riak ». Vous pouvez aussi lire ma dépêche LinuxFr sur Riak.

7 au 9 mai : Paris Startup Weekend - http://paris.startupweekend.org/
Un week-end pour lancer une startup, prêt à essayer l'aventure ?

15 et 16 mai : Rails 3 BugMash - http://railsbridge.org/news_items/12
Cet événement en ligne est l'occasion de s'impliquer dans la communauté Rails et d'aider à fermer des tickets. Si vous souhaitez contribuer à Rails, c'est vraiment le bon endroit pour le faire.

14 au 16 mai : Pas Sage en Seine - http://linuxfr.org/2010/05/05/26806.html
Pas Sage en Seine est un rendez-vous pour hackers, artistes, créateurs et amateurs, au sens large du terme, de la bidouille. Les ours vont y faire pas mal de présentations.

22 mai (à confirmer) : Devenir orateur - http://www.paris-web.fr/2009/Paris-Web-2010-Maman-je-ne-veux-pas-y-aller
Les organisateurs de Paris Web souhaitent encourager les vocations d'orateur. Pour cela, ils préparent une journée pour montrer que les orateurs sont des personnes comme les autres.

21 juin : MongoFR à la Cantine - http://www.10gen.com/conferences/event_mongofr_21june10
Cette journée organisée par 10gen sera entièrement consacrée à la base NoSQL MongoDB. Elle sera suivi par un NoSQL Meetup.

26 juin : Social Innovation BarCamp Paris à la Cantine - http://barcamp.org/SocialInnovationBarcampParis
Ce barcamp autour du thème de l'innovation sociale sera la rencontrer de plein de gens intéressants. Rappelons que l'innovation sociale est toute forme d'innovation économique, organisationnelle ou technologique appliquée à des problématiques à caractère social ou à toute problématique liée aux individus et à la façon dont la société fonctionne ou pourrait être améliorée.

3 juillet : Web Workers Camp, organisé par af83 à la Cantine - http://barcamp.org/WebWorkersCamp
Ce barcamp sera l'occasion de parler de plein de technos cools comme Node.js, les bases NoSQL, les websockets, les files d'attentes, etc. Vous pouvez déjà réserver la date, nous vous donnerons plus d'informations dans les jours à venir.

Du 6 au 11 juillet : RMLL 2010 à Bordeaux - http://2010.rmll.info/
Les RMLL 2010 sont un cycle non commercial et d’accès gratuit de conférences, ateliers et tables rondes autour du Logiciel Libre et de ses usages. L’objectif est de fournir un lieu d’échanges et de rencontres entre utilisateurs, développeurs et acteurs du Logiciel Libre. N'oubliez pas de venir à ma conférence sur Ruby 1.9 ;-)

25 et 26 septembre : JSConf.eu à Berlin - http://jsconf.eu/2010/
La JSConf.eu est l'événement européen autour du javascript (coté client et coté serveur) à ne pas manquer. Vous pouvez répondre au call for speakers dès aujourd'hui.

La version 0.1.91 de Node.js est sortie le 15 avril. Je ne vais pas m'attarder dessus, c'est juste une version de stabilisation après les gros changements de la 0.1.90 : ajouts mineurs et surtout corrections de bugs.

Plus intéressante est la version 0.1.92 fraîchement sortie. Parmi les nouveautés, citons :

  • La prise en charge du SSL via OpenSSL est de retour (mais pas encore documentée).
  • Les événements error qui n'ont pas de listeners déclenchent maintenant une exception.
  • Une nouvelle classe Script permet d'évaluer du code dans le contexte courant ou dans un nouveau contexte. Cela pourrait être très pratique pour des tests unitaires, mais ne l'utilisez pas pour faire du sandboxing (regardez plutôt Jefe pour ça).
  • La documentation de l'API continue de s'améliorer, avec notamment un nouveau thème qui s'intègre au reste du site.

Les releases notes sont disponibles sur la mailing-list : Node v0.1.91 et Node v0.1.92.

Pour la compatibilité des bibliothèques avec chaque version, ça se passe toujours sur le wiki.

Nous recherchons des développeurs Ruby on Rails, mais également d'autres profils. N'hésitez pas à consulter nos annonces sur http://www.af83.com/jobs

546 seeds from 1 sunflower!

Je vous parlais hier des systèmes de gestion de packages, et plus particulièrement de Kiwi, Rubygems et Seed.js. C'est visiblement un sujet très à la mode, vu que plusieurs autres articles ont été publiés sur ce sujet à peu près au même moment.

Du coté de Rubygems, Ryan Tomakyo a libéré le code source de rpg. C'est une alternative à rubygems (l'outil) qui permet d'utiliser les dépôts et packages au format Rubygems. En particulier, il est capable de résoudre les points 2 et 3 d'hier en organisant les fichiers installés par type plutôt que par package et en ne nécessitant aucun runtime (le fameux require 'rubygems' pour Rubygems).

J'en profite également pour vous signaler le Ruby Packaging Standard qui est un ensemble de règles pour organiser ses fichiers dans une bibliothèque Ruby, et je vous encourage fortement à suivre ces règles, même pour un usage personnel.

Mais venons-en à la star d'hier : Seed.js. Nous avons vu beaucoup d'activité à son sujet :

  • Charles Jolley a publié un article intitulé A Universal Package Manager for JavaScript sur le blog de SproutCore (avec des explications sur le pourquoi et le comment)
  • Il a également envoyé un mail sur la mailing-list de node.js (pas beaucoup de commentaires sur la mailing-list, mais bien plus sur le chan IRC)
  • Une page community a été ajoutée au site officiel de Seed.js
  • DailyJS a choisi Seed.js comme sujet pour l'article d'hier (au passage, DailyJS est un très bon blog sur le Javascript aussi bien coté client que coté serveur)
  • Enfin, the changelog a aussi sélectionné Seed.js comme projet du jour

Bref, tout cela me semble de bonne augure pour Seed.js, mais attendons de voir si les développeurs des bibliothèques pour node.js sont du même avis que moi avant de crier victoire.