Bonne Année

trails = [[0, 0]] * 60
Shoes.app do
  nostroke
  fill rgb(0×30, 0xFF, 0xFF, 0.6)

  animate(24) do
    trails.shift
    trails << self.mouse[1, 2]

    clear do
      background rgb(
        20 + (70 * (trails.last[0].to_f / self.width)).to_i,
        20 + (70 * (trails.last[1].to_f / self.height)).to_i,
        51)

      trails.each do |x, y|
        stack :top => y, :left => x do
          l = para "Bonne Année"
          f = [‘Arial 14px’, ‘Serif 34px’, ‘Monospace 18px’, ‘Arial 48px’][rand(3)]
          l.replace "Bonne Année", :font => f
        end
      end
    end
  end

end

Sortie de Ruby 1.9.0

Ruby 1.9.0 est disponible ! Joyeux Noël ! Ruby 1.9.0 est la première version publique avec une machine virtuelle, le nouveau moteur d’expression rationnelles Oniguruma, la gestion de m17n (Multilingualization, notamment une meilleure gestion d’Unicode), les fibres, une présence accrue des énumérateurs (enumerator), des nouvelles constructions syntaxiques ( ->() {} etc.), . RubyGems 1.0.1 (sorti la semaine dernière) et Rake 0.8.0 sont désormais intégrés à Ruby, FasterCSV remplace CSV. Matz n’a pas voulu nommer cette version 1.9.1 comme initialement prévue, car certains tests ne passaient pas, cette version n’était pas assez stable à son goût. En passant, notons que Perl, langage qui a influencé le design de Ruby, fête ses 20 ans, avec la mise à disposition de Perl 5.10.

ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.bz2
407cc7d0032e19eb12216c0ebc7f17b3
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz
b20cce98b284f7f75939c09d5c8e846d
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.zip
78b2a5f9a81c5f6775002c4fb24d2d75

Sortie de Ruby 1.9.0

Ruby 1.9.0 est disponible ! Joyeux Noël ! Ruby 1.9.0 est la première version publique avec une machine virtuelle, le nouveau moteur d’expression rationnelles Oniguruma, la gestion de m17n (Multilingualization, notamment une meilleure gestion d’Unicode), les fibres, une présence accrue des énumérateurs (enumerator), des nouvelles constructions syntaxiques ( ->() {} etc.), . RubyGems 1.0.1 (sorti la semaine dernière) et Rake 0.8.0 sont désormais intégrés à Ruby, FasterCSV remplace CSV. Matz n’a pas voulu nommer cette version 1.9.1 comme initialement prévue, car certains tests ne passaient pas, cette version n’était pas assez stable à son goût. En passant, notons que Perl, langage qui a influencé le design de Ruby, fête ses 20 ans, avec la mise à disposition de Perl 5.10.

ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.bz2
407cc7d0032e19eb12216c0ebc7f17b3
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.tar.gz
b20cce98b284f7f75939c09d5c8e846d
ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.0-0.zip
78b2a5f9a81c5f6775002c4fb24d2d75

Joyeux Noël à tous

Voilà le billet de fénéasse de fin d’année. J’ai décidé de prendre des vacances loin de toute ligne de code. Ce sera sûrement juste 3-4 jours mais bon c’est déjà ça. Les films se sont accumulés au fil des semaines sur mon disque dur (oui oui des rips de mes DVD bien sûr ;) et j’ai besoin que ça se vide pour en mettre d’autres. Donc pas de billets techniques avant le 26-27 Décembre.

En plus de tous ces films à visionner sur la TVHD de mes parents (c’est bon de passer des vacances à rien foutre, surtout s’il y a une TVHD), j’ai une Wii qui commençait à prendre la poussière. Bref pas de développement ! Je dois battre tous mes high scores sur Guitar Hero 3 et ça prend du temps.

Après ce passage très Geek limite No Life je vais quand même vous souhaitez de bonnes fêtes et si vous n’avez pas encore de cadeaux pour vos enfants, il y a le classique que chaque papa lisant Boldr devrait offrir si ce n’est pas encore fait.

<object height="355" width="425"><param></param><param></param><embed src="http://www.youtube.com/v/H868NSM2yAg&rel=1" height="355" width="425"></embed></object>

