beanstalkd première approche
beanstalkd est un serveur de file d’attente en C développé pour une application Facebook. Il existe un client Ruby mais la documentation est très succincte. Il existe bien un exemple d’usage mais ne répond pas vraiment aux questions, telles que comment obtenir un équivalent des namespaces de manière à ce que plusieurs clients puissent se connecter au serveur tout en écoutant chacun sur leur(s) file(s) et comment savoir que tel message vient de telle file. La documentation du protocole m’a permis d’y répondre.
beanstalk = Beanstalk::Pool.new(['localhost:11300'])
loop do
job = beanstalk.reserve
puts job.body # prints "hello"
job.delete
end
Le protocole de Beanstalkd parle de tube. Ces tubes correspondent à des files d’attentes. Dans cet exemple de base le client écoute par défaut sur le tube “default”. Si l’on souhaite spécifier le tube à écouter ou bien ajouter un tube il suffit de le préciser :
beanstalk.watch('montube')
Ainsi le client écoutera sur les tubes “default” et “montube”.
beanstalk.ignore('default')
Supprime l’écoute sur le tube “default”. Attention un client doit au moins écouter un tube. L’ignore doit donc être effectué après le watch.
Si l’on souhaite qu’un client puisse écouter sur plusieurs tubes, il y a de fortes chances d’avoir besoin de savoir de quel tube provient un message afin d’effectuer les bons traitements :
job.stats['tube']
Indique de quel tube provient le message reçu. Un exemple complet :
require 'rubygems'
require 'beanstalk-client'
beanstalk = Beanstalk::Pool.new(['127.0.0.1:11300'])
beanstalk.watch('foo')
beanstalk.watch('bar')
beanstalk.ignore('default')
loop do
job = beanstalk.reserve
job_hash = job.ybody
case job.stats['tube']
when "foo"
puts "from foo's tube : #{job_hash[:data]}"
when "bar"
puts "from bar's tube : #{job_hash[:data]}"
end
job.delete
end
Depuis un client qui souhaite empiler un message il suffit de préciser quel tube l’on vise, sinon cela sera “default” :
beanstalk.use('foo')
Exemple :
require 'rubygems'
require 'beanstalk-client'
beanstalk = Beanstalk::Pool.new(['127.0.0.1:11300'])
beanstalk.use('foo')
beanstalk.yput(:data => "good")
beanstalk.use('bar')
beanstalk.yput(:data => "bye")
Résultats :
from foo's tube : good
from bar's tube : bye
On a ainsi un usage plus intéressant que les exemples n’utilisant qu’un seul client sur un seul tube. Beanstalkd possède un grand nombre de commandes mais il est dommage qu’il ne fournisse pas pour l’instant d’option de persistance sur le disque. Pour cela sparrow peut faire l’affaire et même s’il est en Ruby, l’usage d’eventmachine peut sans doute lui faire tenir une charge raisonnable. Cependant Beanstalkd possède une communauté très active et des bibliothèques vers 4 langages (pas PHP :P mais cela ne saurait tarder).
Ruby & GTK : article dans LinuxMag
LinuxMag vient de publier sur UnixGarden mon article sur ruby/GTK+ paru dans LinuxMag 99 : Ruby & GTK+ : le développement d’applications de bureau à votre portée.
Je le compléterai, notamment la partie sur GStreamer, quand j’aurais un peu de temps.
De la répartition de charge en Ruby on Rails
Je viens de publier un article en 2 parties sur le blog d’AF83 :
De la répartition de charge en Ruby on Rails 1/2
De la répartition de charge en Ruby on Rails 2/2
C’est plutôt technique, et présente une solution parmis tant d’autres dans ce domaine très particulier.
focus Ferret
Le focus d’O’Reilly consacré à cette bibliothèque d’indexation de document vient de sortir avec un peu de retard : Focus Ferret
Voir mon précédent billet : ferret
Ruby/GTK+ dans Linux Magazine France
Mon article sur Ruby/GTK+ est disponible dans le LinuxMag 99 sorti en kiosque depuis peu.
Il est très orienté débutant, et déjà un certain nombre de personnes m’ont fait savoir qu’elles seraient intéressées par un autre plus avancé. A voir si je trouve le temps, il y a beaucoup à dire notamment sur les Treeview et les signaux.
Pour info cet article devrait être disponible sur le site de RubyFrance.org d’ici 4 mois en licence Creative Commons.
HS Linux Mag sur Ruby 1
Ce n’est plus un secret puisque le Hors Série de MISC d’octobre/novembre fait la pub pour le HS Linux mag n°33 : “Découvrez RUBY LE langage de programmation interprété orienté objet”.
Je vous conseille fortement cet HS, déjà rien que par son auteur, Greg un expert reconnu ayant à son actif un grand nombre de bindings.
Il est tellement plein que mon article sur Ruby/GTK+ sera finalement dans le prochain LinuxMag qui sortira en même temps.
A la fin du mois foncez chez votre libraire ;)
D’ailleurs voici la couverture !

