Posts Tagged ‘Ajax’

Afterwork GWT du 17 Décembre 2008

Thursday, December 25th, 2008

La semaine dernière, avec Pascal, nous présentions une seconde fois l’after work GWT (voir le post précédent pour le 1er afterwork).

Si vous n’êtes pas très saumon fumé ni champagne, mais plutôt Eclipse et Widget, je vous propose de réveillonner avec notre présentation mise à jour, ainsi que les workspaces d’execices et de correction ! ;-)

Ces workspaces sont utilisables sous windows (avec un JDK 5 minimum).

Pour n’avoir aucun problème, vous devrez installer gwt et gwtext C:\dev, selon l’arborescence suivante (des chemins en dur sont présents dans les .launch entre autres) :

C:\dev\gwt\gwt-windows-1.5.3

C:\dev\gwt\gwtext-2.0.5

Pour Linux et MacOsX, le mieux est de récupérer les projets et de corriger les chemins de lancement (.launch).

Le succès était encore une fois au rendez vous, je remercie encore l’organisation côté Valtech Technology Consulting et côté Valtech Training !

Joyeux Noël à tous !

AfterWork GWT : présentations et TP

ParisOnRails du 1er décembre 2008 : ce qu’il s’y est dit ! (après midi)

Monday, December 1st, 2008

suite de Paris On Rails 2008 première partie

Tests d’interface Web avec Rails par Jean Michel Garnier

Jean Michel a commencé par une présentation de RSpec, et a enchaîné sur le TDD JavaScript : Screw Unit pour tester son JavaScript.
Ensuite il a continué sur les tests fonctionnels (plus de la moitié des erreurs apparaissent dans les spécifications fonctionnelles), en présentant Cucumber (ou Rspect Story Runner), framework de tests fonctionnels pour Ruby On Rails (qui va être intégré dans RSpec) , mais peut être utilisable en Java ou .Net via JRuby ou IronRuby.
Cucumber permet un formalisme à la RSpec, aussi bien que FIT (tableaux exécutables).
Pour les tests d’acceptance Web, WebRat (Ruby Acceptance Testing), basé sur HTMLUnit (Java), s’utilise via JRuby, et propose une interface pour plusieurs types de session; dont Webrat::SeleniumSession, une des plus avancées.

Enfin, sont évoqués les serveurs d’intégration continus pour Ruby, comme CruiseControl.rb et Hudson, via JRuby.

Ce qui nous amène à la seconde présentation orientée tests fonctionnels du jour (Gilles t’aurais du venir ! ;-) )

Tests d’acceptance Web à forte valeur ajoutée (par Philippe Hanrigou , de ThoughtWorks)

Les tests d’acceptance Web avec Selenium ou Watir sont compliqués à maintenir, ou sont trop longs à exécuter.
Fit est parfait pour tester le backend, tests du code métier, mais pas pour IHM.
Philippe nous décrit la difficulté de maintenir des tests d’acceptance, et insiste sur le fait que l’ensemble des développeurs de l’équipe doivent prendre en compte la difficulté à maintenir et écrire des tests d’acceptance web, pas juste les nouveaux venus sur le projet !

Pour faciliter le travail, l’outil qu’il utilise est Selenium Rspec Report, qui ajoute des fonctionnalités à RSpec : un maximum d’informations sont remontées : l’état du DOM lorsque le test a planté, un screenshot, les logs Selenium, pour pouvoir mieux suivre les tests d’acceptance et pourquoi ils ont échoué.
Pour accélérer ces tests,q ui peuvent être longs, on peut utiliser Selenium Grid pour paralléliser l’exécution des tests.

Philippe a aussi expliqué que les fixtures rails n’étaient pas la meilleure solution pour initialiser l’état lors des tests fonctionnels.
Pour pouvoir initialiserle domaine métier, pas juste le modèle, il a introduit Object Mother : design pattern pour tests d’acceptance implémenté par Object Daddy et Factory Girls, opposé aux Mocks car contient tout le domaine métier, pas juste un objet !
En conclusion, les tests d’acceptance Web sont difficiles, mais pas insurmontables : il faut paralléliser (avec Deep Test ?), isoler, être le plus précis possible.

