Posts Tagged ‘ruby’

Soirée Grails à Valtech jeudi 12 février

Friday, February 6th, 2009

GrailsMon collègue Jérôme Piétri présentera le framework web Grails (basé sur le langage Groovy) jeudi 12 février à 18h30 dans les locaux de Valtech près des Champs Elysées.

Cette soirée cible principalement les consultants Valtech. Néanmoins, nous pouvons accueillir des personnes externes, dans la mesure des places disponibles.

La soirée couvrira les points suivants:

  • la place de Grails dans le monde Java
  • les principes du framework
  • l’architecture
  • le scaffolding
  • quelques plugins
  • les avantages, inconvénients et les concurrents

Si vous souhaitez y participer, envoyer un mail à eric POINT lefevre AT valtech POINT fr.

A bientôt!

Retour sur le JavaCampParis 3

Monday, February 2nd, 2009

Timeline of the Java Camp 3
Ce Samedi 31 Janvier a eu lieu un JavaCamp à Paris, le JavaCampParis 3.

A partir de 9h30 – 10h, les premiers participants sont arrivés; et après un détour par la machine à café, le JavaCamp a démarré.

Les personnes présentes ont alors proposé des sujets qui les intéressaient (et se sont aussi présentées); ensuite, une “refactorisation” des sujets proposés a mis en évidence 7 thèmes :

  • TDD (Test Driven Development)
  • langages de scripting autour de la JVM (Scala, Groovy, Ruby)
  • DDD (Domain Driven Design)
  • les langages RIA et les frameworks Web: GWT, Flex, Wicket
  • Scrum
  • JEE 6 et Spring
  • SOA
  • Les Mocks

Ces thèmes ont pu être débattus/présentés par les participants dans 2 salles et sur 4 créneaux horaires : 10h15 -11h30, 10h45-13h00, 13h30-14h30, 14h45-16h.

Pendant la séance “les langages RIA et les frameworks Web: GWT, Flex, Wicket”, Tarik, et Eric, nous ont présenté Wicket (en avant premiere de ParisJug) et leur framework au dessus Wicket (pour faciliter et mettre à jour dynamiquement les formulaires dans Wicket); et avant de plus partir sur Flex, j’ai pu présenter la mise en oeuvre de GWT.

En abordant les “langages de scripting autour de la JVM (Scala, Groovy, Ruby)”, on a pu parler de la facilité d’intégration, de la mise en oeuvre, de l’intéret et de la pertinence des iDE dans le cadre des développements Scala (qui est compilé), Ruby, Groovy et Java Fx.

En parallèle, dans la salle “Solaris”, les débats ont porté sur la testabilité des programmes java. Nous avons eu un bon aperçu des différentes pratiques et technologies associées aux tests logiciels. En vrac: les x-Unit, Selenium, GreenPepper, FitNesse, Concordion, Bumblebee, SWTBot. Le débat suivant fut une présentation de DDD (Domain Driven Design) par Sébastien Letélié et le principal framework : Qi4j. Une approche intéressante qui est une “sur-couche” à la programmation orientée objet. Cette vision incite les objets java à se décomposer par comportement. On obtient donc un composite formé de plusieurs associations.

Dans l’autre salle, durant la séance “Scrum”, après de brefs retour d’expérience, Eric (pas le même que celui de Wicket, mais le co-organisateur) a pris la parole, et après avoir défini Scrum, nous a fait part de son avis sur combien Scrum peut être mal appliqué, et, ainsi souffrir d’une image négative; d’ailleurs le sujet a ensuite débordé sur le cycle de vie des méthodologies projets (la courbe des experts, early adopters, main stream users, …), et un comparatif entre ces dernières.

