nouveau logo pour Ruby

Publié par Yannick Francois Jeu 01 nov 2007 14:21:00 GMT

Début septembre, l’association Ruby, chargé du développement du langage de programmation du même nom (wikipedia/ruby) a lancé un concour pour la création d’un nouveau logo.

2 mois après, les resultats tombent. C’est Matz qui tranché. Voici le resultat:

Bon. Personnellement, je ne suis pas fan.

J’avais une petite préférence pour celui d’Ale Muñoz:

Tant pis. En fait je m’attendais à plus de changement. Finalement, on met le ruby dans un cadre, et voilà. C’est dommage.

Cela n’enlève rien à Ruby ! :)

SQL Inject 1

Publié par Yannick Francois Mer 10 oct 2007 11:56:00 GMT

Un très bon strip d’XKCD aujourd’hui. On y vois sûrement quelque chose de vécu, qui deviendra deplus en plus courant si l’éducation ne fait pas attention au développement de ces outils :-)

Ruby Logo 2

Publié par Yannick Francois Dim 02 sept 2007 09:16:00 GMT

Ruby Visual Identity Team () did great works to improve the online presence of Ruby, and as a result, the Ruby logo kit () is avaiable now. But it’s not well known as a logo that represent the programming language Ruby itself. We need an official Ruby logo to promote Ruby, so we open a contest to select it.

La news officiel sur le site de ruby-lang

Ruby se cherche un logo représentant plus le langage de programmation que un des cailloux que beaucoup de femme adore avoir au doigt (ou au cou). Et comme beaucoup de langage libre, le concour Ruby Logo Contest est ouvert à tous ! Vous avez jusqu’au 1er octobre pour rendre vos copie. Et si je comprend bien:

We will present a winner plate and 100,000 yen to the winner.

100 000 yen pour le vainqueur. (Ca fait combien d’euro ça ?)

Je crois que maintenant ce caillou aura pour moi une signification particulière quoiqu’il arrive

Ruby: new vs initialize

Publié par Yannick Francois Jeu 09 août 2007 08:46:00 GMT

Pour certain c’est une évidence, mais un vieux mail sur la liste de diffusion de ruby_core ma donné envie de me pencher sur la question.

Venant du monde Java (enfin je n’en suis pas encore sorti), je suis un habitué du:

MacLasse monObjet = MacLasse.new();

pour Ruby ça devient:

mon_objet = Mac_lasse.new

Bon à part le typage dur de java versus le typage dynamique de ruby, pas de gros changement sur l’interprétation de la façon d’instancier un objet entre ces deux langages.

Par contre c’est sur la classe elle même que ça change pas mal.

En java MacLasse ressemble à ça:

public class MacLasse {
  public MacLasse(){
    // code a executer lors de l'instanciation de l'objet
  }
}

et en ruby on se retrouve avec ça:

class Mac_lasse
  def initialize
    // code a executer lors de l'instanciation de l'objet
  end
end

Cette methode en java s’appel un constructeur (ça c’est pour ceux du fond qui suivent pas hein ! ). On l’obtient en définissant une methode portant le même nom que la classe.

Pour ruby, peut importe le nom de la classe, on utilise une methode initialize.

Alors initialize est-elle une methode de type constructeur ?

Non. et en Java non plus finalement. Ces deux methode ne construisent pas l’instance, elle l’initialise. Elles permettent de préparer l’instance avant de la rendre. En java comme en Ruby, on peut très bien ce passer de ces methodes.

Maintenant on va s’éloigner de Java…

En Ruby on pourrais définir une methode new en lieu et place d’initialize. Non mais qu’est-ce que je raconte, heureusement y’en a au premier rang qui suivent. Merci.

Je reprend. En ruby on peut surcharger la methode new (Object#new) en plus de la methode initialize. Le seul hic, c’est qu’il faut faire attention. Cette methode new est censé créer l’instance de la class. Il faut donc penser à renvoyer la bonne instance en fin de methode (new pour les voisins du radiateur).

Voyons plutôt un petit bout de code:

class Test_initialize
    def initialize
        "test_initialiaze" 
    end
end

class Test_new
    def self.new(*args)
        "test_new" 
    end
end

class Test_new_2
    def self.new(*args)
        "test_new_2" 
        Object.new
    end
end

test = Test_initialize.new
puts test.class   # Test_initialize

test = Test_new.new("args")
puts test.class   # String

test = Test_new_2.new("args")
puts test.class   # Object

On le voit assez bien je pense: Surcharger new ne doit pas se faire à la légère. Utilisé initialize pour initialiser l’instance semble bien plus logique.

Là dessus Ruby montre bien un de ces principe de base qui veux que le langage soit simple et logique. Contrairement a Java ou l’on parle de constructeur en lieu et place de methode d’initialisation.

C’est de la sémantique c’est sur, mais le principe est là. J’aime ruby et j’aime bien java quand même :-)

