Publication de la gem wrtranslate

wrtranslate est une gem permettant de traduire des mots ou expression en utilisant wordreference.com. La gem s'appelle wrtranslate à cause d'un conflit de nom (translate existe déjà sous forme de gem) mais le projet et l'éxécutable s'appellent translate. Le projet et la gem sont hébergés chez rubyforge, ainsi que la rdoc. Le code source est lui... Lire Publication de la gem wrtranslate

dev.shingara.fr mis à jour avec Redmine 0.8

Avec la sortie de Redmine 0.8 hier, j'ai mis à jour ma plateforme de développement sous cette nouvelle version. Pour ceux qui veulent des exemples, voici le fichier capistrano que j'utilise pour ce déploiement. Il est prévu pour récupérer les sources à partir de la branche 0.8 stable de redmine.

require 'mongrel_cluster/recipes'

set :application, "redmine"
set :repository,  "http://redmine.rubyforge.org/svn/branches/0.8-stable"
set :domain, "shingara.fr"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/var/rails/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
set :scm, :subversion

set :runner, "rails"
set :user, "rails"
set :use_sudo, false
set :mongrel_conf, "#{current_path}/config/mongrel_cluster.yml"

role :app, domain
role :web, domain
role :db,  domain, :primary => true

task :update_config, :roles => [:app] do
  run "cp -Rf #{shared_path}/config/* #{release_path}/config/"
end

after "deploy:update_code", :update_config

Quelque nouvelles dans Rails Edge : Render(:file => ‘/path/to/file’) devient render(’/path/to/file’)

Comme tout nos efforts sont désormais à consacrer à Rails. Voici la dernière nouveauté que je viens de trouver dans les commits. Hier le render a été simplifié. En effet, quand vous souhaitez faire un render de fichier il fallait faire : render (:file => '/path/to/file'). Désormais avec ce nouveau commit, un simple render('/path/to/file') suffira pour rendre le fichier donné.

Par contre attention, pour que ce path sont considéré valide, il faut absolument le / au début. Mais heureusement ce code render(Rails.root('/public/404.html')) fonctionnera, grâce à un précédent commit

Le noël de la fusion entre Merb et Rails. Qu’en penser ?

Hier, 23 décembre la core Team de Merb et celle de Rails ont annoncé conjointement leur prévision de fusion pour Rails 3. En effet, Merb 2 sera Rails 3. Personnellement, j'ai été abasourdi par cette annonce. Immédiatement, je l'ai pris comme une mauvaise chose. J'ai tout de suite pensé que ce n'était pas forcément une bonne chose pour les Frameworks web en Ruby.

En effet, mon premier argument dans le fait de la dualité Rails/Merb était la concurrence. Je prenais comme exemple la guerre des navigateurs qui durant la période IE vs Netscape a apporté le Javascript. Puis une fois cette guerre fini, il y a eu la stagnation des navigateurs et de IE 6 qui avait son monopole. Heureusement, Firefox/Safari/Opera sont arrivé progressivement, pour permettre de bonne amélioration dans les navigateurs et de meilleurs performances. C'est ainsi que Internet Explorer a eu besoin de revenir au source et reprendre son développement qui va maintenant amener IE 8. Sans cette concurrence, nous aurions surement eu IE 6 encore maintenant (même si il reste encore beaucoup de monde qui l'utilise). De même, la « guerre » entre Mephisto et Typo est une bonne chose et nous force a rester dans la course. Éviter l'attentisme.

Selon moi, les dernières grandes améliorations de performances de Rails sont issue de cette « guerre » entre Merb et Rails, que ça soit Rails thread safe ou l'utilisation de Rack dans Rails. Mais Rails a aussi été obligé d'innover encore plus pour ne pas se faire doubler par Merb avec son Rails Metal par exemple ou l'incorporation de l'i18N

Désormais avec cette incorporation de Merb dans Rails, Rails va encore plus progresser durant l'année à venir, c'est évident. Pour cela, cette annonce est vraiment une bonne nouvelle. Mais ne va-t-elle pas entrainer aussi une stagnation après toutes ces améliorations et cette évolution de Rails. Rails n'ayant plus de concurrent « sérieux » en ruby ne va-t-il pas se reposer sur ses lauriers ?

C'est la que finalement, la communauté aura son rôle à jouer. C'est dans cette seconde partie de l'incorporation de Merb qui est tout se jouera pour l'avenir de Rails. L'idée de constituer une vrai équipe d'Evangéliste avec l'incorporation des Evangéliste de Merb comme Matt Aimonetti. Ainsi Matt explique dans son post au sujet de l'incorporation des idées de Merb dans Rails, qu'une des bonnes attitudes de Merb était cette écoute constante de la communauté. Cette envie de faire consensus. De toute manière, la multiplication des plugins fait le reste. Si telle ou telle personne préfère tel ou tel comportement qui semble bizarre au plus grand nombre, il lui suffit de faire son plugin et il aura son comportement. Pour lui et les quelques personnes qui pensent comme lui.

