Lorsque vous cherchez à créer des graphiques, quelque soit le langage, c’est toujours un peu prise de tête. En Ruby par exemple, il existe gruff.
Par ailleurs trouver une librairie qui fera des graphiques joli est tout aussi difficile.

Du coup j’ai préféré bosser avec Google Charts. Et j’ai eu besoin d’une librairie Ruby qui me permette de générer les graphiques de manière assez simple.
Les deux ou trois que j’ai testé ne m’ont pas convenu. J’ai donc décidé de créer la mienne. Et voici donc Ruby on GChart :)
C’est un plugin rails. Mais il n’a aucune dépendance autre que net/http (pour l’enregistrement du fichier). Vous pouvez donc l’utiliser dans n’importe quel script ruby.

Son fonctionnement est assez simple. Vous instanciez la classe :
chart = GoogleChart::Chart.new({
  :type => :text,
  :height => 250,
  :width => 100,
  :encoding => :simple,
  :datas => [25, 15, 50],
  :labels => ['First', 'Second', 'Third'],
})

Puis, pour obtenir le graphique, deux possibilités :
graph.to_url
Qui retournera simplement l’url du graphique.

Ou bien :
graph.to_file /chemin/vers/le/fichier.png
Qui récupèrera l’image générée et l’enregistrera sur votre disque à l’endroit demandé.

Ainsi le code ci-dessus vous génèrera le graphique suivant :

Plusieurs paramètres sont disponibles en plus de ceux donnés ci-desus :

  • encoding : permet de préciser le type d’encodage des données (supportés : :text et :simple)
  • colors : permet de spécifier les couleurs des graphiques. Exemple : :colors => ['000000', 'FFFFFF']

Il est par ailleurs possible d’obtenir plusieurs graphiques en y passant un tableau de données.
Exemple :
chart = GoogleChart::Chart.new({
  :type => :text,
  :height => 250,
  :width => 100,
  :encoding => :simple,
  :datas => [[25, 15, 50], [15, 50, 25]],
  :labels => ['First', 'Second', 'Third'],
  :colors => ['00FF00', 'FF0000']
})

Affichera le graphique suivant :

Sympa non ? N’hésitez pas à l’utiliser et à me faire vos retour en commentaire à ce billet :)

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 ?

Il y a quelques jours de cela, Google a annoncé l’ouverture de son API pour Analytics.
Et du coup j’y ai jeté un coup d’oeil. Et plus particulièrement avec rails en utilisant le gem gdata.

Tout d’abord sachez que la chose a été faite un peu rapidement. Je ne l’ai pas pluginisée. J’ai uniquement fait un modèle permettant de faire les appels nécessaires; la chose est très peu testée et est surtout à utiliser pour découvrir cette API.

Voici donc mon modèle.
Vous devez l’initialiser avec votre login et mot de passe :
Analytic.new 'you@example.com', 'your_password'

Puis deux méthodes y sont disponibles :
find_sites, qui retourne la liste de tous les profils associés à votre compte.
find_datas, qui retourne les données demandées pour tous les sites et pour la tranche de date définie.
Par défaut, vous aurez le nombre de visiteurs et le nombre de pages vues pour la veille.

Du coup on peut également l’afficher :
Notre contrôleur, pour récupérer les données.
La vue pour les afficher.
Et le code avec colorisation syntaxique.

Encore une fois, ceci est un test fait assez rapidement. Mais qui fonctionne.
Si vous cherchez à utiliser la chose dans un contexte moins scolaire, je vous invite à jeter un oeil sur gattica, un gem créé spécifiquement pour récupérer les données de cette API.

L’utilisation en est assez simple. Et vous pouvez même l’utiliser en dehors de rails (mais uniquement en ruby, cela va de soi).
Commencez par l’installer :
gem install cannikin-gattica -s http://gems.github.com

Puis incluez le dans votre application
require 'gattica'
Vous devez avoir fait un require de rubygems avant (rails le fait automatiquement).

Pour récupérer la liste de tous vos profils :
gs = Gattica.new 'you@example.com', 'password'
accounts = gs.accounts

Et pour récupérer les visiteurs et pages vuex de la veille :
results = gs.get(
:start_date => 1.day.ago.to_date.to_s(:db),
:end_date => 1.day.ago.to_date.to_s(:db),
:metrics => ['pageviews', 'visitors']
)

Sympa non ? :)

PS : Ted a 31 ans aujourd’hui.
PPS : et moi 23.

Comme j’en ai déjà parlé récemment, Rails permets, depuis sa version 2.2, de gérer les sites multilingues.
Du coup comme j’avais envie de m’amuser, j’ai fait une mini application console qui permet de prendre un fichier yaml de langue, le traduit dans la langue de votre choix (en utilisant Google Translate) et écrit les nouvelles données dans un second fichier. Cela s’appelle Translator.

Pour l’utiliser, c’est très simple. En ayant ruby et rubygems d’installé, il vous manque encore deux gem :
gem install yaml googletranslate
Le premier permet de parser des documents YAML. Le second est une librairie permettant de faire des appels à l’API Google Translate.

