Self.migrate(5.0.3) 5

Publié par Yannick Francois Sam 01 mars 2008 23:10:00 GMT

Et bien voilà, ce blog, toujours propulsé par Typo bénéficie maintenant de la dernière version: 5.0.3.

Impréssionnante évolution dans l’arrière boutique.

Vous aurez remarqué, mon thème était tout cassé, du coup, je suis de retour avec Scribbish. J’adore :)

Un grand bravo a l’équipe !

Et XUL alors ! 3

Publié par Yannick Francois Mar 02 oct 2007 11:52:00 GMT

Non de XUL !

Ce matin en lisant ce billet du sur lemondeinformatique.fr au sujet des risques liés à Ajax j’ai été surpris… Surpris par ce passage:

Ted Farrell, architecte en chef et vice-président outils et middleware d’Oracle, rappelle déjà qu’en raison de la jeunesse des technologies, les entreprises doivent être prudentes quand au choix de leur solution : il y a deux grands frameworks sur le marché, et entre Microsoft et Adobe, il vaut mieux qu’elles ne se trompent pas car elles risqueraient alors de se retrouver coincées pour des années.

Hmmm. On parles ici de Flex © Adobe Systems Inc. et SilverLight © Microsoft Corporation. je suppose.

Mais, arrêtez moi si je me trompe… Non, ..., personne ? bon, Flex et Silverlight ne sont pas les pendants de Xul ? Alors pourquoi on en parle pas plus ? Surtout que là, pour la peine, avec Xul on reste ouvert !

Rappel: XUL c’est eXtensible User Language (il me semble). En gros c’est du XML pour la description d’interface, CSS pour la présentation et Javascript pour l’interaction dans l’interface. Que de la technologie existante, ouverte, spécifié, standard...

Alors le bon pour choix pour ne pas s’enfermer ne serais pas XUL ? Ah oui. LE pépin de XUL. Il faut soit Firefox ou alors un XulRunner ...

Quoique, On voit apparaître doucement des moteurs reprenant les spécifications de XUL comme Lark (du XUL on Rails). Et a mon avis on a pas fini d’en voir… Je crois, et depuis un moment, que XUL est la bonne technologie pour les interfaces dit riche.

Cool URIs don't change 3

Publié par Yannick Francois Lun 17 sept 2007 21:02:00 GMT

Et oui Sunny ce n’est pas

“good links are eternal links” (ou qqchose du genre)

Mais effectivement quelque chose du genre:

Cool URIs don’t change

Et c’est pour respecter cette règle que le sauveur d’URI a encore frappé.

Il y a un moment maintenant, j’utilisais Dotclear, un bon moteur de blog en PHP. Mais voilà. Depuis je suis passé à Typo un moteur de blog en Ruby on Rails. Les URI de l’ancien blog on été indexé, et du coup ne pointe plus sur rien. Merci à Sunny de me l’avoir signalé.

Même mieux que ça, ce sauveur d’URI perdu a poussé le vice jusqu’à me fournir l’expression régulière qui va bien pour rediriger les anciennes URI vers les nouvelles.

Du coup, les URI du genre :

http://www.typouype.org/index.php/?2006/03/04/45-logo-debian-vs-logo-gnome

(si vous en rencontré encore) sont maintenant redirigées au bon endroit : http://www.typouype.org/articles/2006/03/04/logo-debian-vs-logo-gnome

Merci encore Sunny,

et n’oubliez pas:

Cool URIs don’t change !

Je ne traduit pas, c’est nul en français, et puis moi aussi je suis nul en anglais :-)

et bien sur à condition de faire ce qu’il faut pour qu’elles ne changent pas ;-)

Edit:

Je vous colle ici nonchalamment (comme dirais les gens du GCU-squad) la petite règle pour Lighttpd

$HTTP["host"] == "www.typouype.org" {
  url.redirect = (
    "^/index.php/(\?|)([0-9]+/[0-9]+/[0-9]+)/[0-9]+-(.*)$" 
      => "/articles/$2/$3"
  )
}

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