RubyFrance a besoin de vous ! 3
Vous lisez ce blog car vous êtes peut être fan du langage Ruby. Actuellement l’association RubyFrance lance son AG annuelle. Cela veut dire renouvellement du bureau et du CA.
Pour tout ceux qui ont participé de prêt ou de loin à une association, ils connaissent les difficultés pour faire avancer les choses. Car il faut un peu de temps souvent pris sur ses loisirs. Cependant lorsqu’on fait parti du Conseil d’Administration le minimum demandé est de voter une fois par an à l’Assemblée Générale. Rien d’impossible :) Pour cela il suffit d’être membre de l’association.
Malgré un extraordinaire développement de Ruby on Rails parmi les entreprises sur Internet, le langage Ruby reste encore trop peu connu en France. Il y a beaucoup de choses à faire pour le promouvoir, notamment participer aux diverses manifestions du Libre et des professionnels, au niveau national et local. Contribuer aux développement de nouveaux outils et à ceux existant. C’est le but de notre association.
Cependant celle-ci manque encore trop de moyens, financier et humains.
Ruby n’est pas que le fameux framework web Ruby on Rails. C’est aussi :
- un framework dédié à la sécurité : Metasploit
- un framework dédié à l’administration système : Puppet
- un framework pour Asterisk : RAGI
- des bindings pour développer des applications desktop :
- Ruby-GNOME2
- QtRuby
- FXRuby
- Anvil (WxWidgets)
- Une multitude de bibliothèques de base : SGBD, SNMP, HTTP, FTP, SSH/SSL, SOAP, XML-RPC,...
- des frameworks pour les jeux vidéos :
- Une implémentation du protocole XMPP utilisé par Jabber : Jabber::Simple version simplifiée de XMPP4R
- Un serveur de Message oriented Middleware : Stomp
- Un dépôt d’archives comparable au CPAN de Perl : Ruby Application Archive
- Un dépôt de paquet indépendant du gestionnaire de paquet de l’OS : RubyGems
- Et bien sûr un excellent langage script complètement objet et très lisible.
Pour tout cela Ruby mérite d’être plus connu en France et en Francophonie. N’hésitez pas à adhérer, qui sait peut-être que cela poussera un jour votre entreprise à utiliser Ruby. Quant à celles qui l’utilisent déjà, nous acceptons volontiers votre adhésion.
ferret
J’ai relu il y a plusieurs semaines pour O’Reilly la traduction du shortcuts sur ferret. Ferret est une implémentation en Ruby/C de Lucene un moteur libre d’indexation de document en Java.
Ferret est vraiment un projet très intéressant car il permet d’indexer toutes types de documents provenant d’une base de données ou de fichiers. Il existe même un plugin pour Ruby on Rails : acts_as_ferret. Enfin Ferret propose un DSL très poussé permettant d’interroger simplement l’index via une multitude de critères.
La traduction de Jérémie Bordier est un modèle du genre et dépasse même la version originale. J’espère que la version française sortira ce mois-ci et je conseille à toutes personnes souhaitant indexer un volume important de documents de se le procurer.
RMLL 2
Je serai aux RMLL le jeudi 12 et vendredi 13 juillet à Amiens. Vous pouvez consulter les confs développeurs où la matinée du vendredi est dédiée à Ruby.
mise à jour : plus d’information sur notre site web : Rencontre Mondiale du Logiciel Libre.
Billets précédents: 1 2