Rails Performance par Michael Koriaski, membre de l’équipe core rails

Tout d’abord, a t on besoin d’optimiser ?Si oui, se concentrer sur quels axes d’amélioration ?

A priori, monter en puissance avec l’achat de nouveau matériel est ce qui coûterait le moins cher (sauf si on s’appelle Google ou Microsoft!)

Pour savoir ce qu’il faut optimiser, il faut se baser sur la performance perçue par l’utilisateur, et on se rend compte que le temps de chargement d’une page html représente 0.5% du temps que l’utilisateur attend; les images, les javascript, les CSS, etc… pèsent beaucoup plus lourd dans la balance !

Ainsi, on doit se concentrer sur sur le serveur front qui sert les fichiers statiques !

Enfin, on peut se poser des questions sur son appli rails :

  • Qu’est ce qui est lent ? (on utilise des outils de benchmarks pour le savoir, avec éventuellement un Ruby instrumenté comme Ruby ENterprise Edition pour connaître les allocations des objets)
  • Pourquoi est ce lent ? (essayer d’optimiser les allers retours sur le réseau en se servant des entêtes HTTP, et les Entity tags ce que Rails 2.2 peut faire, on dit au navigateur : “cest bon, t’as déjà la bonne version en cache !”
  • Rendre plus rapide (contrer le syndrome des N+1 requêtes en remaniant ses boucles et relations, régler le Garbage Collector de Ruby (augmenter sa tailel de départ par exemple) , etc…

Interview de David Heinemeier Hansson à Chicago, créateur de Ruby on Rails, via Ichat


Rails 2.2 a de meilleures performances par rapport aux versions précédentes, en particulier l’équipe de développement s’est concentrée sur HTTP (Etag, MemCache, etc..)
Rails 2.2 est compatible avec JRuby et Ruby 1.9, l’équipe essaie de faire fonctionner Rails sur le maximum de serveurs Web (via Rack).
Beaucoup de ménage a été fait, toute le code déprécié a été enlevé.

Liquid : moteur de templates en Ruby par Didier Lafforgue

Inspiré de smarty (issu de la communauté PHP)
Présentation des drops, filtres
S’installe en Gem ou en plugin.
Didier a évoqué un service qui a l’air excellent : hébergement (+git) et déploiement Rails : Heroku.com

La fin


Enfin Thomas Lissajou a amené un débat de clotûre sur le thème : “Agile Web Development with Rails, et vous ?”

Et bien, on découvre qu’il y a 2 groupes dans la communauté Rails : ceux qui en font et en sont convaincus (TDD, tests d’acceptance) et ceux qui considèrent que c’est réservé aux autres projets, car ils n’ont pas le temps ni les moyens; il y a beaucoup à parier que ces personnes, au fil de leur carrière ne tarderont pas à en être convaincu !

J’ai été ravi d’assister pour la 1ère fois à ParisOnRails, vivement l’an prochain !

Paris JUG: MDA & Flex

Thursday, July 10th, 2008

Quelques commentaires sur la soirée Paris Java User Group de mardi dernier, sur le MDA et sur Flex.

(more…)

Les limites du “miracle GWT”

Sunday, July 8th, 2007

GWT au pays des Bisounours
Sentez-vous ce parfum d’euphorie un brin béat qui traverse le web à la seule évocation de GWT, cette propension à parer de qualités la librairie de Google parfois au mépris de toute objectivité ? Ressentez-vous à la lecture des différents articles de présentation l’ombre de ce doute face à cette librairie, dont on vous promet monts et merveille sans contrepartie ? Parfaite intégration avec l’existant, productivité multipliée par 5, la fin des migraines Javascript ? Se peut-il vraiment que tout soit aussi parfait ?
Non, bien sûr que non…
J’avoue ne pas être d’un nature très « groupie », et donc que les superlatifs provoque en moi au mieux un haussement de sourcil interrogateur, et bien plus souvent un réaction de méfiance face au merveilleux que l’on me promet.
Soyons clairs : je pense, je suis persuadé que GWT est une bonne librairie, un très bon outil. Pas moins. Pas plus non plus. En effet, elle résout nombre de problématiques liées aux développements Ajax et Web 2.0.
De là à dire qu’elle ne souffre d’aucun défaut, il y a un pas que je me refuse à franchir. Explication en détail…

Le syndrome de la librairie magique
Comme toute nouvelle librairie, les avantages de GWT ont tendance à en cacher les limites. Souvenez-vous du précédent « Hibernate » : l’accès aux bases de données devenait tellement plus simple que l’on a cru, à tort, que la gestion de la persistance se ferait sans mal, et mieux, sans avoir besoin de comprendre les mécanismes sous-jacents tels que transactions, jointures et accès concurrents.
On assiste ici au même phénomène : la création d’application Ajax est rendu tellement plus abordable avec GWT que l’analyse s’en arrête aux bienfaits sans en mesurer les coûts et les pièges. Ne vous faites pas d’illusion : une connaissance, même partielle, de Javascript et des mécanismes associés reste nécessaire pour éviter toute déconvenue.
A mon avis, GWT, tout comme Hibernate ou Java en son temps, résout 80% des problèmes, mais crée 20% de problématiques nouvelles et complètement inédites qu’il serait malhonnête d’ignorer ou de passer sous silence.

Le mythe de l’intégration avec l’existant
L’un des arguments les moins recevable pour le modeste auteur d’hibernate4gwt que je suis est de dire que GWT fonctionne sans peine avec les applications existantes.
C’est bien entendu parfaitement faux avec toute application Spring-Hibernate (pour rester sur des technos éprouvées).
Le simple fait que GWT ne supporte que la syntaxe Java 1.4 pour la partie JavaScript de l’application interdit d’utiliser annotations et collections typées, pourtant largement répandues dans nos applications. Il en découle l’impossibilité pure et simple d’utiliser les entités du Domaine dans la partie cliente d’une application GWT.
Face à ce problème, la communauté se contente pour l’instant de pis-aller. La plus répandue consiste à convertir les entités du modèle en DTO (data transfer objects) par l’entremise de Dozer, ce qui implique l’apprentissage d’une nouvelle librairie et l’écriture des fichiers de mapping idoines. Avouez que pour une intégration naturelle, on peut repasser…

Et encore, je vous fais grâce des problématiques propres à la coexistence des entités Hibernate avec GWT -/. Pour plus d’info sur ce sujet, je vous renvoie au site web d’hibernate4gwt, où j’ai posté un article sur le sujet…

Une documentation anémique
A la différence d’Hibernate ou de Spring, deux poids lourds de l’Open-Source cités plus haut, GWT ne bénéficie que d’une documentation, disons, sommaire. Quelques pages web couvrant les cas standard, mais rien concernant de manière exhaustive le fonctionnement de la librairie.
C’est d’autant plus gênant que cette librairie contient de nombreux concepts innovants qu’il conviendrait de mieux documenter (je pense notamment aux Serializer et aux Generators) afin d’en encourager l’adoption, l’usage et l’enrichissement.
Heureusement, quelques passionnés, tel Robert Hanson, ont pris le taureau par les cornes et entrepris un large travail de vulgarisation que ce soit sur leur site web (dont Timepedia est sans doute l’un des meilleurs exemples) ou par le biais de livres (le célèbre et pour l’instant relativement unique « GWT in action »), mais cela peut difficilement avoir la valeur d’un manuel de référence estampillé « officiel », nécessaire à l’adoption par le plus grand nombre.

Dans la jungle des widgets
Les composants graphiques GWT affichent une situation paradoxale : le framework en lui-même en propose relativement peu (cf. Kitchen Sink, la démo “officielle” GWT), et les librairies de composants tierces (Open-Source ou non) sont pléthores.
Pourtant, autant on peut faire confiance au caractère professionnel des widgets natifs GWT, autant on est en droit de s’interroger concernant les autres composants : quelle est leur fiabilité ? Leur pérennité ? Gèrent-ils convenablement l’arbre DOM ?
Bref, des interrogations que l’on ne peut évacuer d’un simple haussement d’épaule et qui demanderait une évaluation minutieuse, ou l’émergence d’un standard de fait, ce qui ne semble pas encore le cas.

Programmation graphique : un pas en avant, un pas en arrière ?
Avec sa programmation entièrement en Java et événementielle, GWT nous renvoie un peu à l’ère de Swing, avec ses avantages et ses inconvénients.
Au rayon des premiers, la programmation graphique retrouve enfin son unité, face aux innombrables lnagages nécessaires à une page JSF-Ajax (HTML, JSP, JSTL, Javascript,…)
Concernant les défauts, on notera la fin de la séparation entre design et programmation, tel qu’il avait été introduit justement avec les JSP/JSF.
Plus important, GWT n’est pas structurant en terme de programmation. Il n’existe pas à ce jour de framework standardisant la programmation d’une action, ou les règles de navigation, à la manière d’un Struts en son temps…
Du coup, chaque développeur a l’embarras du choix pour coder le comportement de son application, et au vue du forum officiel, nombreux sont ceux qui sont embarrassés par ce choix p. De plus, les projets y perdent en homogénéité, et donc le retour d’expérience sur telle ou telle pratique sont plus lents.

Conclusion
Ces manques, ces défauts, ne doivent pas vous faire perdre de vue mon propos premier : GWT est un très bon outil, sans doute le meilleur disponible concernant le développement d’application Ajax.
Mais au milieu de toute cette vague d’enthousiasme parfois sans recul, il me semblait important de ramener GWT à un juste statut : celui d’une librairie, utile et productive certes, mais dont l’adoption ne se fera pas sans impact…

Rich Ajax Platform

Monday, March 12th, 2007

“ou comment Eclipse valide le comportement de GWT”

A quoi reconnaît-on une bonne idée ? Au nombre de copies qu’elle génère ;)

Eclipse mets en avant sa Rich Ajax Platform, en réalité plus proche d’Echo2 que de GWT : à chaque action utilisateur, le serveur est sollicité via Ajax et renvoie au navigateur le code de présentation. En fait, l’idée maitresse semble ici d’étendre SWT au client léger.

Le gros avantage de RAP (tout comme Echo2) est l’utilisation possible de tout le JDK sans restriction. Par contre, la sollication systématique du serveur me semble le point faible de la solution…

Au delà de son succès éventuel, L’apparition (ou du moins la confirmation) de cette librairie tend en tout cas à démontrer que les jours des développements JavaScript sont comptés, et que l’encapsulation Java du code client sera bientôt la norme, avec GWT ou un autre…

Une vraie bonne nouvelle en quelque sorte !

GWT, le développement ajax pour les nuls

Friday, January 12th, 2007

L’ami
Sami
a bien décrit notre récente expérience de développement d’un projet "Web
2.0" avec GWT. Je rajouterai quelqes liens vers des ressources GWT qui facilitent
le développement. Les composants de base du framework sont nombreux mais la communauté
autour de GWT est très active.

  • GWT Widget
    Library
    : composants pour la couche cliente (DataGrid avec pagination/ sorting,
    intégration de Google Maps) et serveur (intégration de Spring). Comme beaucoup d’autres
    composants la documentation est presque inexistante, la consultation du forum de GWT
    est indispensable. 
  • Rocket : plus axé
    vers les composants graphiques
  • Ajax solutoire :
    un site consacré aux technos Ajax avec ue rubrique GWT
  • gwt-powered :
    annuaire de widgets et composants GWT, contient aussi une liste de sites construits
    autour de GWT. 
Technorati tags: ,