Spammez moi avec Orange !

Pour d’obscures raisons que je n’expliquerai pas ici, je suis passé de Free à Orange et cela sans que mon salaire n’est été augmenté ;)

J’ai fait mon abonnement chez orange le 28 août dernier, et grâce à la réactivité de France Télécom, je peux maintenant naviguer sur internet depuis le 22 septembre !!! Un mois (payé) pour activer le service, ils n’ont pas fini de m’entendre hurler ! Surtout que le “service technique” me soutenait mordicus que si cela ne fonctionnait pas, c’était à cause d’un problème chez moi et que “nous allons vous envoyer un technicien pour vérifier votre installation — cela fera 145 €, Monsieur, bonne journée de la part d’Orange et France Télécom !”

Le technicien finit enfin par arriver, tout cela pour me dire que “ha ben non, visiblement le problème vient de chez nous…” et il me rappelle 15 minutes après sont départ, depuis “le central” : “Désolé monsieur, nous avions inversé, en fait c’est le fil blanc sur le bouton blanc , et le fil rouge sur le bouton rouge… Cela doit fonctionner maintenant. Bonne journée de la part d’Orange et France Télécom !”. Et en effet, Ô miracle, je retrouve enfin internet !

Le temps de reprendre un mois d’arriéré de mail et autres news, je me dis ce matin “mais au fait, chez Orange, ils m’ont créé une adresse mail. Et si j’allais voir ce que cela donne ?”. Avant de poursuivre sachez que je n’ai jamais donné cette adresse à personne, que je ne l’ai jamais consulté, bref que je n’y ai jamais touché. Et bien, croyez-moi, c’est formidable internet avec Orange parce qu’après une semaine d’activation sans aucune utilisation de mon adresse mail @orange.fr, j’ai déjà 31 propositions pour acheter du viagra, des cartes de visite ou pour participer au débrouillage du compte bancaire d’un vieil Équatorien décédé dans un accident d’avion et dont la veuve ignore l’existence du compte garni de plusieurs milliards de tonnes de sucre (et oui, il était vraiment très vieux).

N’essayez pas de m’écrire @orange.fr, c’est une poubelle !

Disparition de Guy Decoux

(french version below)

I’m sad to announce you Guy Decoux’s death in the beginning of the month of July 20008. He was 53 years old. He died accidentally, intoxicated by the smokes of the fire that took place during the night in his flat in Louveciennes (near Paris).

Guy Decoux was network and system admin at the Plant Genomics Research Unit of INRA (Agricultural Research labs, where he worked since 1982) in Moulon’s Farm (Moulon’s plateau, in the south west of Paris).

He was an Internet pioneer. For example, he worked on Oraplex, one of the first Oracle to web gateways. He deployed the first website that gave access to an ACeDB system by the end of 1993. He had worked on bioinformatic free software, like ProticDB , a plant proteomic database.

He was part of the generation of developers who switched from Perl to Ruby in the 90s. While his mastering of Perl was already great, his knowledge about Ruby was so deep and impressive that a lot of Rubyists would have been very happy to have the same one. Guy contributed to Dave Thomas’ book, “Programming Ruby”. Of course he polled for the comp.lang.ruby and fr.comp.lang.ruby newsgroups creation. He was maintaining some libraries like PL/Ruby a procedural language for PostgreSQL, bdb / bdb1 bindings for Berkeley DB, bz2 bindings the libbzip2 compression library and MMap class, a class for Memory-mapped files.

To my knowledge, he was the only french person to have commits right to Ruby MRI source code. I don’t know if he was officially member of the Ruby Core Team (I don’t know if there is an official Ruby Core Team list).

I’m not sure ‘ts’ (what does ‘ts’ mean in his electronic address?) had ever been to RubyConf nor any Ruby conference. Well I don’t know if there is a french Rubyist who ever meet him. Was he mysterious or secret ? Maybe he was just reserved. His colleagues described Guy as reserved, kind, available, professional and technically very competent. His messages on Ruby-Core or Ruby-Talk, sometimes with a bit of humor, show all that.

This is a loss for Ruby Community.

In the name of french association RubyFrance, I present my condolences to Guy Decoux’s family, his friends and his collegues.

Jean-François.

[1] This explains the ‘moulon’ server name in the prompt shell that can be found in Guy’s messages on the Internet.