Rake: sauvegarde de base de donnée 2

Publié par Yannick Francois Mar 07 août 2007 11:24:00 GMT

La bricabox hébergent ce blog, lacomte de jean-mi ainsi que l’eternel teaser (ou le teaser eternel tout dépend du point de vue comme d’habitude) zlab tourne avec OpenBSD, LighTTPD et Ruby on Rails.

Après ce link dropping permettant de vous cadrer le sujet, je vais vous parlé de Rake. C’est un peu la make, la fourmi travailleuse de ruby. Bien intégré avec Rails, ce petit outil vous permet de réalisé des scripts divers et varié. Non pas forcement de la compilation, puisque non nécessaire en général avec ruby, mais on peut par exemple lancer les test unitaires, et dans notre cas faire un backup de la base de donnée.

Et oui, cette outils manquais sur la bricabox. Les sauvegardes était à la charge de chacun, et manuel (peu de problème cependant pour le teaser zlab ;-)).

Je me suis inspiré de ce que j’ai pu trouver ici et là sur la toile, mais mis à mon goût. 3 taches sont disponible dans ce Rakefile:

  • backup Executer un dump de la base mysql pointé par l’environnement rails (config/database.yml).
  • clean_backup Nettoyer la liste des fichiers de backup disponible. Dans le cas de la bricabox, nous avons opté pour une sauvegarde journalière avec rotation à la semaine. On ne garde donc sur l’emplacement prévu à cette effet que 7 fichiers de backup. Charge a nous d’en faire une copie ailleurs de temps à autres ;-).
  • mail Pas grand chose à voir avec le backup, mais j’en ai eu besoin. Peut-être il faudrais que je le sorte de là pour le mettre ailleurs… plus tard. Cette tache vas nous permettre d’envoyer un mail contenant les liens vers les fichiers de backup (pour un téléchargement en local si besoin/envie).

Pour exécuter une tache rake avec Rails, rien de plus simple. On se place dans le répertoire racine de l’application (ici typo huhu, il en manquais un dans le link dropping :-p). Puis on appel l’exécutable rake avec le nom de la tache à exécuter, ainsi que ces paramètres:

/usr/local/bin/rake db:backup DIR=/home/toto/backup RAILS_ENV=production

Les taches utilisent (enfin c’est conseillé) les espaces de noms de Ruby. Cela permet de ne pas trop ce mélanger les pinceaux.

namespace :db do 
  desc "Backup the database to a file. Options: DIR=base_dir RAILS_ENV=production" 
  task :backup => [:environment] do
(...)

Si vous souhaitez vous inspirer de ce que nous avons mis en place libre à vous (pas de licence, donc domaine public ;-)).

Le fichier backup.rake

au passage…

J’aime regardé du code (enfin quand il est beau hein). Oui je suis un voyeur, prenez moi pour un fou. Mais laissé moi vous montrer ici quelques lignes de ce fichier.

def all_backups
  dir = Dir.new(backup_folder)
  dir.entries.select{|e| e =~ /^#{RAILS_ENV}_dump_(.*)$/}.sort.reverse
end

Certain l’aurons compris, il s’agit de filtrer la liste des fichiers d’un répertoire pour ne récupérer que ceux qu’il nous faut.

Les regexp c’est beau, et j’ai encore tant à apprendre pour m’en servir au mieux. Ruby c’est beau, et j’ai encore tant à apprendre pour m’en servir au mieux.

c’est le refrain d’un futur teaser vocal :-p

La tache mail mérite sûrement d’être reprise, amélioré, intégrer au système de notification contenu dans Typo. Mais pour le moment ça marche comme ça

Et non je ne suis pas en vacance. Je n’avais rien a poster, c’est tout :-p

Billets précédents: 1 2 3 4 5 ... 9