Je vous souhaite à tous une bonne indigestion de foie gras, dinde, chapon, bûche, gâteau, petits fours, vin, champagne et tout ce qui passera sur la table au réveillon. Je reviens juste après la digestion.

GTD

As previously said, I’m lazy and as such I’ve always a tendency to procrastinate, being, in the end, overwhelm by all the work I’ve said I’ll do and that I (almost) forgot to do …

However, I’m trying to fight against this tendency, and to find some new ways of both improving myself and delivering on time the best work I can…

In order to not forget what I’ve to do, and to get things done, I’ve turned toward … well, GTD. I immediately find the concept quite clear and coherent: the idea is to flush the brain from all the things you need to remember (buy bread, write some meeting minutes, and so on) by writing them down, and reviewing periodically your list of things to do (based on the context you’re in: at home, in front of computer and so on).

Being a geek, my first reaction to note my list-of-things-to-remember has been to use a computer (well a set of, including Palm Pilot and so on). This lead to development of several tools (ranging from a simple todo list command line application with RSS feed publication, to a GTD list — todo list with contexts — updated through a set of key bindings using Launchy and Snarl for the visual notification), the usage of several tools written by others (ThinkingRock, GTDMonkey, a plugin for Lotus Notes, …).

However none of them was really my cup of tea … I began using them, really trying to keep them updated, but after some time, I stopped using them …

I now have found my perfect tool for all this, or I should say the perfect tools: a notebook, a black pen and a red pen.

I spend a lot of time attending meetings, and it is more natural, more simple and more easy for me to manually take note than using my laptop for this (it’s hard to add drawings to notes on a laptop for example). I thus develop a simple method to keep track of all the things I’ve to do or to delegate.

In the left margin of my notebook, I draw a red ‘[ ]’ for all of the task I’ve to do myself, and write on the right, in black, the task by itself. Should this task by delegated to someone, I wrote a ‘( )’ instead of the bracket version, in the left margin, and clearly identify the person I’m going to delegate this task too (i.e. adding his name in red).

GTD

Each time one of the tasks is either done or delegated/done to the right person, I check the bracket or parenthesis block.

Using 2 different colors allow me to easily flip over pages to check all the tasks have been properly addressed.

Should I need to add task that are not part of the current meeting (i.e. some additional ideas that come up but have nothing to do with the meeting content), I use the same schema, but using the top margin as a scratch pad.

This may look oversimplified or old-school, but hey, it just work for me.

Gtalk bots

Vu sur googlified. Google propose via Gtalk des bots effectuant une traduction automatique. Il suffit d’ajouter dans son client Jabber ou dans Gmail les bots que l’on souhaite utiliser, exemple fr2en@bot.talk.google.com pour du franais vers de l’anglais. Cela fonctionne trs bien avec Gajim bien sr et tous autres clients Jabber.
Plus rapide et pratique que d’aller sur la page web translate. Encore un exemple de la fusion desktop/web et de l’avantage vident utiliser des applications desktop vers des services web.

L’autre norme intrt de ce service est que Gtalk utilise le protocole XMPP de Jabber et ainsi n’impose pas un client desktop particulier. Service web via des protocoles ouverts et standards, nul doute que ce se trouve l l’volution du web.

liste des bots

OpenID, OAuth et OpenSocial

Billet très open aujourd’hui avec un essai de vulgarisation d’OpenID (c’est encore nécessaire), OAuth et OpenSocial.

OpenID

OpenID permet de ne retenir qu’un seul couple login/password pour se connecter à tous les sites de la Terre entière… ou plutôt ceux qui sont compatibles. Il y a des providers qui vous fourniront des OpenID comme ClaimID qui est pour moi le meilleur.

OAuth

OAuth est une nouvelle spécification qui va servir à uniformiser le système d’authentification à des services tels que Flickr ou Del.icio.us. A première vue sans plus d’informations, on est confus car cela ressemble un peu à OpenID.

On va être obliger de prendre un exemple pour que ce soit plus compréhensible. Vous êtes sur un site d’impression de photos et vous voulez récupérer vos photos privées, sur un site tel que Flickr, pour les imprimer. OAuth va permettre d’autoriser notre site d’impression à accéder à nos photos privées sans que l’on ait besoin de lui fournir le couple login/password de notre compte du site de photos.

