samedi 13 septembre 2008

ActiveRecord : installation

Etape 1 : téléchargement de Castle

J'ai dégagé une après-midi entière pour me consacrer (seul) à quelques expériences avec l'ami ActiveRecord.

Tout commmence par le téléchargement de Castle, via une URL accessible pour Tortoise SVN que m'a refilé l'ami Gildas.

Tortoise SVN ? C'est un client SVN pour Windows.

SVN ? Un des outils de contrôle de source les plus utilisés.

Le contrôle de source ? Ca consiste principalement à archiver les modifications sur une ensemble de fichiers source au fur et à mesure, pour garder les anciennes versions sous le coude, identifier qui à modifié tel module quand on travaille à plusieurs, verrouiller un fichier pour éviter des modifications concurrentes, etc.
Indispensable en développement, au moins autant que la cafetière, c'est dire !

L'URL des sources du projet 'trunk' (tronc commun) de Castle est la suivante :
http://svn.castleproject.org:8080/svn/castle/trunk
10mn et 27Mo plus tard, c'est terminé. Efficace !

J'en profite pour ajouter une autre URL qui contient les projets de contribution, qui me serviront plus tard :
http://svn.castleproject.org:8080/svn/castlecontrib/


Etape 2 : première compilation de Castle

Une fois les fichiers récupérés, un petit 'VSNET.Readme.txt' m'apprend qu'il faut d'abord faire une première compilation pour insérer le projet dans une solution Visual Studio. Et pour ça il faut NAnt.
Damned ! C'était trop facile... bon, c'est parti pour télécharger la dernière version stable de NAnt (0.85).

NAnt est un outil qui permet d'automatiser la compilation de fichier. Originalement appelé Ant et visant le Java, une version est sortie spécifique à la plateforme .Net appelée NAnt. Pour ceux qui connaissent, c'est un genre de make ou makefile, avec des outils en plus.

Après une courte lecture du readme.txt, je vois qu'il se lance en ligne de commande et qu'il va chercher un fichier .build dans le répertoire. Je rajoute donc le répertoire contenant l'exécutable nant.exe dans la variable d'environnement PATH, histoire que ça fonctionne en ligne de commande depuis n'importe quel répertoire.

Retour au répertoire de Castle, exécution de la ligne de commande 'nant' (ca me semble trop facile...) et là "ERROR : NUnit not found". Je le savais bien que c'était trop facile. Je maudis intérieurement l'open-source et son incapacité à délivrer des produits finis et packagés pour les utilisateurs lambda... comme si tout le monde utilisait NUnit !

NUnit est un framework permettant de créer facilement des tests unitaires, afin de valider que les différentes évolutions sur le développement d'un produit n'ont pas causé d'effets de bord sur une autre partie.

Aucune envie d'installer NUnit pour l'instant. Je viens de me souvenir que Gildas me suggérait d'outrepasser les tests unitaires à la compilation. Recherche dans le 'How to build.txt' de Castle : il faut utiliser la commande 'nant quick rebuild'. Et c'est reparti pour une exécution en ligne de commande, mais là nouvelle erreur !

NAnt ne trouve pas l'utilitaire AL.EXE, et il en a besoin. Avez-vous correctement installé le framework.Net 2.0 SDK ? (traduction personnelle). Je retient une envie furieuse de frapper l'écran.

Après une courte pause méditation, je décide très calmement d'installer le framework 2.0 SDK, qui fait... 377Mo ! Bon... bein c'est parti pour une seconde pause.

Le téléchargement s'achève, l'installation fonctionne parfaitement, merci Microsoft (je ne le dirai pas tous les jours). Je relance pour la troisième fois ma commande de compilation, et là... ça tourne...

La compilation s'achève enfin
! Et le plus drôle c'est le message qui s'affiche à la fin : BUILD SUCEEDED, Total time 11,3 seconds. La blague ! Je dirais plutôt dans les 1h40...


Etape 3 : compilation d'ActiveRecord dans VisualStudio

Après la compilation, il reste à créer ma solution de test sous Visual Studio, y intégrer ActiveRecord et commencer à coder...

Pas de surprise à la création de la solution. C'est parfaitement conforme à ce qui est requis dans la documentation d'ActiveRecord. J'ajoute le projet 'ActiveRecord', puis 'Castle.Core'. Et je termine en ajoutant au projet 'ActiveRecord' les références aux dll qui sont fournies :

  • nhibernate.dll
  • log4net.dll
  • Iesi.Collections.dll

Ca compile très bien. Je vais pouvoir coder. Mais coder quoi........ ?

lundi 8 septembre 2008

Castle & Monorail : premiers pas

Le travail est un trésor. Le travail des autres, cela va de soi.. (Henri Jeanson)

Mise à jour logicielle

Première approche de Monorail : j'ai tout à réinstaller !

Gildas m'a montré une partie du projet sur lequel il travaille en ce moment, un site de jeu flash (Octogames.fr).

Il se sert de pas mal d'outils, de frameworks divers et variés, et le tout cohabite joyeusement sous VS.Net 2008 en se servant du framework.Net 3.5.

