<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-31934751</id><updated>2011-07-29T03:56:43.964+02:00</updated><category term='EJB'/><category term='Struts'/><category term='&quot;design pattern&quot;'/><category term='Seam'/><category term='Flex'/><category term='IHM'/><category term='JSF'/><category term='Web services'/><category term='Java'/><category term='J2EE'/><category term='JEE'/><category term='RIA Flex JavaFX XAML Silverlight JEE J2EE Interface'/><category term='SOA'/><category term='GUI'/><title type='text'>Microcosme Java JEE</title><subtitle type='html'>Le blog Java et nouvelles technologies de Cyril Gambis</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-31934751.post-8705203582990182410</id><published>2009-01-26T09:30:00.003+01:00</published><updated>2009-01-26T09:51:31.099+01:00</updated><title type='text'>Pile technologique pour projet Flex</title><content type='html'>Une fois &lt;span style="font-weight: bold;"&gt;Flex&lt;/span&gt; choisis comme technologie de présentation, il reste à monter sa pile technologique pour son projet: accès aux bases de données, découpage en "couches", architecture globale de communication entre ces couches...&lt;br /&gt;&lt;br /&gt;Voici un retour d'expérience, pour vous aider à choisir:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;accès aux données&lt;/span&gt;: plusieurs choix possibles. Si vous avez les connaissances et que vous voulez coller le plus possible aux standards, partez sur du &lt;span style="font-weight: bold;"&gt;JPA&lt;/span&gt; (Java Persistence API). Contrairement aux EJB 2.x Entity et à JDO, la spécification semble bien partie pour s'imposer. Après, il vous reste une multitude d'implémentations; &lt;span style="font-weight: bold;"&gt;Hibernate &lt;/span&gt;ou &lt;span style="font-weight: bold;"&gt;Oracle TopLink&lt;/span&gt; (Essentials) sont des bons choix. Du côté de mon équipe, qui n'a pas beaucoup de compétence mapping objet-base relationnelle, on est sur du &lt;span style="font-weight: bold;"&gt;iBatis&lt;/span&gt;, solution très légère et très propre, très simple à mettre en place.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;EJB ou pas EJB?&lt;/span&gt; Tout dépend de la taille de votre projet. Pour des projets petits ou moyens, plutôt simples dans les process et ne demandant pas une fiabilité extrême, pas besoin d'EJB, un &lt;span style="font-weight: bold;"&gt;Tomcat&lt;/span&gt; suffira amplement. Après, si vous vous orientez vers EJB 3, cela reste un choix très valable. Dans ce cas, il vous faudra un serveur implémentant la spécification complète. &lt;span style="font-weight: bold;"&gt;GlassFish&lt;/span&gt; est un des plus populaire actuellement. &lt;span style="font-weight: bold;"&gt;JBoss &lt;/span&gt;et &lt;span style="font-weight: bold;"&gt;Apache Geronimo&lt;/span&gt; sont également très bons, et du côté des commerciaux, Oracle WebLogic reste très bien, même si en perte de vitesse par rapport aux Open Source.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;architecture interne de l'application: orientée Services (au sens architecture, pas au sens marketing...), à base de &lt;span style="font-weight: bold;"&gt;Spring &lt;/span&gt;(beans), ou de &lt;span style="font-weight: bold;"&gt;Guice &lt;/span&gt;(projet Google) assez à la mode en ce moment. Si vous êtes sur de l'&lt;span style="font-weight: bold;"&gt;EJB 3&lt;/span&gt;, vous avez déjà tout ce qu'il vous faut (à travers les annotations notamment).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;communication serveur - client Flex&lt;/span&gt;: assurément &lt;span style="font-weight: bold;"&gt;BlazeDS &lt;/span&gt;se révèle être une excellente surprise. Utilisez le mode AMF si vous le pouvez (ce qui est certainement possible), pour échanger en mode binaire et optimisé entre le serveur et le client. Il est très simple de brancher BlazeDS sur Spring (je suppose que cela se fait également facilement avec de l'EJB 3)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Au final, pour notre petit projet (200 jours/h), on est arrivé à d'excellents résultats avec:&lt;br /&gt;- Frontal Apache HTTP&lt;br /&gt;- Apache Tomcat&lt;br /&gt;&lt;br /&gt;- BlazeDS&lt;br /&gt;- Spring&lt;br /&gt;- iBatis&lt;br /&gt;&lt;br /&gt;Très léger à mettre en place, et les développeurs ont facilement appris toutes ces technos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-8705203582990182410?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/8705203582990182410/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=8705203582990182410' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/8705203582990182410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/8705203582990182410'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2009/01/pile-technologique-pour-projet-flex.html' title='Pile technologique pour projet Flex'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-7429416162731940955</id><published>2008-12-30T09:47:00.003+01:00</published><updated>2008-12-30T10:51:28.392+01:00</updated><title type='text'>Java EE: Evolutions depuis 1 an et demi</title><content type='html'>Après une période à bosser sur mes projets, je reprends le clavier.&lt;br /&gt;&lt;br /&gt;Une petite question toute innocente sur theserverside.com m'a replongé dans l'époque des grandes questions sur quelle techno de présentation Java EE utiliser (&lt;a href="http://web.theserverside.com/news/thread.tss?thread_id=51939#279613"&gt;lien vers mon commentaire&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;La situation générale s'est un peu éclaircie, bien que je pense toujours que l'univers Web est en période de transition:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;HTML vieillissant (avec une version 5 qui n'en finit pas d'être repoussée, et dont le contenu ne cesse de bouger)&lt;/li&gt;&lt;li&gt;de plus en plus d'intérêt pour des pages plus riches et dynamiques; pour des sites professionnels, forte pression des clients pour en intégrer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;côté AJAX, quelques grandes bibliothèques javascript(jQuery, Dojo, Prototype, Scriptaculous et consors)&lt;/li&gt;&lt;li&gt;de l'autre côté (plugin Adobe Flex et Microsoft Silverlight), une évangélisation à marche forcée, sauf pour JavaFX qui est complètement largué, et dont on peut être sûr que la récente version 1 sortie récemment n'aura rien à voir avec la prochaine version vu le peu de moyens qu'y a consacré Sun (d'ailleurs, ça rappelle ce qu'il s'est passé avec Flex 1 &amp;amp; 1.5 et Silverlight 1, très différents des versions actuelles, notamment au niveau conceptuel)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;des frameworks Java EE qui intègrent de facto ou à l'aide de wrapper/adapter l'AJAX et les technos javascript, et un écrémage au fur et à mesure de ces frameworks&lt;br /&gt;&lt;/li&gt;&lt;li&gt;une tendance des navigateurs à décupler les performances des interpréteurs javascript&lt;/li&gt;&lt;/ul&gt;Au final, pour lancer un projet JEE, on a le choix pour la couche de présentation entre:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Google GWT, qui évolue vite, qui s'appuie sur du HTML/Javascript donc pas besoin de plugin, mais dont la programmation s'éloigne pas mal des classiques JSP (ce qui est de toutes façons normal pour une techno de présentation Web riche, et c'est plutôt une bonne chose, d'ailleurs - gérer des formulaires HTTP et des urls va vite devenir la préhistoire des applis Web). Mais:&lt;ul&gt;&lt;li&gt;très lié à Google; même si le framework est Open Source, si Google arrête tout, qui va se plonger dans le code Google pour gérer la compilation de l'interface (écrite en Java dans le cas de GWT) vers chaque navigateur (voir chaque version de navigateur) ?&lt;/li&gt;&lt;li&gt;repose tout de même sur AJAX; or, AJAX est un hack du mode de fonctionnement classique request/response du HTTP, ce qui impose de multiples contraintes, et les échanges se font en mode texte, ce qui n'est pas très optimatal pour les échanges client/serveur. Cependant, étant donné que l'interface est écrite en Java, rien n'empêche Google de développé un compilateur de Java vers Flash/Silverlight/JavaFX, un peu à la mode d'OpenLaszlo (mais en plus performant...)&lt;/li&gt;&lt;/ul&gt;Au final, GWT vaut vraiment le coup, même si le coût (d'apprentissage) n'est pas négligeable (mais je vous rassure, ça reste abordable et c'est très élégant).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Apache Wicket, basé sur une logique de composants, framework séduisant et très soutenu par une communauté très active. J'ai pas grand chose à en dire, ce n'est pas un choix que je retiens personnellement parce qu'il se base trop sur du HTML pour la partie interface, et que pour moi ce n'est pas vraiment un choix d'avenir, mais les avantages sont aussi la simplicité et la courbe d'apprentissage moins abrupte que GWT (et Flex/Silverlight).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;JSF (avec Facelet et la couche intermédiaire JBoss Seam); là, je n'y crois plus trop. Trop compliqué, revu mais trop tard avec la version 2 qui sort cet hiver (ou pas...).&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Adobe Flex; le choix que j'ai fait pour mes nouveaux projets. Courbe d'apprentissage assez abrupte, nécessité d'avoir un plugin, même problème que GWT pour ce qui est du projet Open Source avec la dépendance à un éditeur (Adobe en l'occurence).&lt;br /&gt;Au bout d'un an, un développeur est capable de faire des choses vraiment biens, même si la logique de positionnement et redimensionnement des composants est ardue à comprendre lorsque l'on est habitué à faire des clients HTML (ça se rapproche des interfaces clients lourds comme le Swing, même si c'est tout de même beaucoup plus simple et élégant au niveau de la gestion des évènements).&lt;br /&gt;Et une fois que l'on maitrise un peu la techno, c'est que du bonheur (y compris pour le chef de projet, avec une productivité bien accrue par rapport aux frameworks MVC basé sur du HTML - Struts 1 &amp;amp; 2, Spring MVC...)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Microsoft Silverlight; techno encore trop jeune, mais Microsoft met vraiment les moyens en ce moment. Sans doute promis à un bel avenir.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Pour passer rapidement sur les autres choix, certaines technos de bonne qualité ne vont, à mon avis pas tenir trop longtemps, par manque de visibilité ou par concept un peu dépassé:&lt;br /&gt;&lt;ul&gt;&lt;li&gt; Tapestry, qui change du tout au tout entre les versions, et qui se dilue parmi les autres technos ci-dessus&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Struts 2, qui reste un choix lorsque l'on ne veut pas faire "le grand saut" vers une appli Web riche, mais qui est tout de même bien complexe et contraignant&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Echo, pas trop de visibilité, en perte de vitesse par rapport à GWT et Flex&lt;br /&gt;&lt;/li&gt;&lt;li&gt;OpenLaszlo, pas assez de moyens par rapport à Flex (ils peuvent pas faire grand chose, malgré leur talent, face à une boite énorme comme Adobe, qui mise à fond sur Flex pour son futur)&lt;/li&gt;&lt;li&gt;Spring MVC, Webworks... même problème que Struts 2: un peu dépassés&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Au final, le paysage se clarifie un peu, mais reste assez flou. Je suis persuadé que le Web va évoluer vers une ou plusieurs technos riches et se détourner du HTML pour la plupart des sites professionnels. Google finira par faire son Flex/Silverlight, quitte à ce que ce soit du "Full Javascript" dans son navigateur Chrome, ou un plugin (&lt;a href="http://code.google.com/p/nativeclient/"&gt;native client&lt;/a&gt;, ou autre - par exemple un plugin similaire à celui développé il y a peu pour ajouter des conversations vidéos à Google Talk dans GMail).&lt;br /&gt;Ce même HTML, du fait de sa simplicité, va certainement continuer à vivre pour les sites peu intéractifs.&lt;br /&gt;&lt;br /&gt;Et en toutes franchise, je doute que ces technos riches qui vont changer le Web soit l'une de celles cités plus haut... on est encore en période de transition pendant quelques années.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-7429416162731940955?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/7429416162731940955/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=7429416162731940955' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/7429416162731940955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/7429416162731940955'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2008/12/java-ee-evolutions-depuis-1-et-demi.html' title='Java EE: Evolutions depuis 1 an et demi'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-5118940909840626503</id><published>2007-05-07T12:18:00.000+02:00</published><updated>2007-05-11T10:40:40.679+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RIA Flex JavaFX XAML Silverlight JEE J2EE Interface'/><title type='text'>Du mouvement dans le monde des RIA</title><content type='html'>Au cours de la conférence MIX07, microsoft a présenté de multiples démonstration de sa technologie Silverlight (v1.1 alpha - amusant sachant que la version 1.0 est toujours en bêta). Les démos semblent vraiment impressionnantes, la grosse machine qui s'était mise en route il y a quelques temps semble enfin offrir du concret (&lt;a href="http://www.fredcavazza.net/index.php?2007/04/30/1507-mix07-las-vegas-jour-1-suite"&gt;http://www.fredcavazza.net/index.php?2007/04/30/1507-mix07-las-vegas-jour-1-suite) .&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En plus, l'architecture et les concepts ont l'air au point; les RIA (&lt;a href="http://fr.wikipedia.org/wiki/Rich_Internet_Application"&gt;Rich Internet Application&lt;/a&gt;) vont-elles enfin percer au delà de l'AJAX mis en place plus ou moins maladroitement et simplement un peu partout ?&lt;br /&gt;&lt;br /&gt;Parallèlement, Sun et le monde Java réagissent enfin sur ce créneau qui est à mon avis clé avec &lt;a href="https://openjfx.dev.java.net/"&gt;JavaFX&lt;/a&gt;. On en est par contre ici véritablement aux balbutiements.&lt;br /&gt;Est-ce que la plate-forme Java est maintenant condamnée à être suiveur des technos microsoft? heureusement que la communauté autour de Java est active (Open Laszlo, Adobe Flex, et la multitude de framework Ajax), mais ces initiatives n'ont pas la puissance marketing et l'assise financière d'un projet stratégique de microsoft.&lt;br /&gt;Avec JavaFX, on peut avoir le pire ou le meilleur. La technologie sera apparemment Open Source, donc j'espère bien qu'on finira par quelque chose de plus simple, rapide et utilisable que Swing.&lt;br /&gt;&lt;br /&gt;Au final, tout se dirige, selon moi, dans la bonne direction: un langage simple, dédié à l'interface, concis et clair (que ce soit le XAML de microsoft, le MXML + ActionScript de Flex, ou le langage FX-Script de JavaFX qui semble très élégant).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-5118940909840626503?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/5118940909840626503/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=5118940909840626503' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/5118940909840626503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/5118940909840626503'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2007/05/du-mouvement-dans-le-monde-des-ria.html' title='Du mouvement dans le monde des RIA'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-8879802054129560688</id><published>2007-04-13T08:28:00.000+02:00</published><updated>2007-04-13T10:39:23.417+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='EJB'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='SOA'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Web services'/><title type='text'>Vers une généralisation des applications distribuées?</title><content type='html'>Depuis plusieurs années, les technologies distribuées ont tenté de s'imposer. Si cela marche très bien dans le cas d'applications spécifiquement adaptées (les ERP par exemple), ce type d'architecture n'a jamais été vraiment pertinent dans le cadre d'applications plus traditionnelles (la grosse majorité des applications). J'ai l'impression que ça change.&lt;br /&gt;&lt;br /&gt;Globalement, j'ai vu passer 3 étapes:&lt;br /&gt;&lt;br /&gt;Etape 1: une première grosse tentative plus ou moins viable&lt;br /&gt;Les concepts intéressants de CORBA (trop complexe pour une application lambda) ont amené un intérêt (surtout de la curiosité) dans le monde de l'entreprise pour ce type d'applications. Cette curiosité a été renforcée par les EJB 1 et 2, un véritable engouement s'est créé.&lt;br /&gt;Malheureusement, CORBA est trop complexe et complètement inadapté pour une application lambda (ça n'a jamais été son but), de même que l'étaient  les EJB 1 et 2, inadaptés dans 95% des cas (design Sun de référence pour les applications Web, mais les limites de l'architecture sont trop contraignantes et la complexité est abusive).&lt;br /&gt;&lt;br /&gt;Etape 2: de la curiosité à la solution élégante&lt;br /&gt;Faisant suite au rejet des EJB par la communauté des développeurs nouvelles technos, les conteneurs plus léger d'inversion de contrôle (ou injection de dépendance), ont apporté une architecture claire et saine sur ces concepts déjà intéressants.&lt;br /&gt;De manière similaire, la remise en cause de CORBA mène à l'apparition des Web Services, plus légers, basés là encore sur une technologie qui suscite beaucoup de curiosité de la part des décideurs: le XML (dont on parle à tort et à travers, et qui devient la solution miracle à tous les problèmes d'interconnexion - du moins dans la tête des directions informatiques...).&lt;br /&gt;Les technologies de bus de messages se répandent et maturent.&lt;br /&gt;&lt;br /&gt;On commence à parler de SOA, architecture orientée services, qui remet en cause le principe d'encapsulation des langages orientés objets ("les attributs des objets et les méthodes sur ces attributs sont dans la classe" devient "l'objet contient uniquement les données - POJO ou Javabean, les traitements sont déportés dans des classes de service"). Cette architecture entraine pour toute application, distributée ou non, de grands bénéfices en terme de maintenabilité et d'évolutivité).&lt;br /&gt;&lt;br /&gt;Etape 3: Généralisation&lt;br /&gt;&lt;br /&gt;Tout s'intègre très bien: SOA se généralise et bénéficie très bien des concepts de conteneurs légers, se prête très bien à la mise en place de Web Service et cerise sur le gateau, permet une évolution très transparente vers un style distribué: à partir du moment où les services sont clairement et proprement définis, on peut selon les besoins en distribuer certains très facilement.&lt;br /&gt;&lt;br /&gt;Les concepts de grilles de calcul et de caches répartis sont connus et les décideurs informatiques s'y intéressent et investissent dessus, le plus souvent avec grand succès. Des startups qui ont développé ces produits enregistrent des succès flamboyants (Datasynape pour les grilles de calcul, Gigaspaces et Tangosol Coherence - racheté par Oracle il y a peu - pour les caches distribués avec haute valeur ajoutée).&lt;br /&gt;&lt;br /&gt;J'ai l'impression que ce type d'application est enfin suffisamment simple pour la mise en place, suffisamment bien vu pour l'investissement des décideurs dans ces solutions et suffisamment mature pour se généraliser.&lt;br /&gt;&lt;br /&gt;Par contre, cette évolution entraine un autre style de programmation; l'ordonnancement et la synchronisation des process, parfois asynchrones, exigent pour les programmeurs d'être plus malins et de voir l'application de plus loin, les transformant progressivement en architectes logiciel.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-8879802054129560688?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/8879802054129560688/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=8879802054129560688' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/8879802054129560688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/8879802054129560688'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2007/04/vers-une-gnralisation-des-applications.html' title='Vers une généralisation des applications distribuées?'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-6405221214777505550</id><published>2007-02-07T16:00:00.000+01:00</published><updated>2007-02-07T16:18:51.333+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JEE'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='JSF'/><category scheme='http://www.blogger.com/atom/ns#' term='J2EE'/><category scheme='http://www.blogger.com/atom/ns#' term='Seam'/><category scheme='http://www.blogger.com/atom/ns#' term='IHM'/><category scheme='http://www.blogger.com/atom/ns#' term='Flex'/><category scheme='http://www.blogger.com/atom/ns#' term='GUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Struts'/><title type='text'>Le futur des IHM</title><content type='html'>Il y a quelques mois, dans un précédent billet, je parlais des diverses tendances au niveau de la couche présentation des applications web Java.&lt;br /&gt;&lt;br /&gt;Effectivement, tout semble se clarifier  dans ce monde très dynamique. En gros, il y a 3 mondes:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;on améliore les concepts existants (JBoss Seam avec Facelets et JSF, Struts 2 basé sur Webwork)&lt;/li&gt;&lt;li&gt;on écrit le code de l'interface en Java et on compile vers de l'HTML/AJAX/Javascript (Google GWT)&lt;/li&gt;&lt;li&gt;on se base sur du Flash, généré à partir de code XML compilé (Flex, OpenLaszlo)&lt;/li&gt;&lt;/ol&gt;En fait, il me semble que les deux premiers mondes vont vite atteindre leurs limites. Même si l'AJAX apporte une relative fraicheur dans l'utilisabilité des applications, on reste vraiment bridé par le HTML/Javascript au niveau des possibilités et de la complexité.&lt;br /&gt;&lt;br /&gt;Que l'on code directement avec du HTML ou à partir de code Java, on se retrouve avec au final une IHM construite à partir de technologies qui n'était pas initialement prévue pour faire de l'IHM (HTML a été créé pour lire des articles scientifiques, Java a été conçu pour faire des algorithmes, pas du layout ou de la configuration de composants).&lt;br /&gt;&lt;br /&gt;Au final, il nous reste Flash, une technologie qui a été pensée dès le départ pour faire de l'IHM, qui le fait bien, de manière légère, cross-platform, avec un rendu identique sur toutes les plate-formes (Windows, Mac OS, Linux 32bits). Bref, pour moi, Flex est un bon aperçu de ce que seront les technologies d'IHM de demain.&lt;br /&gt;&lt;br /&gt;La tendance est aux applications riches (RIA - Rich Interface Application), Adobe (Flash &amp; Flex) et Microsoft (Windows Presentation Foundation / Express) l'ont très bien vu.&lt;br /&gt;&lt;br /&gt;Je partage tout à fait l'analyse que fait Bruce Eckel sur son blog:&lt;br /&gt;&lt;a href="http://www.artima.com/weblogs/viewpost.jsp?thread=193593"&gt;&lt;span class="ts"&gt;Hybridizing Java - &lt;/span&gt;http://www.artima.com/weblogs/viewpost.jsp?thread=193593&lt;/a&gt;&lt;br /&gt;&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-6405221214777505550?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/6405221214777505550/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=6405221214777505550' title='3 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/6405221214777505550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/6405221214777505550'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2007/02/le-futur-des-ihm.html' title='Le futur des IHM'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116583436461037546</id><published>2006-12-11T11:42:00.000+01:00</published><updated>2006-12-11T13:51:23.686+01:00</updated><title type='text'>Simplicité et usabilité contre liberté</title><content type='html'>Un réflexe courant de développeur, lorsque l'on est confronté à une IHM, est d'offrir le plus de fonctionnalités possibles. On se retrouve vite avec des applications usine à gaz, extrèmement "fouillies".&lt;br /&gt;En partant d'une bonne intention: offrir le plus de fonctionnalités possibles, on arrive à l'effet inverse: avoir tellement de fonctionnalités que l'on n'en utilise plus qu'un sous ensemble très minime; c'est un peu ce que l'on retrouve sur les anciennes versions de word (la toute dernière version, 2007, apporte de grandes avancées en terme d'ergonomie).&lt;br /&gt;&lt;br /&gt;Pourtant, il est souvent possible d'offrir toutes ces fonctionnalités avec une interface beaucoup plus minimaliste, notamment en les regroupant intelligemment.&lt;br /&gt;Voici un article intéressant avec un exemple concret de simplification d'interface:&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/items/2006/11/21.html"&gt;http://www.joelonsoftware.com/items/2006/11/21.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://application-servers.com/"&gt;http://application-servers.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116583436461037546?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116583436461037546/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116583436461037546' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116583436461037546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116583436461037546'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/12/simplicit-et-usabilit-contre-libert.html' title='Simplicité et usabilité contre liberté'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116194268113975974</id><published>2006-10-27T11:47:00.000+02:00</published><updated>2006-10-27T11:51:21.153+02:00</updated><title type='text'>Expérience utilisateur</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4513/3481/1600/metaphor_1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://photos1.blogger.com/blogger/4513/3481/320/metaphor_1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;J'ai toujours insisté sur l'importance de l'IHM (GUI), car un des éléments clé de l'acceptation d'une application est l'expérience utilisateur.&lt;br /&gt;&lt;br /&gt;Voici une image  qui donne à réfléchir, tirée d'un excellent blog:&lt;br /&gt;&lt;a href="http://application-servers.com/"&gt;Creating passionate users&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source: &lt;a href="http://application-servers.com/"&gt;http://application-servers.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116194268113975974?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116194268113975974/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116194268113975974' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116194268113975974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116194268113975974'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/10/exprience-utilisateur.html' title='Expérience utilisateur'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116193663427116129</id><published>2006-10-27T10:08:00.000+02:00</published><updated>2006-10-27T10:54:47.346+02:00</updated><title type='text'>Mot clé "final" sur les méthodes: gain de  performances?</title><content type='html'>En inspectant le code de mes développeurs, je remarque par-ci, par-là des méthodes "taggées" avec le mot clé "final". Et c'est une très mauvaise pratique!&lt;br /&gt;&lt;br /&gt;La fonction principale de ce mot clé est d'empêcher la surcharge de cette méthode dans les classes filles. Etant donné que Java est un langage objet, et que l'on ne connaît pas les développements futurs, ce n'est pas une bonne idée d'utiliser final, cela réduit les possibilités d'extension de notre appli (sauf si c'est réellement voulu, mais c'est relativement rare).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Pendant un temps, lorsque l'on était à la version Java 1.2 à peu près, il a été dit que cela améliorer "magiquement" les performances (c'est-à-dire de meilleures perfs sans aucun désavantage).&lt;br /&gt;Voilà pourquoi: ce mot clé sert à dire au compilateur qu'il peut éventuellement passer la méthode en mode "inline", c'est-à-dire que pendant la compilation, le compilateur peut, s'il le souhaite, insérer le corps complet de la méthode dans le flot d'instructions bytecode au lieu de l'appel standard de méthode (mise des arguments sur la pile, saut du pointeur courant vers le bytecode de la méthode, exécution, retour au flot courant et nettoyage de la pile).&lt;br /&gt;Cependant il faut savoir que maintenant, le compilo et la JVM Hotspot sont extrèmement optimisés (statiquement et dynamiquement); si bien que:&lt;br /&gt;&lt;br /&gt;   - le compilateur sait très bien quand faire passer des méthodes en inline (généralement, ce sont des méthodes simples, de moins de 4 instructions); donc il y a de grandes chances (c'est même sûr) qu'il ignore "final" pour les méthodes de plus de 3 ou 4 instructions&lt;br /&gt;   - le compilateur peut de lui-même et intelligemment décider d'inliner (ou "incorporer) certaines méthodes, même si vous n'avez pas utilisé "final"&lt;br /&gt;   - Enfin, les optimisations dynamiques vont compiler en langage machine bas niveau (assembleur) les méthodes les plus utilisées; si bien que le code en mode "inline", qui est intégré au flux et qui court-circuite l'appel standard de méthode ne sera jamais optimisé (je simplifie un peu...). Donc au lieu de gagner en performance grâce à cette optimisation, on ne fait rien --&gt; cela a l'effet inverse souhaité: de moins bonnes performances (c'est relatif puisque comme je viens de l'écrire, dans les faits le compilateur ignore votre "final" pour l'inline; il ne le prend en compte que pour le verrouillage de la surcharge).&lt;br /&gt;&lt;br /&gt;Bref, "final" a une utilité bien particulière dans la sémantique du langage (bloquer la surcharge), et la légende sur l'amélioration des performances est un mythe (depuis au moins Java 1.3).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Au passage, j'ai trouvé un article (en anglais), qui décrit mieux que moi les cas d'utilisation utiles du mot clé final sur les méthode:&lt;br /&gt;&lt;a href="http://www-128.ibm.com/developerworks/java/library/j-jtp1029.html"&gt;http://www-128.ibm.com/developerworks/java/library/j-jtp1029.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116193663427116129?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116193663427116129/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116193663427116129' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116193663427116129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116193663427116129'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/10/mot-cl-final-sur-les-mthodes-gain-de.html' title='Mot clé &quot;final&quot; sur les méthodes: gain de  performances?'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116124991442798134</id><published>2006-10-19T10:25:00.000+02:00</published><updated>2006-10-19T11:25:14.470+02:00</updated><title type='text'>Durée de vie des applications (l'arrivée de IE7)</title><content type='html'>&lt;a href="www.microsoft.com/windows/ie/"&gt;Internet Explorer 7&lt;/a&gt; (version finale) vient de sortir (en anglais, pour le moment).&lt;br /&gt;&lt;br /&gt;Le point amusant est qu'une fois installé, il remplace complètement Internet Explorer 6 (on ne peut avoir les deux en même temps).&lt;br /&gt;&lt;br /&gt;L'autre point à signaler, c'est qu'il sera de base dans Windows Vista, prochaine version de Windows qui va sortir dans 3 mois.&lt;br /&gt;&lt;br /&gt;Pour mieux comprendre là où je veux en venir, il faut préciser que le moteur CSS et HTML a un peu évolué (c'est pas un mal), donc que le rendu des pages sera certainement différent entre la version 6 et la version 7 (&lt;a href="http://ajaxian.com/archives/ie7-css-changes"&gt;http://ajaxian.com/archives/ie7-css-changes&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Alors que va-t-il advenir de toutes ces applications client léger (web) dont la partie présentation était spécifiquement développée pour IE6 ? La mise en page en sera peut être bouleversée (à 1 pixel près, cela peut jouer, notamment en mettant en décalant un gros bloc "div").&lt;br /&gt;&lt;br /&gt;Il y a des chances pour qu'il y ait une grosse demande d'adaptation de site web à IE7, prochainement.... Et s'il faut revoir toutes les applications tous les 3-4 ans, un des intérêts fort des clients légers (partie présentation basée sur un navigateur web) par rapport aux clients lourds (SWING, SWT...) risque d'être bien remis en cause...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116124991442798134?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116124991442798134/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116124991442798134' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116124991442798134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116124991442798134'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/10/dure-de-vie-des-applications-larrive.html' title='Durée de vie des applications (l&apos;arrivée de IE7)'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116117872804688467</id><published>2006-10-18T15:26:00.000+02:00</published><updated>2006-10-18T15:38:48.063+02:00</updated><title type='text'>Mapping objet/relationnel et standards...</title><content type='html'>Hibernate 3.2 vient de sortir. Et alors?&lt;br /&gt;&lt;br /&gt;Déjà c'est toujours bien de voir un bon produit Open Source qui évolue, premier point. Après, ce n'est tout de même pas si rare que ça.&lt;br /&gt;&lt;br /&gt;La bonne chose, c'est que le domaine du mapping relationnel se standardise réellement, à travers JEE 5, et plus particulièrement JPA (Java Persistence API).&lt;br /&gt;&lt;br /&gt;On peut argumenter que JDO était déjà un standard, mais dans les faits, plusieurs technologies s'affrontaient sur ce créneau. Le bon côté était que chaque techno (JDO et ses diverses implémentations, Hibernate, Toplink...) progressait plus vite. Le mauvais point, c'était lorsqu'il fallait que j'explique à mes courageux développeurs qu'ils allaient devoir apprendre toute une nouvelle API et ce qu'il y avait autour, et qu'en plus c'était souvent complexe et pas standard.&lt;br /&gt;&lt;br /&gt;La standardisation, sur ce coup, tombe tout à fait à pic, car la techologie est vraiment mature (après plusieurs années). Pas d'expérimentation à la JSF (qui pour moi est toujours trop complexe à utiliser, du moins tout seul --&gt; facelets simplifie bien les choses).&lt;br /&gt;&lt;br /&gt;En bref, Hibernate 3.2 arrive, gère officiellement JPA et on peut enfin se baser sur un standard fiable et reconnu pour gérer nos bases de données relationnelles et Java.&lt;br /&gt;&lt;br /&gt;(Après, est-ce que ça va me faire lâcher la simplicité de mon iBatis SQL-Maps, c'est pas sûr...)&lt;br /&gt;&lt;br /&gt;Cyril Gambis&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116117872804688467?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116117872804688467/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116117872804688467' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116117872804688467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116117872804688467'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/10/mapping-objetrelationnel-et-standards.html' title='Mapping objet/relationnel et standards...'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-116066443975282942</id><published>2006-10-12T16:43:00.000+02:00</published><updated>2007-04-05T13:18:50.393+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='&quot;design pattern&quot;'/><title type='text'>Design pattern et Resign pattern</title><content type='html'>Un excellent article, à prendre au second degré, sur un ensemble d'anti-pattern très couramment retrouvés dans les applications (en anglaise):&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.brajeshwar.com/archives/2005/08/resign-patterns-ailments-of-unsuitable-projectdisoriented-software/"&gt;http://www.brajeshwar.com/archives/2005/08/resign-patterns-ailments-of-unsuitable-projectdisoriented-software/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Mes préférés:&lt;br /&gt;&lt;br /&gt;&lt;p&gt;1.5 Simpleton&lt;/p&gt;  &lt;p&gt;The Simpleton Pattern is an extremely complex pattern used for the most trivial of tasks. The Simpleton is an accurate indicator of the skill level of its creator.&lt;/p&gt;&lt;p&gt;2.3 Compromise&lt;/p&gt;  &lt;p&gt;The Compromise Pattern is used to balance the forces of schedule vs. quality. The result is software of inferior quality that is still late.&lt;/p&gt;&lt;p&gt;et&lt;/p&gt;&lt;p&gt;3.2 Commando&lt;/p&gt;  &lt;p&gt;The Commando Pattern is used to get in and out quick, and get the job done. This pattern can break any encapsulation to accomplish its mission. It takes no prisoners.&lt;/p&gt;&lt;p&gt;Ces mauvaises pratiques se retrouve malheureusement tellement souvent, en cas de forte pression sur les délais...&lt;br /&gt;&lt;/p&gt;Cyril&lt;br /&gt;&lt;br /&gt;Mise à jour: la page n'étant plus disponible, en voici une copie ci-dessous&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;From http://www.agcs.com/patterns/papers/respat.htm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;                      Resign Patterns&lt;br /&gt;    Ailments of Unsuitable Project-Disoriented Software&lt;br /&gt;                            by&lt;br /&gt;                       Michael Duell&lt;br /&gt;                  mitework@yercompany.com&lt;br /&gt;&lt;br /&gt;Abstract&lt;br /&gt;&lt;br /&gt;Anyone familiar with the book of patterns by the Gang of Four [1]&lt;br /&gt;knows that the patterns presented in the book represent elegant&lt;br /&gt;solutions that have evolved over time. Unfortunately, extracting these&lt;br /&gt;patterns from legacy code is impossible, because nobody knew that they&lt;br /&gt;were supposed to be using these patterns when they wrote the legacy&lt;br /&gt;code. Hence, this work is a catalog of patterns for the masses. The&lt;br /&gt;patterns presented here represent abundant solutions that have endured&lt;br /&gt;over time. Enjoy reading the patterns, but please don't use them!&lt;br /&gt;&lt;br /&gt;1 Cremational Patterns&lt;br /&gt;&lt;br /&gt;Below is a list of five cremational patterns.&lt;br /&gt;&lt;br /&gt;1.1 Abject Poverty&lt;br /&gt;&lt;br /&gt;The Abject Poverty Pattern is evident in software that is so difficult&lt;br /&gt;to test and maintain that doing so results in massive budget overruns.&lt;br /&gt;&lt;br /&gt;1.2 Blinder&lt;br /&gt;&lt;br /&gt;The Blinder Pattern is an expedient solution to a problem without&lt;br /&gt;regard for future changes in requirements. It is unclear as to whether&lt;br /&gt;the Blinder is named for the blinders worn by the software designer&lt;br /&gt;during the coding phase, or the desire to gouge his eyes out during&lt;br /&gt;the maintenance phase.&lt;br /&gt;&lt;br /&gt;1.3 Fallacy Method&lt;br /&gt;&lt;br /&gt;The Fallacy method is evident in handling corner cases. The logic&lt;br /&gt;looks correct, but if anyone actually bothers to test it, or if a&lt;br /&gt;corner case occurs, the Fallacy of the logic will become known.&lt;br /&gt;&lt;br /&gt;1.4 ProtoTry&lt;br /&gt;&lt;br /&gt;The ProtoTry Pattern is a quick and dirty attempt to develop a working&lt;br /&gt;model of software. The original intent is to rewrite the ProtoTry,&lt;br /&gt;using lessons learned, but schedules never permit. The ProtoTry is&lt;br /&gt;also known as legacy code.&lt;br /&gt;&lt;br /&gt;1.5 Simpleton&lt;br /&gt;&lt;br /&gt;The Simpleton Pattern is an extremely complex pattern used for the&lt;br /&gt;most trivial of tasks. The Simpleton is an accurate indicator of the&lt;br /&gt;skill level of its creator.&lt;br /&gt;&lt;br /&gt;2 Destructural Patterns&lt;br /&gt;&lt;br /&gt;Below is a list of seven destructural patterns.&lt;br /&gt;&lt;br /&gt;2.1 Adopter&lt;br /&gt;&lt;br /&gt;The Adopter Pattern provides a home for orphaned functions. The result&lt;br /&gt;is a large family of functions that don't look anything alike, whose&lt;br /&gt;only relation to one another is through the Adopter.&lt;br /&gt;&lt;br /&gt;2.2 Brig&lt;br /&gt;&lt;br /&gt;The Brig Pattern is a container class for bad software. Also known as&lt;br /&gt;module.&lt;br /&gt;&lt;br /&gt;2.3 Compromise&lt;br /&gt;&lt;br /&gt;The Compromise Pattern is used to balance the forces of schedule vs.&lt;br /&gt;quality. The result is software of inferior quality that is still&lt;br /&gt;late.&lt;br /&gt;&lt;br /&gt;2.4 Detonator&lt;br /&gt;&lt;br /&gt;The Detonator is extremely common, but often undetected. A common&lt;br /&gt;example is the calculations based on a 2 digit year field. This bomb&lt;br /&gt;is out there, and waiting to explode!&lt;br /&gt;&lt;br /&gt;2.5 Fromage&lt;br /&gt;&lt;br /&gt;The Fromage Pattern is often full of holes. Fromage consists of cheesy&lt;br /&gt;little software tricks that make portability impossible. The older&lt;br /&gt;this pattern gets, the riper it smells.&lt;br /&gt;&lt;br /&gt;2.6 Flypaper&lt;br /&gt;&lt;br /&gt;The Flypaper Pattern is written by one designer and maintained by&lt;br /&gt;another. The designer maintaining the Flypaper Pattern finds herself&lt;br /&gt;stuck, and will likely perish before getting loose.&lt;br /&gt;&lt;br /&gt;2.7 ePoxy&lt;br /&gt;&lt;br /&gt;The ePoxy Pattern is evident in tightly coupled software modules. As&lt;br /&gt;coupling between modules increases, there appears to be an epoxy bond&lt;br /&gt;between them.&lt;br /&gt;&lt;br /&gt;3 Misbehavioral Patterns&lt;br /&gt;&lt;br /&gt;Below is a list of eleven misbehavioral patterns.&lt;br /&gt;&lt;br /&gt;3.1 Chain of Possibilities&lt;br /&gt;&lt;br /&gt;The Chain of Possibilities Pattern is evident in big, poorly&lt;br /&gt;documented modules. Nobody is sure of the full extent of its&lt;br /&gt;functionality, but the possibilities seem endless. Also known as&lt;br /&gt;Non-Deterministic.&lt;br /&gt;&lt;br /&gt;3.2 Commando&lt;br /&gt;&lt;br /&gt;The Commando Pattern is used to get in and out quick, and get the job&lt;br /&gt;done. This pattern can break any encapsulation to accomplish its&lt;br /&gt;mission. It takes no prisoners.&lt;br /&gt;&lt;br /&gt;3.3 Intersperser&lt;br /&gt;&lt;br /&gt;The Intersperser Pattern scatters pieces of functionality throughout a&lt;br /&gt;system, making a function impossible to test, modify, or understand.&lt;br /&gt;&lt;br /&gt;3.4 Instigator&lt;br /&gt;&lt;br /&gt;The Instigator Pattern is seemingly benign, but wreaks havoc on other&lt;br /&gt;parts of the software system.&lt;br /&gt;&lt;br /&gt;3.5 Momentum&lt;br /&gt;&lt;br /&gt;The Momentum Pattern grows exponentially, increasing size, memory&lt;br /&gt;requirements, complexity, and processing time.&lt;br /&gt;&lt;br /&gt;3.6 Medicator&lt;br /&gt;&lt;br /&gt;The Medicator Pattern is a real time hog that makes the rest of the&lt;br /&gt;system appear to be medicated with strong sedatives.&lt;br /&gt;&lt;br /&gt;3.7 Absolver&lt;br /&gt;&lt;br /&gt;The Absolver Pattern is evident in problem ridden code developed by&lt;br /&gt;former employees. So many historical problems have been traced to this&lt;br /&gt;software that current employees can absolve their software of blame by&lt;br /&gt;claiming that the absolver is responsible for any problem&lt;br /&gt;reported. Also known as It's-not-in-my-code.&lt;br /&gt;&lt;br /&gt;3.8 Stake&lt;br /&gt;&lt;br /&gt;The Stake Pattern is evident in problem ridden software written by&lt;br /&gt;designers who have since chosen the management ladder. Although&lt;br /&gt;fraught with problems, the manager's stake in this software is too&lt;br /&gt;high to allow anyone to rewrite it, as it represents the pinnacle of&lt;br /&gt;the manager's technical achievement.&lt;br /&gt;&lt;br /&gt;3.9 Eulogy&lt;br /&gt;&lt;br /&gt;The Eulogy Pattern is eventually used on all projects employing the&lt;br /&gt;other 22 Resign Patterns. Also known as Post Mortem.&lt;br /&gt;&lt;br /&gt;3.10 Tempest Method&lt;br /&gt;&lt;br /&gt;The Tempest Method is used in the last few days before software&lt;br /&gt;delivery. The Tempest Method is characterized by lack of comments, and&lt;br /&gt;introduction of several Detonator Patterns.&lt;br /&gt;&lt;br /&gt;3.11 Visitor From Hell&lt;br /&gt;&lt;br /&gt;The Visitor From Hell Pattern is coincident with the absence of run&lt;br /&gt;time bounds checking on arrays. Inevitably, at least one control loop&lt;br /&gt;per system will have a Visitor From Hell Pattern that will overwrite&lt;br /&gt;critical data.&lt;br /&gt;&lt;br /&gt;4 References&lt;br /&gt;&lt;br /&gt;Gamma, E., Helm, R., Johnson, R., Vlissides, J., Design Patterns -&lt;br /&gt;Elements of Reusable Object-Oriented Software. Addison-Wesley, 1995.&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;Michael Duell is an Engineer at AG Communication Systems, where his&lt;br /&gt;Resign Patterns have been rejected in favor of the Gang&lt;br /&gt;of Four Design Patterns.&lt;br /&gt;&lt;br /&gt;"Resign Patterns: Ailments of Unsuitable Project-Disoriented Software,"&lt;br /&gt;The Software Practitioner, Vol. 7, No. 3, May-June 1997, p. 14.&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-116066443975282942?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/116066443975282942/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=116066443975282942' title='1 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116066443975282942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/116066443975282942'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/10/design-pattern-et-resign-pattern.html' title='Design pattern et Resign pattern'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-115934864764937687</id><published>2006-09-27T11:10:00.000+02:00</published><updated>2006-09-27T11:17:38.376+02:00</updated><title type='text'>Résistance au changement...</title><content type='html'>S'il y a bien un sujet que je trouve passionnant, c'est la relation qui s'établie entre un utilisateur et un logiciel.&lt;br /&gt;&lt;br /&gt;Un exemple de relation de rejet est fréquemment abordée sous le nom "résistance au changement". Quel déception lorsque l'on a terminé en temps et en heure une refonte ou une nouvelle version d'une application et que les utilisateurs continuent à travailler avec l'ancienne version...&lt;br /&gt;&lt;br /&gt;Voici un bon article (en anglais) qui donne de bons indices sur les moyens de vaincre cette résistance:&lt;br /&gt;&lt;a href="http://headrush.typepad.com/creating_passionate_users/2006/09/why_they_dont_u.html"&gt;http://headrush.typepad.com/creating_passionate_users/2006/09/why_they_dont_u.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Et sur ce blog, combattre avec les armes de ses adversaires: quelques autres techniques pour résister à la résistance aux changements&lt;br /&gt;&lt;a href="http://urba-si.blogspot.com/2006/06/la-rsistance-la-rsistance-aux.html#links"&gt;Urbanisation des Systèmes d'Information: La résistance à la résistance aux changements&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-115934864764937687?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/115934864764937687/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=115934864764937687' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115934864764937687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115934864764937687'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/09/rsistance-au-changement.html' title='Résistance au changement...'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-115919380411640356</id><published>2006-09-25T16:00:00.000+02:00</published><updated>2006-09-25T16:16:44.133+02:00</updated><title type='text'>Framework de présentation Web JEE: où en est on?</title><content type='html'>Sujet très à la mode il y a deux ou trois ans (à l'époque, plusieurs nouveaux framework se lançaient par mois) , tout semble se clarifier peu à peu.&lt;br /&gt;&lt;br /&gt;Au final, plusieurs projets Open Source intéressants, avec des approches un peu différentes.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Le framework Ajax de Google s'appuie sur le codage de la couche présentation en Java. Bien fini et élégant, il a fait ses preuves: gmail, picasaweb, my google... (même s'il comporte quelques limitations). Yahoo, msn et Adobe ont également publié leur framework de manière similaire.&lt;/li&gt;&lt;li&gt;Le successeur du framework Java EE le plus utilisé, Struts, se fond dans Webworks, qui est un très beau projet. Même si la notoriété de Struts devrait jouer, et malgré l'élégance de Webworks, je ne suis pas sûr que cette future version de Struts (Struts "Action" ?) puisse faire le poids...&lt;/li&gt;&lt;li&gt;JBoss Seam a pour lui des fonctionnalités intéressantes et puissantes, notamment le support de JSF (le framework officiel de présentation de Java)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enfin, un wrappeur de JSF reprenant les idées de l'excellent Tapestry remporte la palme en matière de légèreté: Facelets.&lt;/li&gt;&lt;/ul&gt;Même s'il existe d'autres projets séduisants (Struts Shale, Wickets, Echo, Flex &amp;amp; Lazslo...), ces trois là (Google Web Toolkit, JBoss Seam + JSF, Facelets + JSF) sont mes préférés. Ils répondent à des besoins légèrement différents (ils se différencient notamment par leur légèreté) et représentent sans doute ce qui se fait de mieux au niveau de l'innovation et du respect des standards actuellement.&lt;br /&gt;&lt;br /&gt;Cela dit, j'ai toujours eu des doutes au niveau de la pertinence de Java pour gérer la couche présentation. Trop complexe, trop lourd, il serait peut être temps de passer à des technologies de script pour gérer cette partie (Ruby On Rails ou Groovy On Rails - GRAILS ?).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-115919380411640356?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/115919380411640356/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=115919380411640356' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115919380411640356'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115919380411640356'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/09/framework-de-prsentation-web-jee-o-en.html' title='Framework de présentation Web JEE: où en est on?'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-115710143404850051</id><published>2006-09-01T10:58:00.000+02:00</published><updated>2006-09-01T11:03:54.066+02:00</updated><title type='text'>Mettre en place une interface utilisateur pour une application Web</title><content type='html'>On demande généralement systématique aux programmeurs de mettre en place l'interface utilisateur (IHM) des applications sur lesquelles il travaille.&lt;br /&gt;&lt;br /&gt;Le problème, c'est que souvent le programmeur n'a pas de compétence ni de connaissance sur le sujet, et que l'on se retrouve avec des interfaces bancales, peu ergonomiques, complexes et souvent compréhensibles surtout par un développeur, rarement par un utilisateur final.&lt;br /&gt;&lt;br /&gt;Voici un article (en anglais) simple et clair qui présente quelques conseils pour mettre en place de manière efficace l'ergonomie d'une application:&lt;br /&gt;&lt;a href="http://mikeomatic.net/?p=65"&gt;6 Tips for Sane User Interfaces (http://mikeomatic.net/?p=65)&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-115710143404850051?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/115710143404850051/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=115710143404850051' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115710143404850051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115710143404850051'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/09/mettre-en-place-une-interface.html' title='Mettre en place une interface utilisateur pour une application Web'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-115676298575646435</id><published>2006-08-28T12:44:00.000+02:00</published><updated>2006-08-28T13:07:13.486+02:00</updated><title type='text'>Les annotations de Java 5</title><content type='html'>Un article très clair (en anglais mais simple) et intéressant sur les annotations:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;a href="http://www.infoq.com/articles/Annotation-Hammer"&gt;Annotation Hammer (http://www.infoq.com/articles/Annotation-Hammer)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Il présente l'intérêt de cette nouvelle fonctionnalité de Java, explique la définition et l'utilisation des annotations et expose les pièges et les meilleures utilisations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-115676298575646435?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/115676298575646435/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=115676298575646435' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115676298575646435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115676298575646435'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/08/les-annotations-de-java-5.html' title='Les annotations de Java 5'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-31934751.post-115433739838461966</id><published>2006-07-31T11:15:00.000+02:00</published><updated>2006-07-31T11:16:38.386+02:00</updated><title type='text'>Microcosme Java JEE de Cyril Gambis</title><content type='html'>Des informations utiles pour les développeurs, architectes et chefs de projet Java / JEE&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/31934751-115433739838461966?l=cyrilgambis.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cyrilgambis.blogspot.com/feeds/115433739838461966/comments/default' title='Publier les commentaires'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=31934751&amp;postID=115433739838461966' title='0 commentaires'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115433739838461966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/31934751/posts/default/115433739838461966'/><link rel='alternate' type='text/html' href='http://cyrilgambis.blogspot.com/2006/07/microcosme-java-jee-de-cyril-gambis.html' title='Microcosme Java JEE de Cyril Gambis'/><author><name>Cyril Gambis</name><uri>http://www.blogger.com/profile/04700285460865750905</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