C'est ainsi que DHH explique dans son blog personnel, que Rails n'est pas DHH. Rails devient vraiment un consensus de rubyiste. La cible n'est pas d'avoir le meilleur framework web en Ruby. Mais d'avoir le meilleur framework en informatique. Combattre ensemble le Java, le .NET ou le PHP. Tous les développeurs ruby en sont persuadé, c'est évident. Mais tous les développeurs web ne sont pas rubyiste.

Pour ma part, j'ai étudier dernièrement Merb et j'en ai été très content. J'avais même commencer des projets open source en Merb. Après une longue réflexion j'ai décidé de continuer d'utiliser Merb sur ces projets qui était assez jeunes aurait très bien pu migrer facilement en Rails. Par contre, j'utiliserais DataMapper comme ORM et essayerais de contribuer à ce merveilleux projet. Qui lui finalement reçoit une grosse pub car il sera possible de l'utiliser dans Rails 3.

Pour les curieux, voici les logs de la soirée IRC sur le chan #merb où l'activité a été très intense après l'annonce sur merge.

Finalement, il ne faut avoir qu'un seul mot d'ordre, allez Rails 3 et Joyeux Noël.

Envoyer un email dans un model DataMapper

Avec Merb-mailer, merb fourni un système d'envoi d'email. Par contre merb étant un framework web se voulant ORM agnostique, merb-mailer est considéré comme un controller et non comme un model. De ce fait l'utilisation de la méthode send_mail n'est disponible que dans les controllers. Mais alors comment utiliser la méthode send_mail dans son model ? C'est très simple. Là encore merb utilise un système entièrement ruby ce qui facilite le méchanisme

Après une courte recherche dans le code de merb-mailer, j'ai pu constater que que la commande send_mail était dans un mixin. l'inclusion de ce mixin suffit donc à avoir la commande pour l'utiliser.

class Member
  include DataMapper::Resource
  include Merb::MailerMixin

  property :id, Serial
  property :name, String

  def register
    // some code
    send_mail (UserMailer, :register, {
        :from => "no-reply@example.com",
        :to => person.email,
        :subject => "Please activate your account" 
    }
  end

100 personnages célèbres se sont cachés dans ce tableau…

À toi de les retrouver. Note: Clique sur l'image pour l'agrandir. PS: Éh non, il n'y a pas la solution.... Lire 100 personnages célèbres se sont cachés dans ce tableau...

Utiliser before à la place de before_filter dans Bivouac

Dans un article précédent, je vous avais montré comment utiliser before_filter dans Bivouac. before_filter ayant été remplacé, dans la dernière version de Bivouac, par la solution proposée par Magnus Holm, voici comment modifier cet exemple pour qu’il fonctionne en version 0.4.0.

La seule modification concerne le controller. En effet, vous pouvez supprimer tout ce qui à trait à la gestion du filtre, soit la classe AdminCheckLogin et l’appel à before_filter :

module TestFilter::Controllers
  # …

  class AdminCheckLogin
    def self.filter( state )
      if state[:user].blank?
        return AdminLogin
      else
        return nil
      end
    end
  end
end

before_filter AdminCheckLogin, :only => [AdminHome]

A la place de tout cela, vous devez ajouter, ou vous voulez, le code suivant dans votre projet :

module TestFilter
  before :AdminHome do
    if @state[:user].blank?
      redirect R(Controllers::AdminLogin)
    end
  end
end  

Comme vous pouvez le voir, l’appel à before se fait dans le module TestFilter et non dans le controller directement. Il faut donc faire attention lorsque vous faire la redirection !

Bivouac 0.4.0

La version 0.4.0 de Bivouac vient d’être mise en ligne.

Rappelons, pour les nouveaux, que Bivouac est un générateur “rails like” pour Camping.

Au programme de cette nouvelle version :

  • Support de Camping >= 1.9 ! A ce sujet je vous conseille d’installer la version de Magnus Holm.
  • Correction d’un bug dans options_for_javascript
  • Dans environment.rb, address a été remplacé par host
  • Camping n’ayant plus de dépendance avec markaby, cette dépendance a été ajoutée dans bivouac
  • Ajout de l’option :ieOnly à javascript_include_tag
  • postamble.rb est deprecated
  • script/plugin et la classe Bivouac::Plugin ont été modifiés afin de supporter la nouvelle tache Rakefile plugin:update
  • Le controller Not Found a été mis à jour
  • Remplacement de before_filter par la solution de Magnus Holm
  • Le générateur view fait un retour en force !
  • Ajout du générateur helper
  • Upgrade de Script.aculo.us en version 1.8.2

Différence entre les accolades {} et le do end en ruby

J'ai souvent lu à droite et à gauche que le choix entre les accolades et le do end était purement estéthique en ruby et que globalement un code d'une ligne se mettait entre accolades, quand un code de plusieurs se mettait entre do end. Et bien, c'est faux, il y a une différence. Prenons l'exemple d'un accumulateur qui réalise la somme des... Lire Différence entre les accolades {} et le do end en ruby

Nab Has Shoes 0.3.1

Pour fêter la sortie de Nab Has Shoes 0.3.1, je viens d’ouvrir le projet sur rubyforge qui vient donc compléter la page sur The ShoeBox.

Have fun !