Un grand merci aux sponsors de la journée, Sun (pour les locaux) et Valtech (pour le petit déjeuner et les pizzas à midi), ainsi qu’à Jean Yves Pronier (côté Sun pour les locaux), Eric Lefevre-Ardant (co-organisateur avec moi-même), Eric Le Merdy, Claude Falguière (soutiens) et Alexis Moussine-Pouchkine (qui nous a mis en contact avec Jean-Yves), ainsi qu’aux participants pour le bon déroulement de la journée.

D’autres retours:

ParisOnRails du 1er décembre 2008 : ce qu’il s’y est dit ! (après midi)

Monday, December 1st, 2008

suite de Paris On Rails 2008 première partie

Tests d’interface Web avec Rails par Jean Michel Garnier

Jean Michel a commencé par une présentation de RSpec, et a enchaîné sur le TDD JavaScript : Screw Unit pour tester son JavaScript.
Ensuite il a continué sur les tests fonctionnels (plus de la moitié des erreurs apparaissent dans les spécifications fonctionnelles), en présentant Cucumber (ou Rspect Story Runner), framework de tests fonctionnels pour Ruby On Rails (qui va être intégré dans RSpec) , mais peut être utilisable en Java ou .Net via JRuby ou IronRuby.
Cucumber permet un formalisme à la RSpec, aussi bien que FIT (tableaux exécutables).
Pour les tests d’acceptance Web, WebRat (Ruby Acceptance Testing), basé sur HTMLUnit (Java), s’utilise via JRuby, et propose une interface pour plusieurs types de session; dont Webrat::SeleniumSession, une des plus avancées.

Enfin, sont évoqués les serveurs d’intégration continus pour Ruby, comme CruiseControl.rb et Hudson, via JRuby.

Ce qui nous amène à la seconde présentation orientée tests fonctionnels du jour (Gilles t’aurais du venir ! ;-) )

Tests d’acceptance Web à forte valeur ajoutée (par Philippe Hanrigou , de ThoughtWorks)

Les tests d’acceptance Web avec Selenium ou Watir sont compliqués à maintenir, ou sont trop longs à exécuter.
Fit est parfait pour tester le backend, tests du code métier, mais pas pour IHM.
Philippe nous décrit la difficulté de maintenir des tests d’acceptance, et insiste sur le fait que l’ensemble des développeurs de l’équipe doivent prendre en compte la difficulté à maintenir et écrire des tests d’acceptance web, pas juste les nouveaux venus sur le projet !

Pour faciliter le travail, l’outil qu’il utilise est Selenium Rspec Report, qui ajoute des fonctionnalités à RSpec : un maximum d’informations sont remontées : l’état du DOM lorsque le test a planté, un screenshot, les logs Selenium, pour pouvoir mieux suivre les tests d’acceptance et pourquoi ils ont échoué.
Pour accélérer ces tests,q ui peuvent être longs, on peut utiliser Selenium Grid pour paralléliser l’exécution des tests.

Philippe a aussi expliqué que les fixtures rails n’étaient pas la meilleure solution pour initialiser l’état lors des tests fonctionnels.
Pour pouvoir initialiserle domaine métier, pas juste le modèle, il a introduit Object Mother : design pattern pour tests d’acceptance implémenté par Object Daddy et Factory Girls, opposé aux Mocks car contient tout le domaine métier, pas juste un objet !
En conclusion, les tests d’acceptance Web sont difficiles, mais pas insurmontables : il faut paralléliser (avec Deep Test ?), isoler, être le plus précis possible.

Rails Performance par Michael Koriaski, membre de l’équipe core rails

Tout d’abord, a t on besoin d’optimiser ?Si oui, se concentrer sur quels axes d’amélioration ?

A priori, monter en puissance avec l’achat de nouveau matériel est ce qui coûterait le moins cher (sauf si on s’appelle Google ou Microsoft!)

Pour savoir ce qu’il faut optimiser, il faut se baser sur la performance perçue par l’utilisateur, et on se rend compte que le temps de chargement d’une page html représente 0.5% du temps que l’utilisateur attend; les images, les javascript, les CSS, etc… pèsent beaucoup plus lourd dans la balance !