Pour plus de détails et des démos, voici quelques articles :

OpenSocial

Google l’a lancé et tout le monde en a parlé, mais c’est quoi exactement ? OpenSocial est une couche avec laquelle on va pouvoir communiquer avec tous les réseaux sociaux… enfin seulement ceux qui sont compatibles bien sûr. On veut récupérer sa liste d’amis sur Orkut et hop un petit gadget en utilisant OpenSocial. Et si on veut sa liste d’amis de MySpace à la place ? Il suffira de changer l’URL du service et c’est tout ! Bon je n’ai vu aucun tutoriel autre que ceux de Google avec Orkut, mais c’est le but donc ce que je dis doit être vrai.

Si les ressources sont privées, il faudra alors s’authentifier via ClientLogin ou AuthSub, des systèmes Google. Google regarde un peu OAuth et j’espère qu’ils l’implémenteront à OpenSocial dans un bref délai puisque c’est fait pour ça justement !

Si récemment vous êtes allez sur un site et qu’il vous à proposer d’importer les contacts de votre compte Gmail ou autre, et bien je ne sais pas s’ils ont utilisé OpenSocial mais c’est justement ce qui pourrait être un très bon exemple d’utilisation de cette API.

Salad Bowl

Ces 3 choses sont finalement complémentaires. OpenID pour ne pas avoir à retenir un couple login/password partout, OAuth pour permettre à n’importe quel site d’accéder à une API de manière plus sécurisée que maintenant (et si l’API utilise OpenID pour l’accès, il y aura un mix d’OpenID et d’OAuth) et OpenSocial pour accéder à notre profil de n’importe quel réseau social (et si OpenSocial utilisait OAuth on pourrait retrouver ces 3 choses emboîtées).

Le projet DiSo essaye déjà d’incorporer tout ça (pas encore OpenSocial mais ça pourrait venir) à Wordpress avant de s’attaquer à d’autres choses. Ce genre de projets est vital pour que toutes ces spécifications ne meurent pas car OpenID est déjà assez ancien mais peu de sites l’utilisent et la version 1.0 des spécifications d’OAuth est sortie le 4 Décembre dernier et doit donc faire ces preuves (Ma.gnolia utilise OAuth pour son API mais c’est un des seuls exemples). Pour OpenSocial, son avenir est assuré vu que c’est Google et qu’il a plein de partenaires.

Et avec Rails ?

Le site pour OAuth est un Mephisto ;) Et il y a des déjà des gems et des plugins pour utiliser OAuth et une application exemple pour créer un provider utilisant OAuth (donc un squelette servant pour une API).

On a ensuite le plugin de la Core Team pour utiliser OpenID sur son site.

Enfin pour OpenSocial, j’ai trouvé ce plugin pour rendre son site compatible avec OpenSocial en quelques minutes.

Vous avez maintenant toutes les clés en main pour créer un réseau social en Rails qui sera à la pointe des services que l’on peut fournir. J’avoue que tout ça d’un seul coup peut paraître indigeste donc relisez ce billet plusieurs fois ^^

Hoe, l’aide de diffusion de gem sur rubyforge

Qu'est ce qu'Hoe

Hoe est un tout petit gem géré par la Seattle Ruby Brigade!. Ce gem n'a qu'une utilité, aider au développement d'un gem sur rubyforge. Mais comme tout petite librairie importante, ce qu'il fait, il le fait bien.

Installation de Hoe

Dépendance

Hoe permet de générer des gems et il nécessite donc rubygems. Il déploie votre gems sur RubyForge et nécessite donc aussi le gem rubyforge. Il ajoute plein de tâche rake pour vous. il a donc besoin de rake.

Installation

Pour l'installer il suffit de faire un gem install hoe.

Créer un projet Hoe

Pour plus de simplicité pour la suite, il suffit de créer un projet hoe. C'est un peu comme réaliser un projet avec Rails. Hoe crée une série de répertoires et fichiers qui ont tous leurs utilités et permettront de réaliser facilement votre gem avec le déploiement sur RubyForge.

Pour créer votre projet, vous avez ainsi la commande sow. Il suffit de réaliser sow projet. Voici un exemple de sortie généré par cette commande.

