Archives de février 2011
Coco, code coverage pour ruby 1.9
Publié par xavier nayrac dans langage, ruby le 28/02/2011
Un matin, je part à la recherche d’un outil de couverture de test pour un nouveau projet. Celui que j’utilise habituellement, Rcov ne fonctionne pas avec la version 1.9 de Ruby, et son développement semble au point mort depuis quelques mois.
Je trouve rapidement plusieurs projets prometteurs, basé sur le fameux post de Aaron Patterson, mais aucun d’entre eux ne me satisfait totalement.
Ça y est, je suis énervé ! J’ai passé une demi-journée sur un truc qui aurait du prendre 5 minutes, et je n’ai toujours rien. Je décide donc d’écrire moi-même un outil de code coverage… On fait parfois des trucs bizarres sous le coup de l’énervement. Et une fois l’énervement dissipé, il faut se justifier, si possible avec une certaine dose de mauvaise foi :
- Ruby 1.9 prend en charge la plus grosse partie du travail, l’outil se résumera à peu près à faire du rapport
- Je pense que ça peut être fait rapidement (après tout, on parle de Ruby !)
- Enfin, argument ultime, ça fait des années que je rêve de voir un outil de code coverage baptisé coco (et oui, ça me fait rire)
En Ruby, toute déclaration renvoie une valeur
Publié par xavier nayrac dans langage, ruby le 18/02/2011
Admettons que vous écriviez un jeu. Vous voulez afficher un message, suivant que le joueur ai gagné ou perdu. Voici un script qui fait ça :
win = true
if win
message = "Félicitation, vous avez gagné !"
else
message = "Vous avez perdu..."
end
puts message
Ce genre de code est très courant. Il n’émouvra pas ceux qui ont l’habitude des langages dynamiques. Par contre, il fera peut-être tiquer les développeurs qui viennent d’un langage typé statiquement, comme Java, du fait que message
n’est pas initialisé à une valeur connue avant le passage dans le if/else
.
Quand on dit qu’en Ruby, toute déclaration renvoie une valeur, il faut lire : En Ruby, toute déclaration renvoie une valeur. Comme if
est une déclaration, il y a de quoi contenter tout le monde:
win = true
message = if win
"Félicitation, vous avez gagné !"
else
"Vous avez perdu..."
end
puts message
RSokoban 0.75.1
Publié par xavier nayrac dans divers, ruby le 14/02/2011
La dernière version est sortie. On peut maintenant jouer en mode graphique avec des niveaux d’une taille illimitée.
- Tk GUI
- niveau de taille illimitée
- scrolling automatique
- scrolling utilisateur
- la fenêtre principale suit la taille du niveau
- quelques bugs réparés
Vous trouverez les sources ici : https://github.com/lkdjiin/RSokoban
et le wiki là : https://github.com/lkdjiin/RSokoban/wiki

RSokoban 0.75.1
Documentation de la classe TkPhotoImage
Publié par xavier nayrac dans langage, ruby, tcl/tk le 11/02/2011
Pour écrire des interfaces graphiques en Ruby, on a le choix : Shoes, FxRuby, wxRuby, ruby-GNOME2, RubyQt et j’en passe… Malgré cela, le seul toolkit inclus avec la majorité des distributions de Ruby (comme pour Python) est le mal-aimé Tcl/Tk.
J’avoue une tendresse particulière pour ce toolkit « ancestral », qui permet de réaliser des prototypes simplement et rapidement. Le grand problème de Tk avec Ruby, outre son look toujours affreux sur beaucoup de machines, c’est l’absence de documentation spécifique.
Pour un projet, j’avais besoin d’utiliser la classe TkPhotoImage, qui manipule des images couleurs. Regardez donc la page de documentation du binding Ruby consacrée à cette classe : http://ruby-doc.org/stdlib/libdoc/tk/rdoc/classes/TkPhotoImage.html
Pas une seule ligne ! Rien ! Nada !
Comme j’ai déjà utilisé Tk, soit avec Tcl, soit avec Python, ce n’est pas un problème insurmontable. En lisant la source de la classe TkPhotoImage et la documentation de Tcl/Tk sur le sujet (http://www.tcl.tk/man/tcl8.4/TkCmd/photo.htm), j’ai pu m’en sortir assez rapidement. Mais j’imagine facilement que quelqu’un n’ayant jamais utilisé Tk ne retrouvera pas ces petits.
Voici donc un début de documentation de la classe TkPhotoImage.
Lire la suite »
Améliorer son code Ruby avec reek
Publié par xavier nayrac dans langage, ruby, sed le 04/02/2011
En cherchant des outils pour Ruby sur ruby-toolbox.com, je suis tombé sur reek.
Reek est un programme écrit par Kevin Rutherford dont le rôle est de détecter les code smells. Exactement le genre d’outil que je cherchais. Voici donc un aperçu de reek.