- D'une part, parce que quelque soit l'évolution de cette JSR, elle sera toujours considérée si un nouveau groupe s'attaque à ce problème de data-binding en Java.
- D'autre part, parce qu'elle propose une API simple et focalisée sur cette unique tâche.
- Enfin, parceque le développeur de cette petite librairie a l'air très motivé !
17 décembre 2008
beans binding dans gwt
11 décembre 2008
Devoxx - an 1
J'espère que vous avez apprécié mon "en direct", si vous trouvez des blogs/docs équivalents sur le net laissez un commentaire, que tout le monde en profite.
Et pour les membres du BreizhJUG, rendez-vous le 5 Janvier pour une session qui sera au couleur de JavaFX.
07 décembre 2008
en direct de Devoxx
Dans les lignes qui suivent, je vais retranscrire "à chaud" (enfin, avec quelques heures de différé) mes impressions sur Devoxx et les sujets que je suis lors de cette conférence.
05 décembre 2008
GWT dessine le Web de demain
A l'occasion de son passage à Rennes pour donner une formation GWT, Sami Jaber nous fait le plaisir d'accepter l'invitation du BreizhJug.
26 novembre 2008
gwt-maven and gwt-maven-plugin merge !
19 novembre 2008
Témoignage Spring
[VOTE] gwt-maven-plugin
Après plusieurs mois de mise au point et de test sur le terrain, je viens de lancer un vote pour une permière version "officielle" de mon plugin GWT pour maven.
15 novembre 2008
un Windows sous license...
Je vais peut être tester Vistual Studio par acquis de conscience, même s'il risque de ne pas trop faire l'affaire pour mes développements Java / Maven, quelque soient les reproches que l'on puisse faire à Eclipse ;)
A l'heure ou je préparais Mme à passer le PC de la maison sous Ubuntu, après avoir converti tous ceux de l'école dont elle est la directrice, en plus de mon eee-pc et du portable qui me permet d'écrice ce billet, je vais donc peut être ré-installer un Windows XP totalement légal sur notre PC de bureau (bien sur, quand je dis "ré-installer", c'est parce que le système est tout vérollé après des années de mauvais usages, pas pour un quelconque problème de licence).
Tant qu'a mettre un pied dans les deux mondes, j'ai égallement installé Office 2003 ... sur mon Ubuntu (merci PlayOnLinux) - et oui, ça marche.
13 novembre 2008
m2eclipse & checkstyle
Mon extension pour m2eclipse commence à fonctionner. Elle permet de lire la configuration Checkstyle à partir du plugin maven et de l'appliquer au plugin eclipse.
11 novembre 2008
Maven passe à Nantes
Le NantesJug organise une soirée Maven, animée par Arnaud Héritier, membre du "Project Development Commity" Maven. Pour ceux qui connaissent mal les raffinements de la fondation Apache, cela signifie qu'Arnaud a gravi tous les échelons de la méritocratie sur le projet Maven et que son vote pèse dans chaque décision majeure.
un pas de plus pour Groovy
08 novembre 2008
ça bouge autour de m2eclipse
Dans le monde opensource on a coutume de dire que la concurrence est bénéfique. Seulement dans ce cas, chacun développe grosso-modo les mêmes fonctionnalités, et sur la base de la même plateforme à quelques détails techniques près.
m2eclipse remporte pour ma part un court avantage (mais ce n'est qu'un avis parmi tant d'autres) : les échanges que j'ai pu avoir avec les développeurs montrent une grande réactivité et une réelle volonté d'ouverture.
Dans mon cas, j'ai voulu ajouter le support de CheckStyle à m2eclipse; autrement dit, une extension m2eclipse qui va lire la conf de maven-checkstyle-plugin et la "traduire" pour configurer eclipse-cs, le plugin Checkstyle pour Eclipse.
Le bon point de départ, c'est que la plateforme Eclipse est conçue pour ce type de greffe de fonctionnalités (les fameux plugins) et m2eclipse ne déroge pas à la règle. Il y a donc une API très simple pour venir participer à la phase de configuration d'un projet Maven sous Eclipse.
La mauvaise surprise, c'est que cete API est un peu trop simple même dès qu'on a besoin de manipuler des concepts maven (classpath, résolution de dependances, ...). Comme il faut en plus découvrir comment se programme le plugin eclipse qu'on désire supporter, ça fait beaucoup de choses. A moins d'être un pro d'Eclipse + un guru de Maven, on en bave !
De rapides échanges avec Eugene Kuleshov m'ont convaincu que :
- je ne suis pas tout seul dans cette galère, et toute l'équipe de dev de maven est prête à apporter aide et conseils
- le seul moyen d'améliorer les choses est de "communiquer" pour que chacun apporte sa petite pierre à l'édifice.
- une page du Wiki qui décrit le principe et les pratiques à connaître.
- un ticket Jira pour permettre à chaque contributeur qui est contraint de réinventer l'eau chaude de "mutualiser" ses efforts.
02 novembre 2008
un processeur Quinte-core
Après le dual-core, puis le quad-core, voici une nouvelle génération de processeur qui va venir motoriser nos PCs de demain : le quintuple coeur.
22 octobre 2008
mon ami Word
L'outil de modélisation UML utilisé n'ayant pas le bon goût de supporter notre format de sortie, nous sommes passé par une solution (si on peut dire) d'une simplicité impressionnante :
- export du modèle UML en XMI (compter 30 minutes)
- lancement d'une transformation XSL:FO pour produire les documents en RTF (compter 15 bonnes minutes)
- utilisation d'une macro word pour la mise en forme (compter 15 bonnes minutes par document)
Comment automatiser tout ça, pour éviter de passer des heures devant son PC à attendre l'étape suivante ?
Pour la transformation XSL, j'ai crée un petit plugin maven basé sur FOP. Ce n'était pas le plus difficile
Pour le reste ... je suis tombé sur le projet JACOB, qui permet de manipuler en Java l'API COM de Windows, et donc de faire de l' "automation" d'applications sous Windows. J'ai donc réussi à :
- lancer word,
- ouvrir le fichier RTF,
- copier/coller son contenu dans le document contenant les macros,
- ... qui sont ensuite exécutées
- et enfin sauvegarder le résultat dans le répertorie cible (ouf!).
Comme quoi, l'automatisation de la chaîne de production n'est pas impossible (parfois juste un peu délicate). Et au final, on pourra avoir une version complète des docs en cohérence avec le modèle UML deux fois par jour.
17 octobre 2008
Androïd : déjà dispo ?
22 septembre 2008
Google Developer Day 08
16 septembre 2008
Breizhjug #1 : le succès au rendez-vous
Didier nous a démontré ses qualités de conférencier, dynamique et enthousiaste, et l'assistance semble avoir grandement apprécié sa prestation vu les nombreux encouragements que j'ai reçus ce matin.
Merci à tous pour votre soutien !
Seul ombre au tableau : j'avais prévu de filmer la session pour la diffuser sur parleys.com, et j'ai lamentablement merdé (disk full) :-/
... ce qui me motive pour faire mieux la prochaine fois, avec une conférence Maven 2 que je co-présenterais avec Raphaël Piéroni. Infos et inscriptions sur www.breizhjug.org
11 septembre 2008
GWTx
GWTx est un projet sur Google Code qui vise à proposer des extensions pour GWT, dans le but de les voir (peut-être) un jour intégrées dans GWT.
l'effet "11 septembre "
03 septembre 2008
Google astique ses chromes
Google a sorti cette nuit son navigateur "Google Chrome".
- Pour la rapidité, le passage par la compilation du JavaScript est la clé.
- Pour la stabilité, le modèle 1 onglet = 1 processus est la solution poussée par Google.
- Pour le temps de démarrage, il suffit d'utiliser le mode "raccourci sur le bureau" de chrome pour comprendre : on lance gMail en un temps record, avec un "navigateur" réduit à sa plus simple expression.
01 septembre 2008
GWT 1.5
Il sera sous peu disponible dans le référentiel Maven, et je vais en profiter pour mettre à jour le plugin associé du projet Mojo.
26 août 2008
eee
Pas question d'installer Eclipse sur cette mini-machine, qui malgré ses 1.6GHz reste très en dessous des PC modernes (mais déjà plus puissant que celui que j'ai à la maison ;-)
Le système linux utilisé est très convivial, même pour un total novice, assez bien francisé, et seul le clavier posera problème (c'est vraiment tout petit !)
Ce billet est donc écrit sur un clavier de 20cm de large, avec de nombreuses fautes de frappe, mais je vais probablement m'habituer.
21 août 2008
Plain Old Binary Services
Les services web sont venu pour nous sauver de tout ces protocoles binaires, propriétaires et non-interopérant qui ont pourri l'informatique depuis tant d'année (alleluïa).
Pourtant, les performances n'étant pas toujours au rendez-vous, et le réseau véhiculant une quantité d'entêtes soap WS-TrucMuch qui fait peur, de nombreux petits malins cherchent à améliorer les choses.
Permière solution : SOAP 1.2 étant basé sur InfoSet (une norme de représentation pour un arbre de données) et non sur XML (une façon textuelle de représenter ce même arbre), rien n'interdit de véhiculer le message SOAP encodé en binaire par FastInfoset. Non seulement le message est très fortement réduit en taille, mais le parsing est nettement plus efficace.
Seconde solution : SOAP over TCP (développé par SUN), disponible pour .NET. Il s'agit cette fois de simplifier la couche de transport, puisqu'on s'est donné comme base de ne pas en dépendre. Donc autant faire au plus simple, et attaquer en TCP - j'attend de pied ferme SOAP sur IP ;-)
En combinant les deux, les perfs deviennent probablement exceptionnelles... Un format d'encodage binaire, basé sur un équivalence ASN.1 du schéma XML, et un transport sur TCP - je ne sais pas pour vous, mais moi ça me rappelle furieusement Tuxedo ou Corba !
Qui réussira à nous faire passer RMI/IP pour du "service web" ?
Google Developer Day '08
Mon inscription - bien que tardive - au Google Developer Day 2008 a été acceptée. Cette journée atelier/conférence autour des outils Google pour les développeurs rencontre un succès qui dépasse largement ses capacités d'accueil, d'ou un passage quasi obligé par la liste d'attente ...
Après l'ouverture de ses APIs de programmation, qui lui permettait de promouvoir ses sites, Google passe la vitesse supérieure avec GWT, Google App Engine, Androïd, plus de nouvelles APIs (Google Visualization, YouTube).
A son habiture, Google essaie d'être présent partout. Nouveaux monopole à la Microsoft crieront certains ! L'avenir nous le dira... mais pour l'instant tous les outils/services de Google sont gratuits !
18 août 2008
GPL : la license des pros
Aujourd'hui, retournement de situation, la GPL devient l'arme numéro 1 de l'entreprise désireuse de porter son outil fétiche. Quelques exemples au hasard :
- L'excellent librairie EXT-JS
- SpringSource Application Platform
- Le framework de Lyria
- et plein d'autres que je vous laisse découvrir...
S'il s'avère que SpringSource à raison avec sa "plateforme", à mi-chemin entre OSGi et JEE, IBM ne pourra pas lui piquer - même par morceaux - pour l'intégrer à Websphere 9.
Retournement amusant de situation pour cette licence pas comme les autres ;-)
des Logs pour GWT
Mais le debogueur ne fait pas tout, et l'utilisation de logs est un complément indispensable.
Petit coup de pub donc pour la librairie gwt-log, qui propose une interface de type log4j pour produire des logs.
Premier point, le code des logs sera totalement supprimé lors de la compilation par GWT pour la combinaison log_level=OFF. Ceci permet donc de ne pas pourrir l'application de production avec des logs. Une "variante" peut être compilée en mode log_level=DEBUG pour le développement, et l'ajout d'un simple paramètre à l'URL permet de la sélectionner - merci la gestion combinatoire du compilo GWT !
Second point, gwt-log sait envoyer ses logs vers à peut près tout ce qu'il est possible d'imaginer :
un [div] de debug, le shell du mode Hosted, la sortie standard (i.e. la console d'Eclipse), ou la console de Firebug pour les amateurs ... Chacun prendra ce qui lui convient le mieux !
En attendant que le projet log4gwt du même auteur murisse, c'est une solution simple, utilisant le mécanisme de compilation de GWT avec intelligence.
13 août 2008
GWT et JPA, main dans la main ?
Pour ceux qui ne connaissent pas, H4GWT permet d'utiliser les entités Hibernate/JPA comme données dans une application GWT, ce qui comporte pas mal de complications techniques, habilement résolues par Bruno Marchesson.
Avec le support de Java5 dans GWT, et une "émulation" des annotations JPA, il devient possible d'utiliser le même modèle métier depuis la couche de persistance jusqu'à l'IHM web. Tout le code de type "contrôles et validation" peut alors être placé dans les setters du modèle, c'est à dire là ou il est finalement le plus logique de le placer !
Je n'ai pas pu tester personnellement (mon projet actuel ne s'y prête pas) mais l'idée me plaît beaucoup et me fait définitivement apprécier le concept phare derrière GWT : un langage et une plateforme pour toute la chaîne de développement.
inutile, donc indispensable
Je viens de découvrir le dernier jeux en Flash, très bien réalisé : labrute.
On s'y combat entre avatars, en mode "spectateur", autant dire un combat de lancé de dés. C'est donc totalement inutile mais absolument incontournable. Si vous avez deux minutes à perdre, venez vous frotter à mon avatar http://cyberloof.labrute.com/
Originalité du jeu (tout de même), la possibilité de revoir les combats passés, ce qui nous offre quelques perles, comme un Microsoft vs Apple.
Je regrette juste de ne pas pouvoir coller mon chocobo préféré comme personnage...
A quand un Final Fantasy en flash ?
31 juillet 2008
Sprechen sie Deutsch ?
Je pars en congé pour une semaine en Allemagne.
Sachant que j'ai fait Allemand première langue, avec 7 années de cours pendant lesquels mes profs se sont acharnés pour me faire comprendre le gérondif, ai-je une petite chance de savoir aligner deux mots ?
Déjà à l'époque j'étais très mauvais en Allemand (j'ai préféré présenter l'option "dessin" au bac), alors aujourd'hui il n'en reste plus grand chose.
Une pub pour des cours de langue dit "il vaut mieux apprendre le français que chercher à comprendre un Français qui parle anglais", j'ai peur de ne pas faire entorse à la règle :-/
update :
De retour d'Allemagne, après une semaine formidable, accueilli dans une famille d'une gentillesse inouïe, j'ai quelques kilos à perdre - la bière Allemande est vraiment excellente - et le retour à la dure réalité est un peu rude ...
Ce jumelage a été une expérience géniale, que je vous recommande si votre ville en propose un, et les 14h de car (!) sont vite oubliées.
règlement à l'amiable
De mon point de vue, 11% de dépassement du budget, un retard conséquent (2 ans depuis le lancement du projet), une méthode purement pifométrique, une comptabilité pitoyable, et enfin une communication minable pour une transparence nulle.
Le médiateur qui s'est chargé du dossier a été très bon, ramenant le calme et ne cherchant pas à enfoncer l'un ou l'autre tout en soulignant les torts respectifs. On s'en sort donc avec une sorte de "50/50" de marchand de tapis, mais au moins l'affaire est close.
Heureusement que ce genre de situation ne nous arrive jamais à nous, Architectes Java ;-)
30 juillet 2008
Didier Girard vous invite à déjeuner
Il lance aujourd'hui un projet sur googlecode : NouvelleCuisine. Il s'agit d'un portail web dans l'esprit d'un Netvibes ou d'un iGoogle, mais développé en GWT et uniquement basé sur des ressources statiques : pas de serveur au sens traditionnel ! Même la configuration se fait via une feuille Google SpreadSheet...
Un portail web pour 0€, infrastructure comprise, qui dit mieux ?
Que va t-il rester aux bon gros serveurs de Portlets ?
Si vous cherchez comme Didier un moyen rapide, élégant et moderne pour classer vos fiches de cuisine, c'est l'une des solutions à tester. Ca marche d'ailleurs pour plein d'autres utilisations ;-)
Amusant aussi de découvrir sur ongwt.com le compte rendu du commité de revue de l'architecture technique - comprendre le coin de nappe en papier de la cafet'.
28 juillet 2008
Didier Girard accepte l'invitation du BreizhJug
Une excelente nouvelle pour le JUG, qui s'offre ainsi une inauguration en grande pompe avec un conférentier de talent sur un sujet "chaud". Si Google avait le bon gout de finalier GWT 1.5 pour cette date ce serait le top ;-)
27 juillet 2008
Google à la rescousse de Struts ?
09 juillet 2008
Un Java User Group pour Rennes
J'ai le plaisir de vous annoncer le lancement d'un Java User Group sur Rennes !
2008 sera l'année des JUGs en france, avec le lancement réussi du ParisJug et du ToursJug, et bientôt des initiatives sur Nantes et Bordeaux, mais on parle aussi de Toulouse, Metz, Brest ...
J'ai le plaisir de présider le BreizhJug et en conséquence de rechercher activement sponsors et conférenciers. Si l'aventure vous intéresse, que vous voulez présenter votre travail lors d'une de nos réunion, ou que vous connaissez quelqu'un que ça pourrait intéresser, ou encore que votre société cherche à promouvoir une image "techno-innovante" et est prète à nous épauler, n'hésitez surtout pas à faire connaitre notre email : team@breizhjug.org
04 juillet 2008
GWT, tests junit et MVC
Lors de la réalisation d'un prototype basé sur GWT, je me suis intéressé à la testabilité du framework. GWTTestCase est très décevant car il utilise un navigateur "hosted mode" caché et lance tout le module GWT. C'est donc un bon support pour des tests d'intégration mais nettement trop lourd (et particulièrement lent) pour des tests unitaires.
Je reprend donc mes marque-pages, et je relis cet article et celui-ci.
Avec GWT 1.5, l'utilisation des types génériques permet de créer un modèle simple pour la mise en oeuvre du pattern "Supervising Controller" :
D'abord la notion d'événement, dédié à un composant donné (nb: à cause d'un bug de blogger, j'ai mis des crochets pour la déclaration des types génériques) :
- public abstract class Event
[T] - {
- private T source;
- public Event( T source ) {..}
- }
..la source qui produit ces événements :
- public interface EventSource
[T] - {
- void addListerner( Listener
[Event[T]]listener ); - void removeListerner( Listener
[Event[T]]listener ); - }
..et une classe abstraite pour construire nos SupervisingControllers :
- public abstract class SupervisingController
- implements Listener
[Event[T]] - {
- protected T view;
- public abstract Object getModel();
- public void setView( T view )
- {
- this.view = view;
- view.addListerner( this );
- }
- }
Il suffit ensuite de définir la "vue" par une interface, comme dans cet exemple ma pop-up de login :
- public interface LoginDialog extends EventSource
[LoginDialog] - {
- String getLogin();
- String getPassword();
- void hide();
- }
Le contrôleur, lui, étend notre SupervisingController en le typant avec l'interface de la vue "supervisée".
- public class LoginController
- extends SupervisingController
[LoginDialog] - {
- private LoginService service;
- ...
.. et sur réception d'un événement de type 'validation du formulaire de login', il n'a plus qu'à invoquer le service RPC de connexion, mettre à jour les éléments visuels qui vont bien, et fermer la popup :
- public void on( Event
e ) - {
- loginService.login( view.getLogin(), view.getPassword(),
- new AsyncCallback
[ Utilisateur]() - {
- public void onSuccess( Utilisateur result )
- {
- view.hide();
- }
- } );
- }
Gràce au génériques, il n'y a pas de cast à déclarer et le code reste donc plutôt simple.
Qu'est ce que ça change ? Et bien maintenant, avec un simple Mock pour mon interface LoginDialog, et un service RPC de test, je peux tester dans un test jUnit classique la logique IHM de mon contrôleur. Elle est triviale dans l'exemple, mais vous devinez que la gestion d'un formulaire de 20 champs avec des controles croisés peut devenir un enfer sans un bon mécanisme de test.
Ce qu'il manque pour faire "encore mieux" :
- un mécanisme de data-binding entre les widgets et un "modèle". Il existe quelques initiatives opensource, dont le succés et la pérennité sont à évaluer.
- un spring-gwt, qui permettrait de déclarer dans l'exemple ci-dessus l'injection de la vue et du service RPC via une annotation @Resource. Dis Monsier Rod Johnson, tu peux m'inclure ça dans la roadmap spring 3.0 ;-)
02 juillet 2008
c'est quoi ce poussin ?
21 juin 2008
mieux que l'eXtrem Progamming ?
En fait, je pense qu'elle est déjà très répendue, mais qu'on a pas forcément mis un nom dessus jusqu'ici. Un grand bravo aux créateurs de ce site !
20 juin 2008
Google App Engine : simple comme un coup de fil ?
Atelier RIA : Gwt vs SilverLight vs Flex
Valtech organisait jeudi une journée atelier RIA, une formule originale permettant de comparer sur le terrain Gwt, Flex et SilverLight. Ces trois noms dominent en effet (pour l’instant ?) le monde très actif des Rich Internet Applications.
Petite mise au point pour commencer : une Application Internet Riche n’est pas juste une application web bourrée d'effets visuels. Ce n’est pas non plus une application utilisant Ajax pour en améliorer l’ergonomie ou la réactivité.
Une RIA c’est une application qui a été conçue pour déporter sur le client la couche présentation, tout en conservant sur le serveur des services métier de haut niveau, autant que possible sans état. C’est donc à mis chemin entre le client lourd + serveur de données et le client léger + serveur web de présentation. Le serveur devient alors un conteneur de services métier, ce qui permet de converger avec l'approche SOA.Un exemple parmis d'autres, parleys.com (en version Flex ou Gwt) : le serveur héberge les vidéos et les indexes, toutes la mise en page étant gérée sur le client.
Bien sur, cela s’accompagne souvent d’effets graphiques haut de gamme pour se démarquer des applications web devenues trop statiques. Il faut bien un moyen d'accrocher l'internaute !
Quelle est la difficulté sur ce type d'applications ?
- la mutliplicité des technologies qu'on doit couvrir pour une même application : HTML + CSS + DOM + JavaScript + HTTP/Ajax + JSP + Java + ...
- les exigences de multi-plateforme, en particulier si on vise le monde mobile
- le delta qui existe entre un "hello world" et une application de 100 écrans, en particulier pour venir ajouter de nouvelles fonctionnalités
SilverLight est la solution RIA proposée par Microsoft, nécessitant un runtime encore peu répandu, mais qui pourrait rapidement se généraliser via le meilleur outil de promotion : Windows Update ;-)
La présentation SilverLight était assez décevante, trop orientée design pour un public de purs programmeurs, et ne connaissant pas l'outil Blend la première heure a quasiment été perdue. Nous sommes nombreux à en avoir eu une image négative, sans doute fausse par rapport à cette technologie. J’en retiens trois points majeurs :
- SilverLight et les outils qui l’accompagnent manquent encore de maturité (nous avons utilisé des versions beta, avec de nombreux bugs). Nous n’avons pas utilisé Visual Studio, aussi c’est donc peut-être une fausse impression.
- Le choix de Microsoft de séparer les outils de Design (Expression) de ceux de développement est discutable. Même en confiant ces rôles à deux personnes, on peut être amené à jongler entre les deux.
- SilverLight a l’avantage d’être très homogène, client et serveur se programmant en C#, notion que l’on retrouve dans Gwt.
Flex utilise le runtime Flash 9, déjà installé sur de très nombreux postes.
La présentation Flex était très démonstrative, mettant en avant les capacités graphiques du format Flash. L’environnement FlexBuilder est très appréciable (175€), même si de nombreuses fonctionnalités habituelles en Java manquent (formateur de code, refactoring…). Flex permet de laisser aux graphistes le soin de préparer les objets Flash avec toute la puissance de cet environnement. La programmation nécessite cependant de se familiariser avec ActiveScript, pas infaisable mais pas immédiat non plus. Se pose aussi la question du débogage sur des applications ambitieuses. Flexbuilder est très aboutit et probablement indispensable pour envisager ce type de développement.
Pour ces deux premiers candidats, se pose la question de la disponibilité d’un runtime sur toutes les plateformes, en particulier sur mobiles, marché d’avenir pour ces applications.
GWT est un peu l’intrus dans cette journée. Il se positionne fonctionnellement très en dessous de ses concurrents, sans support pour des effets 3D ou vidéo. Par contre, il est le seul à ne nécessiter aucune installation de runtime.
La présentation GWT était plus une visite guidée d’une application GWT, mettant en évidence les principes clé. Le très gros point fort est le développement 100% Java, qui permet ainsi de coder/tester/deboguer sous Eclipse, par simples « save + refresh », et de bénéficier de l’environnement JDT pour « découvrir » l’API GWT. La programmation GWT est donc assez naturelle pour des développeurs Swing.
J’ai été impressionné par la facilité de construction d’une IHM Flex, et surtout par le très bon niveau de FlexBuilder, qui malgré la filiation du langage ActiveScript avec JavaScript propose un éditeur riche et assez proche de celui d’Eclipse pour Java. Je n’ai pas accroché sur SilverLight, ne serait-ce qu’à cause du langage C# qui m’est peu familier, mais c’est clairement une plateforme avec laquelle il faudra compter. Enfin, GWT a été très bien vendu par Sami ;-). Il reste tout de même un besoin de compétence pour la mise au point des CSS, tout aussi peu homogène au niveau des navigateurs, point qui n'est pas abordé par Gwt - domage.
Mes conclusions ?
- Spring MVC + Spring JS pour des applications web classiques avec un bonus ergonomique, comme expliqué dans mon précédent post, cela permet une migraiton "en douceur" depuis Struts.
- GWT pour des applications RIA de type « gestion », manipulant plus des données que des vidéos ou des effets 3D. Il faut cependant développer une culture "layout" des IHM.
- Flex pour les applications « flashy » (c’est le cas de le dire), avec l’aide inconditionnelle de FlexBuilder.
17 juin 2008
Je vote Spring @MVC
Depuis X mois, je tergiverse sur le framework web que je compte "pousser" pour remplacer le vieillissant Struts 1.x.
Suite à SpringOne08 où j'ai suivi la session de Keith Donald sur Spring MVC 2.5 (rebaptise "@MVC"), WebFlow et spring JS, je penche nettement vers cette solution.
Certes, le produit n'est pas révolutionnaire - on reste dans du MVC classique. Mais ...
- Son principe général, comparable à Struts (MVC oblige), facilite l'apprentissage pour les développeurs Struts : on peut expliquer chaque notion en se référant à l'équivalent Struts, par exemple pour la librairie de tags.
- Les conventions et annotations permettent de réduire très sensiblement la configuration, ce qui est très appréciable
- Le mécanisme proposé par Web Flow est un très net avantage, permettant de faire des IHM robustes
- La documentation est de bonne qualité, avec de nombreux exemples
- La pérennité de l'outil ne fait pas de doute
- L'intégration Ajax et le support des widgets Dojo permettent de faire une appli raisonnablement sympathique, sans nécessiter des développeurs JavaScript / web 2.0.
download day
L'équipe chargée de la promotion de Firefox 3 propose de créer un record du logiciel le plus téléchargé en 24h.
Ca commence ce soir, alors jetez vous sur votre connexion ASDL préférée, en espérant que l'équipe de Mozilla à préparé une infrastructure réseau digne de ce challenge !
update :
C'est parti... et le site est difficilement joignable pour l'instant ... mais je réussi tout de même à lancer le download (7ko/s) - côté infrastructure, le pari est donc apparemment bien relevé.
A quoi sert cette opération ?
- A attirer de nouveaux utilisateurs ? La grande majorité des "téléchargeurs" sont déjà utilisateurs de Firefox 2, voir d'une beta de la v3.
- A faire parler de Firefox ... peut être, mais dans ce cas le sujet est mal posé. La comparaison avec les autres navigateurs n'est pas mise en avant par cette technique de vendeur de lessive
Alors ? A mon humble avis, le but est de faire parler de Firefox dans des médias qui n'ont rien a voir avec le sujet, genre "l'image du jour" à la fin de la météo, on le dernier titre du 20h qui aborde des sujets insolites. En effet, de très nombreux utilisateurs de Windows n'y connaissent vraiment rien en informatique et se contente de IE, sans même savoir qu'il existe autre chose. En faisant passer le nom "FireFox" dans des médias très grand public, on peut espérer pénétrer ce "marché".
C'est un peu comme le succès de MSN chez les jeunes. Un moins de 16 ans n'a aucune idée de ce qu'est une messagerie instantanée, par contre il se connecte tous les soirs sur MSN ...
10 juin 2008
en direct de SpringOne
J'espère que cela servira à ceux qui n'ont pas pu s'y rendre pour X raison, et que ça donnera envie à ceux qui ne connaissent pas.
Je vais essayer de transcrire l'atmosphère à la fois chaleureuse et studieuse de ces conférences. Pour ma part j'y ai appris beaucoup de choses lors des précédentes éditions, bien plus que des formations "encadrées" si on sait suivre les pointeurs proposés par les intervenants.
09 juin 2008
springOne J-2
Encore deux jour avant l'édition 2008 de SpringOne.
Mes deux sujets cible : AOP et OSGi
AOP parce que je suis convaincu qu'on peut faire de grande chose avec les principes de programmation par aspects, mais qu'on en sous-estime la puissance au profit d'une approche plus procédurale.
OSGi parce que c'est un ovni pour moi : j'ai du mal à voir ce qu'il peut m'apporter, par contre je vois bien les contraintes qui l'accompagnent (gestion des "bundles", librairies qui ne marche plus à cause d'un Class.forName(x)...). Peut être des débuts de réponse au cours de ces deux jours.
Mon programme - sauf modification au fil de l'annimation locale :
day 1:
Spring 2.5 on the Way to 3.0
OSGi Programming Model
Spring Dynamic Modules for OSGi
Five Aspects You Don't Know About
dernière session ?
day 2:
Open Forum with Rod Johnson
Applying the Spring Frameworks for Model-Driven Architecture ou What's new in Spring MVC 2.5 and beyond
Inside SpringSource Application Platform
Making Sense of AOP Choices ou Classloading in OSGi - mince, c'est en même temps :-/
Spring Architecture and Best Practices ou Spring Web Flow 2.0 Deep Dive
Je me suis rapidement rendu compte qu'il fallait choisir sa session en fonction de l'interlocuteur : mon niveau d'anglais assez pittoyable m'oblige à sélectionner les "BBC-english-compliant-speakers". Un sujet apparement allèchant, si on ne comprend pas grand chose, n'apporte rien. Et pusi le but de ces conférences c'est aussi de voir autre chose. En fin de journée, quand le cerveau commence à fumer, on a parfois envie d'un sujet un peu différent, pourquoi pas RESTful Web Services in Spring ?
Si l'un de vous est également présent à cette édition, fait moi signe - je serais reconnaissable à mon joli sac Spring-one ... comment ça tout le monde en a un ? Bon alors, un petit mail et on partagera nos avis autour d'une barguette de frites ?
04 juin 2008
du javascript ... compilé ?
Si sur un PC "moderne" cela pose relativement peu de problème, c'est loin d'être le cas pour le marché du web mobile. Il est hors de question de faire ingurgiter des centaines de ko de script à un navigateur mobile en espérant des performances de haut niveau.
Or c'est le marché le plus porteur du web de demain ! Certains site orientés mobiles observent déjà une avalanche de requêtes "iPhone". Non pas qu'il y ait des millions d'utilisateurs du joujou d'Apple, mais plutôt que ceux-ci utilisent leur mobile comme station web, connectée en permanence, et donc ont un comportement très différent de l'utilisateur classique qui garde un oeil sur son forfait WAP 1h ;-)
Les développeurs de WebKit (le moteur commun des navigateurs KDE et Safari) annoncent leur projet SquirrelFish - comment peut on trouver des noms pareils ;-)
Il s'agit d'un moteur JavaScript utilisant un mode "compilé" des scripts sous forme de bytecode, ce qui permet d'excellentes performances.
Ils proposent également un benchmark qui permet de se faire sa propre opinion
http://webkit.org/perf/sunspider-0.9/sunspider-driver.html
Pour moi, ça donne sur mon PC (windows XP) :
IE7 : 46 172 ms
IE8 beta : ne s'installe pas chez moi, problème d'update invalide :-( il faut une version US ?
Firefox 2 : 34 946 ms
Firefox 3 rc1 : 5 256 ms
Safari 3 : 6 690ms
Safari + Webkit "nightly build" : 4 859ms -- soit presque 10fois mieux que IE7 !!
Bien sur, comme toujours, ce bench est probablement discutable et les résultats sur un seul PC ne sont pas représentatifs ...
OK, donc il suffit d'attendre la mise à jour du navigateur de mon mobile préféré pour lancer mon application "web 2.0" basé sur XYZ.js avec plein de plugins et qui en jette un max ?
Ce serait aller un peu vite... les ressources mémoire, bande passante et autres spécificités de l'Internet mobile sont peu considérées par les développeurs, peut être un peu trop habitués aux centaines de Mo d'un PC et au GHz de son processeur.
On trouve par exemple les recommandations de Yahoo sur le sujet. Une grande partie du temps de réponse apparent d'une application est imputable à l'ordre de chargement des fichiers qui composent la page web. En regroupant les scripts, images et les CSS, en les ordonnant et en comprenant le chargement d'une page on peu nettement améliorer sa réactivité.
Les premiers à bien mettre en pratique le web mobile occuperont le terrain ! Rien de tel qu'une application qui rame pour jeter le doute sur une technologie.
29 mai 2008
m2eclipse vs Q4e
mon point de vue :
- m2eclipse utilise des icônes plus sympa. C'est con mais c'est INDISPENSABLE pour une adoption par les utilisateur !
- m2eclipse 0.9.4 apporte quelque changements qui le rend plus conforme à l'utilisation de maven en ligne de commande. On a donc moins de "surprises" lors de son utilisation
- m2eclipse 0.9.4 supporte le plugin sysdeo-tomcat ! la réactivité de l'équipe de dev à mes demande sur ce sujet a été très bonne.
- q4e inclut un outil d'analyse des dépendance, particulièrement attendu par les utilisateurs de maven : une version graphique et dynamique du "mvn dependency:tree", super pratique
- q4e utilise par défaut les noms de répertoire physiques comme nom de project eclipse, et pas l'artifactId. m2eclipse propose un "pattern" qui permet par exemple d'avoir plusieurs versions du même module sous eclipse, très pratique pour reporter des corrections entre versions
- le menu "import > existing project" de m2eclipse est au premier niveau, ce qui le met plus en valeur (il est visible par défaut) que celui de q4e (maven > maven project). C'est du détail mais ça participe à l'image de bonne intégration sous eclipse.
Espérons (on peut rêver) que l'intégration dans la fondation Eclipse fera peu a peu apparaître des points communs entre ces plugins, et pourquoi pas le début du premier pas vers un développement commun. C'est dommage toute cette déperdition d'énergie...
Il semblerait (à confirmer) que la fondation eclipse ait pour principe de ne laisser sortir qu'un seul plugin du processus d'incubation. On aura donc soit une fusion des plugins, soit l'élimination de l'un des deux. Reste a savoir dans quel délai...
Update :
J'ai raté ce message, double-posté sur les forums q4e et m2eclipse :
http://www.eclipse.org/newsportal/article.php?id=88&group=eclipse.technology.iam#88
On y vois le début d'une collaboration entre ces deux projets, quelques petites traces de règlement de compte - "nous aussi on l'a fait" - et des explications sur les incompatibilités techniques.
C'est donc un grand pas entre ces deux communautés, qui me laissent espérer un plugin de qualité pour dans pas si longtemps que ça ;-)
Update (07/2008) :
La version 0.9.5 de m2eclipse comporte désormais un éditeur de POM très propre et un analyseur de dépendance (arbre et graphe) très pratique. La dynamique semble être plus du côté de m2eclipse, mais de là à deviner ce qui va sortir de l'incubateur d'Eclipse ...
17 mai 2008
JBoss viole t-il la GPL ?
07 mai 2008
Maven et Eclipse
La communauté des développeurs Maven subit alors un schisme :
d'un côté, m2Eclipse (développé par Sonatype), de l'autre q4e (développé par Devzug)
Dans les deux cas, le code a été passé sous license EPL et proposé comme contribution à la fondation Eclipse. On est donc pas très avancé pour savoir lequel sera officiellement soutenu.
La co...erie dans l'histoire c'est que ces deux plugins sont très comparables :
- import de projets maven (gestion multi-modules, téléchargement des jar et sources.jar, lancement des générateurs de code ...)
- édition plus ou moins avancée des POM.xml (assistance à l'identification des dépendances)
- lancement de maven "à la souris" - ça n'apporte pas grand chose
- des jolis wizards, par exemple pour utiliser les archetypes
- m2eclipse n'utilise pas les répertoires standard de maven : il compile dans "target-eclipse" et ne mappe pas les répertoires de ressources vers "classes".
+ q4e propose une vue d'analyse des dépendance très sympa
La principale fonction qui m'intéresse est l'import direct de projets maven. Et c'est la fonction la plus obscure et la moins configurable. Dans les deux cas, aucune idée de ce que le "embedded maven" exécute durant cet import, et en particulier, difficile de venir y ajouter sa conf ou ses plugins maison.
J'utilise par exemple le plugin sysdeo-tomcat-maven-plugin pour configurer tomcat :
- pour m2eclipse il a fallu modifier le plugin et le recompiler.
- pour q4e ... aucune idée (je n'ai pas trop cherché) mais ça doit être équivalent.
01 mai 2008
Spring-JS
--> http://jira.springframework.org/browse/SWF-451
En marge du projet Spring-WebFlow (dans la version 2.0), une couche d'abstraction semble développée pour permettre un accès aux librairies JS (Dojo et Ext pour l'instant) selon une logique "à la Spring".
"
The factoring out of a Javascript abstraction layer called "Spring Javascript" from Web Flow's JSF support. Currently, Dojo and Ext based implementations of this layer are provided. Spring.js provides:
- A common interface for Ajax, regardless of which toolkit is being used under the covers
- An aspect-oriented-like API for decorating HTML DOM nodes with behaviors, including client-side validation behaviors.
Le portage des idées de l'AOP dans le monde HTML/Javascript est intéressant. Après tout, les sélecteurs CSS sont un bon exemple de langage pour définir des "points de coupe".
Je n'ai pas creusé l'investigation plus loin, mais ce serait un très bon point, vu la prolifération de librairies JavaScript comparables sur de nombreux points, mais pas forcément facile d'accès, surtout pour un développeur 100% Java qui n'y connais pas grand chose aux (très nombreux) raffinements de JavaScript.
Plus d'infos sur http://static.springframework.org/spring-webflow/docs/2.0.x/reference/html/ch10.html
OSGi vs JEE
Pour ceux qui n'en aurait pas entendu parler, OSGi est (pour faire court) une architecture Java qui héberge à des applications décomposées en "bundles". Chaque bundle expose une interface "publique", la seule accessible aux autres bundles - d'où une sparation très propre. OSGi permet un redéploiement à chaud des bundles, des versions concurrentes, des mises à niveau "à chaud" ... bref plein de fonctionnalités alléchantes.
De son côté, JEE n'offre absolument rien de comparable (en standard : Weblogic permet par exemple une mise à niveau N+1 sans interrruption de service). Java en général n'offre pas de séparation "stricte" entre modules, bien que quelques JSR tentent de ratrapper le retard.
SpringSource - décidément très actif ce printemps - lance "SpringSource Application Platform". Pour faire très schématique, vous prener un conteneur OSGi (celui qui est au coeur d'Eclipse et de ses plugins), vous ajouter Spring-Dynamic-Modules (aka "Spring-osgi"), puis vous placez au dessus un Tomcat retravaillé pour l'occasion et vous déployez vos application web dessus.
Dans un premier temps ça ne change pas grand chose.
Maintenant vous remplacez votre WEB-INF/lib par des déclarations de bundles OSGi. Le war ne fait plus que quelques ko et toutes les librairies sont mutualisées. Une mise à niveau d'une seule librairie se fait sans interruption du service.
Bonus complémentaire, OSGi vous assure que vous n'utilisez pas "par mégarde" des classes interne d'une librairie, qui risque de changer ou disparaître dans une version N+1.
Et on peut aller plus loin en utilisant un packaging dédié ".par" pour construire l'application en bundles OSGi, tout en bénéficiant d'un des meilleurs moteur de servlet et de l'API servlet/JSP complète.
Personne ne sera surpris de voir les prochaines versions de Websphere, Weblogic, Jboss et autres proposer des passerelles vers les fonctionnalités OSGi.
Faut il passer sous SpringSource Application Platform ?
Dans ma vie à moi, je n'ai pas mon mot a dire et je me coltine toujours un Websphere 5.0.2. Le sujet n'est pas là. L'intérêt est que SpringSource propose une solution JEE + OSGi qui donne un apperçu de ce que seront les serveurs d'application dans quelques années.
Spring-DM de son côté propose un modèle de développement typiquement Spring (100% POJO) qui permet de passer à OSGi sans douleur - ce qui n'est pas gagné a priori vu les restrictions que cela implique sur la manipulation du ClassPath.
Autrement dit, jettez un oeil à la doc Spring-DM, apprenez les ficelles d'OSGi, comme ça dans quelques années, quand il faudra migrer dynosaure-2.1 sous Websphere-12-Adanced-OSGi, vous aurez déjà préparé le terrain.
Et pour ceux qui peuvent se le permettre, surfez sur la vague OSGi !
11 avril 2008
Hébergeurs ... tous aux abris !
- Gratuit, dans la limite de restrictions très raisonnables (500Mo stockage, 5Mon pages/mois)
- Prométeur : le SDK va probablement s'enrichir pour faciliter l'accès aux services Google.
- Cool : c'est encoure tout chaud !
Seule limitations, bloquantes :
- je n'y connais strictement rien en Python
- Je ne fais pas partie des 10000 chanceux qui ont obtenu les ID de test de cette pré-version béta ;-(
- limiter les ressources attribués à une application web (un while(true) {} et tout le serveur est bloqué) - sauf extension propriétaire ...
- l'impossibilité de recharger les classes à chaud (c'est si simple de remplacer un .php)
- le packaging inutilement compliquée (seul Axis2 fait pire)
Je pense qu'il y a une place à prendre pour les applications Groovy : sue la base d'une structure WAR (explosée), incluant les jars de librairies utilitaires, Chaque fichier .java peut être interprété comme un script Groovy. On pourrait donc modifier un .java et observer les effets immédiatement. -- juste une idée, si quelqu'un à du temps devant lui...