Tryton 1.0, Rails 2.2 , Netbeans 6.5, Netbeans Python

Four quick news :
  • Tryton 1.0 has been released, it’s a fork of Open ERP. A lot of code has been rewritten in order to feet demands of potential contributors.
  • Rails 2.2 has been released
  • Netbeans 6.5 has been released
  • And last but not least, the python module for Netbean IDE has been released in early access.

I’ve been waiting for long time for Python support in Netbeans since I am developping modules for Open ERP and Tryton.

Note that Django and Turbogears support are also planned in Netbeans. Since they did good job with Rails support, we can expect a nice platform for these frameworks.

Posted by Cédric Brancourt Sat, 22 Nov 2008 14:12:00 GMT


Rails 2.2 RC 2, prepare for launch !

DHH[1] announced on Rail’s official blog , the release candidate 2 for Rails 2.2 framework.

Get ready to test and report bug !

The key features for Rails 2.2 :
  • Ruby 1.9 support
  • Better i18n support
  • ActiveRecord improvements (transactional migrations, connection pooling …)

Please read Release notes on Rails Guides and enjoy !

1 David Heinemeier Hansson

Posted by Cédric Brancourt Sat, 15 Nov 2008 11:17:00 GMT


Prawn , une première release de la bibliothèque pdf pour ruby !

C’est encore Gregory Brown qui sévit , en nous gratifiant d’une release de Prawn.

Prawn c’est une bibliothèque qui permet de génèrer des pdf avec ruby, l’objectif etant de fournir un bon remplacant a PDF::Writer.

Prawn apporte de nouvelles fonctionnalités et facilités, dont le support de ruby 1.9 ou encore la transparence des PNG.

Posted by Cédric Brancourt Mon, 04 Aug 2008 06:39:00 GMT


Rails 2.1, une nouvelle version du framework...

Non , ce billet n’à pas pour but annoncer la sortie de cette version qui n’etait pas attendue si tôt. Je vais détailler les principaux changements. Dans un autre billet j’irais peut-être plus en profondeur.

Fuseaux Horaires.

La gestion de fuseaux horaires par utilisateur pour les enregistrements en base de donnée à été simplifié. Le concept de Rails 2.1 est d’utiliser l’heure UTC en enregistrement de base puis de modifier cette valeur a l’aide d’une variable globale à l’affichage des varaibles. La substitution se fait donc dans la vue. Par défaut le environement.rb positionne cette variable :


# config/environment.rb
config.time_zone = 'UTC'

Pour migrer des applications , certains points importants son à verifier:

  • Assuez vous que les enregistrements de temps de votre base aient étés réalisés en UTC, sinon il va vous faloir convertir votre base avant.
  • Vous devrez désinstaller le plugin tzinfo_timezone.
  • Le paquet gem TZinfo n’est plus nécéssaire, une version allégée de cette bibliothèque est embarquée dans ActiveSupport toutefois Rails favorisera la version la plus à jour entre TZinfo embarqué dans ActiveSupport, et le TZinfo gem.
  • Pour ne pas activer les modifications de gestion de fuseau horaire, il suffit de commenter la déclaration config.time_zone dans votre environement.rb

Suivi des modifications des objets

Un nouveau module inclus dans ActiveRecord, il vous permet de déterminer si l’état d’un objet du modèle à été modifié mais non sauvegardé.

Un exemple très simple à comprendre, issu des commentaires du code :

2       # Track unsaved attribute changes.
3       #
4       # A newly instantiated object is unchanged:
5       #   person = Person.find_by_name('uncle bob')
6       #   person.changed?       # => false
7       #
8       # Change the name:
9       #   person.name = 'Bob'
10       #   person.changed?       # => true
11       #   person.name_changed?  # => true
12       #   person.name_was       # => 'uncle bob'
13       #   person.name_change    # => ['uncle bob', 'Bob']
14       #   person.name = 'Bill'
15       #   person.name_change    # => ['uncle bob', 'Bill']
16       #
17       # Save the changes:
18       #   person.save
19       #   person.changed?       # => false
20       #   person.name_changed?  # => false
21       #
22       # Assigning the same value leaves the attribute unchanged:
23       #   person.name = 'Bill'
24       #   person.name_changed?  # => false
25       #   person.name_change    # => nil
26       #
27       # Which attributes have changed?
28       #   person.name = 'bob'
29       #   person.changed        # => ['name']
30       #   person.changes        # => { 'name' => ['Bill', 'bob'] }