Ainsi, on doit se concentrer sur sur le serveur front qui sert les fichiers statiques !

Enfin, on peut se poser des questions sur son appli rails :

  • Qu’est ce qui est lent ? (on utilise des outils de benchmarks pour le savoir, avec éventuellement un Ruby instrumenté comme Ruby ENterprise Edition pour connaître les allocations des objets)
  • Pourquoi est ce lent ? (essayer d’optimiser les allers retours sur le réseau en se servant des entêtes HTTP, et les Entity tags ce que Rails 2.2 peut faire, on dit au navigateur : “cest bon, t’as déjà la bonne version en cache !”
  • Rendre plus rapide (contrer le syndrome des N+1 requêtes en remaniant ses boucles et relations, régler le Garbage Collector de Ruby (augmenter sa tailel de départ par exemple) , etc…

Interview de David Heinemeier Hansson à Chicago, créateur de Ruby on Rails, via Ichat


Rails 2.2 a de meilleures performances par rapport aux versions précédentes, en particulier l’équipe de développement s’est concentrée sur HTTP (Etag, MemCache, etc..)
Rails 2.2 est compatible avec JRuby et Ruby 1.9, l’équipe essaie de faire fonctionner Rails sur le maximum de serveurs Web (via Rack).
Beaucoup de ménage a été fait, toute le code déprécié a été enlevé.

Liquid : moteur de templates en Ruby par Didier Lafforgue

Inspiré de smarty (issu de la communauté PHP)
Présentation des drops, filtres
S’installe en Gem ou en plugin.
Didier a évoqué un service qui a l’air excellent : hébergement (+git) et déploiement Rails : Heroku.com

La fin


Enfin Thomas Lissajou a amené un débat de clotûre sur le thème : “Agile Web Development with Rails, et vous ?”

Et bien, on découvre qu’il y a 2 groupes dans la communauté Rails : ceux qui en font et en sont convaincus (TDD, tests d’acceptance) et ceux qui considèrent que c’est réservé aux autres projets, car ils n’ont pas le temps ni les moyens; il y a beaucoup à parier que ces personnes, au fil de leur carrière ne tarderont pas à en être convaincu !

J’ai été ravi d’assister pour la 1ère fois à ParisOnRails, vivement l’an prochain !

ParisOnRails du 1er décembre 2008 : ce qu’il s’y est dit ! (matinée)

Monday, December 1st, 2008

Ce Lundi 1er Décembre 2008 avait lieu pour la 3ème fois la conférence annuelle des développeurs Ruby On Rails, j’ai nommé ParisOnRails, qui avait lieu à la Cité de la Science, dans le quartier de la Villette à Paris.

La journée a commencé vers 9h30 par une présentation de la journée par les 2 organisateurs Richard Piacentini & Laurent Julliard.

La première présentation était celle de Ruby 1.9, par Guillaume Desrat

Guillaume a tout d’abord commencé par présenter brièvement l’association ruby france, puis est rentré dans le vif du sujet.

Ruby 1.9 prépare la 2.0, en celà beaucoup d’incompatibilités apparaissent, notament au niveau de la syntaxe (en particulier les tableaux et hash).

Du coup, au chapitre des nouveautés, on a des hashes plus simpes à écrire , les paramètres ne sont plus obligatoires dans les appels de méthodes, enumération plus simple à utiliser, multilingualization (m17n) pour un support utf8 simplifié, les f ibers : thread controlables, que l’on arrête et reprend où et quand l’on veut, et enfin pour les regexp : on a désormais un nommage des matches avec un tag <mon_match> à insérer dans son expression.

De plus, il est à noter que ruby 1.9 est plus rapide (les exemples de Guillaume le donne presque 5 fois plus rapides sur des algos type suite de fibonnaci)

Reste que sa non compatibilité avec les versions précédentes représenteront peut être un frein à son adoption massive…

Présentation de moo tools(librairie javascript) par Matthieu Fosse

Cette librairie JavaScript est encore peu populaire (utilisé par 8% des utilisateurs de librairis JS), en même temps, elle n’est pas utilisée par défaut dans Rails…

Pour l’historique, Moo Tools basé sur protoype à l’origine, et est aujourd’hui plus modulaire que ses concurrents, on peut utiliser la délégation d’événements MooTools pour séparer le code HTML du code Javascript.

Après cette présentation, et avant la pause de milieu de matinée, un débat s’est improvisé sur “doit on ou pas écrire du JavaScript ?” cette question est assez répandue car il existe, même parmi la communauté RoR, 2 clans : ceux qui aiment écrire du JavaScript, et ceux qui … n’aiment pas , pour rester politiquement correct… Pas mal d’avis convergeaient pour dire que finalement JavaScript dans un site de contneu, ou communautaire, doit être utilisé avec parcimonie et contrôle, pour garantir l’accessibilité et le référencement, et que le sgéénrateurs de JavaScript type GWT doivent être réservés pour des applications riches (RIA, remplacement d’application lourdes, etc..); en tout cas, je ne vous cache pas que c’est aussi mon avis ;-) .

Après la pause, a eu lieu la présentation

Design pattern en Ruby par Russ Olsen

en conf call de New York.(5heures du matin pour lui!)

Russ a 30 ans d’expérience en programmation et a découvert Ruby quand il a voulu apprendre la programmation à l’un de ses enfants; aujourd’hui il est l’auteur d’un livre sur les design pattern en Ruby.

Il nous a tout d’abord présenté 2 éléments de l’histoire de la civilisation :

  • au début de la civilisation, les gens utilisaient des paniers pour transporter des biens, la poterie est arrivée, mais a repris la forme des paniers pour ne pas gêner les gens lors de la migration technologique (!)
  • au debut de sa carriere, domino etait utilisé partout, avec son langage Fortran, les gens savaient que c’était nul, mais restaient coincé avec, et ne pensait pas que les choses changeraient

Les gens ont du mal à quitter une technologie pour une autre.

Aujourd’hui, en Ruby, le concept le plus utilisé est convention over configuration; pour expliquer ceci à ses pairss (plutot habitué à Java), il a utilisé les design patterns.

Pour exemple, Adapter , pour faire communiqer des interfaces différentes, on utilise en Ruby active record qui permet de faire communiquer son appli avec des bdd différentes.

Iterator, en Java c’était une classe à part entière, une mécanique à mettre en place, en Ruby, on appelle juste .each sur son tableau, c’est déjà tout intégré.

Pour le pattern Factory, en Java, la classe représente tout, c’est figé; en Ruby, on peut on la changer en cours de route on peut rajouter des comportements à la volée. (il y a bien Spring qui facilite les choses en Java, mais c’est une autre histoire..)

Il a rencontré beaucoup de résistance à démontrer l’intérêt d’un nouveau livre sur les design pattern au début, car tout le monde pensait : “Les design pattern sont écrits une fois pour toutes pour tous les langages”.

Ce qui lui rappelle que les gens qui pensaient que les paniers étaient le dernière trouvaille pour transporter des biens, ou les gens qui pensaient que Fortran était le dernier langage de progammation , ont finalement eu tort ;-) !