[2] ACeDB is a genomic OO and relational database system : http://wwww.acedb.org

Disparition de Guy Decoux

(french version below)

I’m sad to announce you Guy Decoux’s death in the beginning of the month of July 20008. He was 53 years old. He died accidentally, intoxicated by the smokes of the fire that took place during the night in his flat in Louveciennes (near Paris).

Guy Decoux was network and system admin at the Plant Genomics Research Unit of INRA (Agricultural Research labs, where he worked since 1982) in Moulon’s Farm (Moulon’s plateau, in the south west of Paris).

He was an Internet pioneer. For example, he worked on Oraplex, one of the first Oracle to web gateways. He deployed the first website that gave access to an ACeDB system by the end of 1993. He had worked on bioinformatic free software, like ProticDB , a plant proteomic database.

He was part of the generation of developers who switched from Perl to Ruby in the 90s. While his mastering of Perl was already great, his knowledge about Ruby was so deep and impressive that a lot of Rubyists would have been very happy to have the same one. Guy contributed to Dave Thomas’ book, “Programming Ruby”. Of course he polled for the comp.lang.ruby and fr.comp.lang.ruby newsgroups creation. He was maintaining some libraries like PL/Ruby a procedural language for PostgreSQL, bdb / bdb1 bindings for Berkeley DB, bz2 bindings the libbzip2 compression library and MMap class, a class for Memory-mapped files.

To my knowledge, he was the only french person to have commits right to Ruby MRI source code. I don’t know if he was officially member of the Ruby Core Team (I don’t know if there is an official Ruby Core Team list).

I’m not sure ‘ts’ (what does ‘ts’ mean in his electronic address?) had ever been to RubyConf nor any Ruby conference. Well I don’t know if there is a french Rubyist who ever meet him. Was he mysterious or secret ? Maybe he was just reserved. His colleagues described Guy as reserved, kind, available, professional and technically very competent. His messages on Ruby-Core or Ruby-Talk, sometimes with a bit of humor, show all that.

This is a loss for Ruby Community.

In the name of french association RubyFrance, I present my condolences to Guy Decoux’s family, his friends and his collegues.

Jean-François.

[1] This explains the ‘moulon’ server name in the prompt shell that can be found in Guy’s messages on the Internet.

[2] ACeDB is a genomic OO and relational database system : http://wwww.acedb.org

Merbist

Matt Aimonetti a ouvert un blog dédié à Merb : The Merbist. Moi qui cherchait un nom de domaine pour créer un blog sur Merb, je vais devoir me creuser la tête encore un peu.

Publication d’un plugin Ruby on Rails pour la génération d’url significatives

Utiliser uniq avec une collection d’objets ruby

Récemment j'ai eu besoin d'utiliser uniq sur une collection d'objet ruby. En l'occurrence il s'agissait de modèles ActiveRecord.

L'idée était donc de filtrer ces objets en se basant sur l'un des attributs pour éviter les doublons.
En premier lieu je pensais que uniq pourrait prendre un bloc en paramètre indiquant comment comparer les éléments deux à deux, du genre : books.uniq { |b1, b2| b1.name == b2.name }