Named scope

Hum, comment traduire ce concept ? C’est l’intégration du plugin has_finder. Ce plugin vous permet de mapper d’impbriquer des critères de recherche dans vos classes AvtiveRecord. Un exemple illustrant fort bien ce propos :


class User < ActiveRecord::Base
  named_scope :active, :conditions => {:active => true}
  named_scope :inactive, :conditions => {:active => false}
  named_scope :recent, lambda { { :conditions => ['created_at > ?', 1.week.ago] } }
end

# Utilisation classique
User.active    # identique à User.find(:all, :conditions => {:active => true})
User.inactive # identique à User.find(:all, :conditions => {:active => false})
User.recent   # identique à User.find(:all, :conditions => ['created_at > ?', 1.week.ago])

# Le tout imbriquable
User.active.recent
  # est identique à :
  # User.with_scope(:conditions => {:active => true}) do
  #   User.find(:all, :conditions => ['created_at > ?', 1.week.ago])
  # end

On se rend compte tout de suite du gain de temps et clareté dans le code. Par la suite on peut passer un argument a la methode:


class User < ActiveRecord::Base
  named_scope :registered, lambda { |time_ago| { :conditions => ['created_at > ?', time_ago] }
end

User.registered 7.days.ago # la même chose que  User.find(:all, :conditions => ['created_at > ?', 7.days.ago])

Toujours plus tordu, toujours plus fort, vous pouvez, étendre la fonctionnalité d’un de ces filtre, ou contexte (je ne sais toujour pas comment les nommer dans la langue de Molière) :


class User < ActiveRecord::Base
  named_scope :inactive, :conditions => {:active => false} do
    def activate
      each { |i| i.update_attribute(:active, true) }
    end
  end
end

# active les utilisateurs inactifs
User.inactive.activate

Finalement ces contextes peuvent êtres construits et stockés comme des objets à la volée :


# Stockage des contextes
active = User.scoped(:conditions => {:active => true})
recent = User.scoped(:conditions => ['created_at > ?', 7.days.ago)

# Combinaison des contextes
recent_active = recent.active

# Puis utilisation ...
recent_active.each { |u| ... }

A la fin de cette section, je sais approximativement comment traduire cette fonctionnalié:contextes nommés. A mon sens c’est une superbe bibliothèque dont il faut se servir le plus souvent possible.

To be continued

Je ne vais pas commenter tous les changements de Rails 2.1 dans ce premier billet. J’en garde un peu pour plus tard, mais déjà nous avons de quoi nous amuser quelques heures.

Posted by Cédric Brancourt Wed, 04 Jun 2008 09:53:00 GMT


Meta-gems Murdoch

Gregory Brown, auteur de l’excellente bibliothèque Ruport à fournit une nouveau paquet visant a inclure l’ensemble des dépendances de Ruport dans un projet Rails pour en simplifier la mise à jour :

Murdoch

Il vous permet de conserver la cohérence entre les bibliothèques ruport , ruport-utils, act_as_reportable. C’est un simple meta-paquet donc :

gem install murdoch

et dans l’apllication Rails

require "ruport/murdoch"

A noter aussi qu’il nous à fournis une nouvelle version de Ruport : 1.6

Voir les changelogs sur Ruby forge (bha oui, allez lire en anglais un peu aussi, ca vous fera les pieds …)

Posted by Cédric Brancourt Tue, 15 Apr 2008 15:00:00 GMT


Unix Garden, le site que je recommande ...

L’objectif de ce site n’est évidement pas d’être un gestionnaire de Bookmark, mais j’aimerais partager avec les lecteurs de ce Blog ( principalement des administrateurs système, des développeurs et aussi des clients potentiels ) l’URL du merveilleux Unix Garden.

Un site des Editions Diamond, editeur de deux de mes revues préférées : GNU/Linux Magazine, et MISC (Multi-System Internet Sercurity Cookbook).

Sur ce site vous pourrez retrouver beaucoup de documentation, de tous niveaux et pour tous usages. Je tiens à saluer les “Lutins” qui oeuvrent chaque jour pour nous fournir toujours plus de matière à réfléchir (le staff de la rédaction). Un petit clin d’oeuil aussi, en passant : JE VEUX UN T-SHIRT UNIX GARDEN SVP ! (echo du salon Solution Linux …)

Posted by Cédric Brancourt Tue, 15 Apr 2008 14:11:00 GMT


Reporting avec Ruby et Rails, Ruport !

Gregory Brown1 et Michael Milner2, ont rédigés ensemble une superbe introduction à Ruport sur le O’reilly Network . Ruport est une bibliothèques très complète permettant de représenter de façon claire des synthèses de données … Ce que l’on aussi reporting ;) .

Pour les développeurs désireux d’aller plus loin, il existe un livre dédié à la documentation de Ruport (C’est tout de même plus lisible que la documentation de l’API !). Ce livre est disponnible aussi en libre accès en ligne au format HTML.

Une lecture plus que recommandée pour tout développeur d’application Rails.

1 A l’origine de la bibliothèque Ruport.

2 Je ne sais pas qui c’est, mais c’est bien de lire les foot-notes.

Posted by Cédric Brancourt Mon, 14 Apr 2008 11:50:00 GMT


GIT, la nouveau standard de controle de version dans la communauté Rails

Voici maintenant quelque semaines que la communauté Rails n’à plus qu’un seul mot (si s’en est un) à la bouche : GIT.

GIT est un système de contrôle de version (comme CVS ou subversion), il est utilisé pour le versionning du Kernel Linux par exemple. En fait c’est même Linus Torvald1 qui est à l’initiative du projet GIT.

Le projet Rails en lui même, à migré son contrôle de version vers GIT, et beaucoups d’autres projets voisins (plugins, engines …) lui emboitent le pas. (qui à dit moutons de Panurge ?)

Peter Cooper sur le site Ruby Inside nous présente un joli panorama de GIT pour Ruby. Au menu, tutoriaux, articles, comparatifs, cheatsheets, bibliothèques … A lire, rien que par curiosité ! (en Anglais)

Posted by Cédric Brancourt Mon, 14 Apr 2008 10:26:00 GMT


Passenger (apache modrails)

Depuis le temps que nous l’attendions … Passenger, aka modrails à pointé le bout de son nez, pour le plus grands bonheur de tous ceux qui ont à déployer un jour une application Rails.

Passenger, c’est quoi ?

Passenger est un ensemble de scripts et une extension pour Apache2, développé par Phusion.

Sous forme de Gems ou de tarball, Passenger vous permet en deux temps trois mouvements de déployer la partie serveur http d’une application Rails.

C’est une grande avancée pour Rails, pour le quel le déployement complexe représentait un frein majeur à l’adoption.

Matz1 et Dhh2 se sont déjà exprimés sur les bénéfices que l’on peut escompter de ce nouvel outil de déploiement.

En plus de simplifier le déploiement, cet outil permet aussi d’amerliorer légèrement les temps d’excution d’applications Rails.

Inutile de vous cacher que je me suis empressé de tester tout ça ! Malgrès une très grosse gueule de bois, j’ai pu déployer un environnement Rails en moins de 15 minutes ! (c’est dire si c’est efficace). Dans un prochain billet je vous promet une revue technique.

1 A l’origine du langage Ruby

2 A l’origine du framework Rails

Posted by Cédric Brancourt Sun, 13 Apr 2008 11:28:00 GMT


Ubuntu 7.10 / Compaq Pressario C700 / Wifi

Du matériel pas top …

J’ai fait l’acquisition d’un Compaq pressario C700.(livré avec une licence Vista, le pire système d’exploitation depuis Millenium, a croire que Microsoft n’à jamais sû tirer de leçons de ses erreurs …)

Comme je me sent a l’étroit sur un système fermé, j’ai choisi d’installer Ubuntu GNU/Linux dessus (Béneficie de beaucoup de qualités de Debian GNU/Linux, mais avec quelques modifications pour simplifier la vie des gens pressés) Tout fonctionne out-of-box … Tout sauf le wifi, comme d’habitude.

Cet ordinateur est équipé d’une carte wifi Broadcom BCM94311MCG, format mini-pci, revision 2. Broadcom n’ayant pas fait l’effort de livrer un firware et des pilotes fonctionnels pour les plateformes GNU/Linux, il est nécessaire d’utiliser NDISwrapper pour faire fonctionner le réseau sans fil.

Voici comment procèder étape par étape, pour faire fonctionner ce matériel sur une Ubuntu GNU/Linux 7.10 (doit fonctionner aussi pour Debian GNU/Linux).

Posted by Cédric Brancourt Sun, 13 Apr 2008 09:01:00 GMT