Un shell en ruby ?
Posted by JB on 25/02/10 at 19:00
Dans 4 jours, je vais me faire massacrer tenter un examen interne au boulot, censé valider mes aptitudes de “programmeur système”. Cet examen comporte une épreuve de développement (sur papier, faut pas déconner), que la plupart des gens vont passer en Java ou C/C++. Mais très peu pour moi, j’attaque en Ruby !
Je lis donc des bouquins, qui présentent un squelette de shell en C. Et en Ruby ? Eh bien en fait, contre toute attente, c’est super simple, voici un squelette fonctionnel :
#!/usr/bin/ruby require 'readline' require 'open3' class Rshell def initialize loop do cmd = Readline.readline("$ ") exit if cmd.nil? or cmd == "exit" Open3.popen3(cmd) do |stdin,stdout,stderr| STDOUT.print stdout.read STDERR.print stderr.read end end end end Rshell.new
Il ne faut pas s’attendre à des miracles, aucun builtin, pas de gestion du PATH, mais on peut passer des commandes, différencier éventuellement STDOUT/STDERR pour le futur.
Ca me donne l’occasion de parler d’un vrai shell en Ruby, utilisé chez Heroku, Rush. J’en reparlerai dès que j’aurai testé ça au quotidien au boulot :)
Redmine Plugins #1 : Ajouter une option vrai/faux à un plugin Redmine
Posted by JB on 20/02/10 at 15:42
Je travaille en ce moment sur des plugins Engines pour Redmine. Ces plugins me serviront au boulot, et permettront de laisser une situation un peu plus propre que les bidouillages actuels à mon départ. En particulier en avançant sur le plugin de gestion d’un datacenter (site et dépôt github), j’apprends énormément de choses sur le fonctionnement de Rails/Redmine/Engines, et j’entame donc une série d’articles sur ces découvertes. Ces articles supposent d’avoir déjà lu le tutoriel du site, et je repartirai souvent de cet exemple.
Cela donnera certainement lieu à des entrées dans le wiki redmine.org ou des suggestions dans les tickets. Et puis ça m’astreindra à publier un peu, comme le fait Eric dans ses Daily Refactor du core Redmine depuis 3 semaines et pour les mêmes raisons, et aussi suite à cet article de Damien.
Allons-y.
init.rb : on y ajoute la clé et la valeur par défaut du paramètre qu’on veut introduire, par exemple ici “boolean_parameter”. On précise également un partial qui permettra de gérer les paramètres du plugin :
settings :default => { :boolean_parameter => true }, :partial => 'settings/my_plugin'
app/views/settings/_my_plugin.html.erb : on place ici un formulaire pour gérer nos paramètres. Il sera automatiquement accessible dans la partie Administration > Plugins > lien “Configurer” sur votre plugin. “plugin_my_plugin” est à remplacer dans ce qui suit par “plugin_[nom de votre plugin]” :
<p> <label>Paramètre booléen</label> <%= check_box_tag 'settings[boolean_parameter]', 1, Setting[:plugin_my_plugin][:boolean_parameter] %> </p>
Et voilà ! Ensuite, n’importe où dans votre plugin, vous pourrez utiliser :
Setting[:plugin_my_plugin][:boolean_parameter]
En réalité en mettant “1” comme deuxième paramètre, vous ne stockerez pas un booléen, mais “1” (coché) ou “nil” (décoché). Si vous souhaitez obtenir “true” ou “false” absolument, vous pouvez utiliser :
!!Setting[:plugin_my_plugin][:boolean_parameter]
A voir en vrai ici
Hello CouchDB
Posted by JB on 08/02/10 at 18:47
On me titille de part et d’autre : Nicolas, Linux Mag (deux fois en 6 mois!), Damien et Damien, et des discussions par-ci par-là.
Donc c’est parti, j’essaie de me faire une appli sur CouchDB. Avec plein d’arrière pensées :
- mieux maitriser l’outil et les concepts sous-jacents pour mieux comprendre (et pourquoi pas contribuer à) Chef
- comparer ça à MongoDB (voir le railscast) ; si je bute trop, j’essaierai peut-être Mongo
- en finir avec le gouffre conceptuel objet/relationnel ; j’espère que ça sera concluant de ce côté :)
Je me fais une petite base de connaissances parce que le besoin commence à être vraiment trop criant. J’ai des tonnes d’items non-lus et/ou à garder dans mon reader RSS, et j’ai vraiment besoin d’un outil pour organiser ça sous forme de tags (et si possible garder des copies locales des articles).
Pour simplifier le tout, je commence à partir sur du Rails 3 :
echo 'gem "couchrest"' >> Gemfile bundle install
Des nouvelles dans les prochaines semaines, le projet sera comme d’hab’ sur github
Rails 3.0 beta is out !
Posted by JB on 07/02/10 at 20:22
Here we go :
gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n gem install rails --pre
Let’s give it a try ;)