Mise à jour de mon environnement de développement
Il était temps pour moi de mettre un peu à jour mon environnement de développement, c’est-à-dire installer ce qui me manquait, mettre à jour ce que j’avais et pour finir faire le ménage dans ce que je n’utilisais pas. Je développe principalement en Ruby et pour Ruby on Rails, mais fait également du PHP et ai parfois un script en Perl ou Python ; sans oublier le Javascript et le XHTML / CSS. Il faut ajouter à cela une base de donnée (MySQL) et quelques besoins particuliers en matière de communication réseau.
Pour rappel mon desktop professionnel est sous Linux / Gentoo et celui que j’ai chez moi sous Windows (j’apprécie pouvoir jouer à des jeux vidéo dans de bonnes conditions) ; j’essaie dans la mesure du possible d’avoir les mêmes outils sur les deux machines bien que ma console et tous les outils que j’y trouve me manque quand je suis chez moi.
Pour commencer le gestionnaire de version. Tous mes projets sont gérés avec subversion, ce logiciel est pour moi indispensable au bon déroulement du développement, premièrement pars qu’il me permet de synchroniser correctement mes deux postes de travail (bureau et domicile) quand je suis seul sur un projet et de même quand on est plusieurs (même si ce n’est qu’un développeur et un graphiste). Je n’entrerai pas dans le détail de l’utilisation d’une application de ce type qui apporte aussi bien d’autres avantages (suivi des modifications, possibilité de revenir en arrière, gestion de différentes branches de développements, …).
J’ai adopté Eclipse comme IDE car il offre des plugins qui intègrent les différents langages dont j’ai besoin. Il est agréable de ne pas changer de logiciel et donc de méthode de travail à chaque fois qu’on passe d’un projet à un autre (ou d’un système d’exploitation à un autre) et l’environnement de base est très bien foutu. J’ai bien réduis le nombre de plugins que j’utilise en installant Aptana (attention il y a actuellement deux plugins à installer : Base + Ruby & Rails). Celui-ci offre donc tout ce dont j’ai besoin pour PHP, Ruby, Rails, HTML, CSS et Javascript. A ceci il faut ajouter subclipse pour gérer mes projets sous subversion, EPIC pour l’intégration de Perl (je viens de l’installer, je n’ai donc pas plus d’avis que ça dessus) , PyDev pour Python (que j’ai déjà utilisé par le passé et que je viens d’installer à nouveau) et Mylar.
Il me faut naturellement un Navigateur web et j’utilise donc principalement Firefox. J’y ai ajouté quelques extensions qui vont bien tel que Web Developer et Firebug (j’ai enfin cherché pourquoi il ne fonctionnait pas sur ma machine et en fait il faut compiler Firefox avec le USE Flag « mozdevelop » ) ainsi que Tab Mix Plus (dont certaines options sont bien agréables) et le dictionnaire MySpell en français ;-). J’en ai d’autres, mais elles ne sont pas là pour le développement (FlashGot, Google Brower Sync, Google Gears, Google Reader Notifier, coComment).
Enfin j’ai un serveur Apache et MySQL qui tournent et PhpMyAdmin pour gérer les bases de données.
Ma machine sous Linux m’offre également une flopée d’outils bien utile que je regrette quand je suis sous Windows. Il faudrait également que je prenne parfois le temps de me tenir au courent afin d’éventuellement pouvoir adopter de nouveaux outils… Si vous avez des suggestions n’hésitez pas :-)
Préparation de Paris on Rails 2007
Richard Piacentinia débuté l’organisation de l’édition 2007 de Paris on Rails qui est, comme son nom l’indique, une conférence sur Ruby on Rails.
Je n’avais pas peu me rendre à la première édition en novembre dernier mais j’ai eu l’occasion de rencontrer Richard quelques semaines avant lors d’un séminaire sur le web 2.0 et je me réjoui de pouvoir être présent cette année. On se dirige vers une organisation sur 2 jours et chose importante à un prix toujours abordable (en particulier pour les privés), si vous voulez suivre l’évolution de l’organisation ou avez des suggestions, n’hésitez pas à vous rendre sur le forum dédié.
Mais pas d’inquiétude je vous en reparle bientôt.
En passant j’en profite pour rappeler la prochaine réunion de romandie.rb qui se tiendra ce jeudi et qui aura pour thème une introduction à RoR (non ce n’est pas moi qui m’y colle).
Ruby On Rails est ce qu’il vous faut !
Ruby On Rails est un framework de développement qui a la cote et c’est tant mieux ! Je suis tombé dedans il y a deux ans et il est au cœur de la stratégie de ma société, Liquid Concept, depuis plus d’une année maintenant. Je constante que nous sommes de moins en moins seul dans le paysage Romand à faire ce choix et la création du Ruby User Group pour cette région est un signe que le langage gagne en popularité et reconnaissance ; car si beaucoup le découvre avec RoR, c’est bien Ruby qu’ils adoptent.
Avec le développement de notre plateforme d’hébergement pour les sites de nos clients et ma participation au développement de Globalize j’ai aujourd’hui l’expérience et le recul nécessaire pour pouvoir dire que nous avons fait le bon choix. En cas de besoin vous savez d’ailleurs où me trouver mais en attendant je vous conseil la lecture de cet excellent article d’Ib Com.
Rails 1.2.2 et petite note sur Globalize
La Version 1.2 de rails est sortie il y a maintenant plusieurs semaines, voici la 1.2.2 après que la 1.2.1 ai suivi de quelques heures sa grande soeur, ces versions mineurs ne corriges que quelques petits problème, pas besoin de s’étendre dessus plus que ça.
Au sujet de Globalize plusieurs nouvelles têtes ont été intégrée ces derniers temps. Nous sommes en train de préparer une release pour la version 1.2 de rails, tout les testes passent mais il nous reste à faire quelques mises à jour dans la documentation. Je vous tient au courent mais ça ne devrais pas tarder.
Nous préparons également l’intégration de nouvelles fonctionnalités, Saimon doit ajouter son système alternatif de storage et il faudrait vraiment que je merge l’extension développé par Liquid Concept dans le trunk ce que je n’ai pas encore eu le temps de faire. J’espère pouvoir m’y mettre bientôt.
Geni, et si vous faisiez votre arbre généalogique ?
TechCrunch nous parle de Geni la nouvelle startup de David Sacks le créateur de PayPal.
Cette société propose un outil pour vous aider à faire votre arbre généalogique, l’interface tout en flash est très bien faite et son utilisation très agréable (même si j’aurai préféré une technologie plus accessible). En arrivant sur le site vous donnez votre prénom, votre nom, votre email et votre genre, voici votre compte créé. Il vous suffit maintenant d’ajouter un membre de votre famille en donnant son prénom et son nom, votre père par exemple et si vous spécifiez également son email il recevra automatiquement un message l’invitant à rejoindre le site et à compléter l’arbre si il le souhaite. Chacun peut également ajouter des informations sur lui (date et lieu de naissance, description, biographie, intérêts, …) et bien sur ajouter d’autres membres à la famille en les invitants à venir eux aussi compléter celui-ci.
Ce n’est pas le premier site du genre, il existe déjà MyFamily.com que je n’ai pas essayé et un projet encore en béta du nom de Zooof qui à l’avantage d’être multilingue (Je vais voir si je peut avoir un accès à celui-ci et vous en parlez prochainement mais le principe est le même apparemment, s’inscrire, ajouter les membres de sa famille et les inviter à venir compléter le réseau familial). Si vous en connaissez d’autres, faite-le savoir.
A titre personnel je ne connais que très peut (voir pas du tout) l’histoire de ma famille et mon arbre généalogique ne va pas plus loin que mes grand-parents, c’est quelque chose qui m’a toujours intrigué et je voudrais bien en savoir un peut plus, peut-être l’occasion de m’y mettre ?
Autre chose, après avoir vu la page de maintenance je soupçonne cette application d’être développé avec Rails. Il est en tout cas plus que probable que Capistrano soit utilisé pour le déploiement, le code source de la page de maintenance étant identique à celle par défaut (à l’exception d’une image supplémentaire).
Rails 1.2, quoi de neuf ?
Avec l’arrivée de cette nouvelle version de Ruby on Rails nous avons droit à notre lot de nouveautés, je ne vais pas reproduire le changelog ici mais voici les innovations majeurs de cette mouture, pour le détail, direction le site de développement.
ActiveRecord
- Ajout de la possibilité de passer un Hash en paramètre à la méthode find pour l’option conditions. Chaque clef du Hash correspond à un attribut et ils sont joint par des AND.
- Ajout de la méthode find_or_initialize_by_X qui complète find_or_create_by_X en retournant un nouvelle objet si la recherche ne donne pas de résultat mais sans le sauver.
- Passé un record ou une liste de record à une conditions extrait directement les id.
Model.find(:all, :conditions => ['item_id IN (?)', items])
Model.find(:first, :conditions => ['item_id = ?', item])
- Autorise niq => true avec une association has_many :through.
- Il est maintenant possible d’ajouter un record à une association has_many :through avec les méthodes <<, push et concat en créant le record de jointure.
- Ajout du support de delete à l’association has_many :through.
- L’association has_one support le paramètre dependent avec les options destroy, delete, et nullify.
- Il est possible d’obtenir un lock exclusif sur un enregistrement en utilisant le paramètre lock des méthodes de recherche ou avec la méthode lock! d’un record.
ActionPack
- Il est maintenant possible d’accéder aux attributs avec RJS.
page['foo']['style']['color'] = ‘red’ # => $(‘foo’).style.color = ‘red’;
- Les formulaires fonctionnement comme des blocks (et non plus avec end_form_tag).
- Ajout des mois et années à la méthode distance_of_time_in_words.
- En cas d’erreur le fichier 500.html est rendu par défaut.
- Il est possible d’exclure certaine extensions du rendu avec layout.
- RESTful tient compte automatiquement de la valeur de params[:format] si il est spécifié.
- Il est possible d’enregistrer de nouveaux MIME types pour une extension.
- Ajout du filtrage de certains paramètres et attributs dans les logs avec filter_parameter_logging (password par exemple, ).
- Le système de routage a été réécrit.
- Dépréciation de certains méthodes, il faut maintenant utiliser les méthodes et non pas les variable de classe tel que @session ou @request.
ActiveSupport
- Il est possible de faire en sorte qu’une constante soit réinitialisé après chaque requête avec Module#unloadable.
- Avec Module#alias_attribute il est possible de créer des alias pour les attributs.
- Enumerable#sum calcule une somme depuis un Array.
- Array#to_s(:db) produit une liste séparé par des virgules.
- Il est maintenant possible d’utiliser Module#alias_method_chain au lieu de deux fois Module#alias_method.
- Division dûn Array avec split.
- Création d’un Hash avec from_xml.
Globalize Rails Core team
Nous utilisons Ruby On Rails depuis maintenant quelques temps le cadre de mon entrepise pour de développement de Pulp. Nous avons très vite eu besoin de contenu multilingue et avons donc choisi d’utiliser l’extension Globalize que nos besoins nous on poussé à quelques peut modifier et améliorer. Changements que nous avons naturellement publiés.
Il y a quelques semaines un utilisateur nous a contacté (mon associé olivier et moi-même) afin de nous demander si nous serions intéraissé par rejoindre l’équipe de developpement de Globalize, il n’en fait lui-même pas parti et n’estime pas avoir les connaissances qu’il faut pour le faire, mais puisque Josh (créateur de l’extension) à demandé de l’aide il s’est permi de nous contacter.
Et il à bien fait. Nous n’y avions pas vraiment penssé, mais maintenant que quelqu’un nous en parlais il nous a semblé intéraissant d’intégrer nos modifications et d’aider à sa mise à niveau d’une extension qui était primordiale pour nous. La dernière version de rails à en effet apporté beaucoup de nouveautés avec lesquels le multi-linguisme ne fonctionne pas. Nous avons donc contacté Josh et l’affaire s’est très vite conclue. Aujourd’hui nous avons mis en place un nouvelle hébergement (par nos soins) pour les sources et un Trac (http://trac.globalize-rails.org), un nouveau wiki hébergé chez stikipad est en phase de remplissage et devrait remplacer l’ancien d’ici quelques jours. Nous également avons mis en place des tests continues et enfin fait passer les tests au complet.
L’équipe de développement de Globalize se compose aujourd’hui de quarte personne : Josh Harvey, Jeremy Voorhis, Olivier Amblet et Yann Lugrin. Nous allons travailler à l’intégration des nouvelles fonctionnalités de Rails et de nos modifications ainsi que naturellement à la correction des problèmes existant.
Rails, version 1.1.2
Les versions 1.1.1 et 1.1.2 de Rails sont sorties rapidement afin de corriger quelques bug et améliorer la compatibilité des applications tournant sur 1.1.0.
La version 1.2.0 est lancé dans le trunk de subversion, une branche stable a été créé afin de pouvoir corriger d’éventuelle problèmes sur la version actuelle mais plus aucune nouvelle fonctionnalité ne sera ajouté.
Rails 1.1, quoi de neuf ?
Le 26 mars 2006, il y a maintenant quelques jours, la version 1.1 de Ruby On Rails est sortie en version stable après avoir passé quelques jours par le stade de Release Candidate.
Pas de précipitation
Cette nouvelle mouture apporte un grand nombre de nouveauté et un certain nombre d’applications et plugins ne fonctionne plus avec. Il est donc fortement conseillé de faire un freeze de rails pour les application en production avant de faire une mise à jour. Pour ceci il existe plusieurs méthodes :
rake rails:freeze:gems
Exporte la version courente de rails dans vendor, attention si vous avez déjà mis à jour rails sur la machine cette méthode ne fonctionnera pas.
rake freeze_edge REVISION=3303
Exporte la version 1.0 depuis le svn de rails, cette méthode permet d’être certain d’avoir la bonne révision.
Les deux méthodes ci-dessus sont idéal pour figer une application en production tout en travaillant avec une autre version de rails sur une machine de développement. Mais il est également possible de faire ceci directement dans svn via la propriété svn:externals pour que les checkouts de l’application soit automatiquement accompagné de celui de la version 1.0 de rails.
Editer la propriété svn:externals du répertoire vendor et y ajouter la ligne suivante comme suis :
svn propedit svn:externals vendor
rails http://dev.rubyonrails.org/svn/rails/tags/rel_1-0-0
Au prochain update rails sera mis à jour dans vendor.
A noté que cette méthode est très utile si on veut travailler avec une version particulière du trunk pour bénéficier de nouveautés mais qu’il faut être prudent puisque des problèmes peuvent survenir.
Ruby 1.8.4
Il est fortement conseillé de passer à ruby 1.8.4 lors de cette mise à jour mais RMagick apporte quelques problèmes. La RC1 de l’installateur pour windows est disponible et une version béta compilé de RMagick pour la 1.8.4 également. Si vous utilisez RMagick et que des tabulations se trouvent dans vos fichiers rhtml il faut les remplacer par des espaces ou attendre que le problème soit résolu avant de faire cette mise à jour qui n’est pas indisspenssable (seul console de rails ne peut fonctionner sans celle-ci).
Alors quoi de neuf ?
Et bien beaucoup de choses, pour commencer plus de 500 problèmes de la version précédente ont été résolu. Mais c’est surtout l’arrivé de RJS (template javascript), d’importantes nouvelles fonctionnalités dans ActiveRecord, respond_to permettant une meilleur intégration des différentes méthodes d’accès au controlleur (AJAX, non-_AJAX et API) et enfin l’apparition des testes d’intégrations qui viennent compléter les testes unitaires et fonctionnels.
Railties
- Le format par défaut du schema de la base de donnée est maintenant ruby et non plus sql
- script/process/spinner n’existe plus et est remplacé par l’option
-r/--repeatsur script/process/spawner - L’environnement de test est forcé lorsque les tests sont effectué.
- La page par défaut index.html donne maintenant des informations sur rails via AJAX et Rails::InfoController
- Un fichier public/javascripts/application.js vide est maintenant créé et automatiquement inclue dans les pages par le helper
javascript_include_tag :defaults. On peut y mettre du code javascript spécifique à l’application - script/console à maintenant une méthode
reload!afin de recharger les models, les helper y sont également disponible - Les tâche dans rake ont maintenant un namespace, par exemple
load_fixturesdeviensdb:fixtures:load. Les anciens nom sont toutefois encore utilisable etrake --tasksvous donnera la liste des nouveaux noms. A noté que db:fixtures:load FIXTURES=peoplepermet maintenant de charger exclusivement certaines fixtures dans l’environnement- Il est maintenant possible de ne lancer que les tests pour les changements depuis le dernier commit via
test:uncommitted
ActiveSupport
- Chaque objet à maintenant la méthode with_options qui permet de faire plusieurs oppérations sur le même objet dans un block avec des paramêtres par défaut
- La méthode to_json renvoie une représentation peut renvoyer la représentation sous la forme d’une chaine JSON de chaque objet
- Les objets enumerables ont maintenant une méthode group_by pour grouper les collections sur la base du résultat d’un block
- Le type Array à maintenant la méthode in_groups_of qui permet de faire une itération sur des groupes d’une certaine taille
- Les types Hashes et Array ont maintenant une méthode to_xml
- Ajout de la métode secondes au type _Fixnum pour permettre de faire
5.minutes + 30.seconds - La nouvelle méthode diff du type Hashes permet de connaitre la différence entre deux hash
- Time à une nouvelle méthode beginning_of_quarter
- Le support de la délégation permet de délégué l’appel d’une méthode d’un model à une association
- Object#copy_instance_variables_from(object) copies les variables d’instances d’un objet dans un autre
- Object#extended_by permet de connaitre les modules inclue ou étendue par une instance
- Object#extend_with_included_modules_from(object) étend une instance avec les modules d’une autre instance
ActiveRecord
- has_many :through permet de faire une association à travers une autre (documentation).
- Les Association polymorphique (explications)
- with_scope (explication)
- Nouvelles méthodes de calcul sur les attributs d’un modèle (introduction)
- Chargement en cascade des données se qui permet d’avoir en une seul requête touts les auteurs, leurs messages et les commentaires dans la requête suivante par exemple :
Author.find(:all, :include=> { :posts=> :comments }) - Héritage par find des options spécifiés lors de la déclaration d’une association has_many et has_and_belongs_to_many
- Représentation XML des données avec la méthode to_xml
- validate_uniqueness_of peut maintenant associé plusieurs colonnes
- t => :delete_all remplace xclusively_dependent
- find pour has_many et has_and_belongs_to_many à maintenant les options , *:limit, * et *:select
- Les fixtures peuvent être placé dans des sous-répertoire de test/fixtures
- validates_length_of fonctionne avec UTF-8
Actionpack
- Template RJS, en plus des templates .rhtml (Ruby HTML) il est maintenant possible de créer des .rjs. Il est donc possible d’écrire des templates avec du code ruby pour générer du code javascript (Documentation)
- alert, fait apparaitre une fenêtre de dialogue
- redirect_to, redirection javascript
- call, pour appeler une fonction javascript
- assign, pour assigner une valeur à une variable javascript
- replace, pour remplacer le code html d’un élément
- insert_html, pour inssérer du code html dans un élément
- visual_effect, pour déclancher un effet visuel
- hide, pour cacher un élément
- Il est possible de se référer à un élément
- select, pour séléctionner un élément avec le séléecteur CSS
- drag and drop
- delay, exécution avec un délai
- Exepetion RJS via une fenêtre de dialog
- Méthodes énumérable
- Il est également possible de générer du code javascript à ajouter dans une vue directement depuis un controller
- Possibilité de créer des Helpers RJS pour mettre à jour un block
- Une action dans un controller peut maintenant répondre à plusieurs type de service (html, xml, javascript via la méthode respond_to
- Possibilité de modifier le parsers de paramêtre en fonction du content/type reçus
- De nouveaux helpers pour formulaire (form_for, form_remote_for, et fields_for)
- Tests d’intégrations. Ceux-ci permettent de tester plusieurs controlleurs et actions de façons successive et le fonctionnement complet de l’application depuis le dispatcher jusqu’à la base de donnée. Ils permettent également de tester des accès concurents à l’application via plusieurs session.
- render(:xml => xml) fonctionne comme render(:text => text)
- Ajout de l’option content_type à la méthode render
- Les fichiers contenant les Helpers ne sont plus obligatoire
- Il est possible de spécifier une autre sélection que la valeur de l’objet au helper select grace à l’option selected
- button_to_function fonctionne comme link_to_function
Prototype
- Nouvelle classe de séléction
- De nouvelles méthodes ajouté à String : truncate, gsub, sub, scan et strip
- Ajax assigne ‘text/javascript, text/html, application/xml, text/xml ’ au header HTTP Accept pour informer Rails qu’il préfaire un RJS en retour mais accepte les autres formats.
- Element.replace est une implémetation de outerHTML fonctionnant sur les différents navigateurs
Cette article est basé sur un poste en anglais de Scott Raymond. Il ne reprend pas la totalité des nouveautés qu’il a cité et aucun des exemples de code. Je vous invite à le lire pour plus d’information. Vous pouvez aussi vous intéraisser au poste de Mike Clark, toujours en anglais et qui fait une liste de modifications oublié de cette nouvelle version.