Pour chaque nouvelle techno, les développeurs doivent comprendre les avantages de cette dernière : les premiers programmes en C++ utilisaient énormément l’héritage, un peu trop d’ailleurs; c’est la même chose en Ruby aujourd’hui, en Ruby doit on utiliser le changement de la classe dynamique ? si oui dans quelles proportions ?

En Ruby il y a encore des progrès à apporter, on peut améliorer l’utilisation de Ruby, en facilitant le passage de plusieurs blocs à une méthode, l’utilisation des closures, ou encore la programmation multi threads : il y a encore du travail pour faciliter l’utilisation de ces concepts.

Aussi, si Russ fait toujours sauter au plafond ses clients en leur parlant de Ruby On Rails, il les rassure en utilisant JRuby, où il peut toujours livrer l’application avec un fichier war (je pense aussi que JRuby est un des meileurs leviers d’adoption de Rails en entreprise)

En conclusion, il appelle les participants à ne pas être “des programmeurs Ruby” ni des “programmeurs Rails”, mais simplement des programmeurs ouverts à la nouveauté et l’évolution !

La suite dans un prochain épisode, après la pause déjeuner !

Support du cours du soir JRuby

Thursday, October 30th, 2008

Anthony, qui a animé le cours du soir sur JRuby mardi dernier, a mis en ligne le support du cours.