Cohabite ? Oui car les composants de MonoRail sont open-source, ce qui signifie qu'on peut les compiler. Etant un développeur exigeant et curieux, je ne vais bien évidemment pas passer à côté de cette opportunité de voir ce qui se passe de l'autre côté du miroir. Il faut que je travaille avec les sources de ces librairies dans mon projet global. Donc il me faut le framework 3.5

J'ai eu des mauvais retour sur l'intégration du framework 3.5 dans Visual Studio 2005 (que j'utilise en ce moment). Me voilà donc parti pour une longue après-midi de boulot pour mettre tout à jour sur mon ordi de travail.

  • Désinstallation de tous les plug-ins de Visual Studio.
  • Désinstallation des applications qui s'appuient dessus, pour éviter les problèmes de compatibilité.
  • Nettoyage de toutes les applis qui ne servent plus sur mon disque C, car le nouveau VS.Net prend plus de place que l'ancien.
  • Tant qu'à faire, puisque j'ai de la place, profitons-en pour défragmenter...

Inutile de dire que le premier cours sur Monorail a été purement théorique, je n'ai rien pu coder de mes mains.


Concepts

Programmation par attributs

Me voilà bien ennuyé. Comment résumer ce que m'a montré Gildas se perdre dans les détails ?

Pour simplifier je dirais qu'on a commencé par un débat sur le bien fondé de la programmation par attributs, qui s'approche de la programmation orientée aspect au détriment de la programmation orientée objet.

Les attributs permettent d'injecter des méta-données à des classes, ce qui se traduit concrètement par de l'ajout de code ou des comportement aux objets concernés.

Je reconnais que ce mécanisme permet de simplifier certaines parties du code, mais à quel prix ? L'inconvénient majeur c'est de rendre le code un peu plus ésothérique, un peu plus élitiste. Il devient bien plus complexe à appréhender et à maintenir. La quantité d'effets de bords potentiel en devient inquiétante, à tel point que je serait très inquiet de confier le support d'une plateforme sur-exploitant ces mécanismes à un junior.

On a fini par tomber d'accord : à utiliser avec modération

ORM, nHibernate et ActiveRecord

Pourquoi ce délire sur les attributs ? Pour ActiveRecord, le framework d'ORM du projet Castle.

ORM : kesako ?
L'article de wikipédia n'explique pas très bien le concept d'ORM, je vais devoir m'y coller.

L'Object Relationnal Mapping consiste à créer une correspondance entre des tables d'une base de donnée relationnelle et un ensemble de classes dans une librairie programmée en objet.
L'utilisation principal de cette correspondance est la simplification de la persistance d'objets en base, à savoir l'enregistrement et le chargement des données.
Par extension, l'ORM induit (plus ou moins pour éviter les remarques désagréables des puristes) la notion de génération automatisée d'une partie du code objet ou d'une partie du code SQL permettant de créer/manipuler les objets en base.

En bref : tu codes, et la BDD est gérée automatiquement, sans coder une ligne de SQL ou ouvrir ton SGBD ;)
En tout cas, c'est mon but.

Il est temps de corriger ce que j'ai pu écrire précédemment : je ne m'intéresse pas que à Monorail, mais à toute la suite d'outils proposés par le projet Castle.

Monorail c'est la partie interface graphique et rendu web. ActiveRecord c'est la partie d'accès aux données, qui s'appuie sur le célèbre nHibernate. ActiveRecord permet de s'abstraire de la partie configuration de nHibernate par l'utilisation notamment d'attributs dans le code C# pour rendre ses petits objets persistants. Tout un programme !

L'aperçu que j'en ai eu m'a permis de constater que pratiquement tous les cas auxquels je pensais étaient gérés. Je vois donc ce framework comme un outil libérateur, la partie donnée étant le plus laborieux dans le dernier projet sur lequel j'ai travaillé (http://www.lekiosque.fr).

Anything else ?

Non, on va s'arrêter là, je n'ai pas assez creusé les autres concepts qu'on a pu voir lors de notre première session pour en faire une explication cohérente.

Je vais finir la mise à jour de ma machine et installer le projet Castle sur ma machine. La suite pour bientôt.

dimanche 7 septembre 2008

Un complice

L'ami est un complice qui nous aide à nous emparer du monde. (Francesco Alberoni)

Bonne nouvelle pour le projet : un complice souhaite participer à ce projet.

Ca fait un cerveau de plus pour pondre des idées géniales, deux mains de plus pour taper le code, et surtout pas mal de compétences et de connaissances précieuses pour accélérer ma formation dans les techno visées.

Ce complice c'est Gildas. C'est lui qui m'a un peu poussé à m'intéresser à ce nouveau framework de développement web tel qu'est Monorail. Il a déjà codé un intranet avec. Il trouve ça tellement bien qu'il est prêt à évangéliser. Je compte sur lui pour m'aider dans ma formation.

Samedi dernier on a mis les choses au point sur les tenants et les aboutissants, une partie de mes specs étant directement inspirées d'idée dont il m'avait parlé. Ce projet sera donc un point d'entrée, un POC assez conséquent pour la réalisation d'un projet ultérieur.