Puis ouvrez une fenêtre console, rendez-vous dans le répertoire de translator et tapez :
ruby translator.rb /chemin/vers/le/fichier/originel.yml /chemin/vers/le/nouveau/fichier.yml langue
Exemple :
ruby translator.rb en.yml fr.yml fr
Traduira le document en.yml de la langue qui lui est définie vers le français en mettant le contenu dans fr.yml.

J’ai déjà mentionné Selenium dans mon article de test de code avec JQuery.

Nous allons voir aujourd’hui, en introduction à celui-ci, comment tester votre présence sur Google pour les mots clés de votre choix.
Ceci est cependant un cas d’école. Vous ne pouvez tester (simplement) votre positione exacte. Nous vérifions ici uniquement que vous êtes dans les 10 premiers. Mais il faut bien un exemple pour débuter et vous permettre ensuite de tester vous-même votre site.

Commencez par télécharger et installer Selenium IDE, qui est une extension firefox permettant de générer des tests Selenium.
Une fois celui-ci installé, rendez-vous dans le menu « Outils » du navigateur puis cliquez sur « Selenium IDE ». Une fenêtre s’ouvrira alors, vous permettant de créer votre nouveau test.

De multiples commandes sont disponibles. Ici cependant, nous désirons ouvrir google.com, puis entrer une recherche, cliquez sur le bouton et analyser le résultat.

Notre set de commandes sera donc :

Test google.com Selenium

open /
type q dmathieu
clickAndWait btnG
assertTextPresent dmathieu.com

Exécutez votre test et c’est magique. Vous voyez même le test s’exécuter en direct dans votre fenêtre active :)
Maintenant, c’est bien gentil, vous avez votre test. Mais comment l’automatiser ?

Eh bien vous avez le choix. Java, C#, Perl, PHP, Python, Ruby ?
Il n’y a qu’à choisir, installer la librairie du langage.
Puis faites Fichier > Export Test Case as … Et choisissez le langage de votre choix.

Exécutez le script généré. Et si vous avez correctement installé les librairies, votre test devrait s’exécuter.
Vous avez réalisé votre premier test frontend automatique. Vous n’avez maintenant plus qu’à adapter cela à vos tests QUnit (ou tout autre framework) pour automatiser ceux-ci.

Note : Tester votre présence sur Google de cette manière est assez peu productive.
Pour cela, je vous conseille plutôt RefStats.

Je suis revenu hier soir de Londres ou j’étais présent depuis lundi afin d’assister à la journée des développeurs Google britannique.
Je ne ferai pas de compte rendu de cette journée ici. Je l’ai déjà fait sur le blog d’O2Sources.

Mais comme pas mal d’évènements ont compliqué ce voyage, je fait un petit débriefing à ce niveau.

  • Tout d’abord, un feu a eu la mauvaise idée de se déclarer dans le tunnel sous la manche il y a une semaine, diminuant fortement le nombre de trains.
    Cependant, je ne suis arrivé « que » une heure en retard à Londres heureusement :)
  • Un hôtel difficile à trouver. On a cherché 20 bonnes minutes et les gens ne connaissaient absolument pas le nom de la rue alors qu’on était dedans.
  • Un Googler à l’entrée de la conférence qui ne comprends pas que j’ai un prénom à consonance Française et qui a mis 5 bonnes minutes à trouver mon badge (alors que celui de Thanh, qui n’a finalement pas pu venir était juste sous mes yeux).
  • Des métros Londoniens qui s’arrêtent de fonctionner très tôt le soir. Et qui sont particulièrement cher en prime. J’en ai eu pour plus de 20£ de métro en trois jours.
  • Un hôtel de qualité plus que moyenne qui ment sur son site internet en annoncant du wifi gratuit alors que ce n’est pas le cas.
  • Un hôtel de qualité encore plus moyenne qui n’a pas d’eau chaude mercredi matin à 9h.
  • Un eurostar qui pars au retour avec une heure de retard, me faisant louper ma correspondance à Lille et penser, au début, qu’il n’y aurait plus de trains pour Lyon le jour même.
    Heureusement il y en avait encore un et je suis arrivé à bon port, bien qu’avec 2h30 de retard.

Je tiens tout de même à préciser que ce voyage a été génial. La journée des développeurs était fantastique, encore meilleure que celle de Paris de l’an dernier.
J’en ai profité pour voir des amis présents à Londres. Ali et Andy.
Et bien sur, pendant que j’attendais mon train à Lille, TOMHTML a fait l’effort (surhumain) de sortir de son pc et de venir boire un verre avec moi :)

Vous pouvez voir par ailleurs :
Mon compte rendu.
Mes photos de la conférence et de Londres en général.

Note : comme tout le monde, j’ai fait une présentation de chrome. Elle est ici.

Ouais chrome c’est sympa. Super rapide, super sobre et tout. Mais j’ai une question : le bouton « page d’accueil » il est ou ?