La semaine prochaine, pas de cours du soir proprement dit. A la place, nous accueillons la communauté ALT.NET.

Cours du soir JRuby le 28 octobre

Thursday, October 23rd, 2008

Anthony nous propose un cours du soir sur JRuby, mardi 28 octobre à 18h30, dans les locaux de Valtech Paris.

Il s’agit d’un cours du soir par un consultant Valtech, pour les consultants Valtech. Néanmoins, vous pouvez vous inscrire, même si vous n’ètes pas employé par Valtech. Attention, ne vous attendez pas à un show complètement rodé: il s’agit de nos discussions internes!

Programme

  • un bref rappel du langage Ruby (juste de quoi écrire des exemples sympas, si ne vous ne connaissez pas Ruby mais Java ou M$.net, ça ira)
  • la découverte de Jirb, shell permettant de découvrir nos classes Java et Ruby en direct
  • l’utilisation de classes Java par du code Ruby
  • la découverte de Netbeans 6.1, notamment de ses facultés “Ruby”
  • déploiement d’une application Ruby on Rails existante sur un serveur d’application JEE

Toutes ces activités seront agrémentées de manipulation, aussi venez avec votre ordinateur! ;-)

Essayez de télécharger les logiciels et librairies suivantes sur votre poste, on gagnera du temps pour faire des choses plus intéressantes que de faire tourner une clef usb:

  • OS : tous les OS sont bienvenus, du moment qu’ils ont une JDK 5 installée et visible dans le path
  • un editeur de texte pas trop mauvais : Notepad ++ par exemple sous windows
  • jruby 1.1.4
  • NetBeans 6.1 version ‘All’ (la beta 6.5 n’est pas nécessaire et c’est une beta… prenez la version 6.1)

Comment vous inscrire
Si vous êtes employé par Valtech, le site wiki interne vous suffira.
Pour les autres, je vous invite à me contacter par email: ericPOINTlefevreATvaltechPOINTfr. Votre mail doit avoir les informations suivantes:

  • titre: [Cours du soir] Inscription Cours JRuby du 28 octobre
  • votre nom & prénom
Les places sont très limitées, aussi je ne peux pas garantir que vous pourrez assister. Un mail de ma part avec l’adresse sera indispensable.

Slides du cours du soir sur RedMine

Sunday, August 3rd, 2008

Guillaume nous fournit enfin les slides qu’il a présenté lors du cours du soir sur RedMine du 6 juin dernier.

Port of an J2EE application (with Hibernate) to Ruby on Rails (1.2.3)

Monday, April 21st, 2008