hello-23:46:11:~/programmation/ruby/test$ sow testhoe
creating project testhoe
... done, now go fix all occurrences of 'FIX'

  testhoe/Rakefile:9:  # p.author = 'FIX'
  testhoe/Rakefile:10:  # p.email = 'FIX'
  testhoe/Rakefile:11:  # p.summary = 'FIX'
  testhoe/README.txt:2:    by FIX (your name)
  testhoe/README.txt:3:    FIX (url)
  testhoe/README.txt:7:FIX (describe your package)
  testhoe/README.txt:11:* FIX (list of features or problems)
  testhoe/README.txt:15:  FIX (code sample of usage)
  testhoe/README.txt:19:* FIX (list of requirements)
  testhoe/README.txt:23:* FIX (sudo gem install, anything else)
  testhoe/README.txt:29:Copyright (c) 2007 FIX

Vous obtenez ainsi l'arborescence suivante dans le répertoire "testhoe"

hello-23:46:19:~/programmation/ruby/test$ tree testhoe/
testhoe/
|-- History.txt
|-- Manifest.txt
|-- README.txt
|-- Rakefile
|-- bin
|   `-- testhoe
|-- lib
|   `-- testhoe.rb
`-- test
    `-- test_testhoe.rb

3 directories, 7 files

Voici à quoi sert chaques fichiers :

  • History.txt permet de définir le changelog de votre projet version par version. il est déjà pré-rempli
  • Manifest.txt est un fichier listant tous les fichiers qui sont présent dans votre futur gem. Vous pouvez vérifier si il est exacte grâce à une tâche rake : rake check_manifest. Ca générera un diff entre le fichier Manifest.txt et votre arborescence.
  • README.txt est tout simplement le fichier qui définis tout votre projet. C'est en grande partie à partir de lui que vous seront tiré les information pour publier votre gem.
  • RakeFile qui est le fichier de configuration des tâche rake généré par HOE.
  • le dossier bin est le dossier ou vous insérez l'executable
  • le dossier lib est le dossier où vous intégrez les librairies développé pour votre gem

Chaque partie du fichier README.txt est commenté et sera utilisé directement par des tâches rake pour la publication de votre gem sur rubyforge.

Configurer un projet Hoe

Pour configurer un projet Hoe, il faut éditer le fichier Rakefile. En effet, les informations importantes ce trouve dedans :

  • rubyforge_name : le nom du projet sur Rubyforge
  • author : le nom du créateur du gem
  • email : l'email du créateur du gem
  • summary : Résumé sur le gem. En général on utilise celui donné sur rubyforge
  • description : Il s'agit de la description détaillée de votre gem. Pareil autant utilisé celle de Rubyforge.
  • url : l'url de votre projet sur rubyforge
  • changes : la liste du changelog. Par défaut il s'agit du premier paragraphe du fichier history.txt
  • extra_deps : on peux ajouter la liste de dépendance gem nécessaire à votre gem. De la manière suivante : p.extra_deps <= 1.3.5']
  • remote_rdoc_rdir : il s'agit du chemin de base où sera déposé la rdoc généré de votre gem. Ca peux ainsi être envoyé sur le site qui vous est disponible par rubyforge.

Tâche rake utile

Grâce à Hoe, beaucoup de tâche rake sont ajoutée en voici une petite liste avec l'intérêt de chacune :

  • rake announce : génére un email et le post sur l'annonce de Rubyforge. Il se base sur le changelog généré à partir de change et description défini dans le RakeFile.
  • rake check_manifest : qui vérifie que votre manifest est correcte
  • rake gem : génére le gem en se basant sur la config Hoe. Le gem se trouve dans le dossier pkg
  • rake clean : supprime le dossier pkg
  • rake package : génére les différents packages de votre projet (tar.gz et gem) dans le dosser pkg
  • rake release : génére les paquets et envoie une annonce sur Rubyforge.
  • rake publish_docs : génére la rdoc du gem et l'upload sur le site de rubyrforge de votre gem.

Il y a encore d'autre doc que vous pouvez découvrir sur leur doc

Par contre un autre gem, newgem qui a été réalisé par DrNic. Je vais étudier ça de ce pas.

Nouvelle Skin 2008

Nouveau projet “Natural Sort”