19 mars 2009
Script et code du video sur Grails
Un menuisier à plus d’un outil dans son coffre. A l’inverse, quand on a seulement un marteau, tous les problèmes ressemblent à un clou. C’est un peu l’état de la situation pour notre développement Java dans les petits développements et à la limite pour les projets de moyennes envergures. Dans le but de garnir notre coffre à outils, nous en sommes à évaluer divers cadres logiciel (framework). Un des plus prometteurs est Grails (http://www.grails.org ), un framework inspiré de Rails, que j’ai beaucoup aimé, mais qui est un peu compliqué à introduire dans une grande entreprise en raison du langage sous-jacent : Ruby.
Grails utilise la même philosophie de « convention over configuration » que Rails, mais fonctionne dans un environnement Java (JEE) standard. Comme nous utilisons Tomcat et WebSphere comme environnement de déploiement, Grails est très intéressant. C’est cependant sa simplicité et sa rapidité de développement qui en font un outil de premier plan pour nos besoins.
Dans la suite du document nous allons bâtir une application simple de suivi d'un portefeuille de projet.
Un environnement de développement en 20 minutes
Pour débuter le développement, il s’agit d’installer le JDK le plus récent (1.6.0_12) et spécifier les deux variables d’environnement PATH et Java_Home et de vérifier que Java peu être invoqué à la ligne de commande.
java
Ensuite, on installe Grails et on ajuste le PATH et on spécifie le Grails_Home et on vérifie que Grails est correctement installé.
grails help
Pour les besoins de rapportage nous allons utiliser JasperReport. Pour créer les rapports nous installerons iReport.
Comme nous utiliserons la base de données HSQLDB pour la démo, il faut copier le driver HSQLDB (1.0.8) de Grails dans celui de HSQLDB (1.0.7) afin que les deux utilisent la même version.
En incluant les temps de téléchargement, vous devriez être à pied d’œuvre en une vingtaine de minutes.
Une première page avec validations
Pour la majorité du développement nous allons utiliser une fenêtre de commande DOS.
Créez un nouveau répertoire pour l’application :
mkdir demos
Créez l’arborescence, le squelette, de la nouvelle application (appelons là « gest »)
grails create-app gest
Allez dans le nouveau répertoire
cd gest
Créez une classe pour l’entité de projet
grails create-domain-class projet
Avec un éditeur de texte ajoutez les attributs de la classe projet (dans /grails-app/domain) et sauvegarder les modifications.
String nom
String unite
Integer noProposition
String urlProposition
Integer mehari
A ce point ci nous avons une classe de « model » du pattern MVC (model-view-controller). Cet objet persistant peut déjà être utilisé par programmation. Nous allons cependant ajouter le contrôleur et la vue qui nous permettrons d’interagir avec la classe via une page web en trois ligne.
D’abord, créez le contrôleur :
grails create-controller projet
Avec un éditeur de texte modifier le code du contrôleur de projet (dans /grails-app/controller) et sauvegarder les modifications. Inscrivez :
def scaffold = Projet
Cette ligne de code va créer les vues du MVC de façon dynamique.
Il ne reste plus qu’à lancer l’application
grails run-app
Maintenant que l’application tourne, ouvrez le fureteur à l’adresse suivante, et ajouter un projet.
Voilà, une application fonctionnelle en quelques minutes!
Oui, mais notre travail n’est pas terminé. Nous allons d’abord ajoutez quelques validations. Modifiez la classe de domaine pour « projet ».
static constraints = {
nom(blank :false, maxSize :10, unique:true)
mehari(range:1..4)
noProposition()
urlProposition(url:true)
unite()
}
Sauvegardez les modifications et actualisez la fenêtre du fureteur. Saisissez un nouveau projet sans nom de projet ou avec plus de 10 caractères de long.
On a créé une application fonctionnelle en une dizaine de minutes.
Ajouter une liste déroulante
Nos « projets » sont associés à un « marché ». Nous allons donc ajouter une nouvelle classe et son contrôleur (« marche ») et l’associer à la classe « projet ».
grails create-domain-class marche
Ajouter la propriété « nom » dans la classe « marche »
String nom
Créez le contrôleur
grails create-controller marche
Modifiez le code du contrôleur de « marche » pour que la vue se gère automatiquement.
def scaffold = Marche
Sauvegarder les modifications.
Pour associer Projet et Marche, modifiez la classe Projet en ajoutant la propriété suivante :
Marche marche
Pour que ces modifications prennent effet il faut arrêter l’application et la redémarrer dans la fenêtre de commande.
Ctrl-C
O
grails run-app
Lorsque l’application est redémarrée, rafraîchissez la fenêtre du fureteur.
Ajouter deux marchés, puis un projet.
Notez la liste déroulante qui montre le nom de la classe et l’identifiant.
Comme ce n’est pas très joli, nous allons corriger la situation. Ajouter le code suivant à la classe « marche » (dans /grails-app/domain).
String toString() { return nom}
Notez qu’à chaque modification l’application est réinitialisée. Donc ajoutez deux marchés, puis un projet. Remarquez la liste déroulante.
Pour établir la relation dans l’autre sens, ajouter le code suivant à la classe de domaine « marche ».
static hasMany = [projet :Projet]
Pour s’assurer que les projets sont détruits lorsqu’on supprime un marché, ajoutez le code suivant à la classe du domaine « projet ».
static belongsTo = [marche :Marche]
Voilà une application fonctionnelle en quelques lignes de code. Pour savoir combien, arrêter l’application, dans le fenêtre de commande et faites la commande suivante :
grails stats
Le tout nous aura pris une dizaine de minutes supplémentaires.
Modifier l’apparence
L’application que nous avons créée ne respecte pas nos normes visuelles. Pour les fins de la démonstration, j’ai modifié légèrement la feuille de style. Le but ici n’est pas montrer le produit final, mais simplement comment il est facile de modifier le look de l’application. Essentiellement, j’ai supprimé les images, changé la police de caractère et les couleurs.
Copier le fichier main.css dans /web-app/css
Lancer l’application pour voir l’effet du changement.
grails run-app
Grails supporte divers type de données, pour en faire la démonstration, ajoutez les propriétés suivantes à la classe de domaine « projet ».
Boolean implicationDpas
Date dateDeDemande
Dans le fureteur notez comment les libellés sont construits.
Vous avez remarqué que l’application « perd » ses données à chaque redémarrage, déclenché par les modifications que nous apportons au code. La raison de ce comportement est simple. Par défaut, en développement, Grails utilise une base de données HSQLDB mémoire qui est en mode de recréation. Pour rendre les données persistantes entre les redémarrages, modifiez le fichier de configuration (/grails-app/conf/DataSource).
dbCreate = "update"
url = "jdbc:hsqldb:file:devBD"
Grails peu utiliser toutes les bases de données que Hibernate supporte car sous Grails c’est ce composant qui est utilisé. Dans le même ordre d’idée, on trouve aussi le framework Spring sous le capot. Deux composants qui ont fait leurs preuves dans les grandes entreprises.
Un autre petit dix minutes bien utilisé.
Rapportage et recherche
Nous allons maintenant ajouter un rapport à la page de liste de projet. Pour ce faire nous utiliserons JasperReport qui est fournit en plugin. Pour l’installer :
grails install-plugin jasper
Pour modifier la vue de liste de projet, il faut avoir le code. Actuellement, il est généré dynamiquement à l’aide du « scaffolding » de Grails.
grails generate-all projet
A la fin de la page de liste, ajouter le tag suivant :
<g :jasperReport jasper= «ListeProjet » format= « PDF » name= « Rapport » />
Créez un rapport avec IReport nommé ListeProjet.jrxml et sauvegardé dans le répertoire :
/web-app/reports/
Pour ajoutez une recherche à la page de liste, modifiez le code de list.gsp (en haut de la liste) pour ajouter :
<g:form action="search" method="post" >
<div class="dialog">
<table>
<tr class="prop">
<td class="name">
<label for="nom">Nom de projet</label>
</td>
</tr>
<tr class="value">
<td class="name">
<input type="text" name="nom" value=""/>
</td>
</tr>
</table>
<div class="buttons">
<input type="submit" value="Rechercher"/>
<g:link action="list">Tout afficher</g:link>
</div>
</div>
</g:form>
Ensuite il faut modifier le contrôleur de Projet afin d'ajouter l'action "search" et modifier "list" pour passer le critère de recherche via un flash.
def search = {
flash.nom = params.nom
redirect(action:list)
}
def list = {
if (!flash.nom)
[projetInstanceList: Projet.list(params), projetInstanceTotal:Projet.count()]
else
[projetInstanceList: Projet.findAllByNomLike("%" + flash.nom + "%"), projetInstanceTotal:Projet.count()]
}
Il ne reste qu'a le déployer sur notre environnement de test
grails war
08:43 Lien permanent | Commentaires (2) | Trackbacks (0) | Envoyer cette note | Tags : grails
14 mars 2009
Démonstration de Grails
Depuis deux semaines j'explore avec succès le framework Grails, pour le développement web rapide. Pour vous faire partager l'expérience j'ai monté une série de courtes démo de 5 minutes qui montre comment développer avec Grails.
Après avoir installer je JDK de java et downloadé Grails, (une vingtaine de minutes avec l'installation) on démarre le développement. En cinq minutes on va avoir une application web!
Introduction à Grails from jean desbiens on Vimeo.
Dans le prochain 10 minutes on ajoute une relation à notre principale entité.
Ajout d'une relation from jean desbiens on Vimeo.
Afin de respecter plus les normes de notre entrepise on change la feuille de style CSS de l'application.
Modification du look de l'application grails from jean desbiens on Vimeo.
On ajoute maintenant un rapport PDF avec JasperReport.
Rapportage dans Grails from jean desbiens on Vimeo.
Finalement on ajoute une fonction de recherche et on package le tout pour le déploiement.
Recherche dans Grails et préparation du déploiement from jean desbiens on Vimeo.
12:48 Lien permanent | Commentaires (0) | Trackbacks (0) | Envoyer cette note | Tags : grails, web
16 octobre 2008
Gartner 2008 - 16 oct
Orlando 16 octobre
Extracting value from application from cradle to grave
Je suis juste resté 5 minutes, la présentation démarrait trop lentement a mon goût.
PPM Strategy
Finalement, c'était peut-être moi qui n’étais pas complètement allumé, car celle-là aussi m'a semblé peu intéressante. Pour ceux qui ne le savent pas, PPM veut dire Projet Portfolio Management. Cependant, j'ai noté que le PPM permet ou conduit au APM (pour ceux que ne le savent pas APM veut dire Application Portfolio Managment, ce que nous appelons Gestion de portefeuille applicatif GPA) qui conduit éventuellement au ITPC que je ne suis pas certain de savoir ce que c'est (IT portfolio management?).
What will Google do : Can it reach 100 B$ in 2015
Google est actuellement une entreprise de 23 G$ dont les revenus proviennent principalement du domaine publicitaire. Google en moins de dix ans a amassé des quantités phénoménales d'information (on parle ici en EXObytes) et d'argent (beaucoup de cash actuellement, ce qui est un avantage dans un marché d'acheteur comme actuellement). Elle est aussi un des meilleurs exploitants d'infrastructure. Elle possède un capital et de la propriété intellectuelle de premier plan. Tous ces éléments permettent de croire que d'ici 2015, Google pourrait passer le cap des 100 G$. Google est similaire à WalMart dans la mesure où elle change la façon de fonctionner d'un secteur de l'économie. Nul doute qu'on verra le logo de Google de plus en plus dans le futur.
Keynote de Steeve Balmer de Microsoft
Pendant trois quarts d'heure, Steve Ballmer a répondu aux questions de deux analystes de Gartner. Et il faut admettre que, les questions n'étaient pas sucrées, si le ton était jovial, le contenu des questions et la mise en contexte mettait Ballmer devant un portrait relativement sombre ou agressif. Mais Steeve s'en est tiré avec aisance. Par contre, on a pas appris grand-chose sur la vision d'avenir de MicrosOft, à part le nom "officiel" de la prochaine version de Windows (Windows 7) et que l'on devrait avoir des annonces importantes au PDC08 dans deux semaines, probablement autour du "Cloud computing".
itxpo
One on One with Matthew Hotle
On a abordé ensemble trois sujets : comment développer de petites applications afin de voir comment être productif dans ce domaine, comment passer au niveau 3 du CMMI afin de comprendre la démarche d'implémentation et de prioriser les actions à prendre et enfin comment mesurer la capacité de changement d'une organisation et comment gérer un portefeuille de changement. La discussion fut riche et je vais continuer cette discussion avec Matt dans les prochaines semaines.
The CIO communication handbook
Comme mon one on one avec durait une demi-heure, j'ai manqué la première partie de cette conférence. Cependant, le titre était vraiment approprié. La conférencière présentatait des situations typiques auxquelles fait face le CIO et un plan pour adresser chacune d'elle. Qui fait quoi, quand. Quels messages. Ça ferait un bon livre...
Content in the cloud
Dernière conférence de la semaine à 16h30, avec 15 personnes dans une salle qui peut en contenir 800! Excellent présentateur, mais contenu un peu éparpillé. Je ne suis pas sût d'avoir compris les messages. Mettez ça sur mon compte, la fatigue probablement.
15 octobre 2008
Gartner 2008 - 15 oct
Orlando 15 octobre
25 ways to cut IT costs
Voici quelques idées pour réduire les coûts TI en ces temps difficiles. Couper les coûts liés aux ressources en gelant le nombre de ressources. Couper les ressources externes contractuelles. Écraser la structure organisationnelle en augmentant le ratio gestion/employés qui est typiquement de 1:7 à 1:15 ou 1:20. Encourager la collaboration. Changer vers un modèle de services partagés ou centralisés. Introduire un expert financier sur l'équipe de gestion. Renforcer le rôle de la gestion des relations d'affaires (relationship management). Éliminer les outils, modules ou composants inutilisés. Utiliser le "best for need" plutôt que le "best of breed". Vérifier les factures de vos fournisseurs afin de vous assurer qu'elles respectent les termes du contrat.
Lean IT : a follow up to CMMI, six sigma
Présentation intéressante de Andrews Roswell-Jones qui présentait l'approche "Lean". Lean est essentiellement un cadre d'amélioration continue qui s'applique à toute sorte de contexte, pas uniquement au TI. De fait, Lean vient du monde manufacturier et Toyota en particulier. Point intéressant, la courbe d'adoction typique va typiquement de ISO9001, à agile et CMMI, puis à Six Sigma pour conduire à Lean sur un cycle d'une dizaine d'années. Il est très possible de passer directement à Lean sur une période de 2-3 ans. Note: les pertes ("waste") ("muda") s'accumule aux interfaces entre les processus.
A day in your life in 2028 : its all about community, virtual or otherwise
La plus théâtrale des présentations avec la visite de personnes venues de l'année 2028. Présentation intéressante pour l'exercice pas évident de nous projeté 20 ans en avant. Est-ce que 2008 est si différent de ce qu'était le monde en 1988? Oui et non. On observe cependant une certaine accélération du changement, et l'omniprésence de l'électronique dans nos vies. Projetons-nous 20 ans dans le futur. La géo politique a muté un peu. Le 20e siècle, a été celui des Américains, le 21e en 2008 est celui des Chinois, bien que les USA reste encoure important, comme la Grande Bretagne l'est restée au 20e malgré l'ascension des Américains. Il y a aussi agrégation continentale sur le plan politique avec les Amériques, l'Asie et l'Europe. La géographie aussi évolue avec la fonte de la calotte polaire qui fait monter le niveau moyen des océans. Malgré que la surface habitable diminue un peu, on se tourne vers la lune où nous avons une station permanente depuis quelques années en 2028. La technologie continue d'évoluer et on a maintenant l'impression 3D, donc la possibilité de manufacturer des objets et des outils. Plus profondément, si l'électronique est aujourd'hui omniprésente, en 2028 c'est la connectivité qui est omni présente. On est toujours connecté, tout est connecté en fait et on a des agents logiciels (avatar) qui font des tâches pour nous. Toute cette connectivité fait que le thème clé de 2028 ce sont les communautés, autant physique que virtuelle. "2028 is all about people". Attendez-vous aussi a avoir une "réputation" visible par toute la planète. Et cette réputions inclura un volet environnemental comme votre "carbon footprint". Mais on va encore aller à la toilette en se levant le matin!
Keynote Joseph Eng of JetBlue
Unconcious incompetence : and how to become unconciously competent
Trois pages de notes personnelles pour cette présentation qui a elle seule valaient le déplacement. Elle portait essentiellement sur la gestion du changement. Un sujet qui m'est cher par les temps qui courent. En général Matt Hotle observe qu'on aporte beaucoup de changement dans nos organisations, mais qu'on fait peu pour gérer le changement, si bien que peu de changement apporte des bénéfices et qu'on doit constamment amener du changement pour s'améliorer sur les opérations ("run the business") plutôt que de changer pour adresser de nouveaux besoins d'affaires ("grow the busineess"). La gestion de changement débute par la vision et ce bout là eset généralement assez facile. Mais la suite est plus difficile, comment récompenser les changements de comportement attendu, surtout dans un contexte syndiqué. Le changement nous sort de notre zone de confort, c'est rarement agréable. Et en plus, c'est très personnel. Il faut que JE change. JE, MOI... Matthew Hotle recommande l'établissement d'un centre de compétence en gestion du changement, car il s'agit bien d'une compétence spécifique. La gestion du changement doit focusser sur les personnes plus que sur le changement! En terme de capacité, la plupart des organisations et donc des personnes, ne peuvent gérer que 2 ou 3 changements par année et qu'il faut donc être persévérant. Par exemple, passer du niveau I au niveau III du CMMI prend en moyenne de 3 a 4 ans selon l'expérience de M. Hotle. Quand on pense que la durée de vie moyenne d'un CIO est de 20-24 mois, comment assurer la continuité des initiatives? Une présentation qui est fort intéressante et plusieurs nouveaux articles sur le site de Gartner.
Live, the teardown of a low cost PC : the internals of an ASUS EeePC
Durant cette agréable présentation, Jim Tully, boot un mini-PC, un ASUS EeePC, en 35 secondes. Un bon temps pour un cold boot de Windows XP. La machine vient avec Star Office 3.0. Ensuite Jim met la machine en veille et une dame dans la salle fait un drop test d'une hauteur standard de 3 pieds sans dégâts pour l'ordinateur. Pour rendre les choses intéressantes, Jim fait le même test d'une hauteur d'environ 7 pieds et seulement un panneau de plastique sort de son assise, facilement replacée. Après avoir retiré la pile qui donne un 3-4 heures d'autonomie, Jim démonte l'ordinateur pièce par pièce en commentant sur la fabrication, la qualité des composants et les compromis pour en faire un produit autour de 350$US. Le plus surprenant est l'utilisation de disques solides (2) SSD totalisant une capacité de 12 GB et nous explique leur fonctionnement. Il s'avère que les SSD ont une capacité de réécriture limitée. Dans un cas à 1000 cycles d'écriture et dans l'autre à 10 000 cycles (écrire-effacerécrire...). Le EeePC possède un SSD de chaque type. On a aussi appris que sur le 350$US, la licence de Windows XP compte pour 25$US au lieu des 50$US, un compromis qu'a fait Microsoft pour que ces mini-PC utilisent Windows plutôt que Linux. Cette présentation fut donc un tour de roue relax sur la construction d'un ordi. J'aurais pris les morceaux pour remonter la machine gratuitement et la garder, mais ils ne m'ont pas laissé faire...
One on one Ray Valdes : WPF and Silverlight
Suite a ma discussion avec Nicolas Gall sur l'introduction de .NET dans notre organisation, j'ai voulu approfondir le volet de l'adoption de WPF (Windows Presentation Foundation) à la lumière de l'évolution récente de SilverLight (SilverLight 2.0 est sorti officiellement cette semaine). Ray Valdes, l'analyste qui suit le domaine des RIA (Rich Internet Applications) me confirme que l'adoption de WPF est encore assez lente et que l'énergie de MicroSoft va plutôt vers SilverLight dont l'adoption sur le marché des consommateurs est de l'ordre de 10% selon lui (pour les versions 1.0 et 2beta). Dans les entreprises, comme pour les consommateurs, Flash est présent sur 95%+ des postes de travail. En terme de plateforme de développement des RIA dans les entreprises, disons que 80% n'ont pas fait de choix et que du 20% qui font des développements, environ 60% on choisi Flex (Flash), le reste se partageant entre diverses technos comme Laszlo, Curl et WFP ou Silverlight. On a aussi abordé d'autres plateformes, dont Java et les divers frameworks comme JSF, Struts et GWT (Google Web Toolkit).
ITxpo
Canadian client cocktail