Pour le moment uniq ne sait pas faire ça (ou j'ai raté quelquechose).

Egalité et identité des objets ruby

uniq utilise eql? pour comparer les éléments deux à deux.
Pour qu'uniq fonctionne sur une collection d'objets, il nous faut donc surcharger eql? et hash qui vont de pair.

Pourquoi pas == ?
Contrairement à ==, .eql? compare aussi les types. Par exemple 42.0 == 42 mais ! 42.eql?(42.0)

A quoi sert hash ?

hash permet de générer un identifiant pour un objet non pas pour rendre l'objet unique mais pour permettre les comparaisons.
eql? et hash sont intimement liés.

Et equal?
equal permet de comparer l'identité des objets. Deux objets peuvent être strictement identiques en terme de valeur sans pour autant être les mêmes.

Ex :

a = "42"
b = "42"

a == b, a.eql?(b), a.hash == b.hash mais ! a.equal?(b) car a.object_id != b.object_id

La pratique : implémenter uniq sur une collection d'objets ruby

#!/usr/bin/env ruby -w

class Book
  attr_accessor :name
  
  def initialize(attributes)
    attributes.each do |k, v|
      send("#{k}=", v)
    end
  end
    
  def eql?(o)
    hash.eql?(o.hash)
  end
  
  def hash
    name.downcase.hash
  end  
end

books = [
  Book.new({ :name => "Programming Ruby" }),
  Book.new({ :name => "Harry Potter" }),
  Book.new({ :name => "Ruby on rails" }),
  Book.new({ :name => "programming ruby" })
]

Avec ce code :

books.length == 4
books.uniq.length == 3

Configuration d’Apache pour Ruby on Rails avec gestion des fichiers statiques et du cache

Bleeding Edge Merb

Pour faire suite à mon dernier article sur Merb en bundle, voici 2 scripts : le premier pour installer tout le nécessaire pour Merb Edge et le second pour mettre à jour tout ce qui a été installé par le premier. Plus de prise de tête !

Merb en bundle

Avec Merb 0.9.7, on peut faire un bundle avec son application et toutes les gems dont elle a besoin en quelques petites commandes grâce à Thor (déjà avec 0.9.6 mais en standard maintenant). Il y a un tutorial sur Merbunity mais je vais juste expliquer comment j’ai fait pour mon application.

On commence par installer Merb via Rubygems :

sudo gem install merb thor

Ensuite on génère une application :

merb-gen app mybundle

Et on a plus qu’à installer dans l’application merb-core, merb-more, merb-plugins, dm-core et dm-more (et les dépendances pour tout ça viendront automatiquement). Pour cela rien de bien méchant, on utilise les tâches Thor (c’est pour ça qu’on l’a installé plus haut) qui sont déjà dans le répertoire :

cd mybundle
thor merb:edge --install
thor merb:edge:plugins --install
thor merb:edge:dm_core --install
thor merb:edge:dm_more --install

Et voilà ! On a un bundle avec les gems dans son application. Si on a envie de mettre d’autres gems, un simple thor -T montrera les différentes tâches disponibles. Si on veut les versions stable des gems on remplace dans les commandes ci-dessus le mot edge par stable.

Maintenant on démarre l’application

Aucun serveur n’est dans le bundle, j’ai envie de mettre Thin :

bin/thor merb:gems:install thin

Et enfin on lance Merb :

bin/merb -a thin

Mais on est pas dans un monde sans bugs

La commande thor merb:edge:plugins --install ne fonctionne pas si on fait comme ça, il va donc falloir mettre à jour le fichier merb.thor se trouvant dans notre application. Pour cela il suffit de le télécharger :

curl -L http://merbivore.com/merb.thor > merb.thor

Maintenant en plus de pouvoir installer les plugins, on pourra mettre à jour les tâches grâce à :

thor merb:tasks:update

Le merb.thor mis à jour se trouve dans Merb Edge et tout sera bon pour la version 0.9.8.

Dropbox suite

Je me rend compte que je n’ai pas expliqu ce qui fait l’norme intrt de Dropbox par rapport d’autres produits, hormis d’tre natif tri plateforme. Il ne s’agit pas ici de monter un disque dport faon WebDav ou SSH, car ici on parle de synchronisation. En effet les donnes places dans le rpertoire de Dropbox ne sont pas dplaces mais copies sur leurs serveurs ce qui permet de pouvoir y accder sans connexion Internet. Le dmon dropboxd scrute le rpertoire et copie les nouveaux fichiers et ceux modifis. Mon laptop dans lequel j’ai galement install Dropbox peut ainsi rcuprer en fond de tche les modifications faites depuis le PC de bureau.
Donc nul besoin de copier dans ce rpertoire les donnes que l’on souhaite sauvegarder, mais plutt de les y dplacer. J’ai dplac dans ce rpertoire mes rpertoires importants comme “dev” ou “docs”, ou des fichiers de config comme le .emacs avec un simple lien :

/home/fred
ls -al .emacs
lrwxrwxrwx 1 fred fred 21 sep 14 02:07 .emacs -> Dropbox/config/.emacs

Enfin si certains sont prts payer l’offre de 50Go 10$/mois environ il est sans doute envisageable de synchroniser son rpertoire home en entier dans le cas ou l’on utilise exactement les mmes environnements logiciels sur ses diffrentes machines. Pour les libristes pointus il existe un logiciel libre trs proche du fonctionnement de Dropbox, boxbackup. Bien sr la configuration n’est pas aussi aise et il n’y a pas d’interface web, mais l’alternative existe et des courageux peuvent peut tre dvelopper une offre entirement libre.