Archives de février 2011

Coco, code coverage pour ruby 1.9

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)

Lire la suite »

Publicités

, ,

Poster un commentaire

En Ruby, toute déclaration renvoie une valeur

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

,

Poster un commentaire

RSokoban 0.75.1

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

, , ,

Poster un commentaire

Documentation de la classe TkPhotoImage

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 »

, ,

Poster un commentaire

Améliorer son code Ruby avec reek

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.

Lire la suite »

, ,

Poster un commentaire