P.S. : je ne suis absolument pas d’accord avec Frédéric et Tristan. Chrome ne sortira jamais de la sphère technogeek. Il va peut-être (probablement (ou pas)) piquer des parts de marché à Opéra, Safari et à moindre mesure Firefox. Mais il n’ira pas dans les plates-bandes de IE tant que celui-ci sera installé par défaut sur les machines Windows.
Après, Google peut toujours nous réserver des surprises.
Mais ça risque de leur couter cher de racheter Microsoft ! :mrgreen:

Edit : il faut aller dans les options (bouton tout à droite sur la barre de navigation) et la, il y a une case à cocher « afficher le bouton accueil dans la barre d’outils ».
Lorsqu’il est coché, un bouton « page d’accueil » s’affiche alors :)

Deux questions supplémentaires cependant : y’a aucun système d’extensions ?
Et comment je le passe en Anglais ?

Autre ressentiment personnel (au cas ou un Googler passerait ici) : dommage qu’on puisse pas changer la langue du correcteur orthographique directement dans la page. Ca serait bien pratique parce que je ne dois pas être le seul à écrire autant de messages en français qu’en anglais.

De multiples hébergeurs (notemment OVH en dédié) proposent à leurs utilisateurs de configurer plusieurs adresses ip sur leur machine.
Cela peut permettre par exemple de configurer, sur la machine et sur le port 80, deux serveurs web.
Un Apache et un Lighttpd.
Le second transmettant les fichiers statiques beaucoup plus rapidement et en consommant moins de ressources machines, c’est une bonne méthode d’optimisation de vos ressources système.

Aucun problème pour les connexions entrantes donc.
J’ai cependant eu envie de me confronter à autre chose. Les connexions sortantes en PHP avec Curl.
Comment sélectionner laquelle de mes deux ips je veux que mon script utilise pour faire appel à une page externe ?

Ne sachant pas trop ou chercher, je me suis dit au début « il doit y avoir une fonction native, ou un truc dans la configuration ». Queue d’ale.

Cependant après quelques recherches, j’ai trouvé la solution, qui était sous mon nez !
Pour ceux qui ne savent pas comment fonctionne curl, celui-ci possède une fonction curl_setopt qui permet de paramétrer votre appel distant.
Ainsi vous pouvez ajouter des paramètres en POST, modifier le referer, ajouter des cookies, ajouter une identification http ou ssl etc. Les possibilitées sont illimitées.

Et c’est la que l’une des options fait son apparition. CURLOPT_INTERFACE, qui prends comme paramètre … une IP ou un nom d’hôte.
Et le script utilisera l’ip définie.

Ainsi je change mon ip en faisant :
curl_setopt($ch, CURLOPT_INTERFACE, $myIp);

Notez cependant que vous ne pouvez bien evidemment pas utiliser n’importe quelle ip. Seules celles configurées sur votre carte réseau le sont. Cela serait trop facile.
Vous pouvez cependant tester cela même si vous n’avez qu’une seule ip sur votre machine. Faites appel à une page locale et utilisez votre ip distante ainsi que 127.0.0.1 :-)

Je n’ai donc ensuite eu plus qu’a récupérer aléatoirement l’une ou l’autre de mes ip et mes appels externes se font à 50% sur une de mes ip et à 50% sur l’autre.
Je viens de diviser par deux les chances que l’ip de mon serveur ne se fasse bannir par Google avec les appels faits par RefStats.

Cela faisait très longtemps que je n’avais pas parlé de référencement (et pour cause, je n’ai pas grand chose à y dire).
Matt Cutts annoncait il y a quelques jours un export du PageRank.
Après quelques jours de mouvement au niveau du nombre de résultats de la commande link:, celle-ci semble s’être stabilisée.

J’ai profité de cette occasion pour, pour la première fois, proposer une mini analyse de cet évènement avec les données récoltées par RefStats.
Ainsi, j’ai mis en ligne un graphique recensant le cumul du nombre de résultats pour la commande link: de chacun des sites indexés dans l’outil.

L’analyse de ce graphique me semble assez simple pour chacun. Google est devenu plus exigeant pour lister un lien dans la commande link.
Si on considère que les liens listés ici sont également ceux qu’il considère les plus pertinents (ce qui serait logique. Sinon à quoi bon cette commande ?), on peut également considérer que de gros changements dans la considération d’un lien comme pertinent viennent d’avoir lieu.

Après au niveau des positionnements, je ne constate de mon côté pas trop de changements. Et vous ?

J’étais présent l’an passé à la journée des développeurs Google à Paris.
Et lorsque j’ai appris qu’elle se reproduirait cette année et que Thanh voulait y aller, je me suis dit « bingo ! ».

Cependant nous avons décidé de changer un peu puisque nous n’irons pas à Paris mais à Londres.
En effet les inscriptions pour le Google Dday 2008 à Paris, Munich, Madrid et Londres sont ouvertes.

C’est donc à Londres que je nous nous rendrons le 16 septembre.

 
Fork me on GitHub