When you’re looking to create charts in Ruby, you might spend quite some time searching a cool tool.
I’ve been, for example, falling on gruff this morning.

But the graphs created with that kind of tools are always dependant of some libraries, and many times, they don’t look very nice.
So I’ve been working on something new, using something not new :mrgreen:
You’ve probably already heard of Google Charts, which allows you to create some cute charts.

Now you can use it with Ruby and Rails with my new plugin, Ruby on GChart.
You provide your datas, the type of graph you want and it gives you the URL to see the graph :)
You can even save this graph to a file and use it locally.

Here’s an example of what you can do :

GoogleChart::Chart.new({
    :type => :line,
    :height => 200,
    :width => 500,
    :encoding => :simple,
    :datas => [70, 25, 50, 35, 150],
    :labels => ['First Label', 'Second Label']
}).to_url

It supports simple and text encoding (with the parameters :simple and :text). No extended encoding for now.

However it supports muliple graphs in multi levels array.
Example :

:datas => [[5, 10, 15], [10, 15, 5]]

You can put as mush graphs as you wish of course.

So what do you think of it ?

La librairie ImageScience permet de créer des miniatures d’images très simplement.

Exemple :
ImageScience.with_image(@image) do |img|
img.thumbnail(100) do |thumb|
thumb.save @thumb_image
end

Ok, jusque la, c’est super simple. On génère notre miniature :-)
C’est avant que c’est un tantinet plus compliqué (ou pas), lorsque l’on désire installer ImageScience.
Ici, on ne prends pour exemple que le cas d’une plateforme Debian.

En considérant que Ruby, Rails et gem sont déjà installés. Si ce n’est pas le cas, je vous invite à regarder ici.

Installons donc ImageScience.
gem install image_science

Cool et simple non ?
Cependant si vous installez cela comme ça, vous n’irez pas très loin.
Vous allez en effet vous confronter à une erreur similaire à celle-ci :

CompilationError (error executing « gcc -shared -fPIC -Wall -g -fno-
strict-aliasing -O2 -fPIC -I /usr/lib/ruby/1.8/i486-linux -I /usr/
include -L/usr/lib -o \ »/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.so\ » \ »/nonexistent/.ruby_inline/
Inline_ImageScience_aa58.c\ » -lfreeimage -lstdc++ « : 256
Renamed /nonexistent/.ruby_inline/Inline_ImageScience_aa58.c to /
nonexistent/.ruby_inline/Inline_ImageScience_aa58.c.bad):
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:449:in
`build’
/usr/lib/ruby/gems/1.8/gems/RubyInline-3.7.0/lib/inline.rb:654:in
`inline’
/usr/lib/ruby/gems/1.8/gems/image_science-1.1.3/lib/
image_science.rb:84

En effet, ImageScience requiert l’installation de FreeImage, une librairie en C qui permet la manipulation d’images.

Son installation (sous Debian) est également très simple (le problème pour moi a surtout été de trouver que le problème venait de FreeImage ;-) ).
wget http://kent.dl.sourceforge.net/sourceforge/freeimage/FreeImage3100.zip
unzip FreeImage3100.zip
cd FreeImage
make
make install

Zou ! ImageScience et FreeImage sont installés, tout doit fonctionner correctement. Vous générez vos miniature.

Il peut arriver cependant que vous ayez une erreur du genre de celle-ci :

Errno::EACCES (Permission denied – /nonexistent):

En effet, afin d’utiliser FreeImage, ImageScience crée des documents C qu’il compile en live. Pour cela il doit avoir accès à un répertoire, qui est défini ainsi :
env = ENV['INLINEDIR'] || ENV['HOME']

INLINEDIR doit être configuré dans le fichier environnment.rb (répertoire config).
J’ai par exemple mis
ENV['INLINEDIR'] = File.join(File.dirname(__FILE__),'../tmp')
Ainsi mon inlinedir est situé dans le répertoire tmp de mon application.

Il faut ensuite donner les droits à ce répertoire à l’utilisateur avec lequel l’application est lancée.
Si vous êtes dans un environnement Apache/Passenger, vous pouvez personnaliser cet utilisateur en ajoutant, dans votre configuration de apache :
PassengerDefaultUser www-data
Ou www-data est l’utilisateur evidemment.

Il y a un truc super bien avec ruby, c’est les gem !
En gros, le fonctionnement est similaire à aptitude de debian. Diverses fonctions (install, update, uninstall) permettent d’installer de multiples paquets permettant d’installer les diverses extensions de ruby et rails.
Ces extensions sont multiples. Du support de divers serveurs de bases de données à la récupération des données exif d’une photo.

En mode console, c’est très simple ! Pour installer un gem, il suffit de faire :

gem install nom-du-gem

Mais dans un environnement de développement avec Aptana/Radrails, installer un gem de cette manière ne l’installera pas dans l’application. Il faut donc « bidouiller » un peu.
Allez donc dans le menu « Window » > « Show view » > « Other ». La fenêtre suivante s’affiche

Sélectionnez le menu « Ruby » puis « RubyGems » (comme c’est fait ici quoi). Puis valider.
La, un nouvel onglet va s’ouvrir normalement en bas de votre fenêtre aptana. Mais cela peut dépendre de votre configuration.

Ce nouvel onglet vous fournit la liste de tous les gems déjà installés.
A droite sont situés de multiples boutons permettant de recharger la liste, d’en installer de nouveaux, d’en supprimer ou de mettre à jour tous vos gems.

Cliquez sur celui le plus à droite (le « + » vert) pour en installer un autre. La, la liste s’affiche. Il ne vous reste plus qu’à choisir celui qui vous ferait plaisir, à cliquer sur « OK » et attendre un petit peu pour que l’installation se fasse.
Aptana peut parfois être long pour lancer ce genre de processus. Il me faut attendre environ 20 à 30 secondes avant que celle-ci ne commence.
Par ailleurs une fois que l’installation est faite, il semble qu’il faille redémarrer le serveur pour que le nouveau gem soit pris en compte.

Après avoir installé tous les gem qui nous intéressent, le prochain article concernera l’utilisation du gem « exifr », permettant de récupérer les informations exif d’une image locale.

 
Fork me on GitHub