Last week, I ported a J2EE application, using Hibernate for persistence and Capestry for the MVC part of the application to Ruby.
I logically choosed Ruby on Rails as it is the main Web framework for Ruby.
In this post, I describe how I did to perform such a port…
!Important! the application I first wrote this application in Franch, I tried to refactor the code in English, but… I haven(t finished at this time, … sorry folks !

Introducing the bank on line application

This application is composed of 3 models : Client, Compte (account) and Operation
A client has n Comptes (through reference_client) and a Compte has n Operations (through compte_id) :

The application allow the user to :
*login
*see a list of his accounts (after being logged in)
*see the details of one of his account (actually a list of the operations on an account)
*order a transfer between 2 accounts provided that the balance is positive (and the accounts exist)
Quite simple from a user point of view…

Creating the application with Ruby on Rails 1.2.3

The best way to port this new application to RoR, was to create a new RoR project
rails bankonline -d sqlite3
(by the way, I was using the sqlite3 database, to allow an easy installation of the application, the J2EE application was using HSQLDB)
cd bankonline
I was using for this Rad Rails visual editor on a windows platform (no comment…)
The first step to port this application was to create the 3 models.
ruby script/generate model Client
ruby script/generate model Compte
ruby script/generate model Operation
Then I put the contraints on each of these models (the has_many and belongs_to relationships to stick to my diagram), editing their definition files in app/models and also the database definition files, in db/migrate
Once this is done, I can run
rake db:migrate
to load all my db/migrate scripts. (in case I want to revert the changes, I can use rake db:migrate VERSION=0, or VERSION=1 if only want to reverse the migration after the script)

To fill the database with data, I add another migration script :
ruby script/generate migration add_data
I edit it to add some lines in the database and then I migrate :
rake db:migrate

Then the 3 corresponding controllers :
ruby script/generate controller login
ruby script/generate controller gestion

Implementing the login system (session based)

For this, I took example on the depot application login system, from the pragmatic programmers’ book “Agile Web Development with Rails”, but I chose to use not encrypted passwords.
I also chose to use database based sessions, so I edited the config/environment.rb file, line 31, to allow :
config.action_controller.session_store = :active_record_store
Then, I add to create a new table to hold the session data :
rake db:sessions:create

Of course, you need a little bit of code in your app/controllers/login_controller.rb, you have to implement the login and logout methods (or actions, to speak rails); you may also notice the apparition of a “before_filter” call.
The authorize filter is defined in the app/controllers/application.rb file, it will be loaded for every controller, and will check tha t a valid client is in session, or else, it will redirect to the login action, in the login controller.
Finally, you will have to define the views, both in app/views/login, they’re called login.rhtml and logout.rhtml
One last thing : you also need to modify the layout, in app/views/layouts/login.rhtml to display the flash notice before the yield (which includes the display of the view)

<%= flash[:notice] %>

Implementing the account listings and the transfer functionality

We have to code the controller, GestionController, located in gestion_controller.rb
You’ll notice that I’ve replaced the service class in Hibernate by methods inside the controller in Rails, I didn’t want to put it in the model, since the model can’t know how to transfer money.(I think we can discuss that point, but as long as the helpers are dedicated to the view…)
I’ve also used exceptions to raise errors (if the origin account balance is smaller than the transfer amount)
You also have to include the flash notice in the layout, app/views/layouts/gestion.rhtml

That’s it !
launch your rails app
ruby script/server
and try it out in your web browser at : http://localhost:3000/login/login

In a few days I’ll complete this article with the tests and fitnesse fixtures …
To continue …

First version of Bank online RoR to download

Coding Dojo Ruby

Monday, April 14th, 2008

Il y aura ce soir lundi 14 avril 2008 un Coding Dojo organisé par la communauté Ruby Parisienne.

Notre collègue Etienne sera présent et prononcera quelques mots sur l’agilité.

Coding Dojo Ruby

Tuesday, March 25th, 2008

Pourquoi ces trois mots apparemment sans lien ? Pour vous parler d’une séance dont le dojo était Valtech et l’objectif était de découvrir par la pratique le langage Ruby.
La première partie de la séance fut un…

Kata Randori

Les postes de développement Ruby ont été constitués sur le vif (l’environnement Ruby pour Windows mis en place à l’aide d’un installeur). Le moins que l’on puisse dire, c’est que les configurations hétérogènes nous ont quelque peu pimenté la tâche : MacBook, PC sous XP et Linux !
N…
lire la suite…