insideIT.fr : le blog des architectes IT de SFEIR

Aller au contenu | Aller au menu | Aller à la recherche

lundi 5 avril 2010

GWT token Gestion de l'historique

La Gestion de l'historique et la possibilité d'avoir des pages 'bookmarkable' est un plus de GWT.
Cela est rendu possible grâce à une chaîne de caractères nomée token, placée après un # dans l'url.
Exemple :
    http://www.google.com/moderator/#15/e=8ea&t=8ea.41&f=8ea.3070

Le token représente un état du client, il n'est jamais envoyé au serveur et son changement ne provoque pas de rafraichissement de la page ni appel au serveur.

Pourquoi c'est important ? 

Les utilisateurs internautes ont acquis des reflexes "web" et s'attendent donc à :
- pouvoir faire précédent et suivant
- créer un favori pour revenir au même endroit (ou dans le même état) ultérieurement

Pourquoi c'est (encore plus) important ? 

Parce que google nous prépare une technique d'indexation des pages dynamiques

Google fait ses essais avec le Showcase de GWT.
http://www.google.fr/search?q=gwt+showcase+radio+button

Vous remarquerez le !Cw

En pratique, cela revient à fournir 2 versions de la page, une en html+Javascript pour l'utilisateur , qui veut que ça aille vite, et une html pour le robot d'indexation, qui veut lire du html.
C'est un énorme enjeu pour Google, qui a proposé un outil qui lui a 'masqué' une partie du Web.
Cette lacune est sur le point d'être comblée.

Que propose GWT ?

Les classes de base sont :
History auquel on peut ajouter un ValueChangeHandler<String> pour être prévenu des changements de token.
Hyperlink qui est le widget de base qui permet de déclencher un changement de token sur un clic.

GWT vous permet de construire votre token comme vous le souhaitez et cela reste assez bas niveau : il se contente de fournir un String java, à vous de le découper.
On remarque cependant que beaucoup adoptent les mêmes syntaxes proches des urls en utilisant les séparateurs / ? et &

Pour plus de détails : 

Frameworks
Il existe donc plusieurs frameworks qui tentent de faciliter la gestion de ce token :

Restful-gwt

http://code.google.com/p/restful-gwt/
Ce projet utilise les annotations JAX-RS afin d'extraire et découper le token.
@GET
@Path("hello/{name}")
public void helloWithIntegerParam(@PathParam("name") Integer myName) {
   
Window.alert("Hello "+(myName+1));
}

Exemple

gwt-mvc

 http://code.google.com/p/gwt-mvc/
Ce projet reprend les conventions JSP.
Le token est ainsi découpé: #ACTION?param1=value1&param2=value2
content.clearAndAdd(pocViewNumeric);
Integer modelAParamValue = Integer.valueOf(getUrlParam("modelA"));
updateModel(modelA, modelAParamValue, event);


Exemple

samedi 4 avril 2009

SharePoint Designer Gratuit.

SharePoint Designer 2007[2] C’est un peu la technique de l’hameçon. Dans cette époque, où le mot “gratuit” fait office de slogan marketing, mieux vaut offrir au client ce qui lui semble coûteux à lui et qui ne rapporte finalement pas grand chose. Un IDE ou un outil de design n’a jamais donné un retour sur investissement énorme en lui-même. C’est la raison pour laquelle Eclipse a toujours été gratuit. Ce qui rapporte vraiment ce sont les licences serveurs, bien entendu. Et des outils de développement gratuits, ce sont des développeurs qui testent l’outil, montent en compétences dessus, prennent des habitudes, des réflexes et deviennent les meilleurs ambassadeurs de la marque. Et les managers sont souvent plus influencés qu’on ne croit par leurs développeurs ou designers, surtout si ceux-ci sont enthousiastes.

Cette offre, c’est donc une façon de promouvoir l’outil SharePoint dans son ensemble, en courtisant les développeurs. De la même manière, Windows SharePoint Services est fournit gratuitement avec Windows Server et vise cette fois les administrateurs. On l’utilise, on y prend goût et puis on s’aperçoit des améliorations réelles qu’apporte MOSS, qui lui, est facturé au processeur. Il y en a pour tout le monde et tout le monde est gagnant.

Alors, à quand Visual Studio ou la gamme Expression gratuits ?

A télécharger sur : http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=baa3ad86-bfc1-4bd4-9812-d9e710d44f42

Q&A sur ce changement : http://office.microsoft.com/en-us/sharepointdesigner/HA103607621033.aspx

mardi 12 août 2008

Revue de presse Web 2.0

UWA : Netvibes lance une API de développement de widgets multi-plateformes

UWA (Universal Widget API) est une API qui permet de développer des widgets pouvant s'éxécuter sur une grande partie des plate-formes Widget actuelles (Netvibes bien sûr, mais aussi iGoogle, Windows Vista, Apple Dashboard, Live.com, iPhone, Opera, MySpace, etc.).
UWA répond ainsi au paradigme "write once, run anywhere" pour les widgets. http://dev.netvibes.com/doc/universal_widget_api


Une BI gratuite... avec Google Docs !

L'éditeur Prelytics lance LiveDashboard 4 Team, un service gratuit de tableaux de bord s'intégrant dans Google Docs. Il est possible de créer soi-même ses tableaux de bord, de les partager, et de travailler de manière collaborative.
Enfin LiveDashboard 4 Team se présente comme une offre de type SaaS.
www.livedashboard4team.org

jeudi 19 juin 2008

TheServerSide Java Symposium - Jour 2

La journée d’aujourd’hui a commencé fort, avec un keynote de Neal Ford Language Oriented Programming: Shifting Paradigms. Une présentation impressionnante, avec des slides à faire pâlir d’envie Al Gore, et une parfaite maîtrise…

S’appuyant sur un cas concret, Neal montre que la façon de résoudre un problème dans le monde informatique d’aujourd’hui est souvent de créer un framework (aussi petit soit-il) qui généralise le problème, puis de le configurer pour résoudre le cas particulier qui nous préoccupe. Or cela conduit à du code qui est rempli de “bruit” (comprendre: redondance et constructions syntaxiques), illisible par les personnes du domaine métier, et donc ne peut être validé. Que fait-on alors? On externalise le code dans un fichier de paramétrage, XML forcément, mais ça ne le rend pas plus lisible par le métier…

La solution ce sont les DSL, Domain-Specific Languages, qui permettent d’exprimer des notions propres au métier d’une façon accessible aux hommes du métier. On peut les diviser en:

  • DSL internes: utilisant les constructions du langage hôte
  • DSL externes: indépendants d’un langage

Un exemple de DSL interne en Java est JMock, qui permet d’écrire des choses du genre:

   one(gt).getGreeting(); will(returnValue(”Good afternoon”));

C’est ce quon appelle “fluent interface”, car on cherche à imiter le langage naturel, quitte à introduire des artefacts sans utilité (“bubble words”). En Java ça reste fortement contraint par la rigidité du langage, mais dans les langages dynamiques on peut faire des choses beaucoup plus avancées.

XML est une forme de DSL externe, a fortiori.. Mais selon Neal XML est obsolète ! (Pas de polémique…). Le futur c’est de modéliser le métier à un niveau d’abstraction supérieur, que ce soit via un langage ou en manipulant un arbre abstrait (ce que certains IDEs tendent déjà à faire), et ensuite d’exécuter le résultat dans un contexte qui, selon le cas, donnera un schéma de DB, un exécutable, etc.

Ce fut de loin la meilleure conf des 2 premiers jours, prenante et stimulante…

Ensuite je choisis d’assister à la conf Son of SOA: Event-Driven Architecture and the Real World, par Eugene Ciurana (LeapFrog). Ca commence par des challenges (calendrier serré, équipe à construire, politique IT rigide, existant à intégrer, …) qui sont autant de challenges si on les voit d’un autre angle. Le choix a été de mettre en place un architecture Resource-Oriented, où tout est considéré comme une ressource, services comme données, et acccessible par une URI. Même si ça ressemble furieusement à du REST, Eugene s’en défend; en effet il y a quelques différences, notamment le mélange entre verbe et nom dans l’URI, mais globalement la différence est si fine qu’elle est invisible.

Eugene a mis en place des outils “best of breed”, avec MuleESB à la place d’honneur, en tant que backbone et resource container. Aussi choisis: Crowd pour le SSO, GWT (tiens…), Wicket, Communiqué (CMS). Au final une success story bien ficelée.

Ensuite je vais découvrir Comet: Building a richer, more interactive web application, avec Ric Smith de kaazing.com. Il s’agit d’expliquer les mécanismes qui permettent de faire du reverse push, ou reverse AJAX, c'est à dire de permettre à une application AJAX d'être notifiée par le serveur de nouveaux événements, par opposition au polling où c'est le client qui interroge périodiquement le serveur. Les avantages sont clairs dans des applications type finances, jeux ou paris, ou tous domaines où le 1/10 de seconde peut faire la différence.

Historiquement, la première façon d'implémenter le push est un iframe invisible, dans lequel le serveur reçoit en continu des balises <script> qui déclenchent l'exécution de callbacks côté browser. Ca marche, mais avec des effets de bord parfois très gênants (clignotement du curseur, fuites mémoire, ...).

Deuxième technique, le XHT long-polling: le client lance une requête qui ne revient que lorsque des données sont dispo. La connexion est fermée, et ré-établie immédiatement. Problèmes: léger overhead dû à la reconnexion, et latence possible.

Autre option, XHR streaming. Pour cela, on a besoin que le browser implémente "onreadystate". La réponse à la requête XHR ne se termine jamais, et lorsque des données sont dispo un callback est appelé. Principal souci, le support limité de cette fonctionnalité dans le parc de browers.

Dernière option, la connexion socket, qui nécessite un plugin (Flash, SIlverlight, Java). Ici on s'appuie sur des fonctionnalités du plugin pour établir une connexion serveur rémanente et notifier le browser.

Enfin, à l'avenir HTML5 intégrera la notion de server-side events, et le serveur pourra alors envoyer un type MIME application/x-dom-server-event qui activera un callback. Mais ce n'est pas pour demain.

Un point important à considérer est le couplage connexion-thread qui existe dans les serveurs classiques; en effet si 100 000 clients sont en attente d'évenements, on ne peut pas admettre de créer autant de threads. Jetty et d'autres résolvent ce problème avec la notion de "Continutation" qui permet de rendre les threads indépendants des connexions.

Un tour d'horizon super intéressant du problème !

Avant de manger, un Expert Panel: Languages: The Next Generation, composé de Ted Neward, Ola Bini et Guilaume Laforge, discute de la prochaine génération de languages. C'est très divertissant, et il en ressort surtout qu'il n'y aura pas de "next big language", mais que comme Neal Ford l'a prédit, les DSL vont prendre le devant de la scène, avec les langages dynamiques...

 

Midi, cette fois j'ai compris le truc pour ne pas faire la queue aux plats chauds: d'abord le buffet froid où il n'y a personne, ensuite les plats chauds!

 

Je saute le Vendor Tech Brief, encore GigaSpaces (eh oui ils sont le principal sponsor). Je vais récupérer mon T-shirt JavaBlackBelt gagné au concours hier, et une petite démo de JavaRebel s'avère assez impressionnante: rechargement à chaud des classes sans arrêt redémarrage! Un confort et une productivité qu'on a oublié sous Java, à force d'appeler des scripts ant et de redéployer à tout bout de champ.

The Enterprise Without a DB, par John Davies: ça fait longtemps que je traîne l'obligation de travailler avec des bases relationnelles comme un boulet, d'où mon intérêt pour ce sujet. John montre l'absurdité de la situation: le schéma FpML compte plus de 4000 éléments, et peut aller jusqu'à 12 niveaux de profondeur. Il est quasiment impossible de mapper un tel schéma avec un ORM. Les DB XML de leur côté n'ont pas d'API standard, et ont des performances sous optimales. Ce que propose John: utiliser le caching, la mémoire quoi, et travailler avec un data grid. Il cite plusieurs outils qui tendent vers ce but: GemStone, TangoSol (acheté par Oracle), GigaSpaces, Terracotta.

Malheureusement, de trop nombreux outils (reporting, etc) et un poids historique des tenants du camp "DB" rend cette approche exotique, et pour encore longtemps.

What's new in EJB 3.1, par Anotnio Goncalves: Non EJB n'est pas mort! Même si la spec 2.1 l'a presque tué... Aujourd'hui les EJB 3 (JSR 220) sont un soulagement pour qui fait des EJB: POJOs, interfaces simples, injection, annotations, peu de XML à écrire... Les EJB 3.1 (JSR 318) ont pour objectif de les rendre encore plus simple à utiliser, et d'amener de nouvelles foinctionnalités. On note déjà que JPA a son propre JSR (317), ce qui aidera peut-être à redorer son blason. Ensuite l'interface locale devient facultative! l'injection reste obligatoire. Il sera aussi possible de packager des EJB dans un WAR tout simplement, en gardant la fonctionnalité EJB. Enfin différents profils seront définis: A (minimal, pas d'EJB), B (EJB lite), full (EJB complet plus une trentaine d'autres specs). Nouveau encore: la notion de singleton, les appels asynchrones, et le timer service.

Java EE 6 (sortie Q1 2009) embarquera EJB 3.1.

On finit par un Fireside Chat: Zero Turneround in Java Development, où je revois les démos JavaRebel et Grails, plus Geert Bevin (Uwyn) qui présente RIFE.

Rendez-vous demain pour la clôture!

mercredi 18 juin 2008

TheServerSide Java Symposium - jour 1

Le TSSJS Europe se tient à Prague cette année, du 18 au 20 juin. Les thèmes majeurs proposés sont assez alléchants, jugez-en:

  • les frameworks web (spring, struts, JSF)
  • les nouveaux langages de l'écosystème java (groovy/grails, scala, jruby)
  • les nouvelles versions de spécs (JEE 6, EJB 3.1, JPA 2.0)
  • concurrence, performance, scalabilité
  • SOA

A part quelques événements communs (keynotes, etc) il y a en général 3 sessions simultanées, ce qui rend parfois le choix cruel...

Le premier keynote "Supporting RIA space" est délivré par Stephan Janssen, le fondateur et président du BeJUG, fondateur de JavaPolis et de parleys.com, un site qui met en ligne des conférences filmées avec les slides synchronisées. C'est ce site qui lui servira de support pour tester différentes technologies RIA dont il nous fera part...

Premier point délicat: définir une application RIA... Pour la petite histoire le mot a parait-il été inventé par Macromedia, et donc absorbé par Adobe. Mais ça ne nous avance pas. Un application RIA c'est une application Riche (mais pas tout à fait comme une application desktop), et qui utilise Internet (mais pas forcément tout le temps)...

Bref l'éventail est grand, RIA encore mal cerné, et les technologies qui permettent de faire du RIA innombrables. Stephan en a retenu quelques unes et a expérimenté le portage du site parleys.com sur ces technos.

  1. le site original, HTML, rien à dire
  2. refactoring en DHTML/JavaScript avec Scriptaculous. Conclusion: il faut un doctorat en JavaScript, et la compatibilité cross-platform est un enfer... (quelle surprise!)
  3. GWT: développement et debugging agréable en Java avec les outils Java, support du bouton back, et "99% cross platform" ( un seul if/then dans tout le code). Un seul point noir est relevé par Stephan: le site n'est pas indexé correctement par Google!
  4. Flex: le résultat est extrêmement semblable à GWT, avec un peu plus d'"eye candy", transitions animées et choses similaires. Techno mature, mais l'indexation Google est inexistante, sauf à utiliser des artifices (redirections)
  5. JavaFX: résultat sexy style Flex, avec en plus la possibilité d'utiliser le Java existant. Pas de support Mac...

Au final le site actuel est la version Flex, avec intégration AIR, mais on note bien que GWT n'a reçu que des éloges...

Deuxième conf, là il faut choisir... JSF? qui utilise encore JSF... JPA/Hibernate? déjà fait... Je reste donc dans la salle principale pour entendre Costin Leau (SpringSource) parler de "Spring Dynamic Modules".

On le sait, Java ne gère pas les versions des classes ou le remplacement dynamique, et il est impossible à deux versions d'une même classe de coexister. OSGi fournit une solution, en définissant une notion de "module" ou "bundle", qui est simplement un ensemble de classes, auquel s'appliquent les notions de

  • cycle de vie
  • "class space"
  • règles de visibilité
  • versionnage

Un service au sens OSGi c'est simplement une classe, un POJO qui exporte des méthodes au travers de la visibilité. Le reste est caché de l'extérieur, ce qui permet à plusieurs versions de cohabiter sans conflit. Spring 2.5 sera OSGi-compliant et intègrera la notion de bundle. On pourra également réagir aux événements qui affectent le cycle de vie des services (création, suppression, etc). Les dépendences OSGi sont localisées dans le contexte Spring, et non dans le code.

Au final cela semble très prometteur, reste à voir dans quelle mesure cela s'appliquera à nos développements. Annoncé également, la sortie du futur S2AP, SpringSource Application Platform... Pas plus de détails là-dessus.

Deuxième session de la matinée: monitoring, management sur la plateforme Java 6, par J-F Denise, responsable JSR 262 chez Sun.

Beaucoup de rappels sur JMX et les MBeans, l'agent JMX, l'agent remote... Depuis Java 5, l'outil JConsole est fourni avec le JDK et permet d'interroger une JVM qui tourne, y compris des MBeans. C'est une bonne chose de le rappeler, car le JDK est fourni avec beaucoup d'outils trop peu connus, car pour beaucoup l'IDE est la seule interface qui existe avec Java.

Implémenter un MBean est simple (juste une interface), mais peut poser des problèmes: si le MBean retourne un type composite sous forme d'une classe maison, il faut que le client JMX dispose de cette classe aussi dans son classpath !! Pour relaxer cette contrainte, Sun introduit les MXBeans, qui permettent de faire cela, et via un mécanisme interne, transforment les objets complexes sérialisés en des classes standard qui peuvent être lues par le client sans modification de son classpath.

Autres outils fournis avec le JDK 6: jps, jmap, jhat, jinfo... Et un nouvel outil qui ne fait pas à proprement parler du JDK: jvisualvm. C'est un outil intégré et extensible de troubleshooting, fonctionant avec des plugins, et qui regroupe les fonctionnalités éclatées dans divers outils... La RC1 est disponible depuis le 6 mai.

Avant de manger, un keynote par Nati Shalom de GigaSpaces "Getting ready for the cloud". Il s'agit en fait de 40 minutes de marketing pendant lesquelles le message est martelé sur tous les tons: vos applications ne sont pas scalables, parce que bâties sur des silos. La solution: remplacer les silos par un "cloud", une plateforme qui virtualise les 3 tiers habituels (middleware virtualization) et qui est la seule à pouvoir assurer le "scaling on-demand". Et comme par hasard, GigaSpaces a un framework qui le permet. OK, le message est passé.

Déjeuner avec un lance-pierre, pas le temps de digérer on attaque l'après-midi. Eh non, après avoir erré dans les coursives, je me rends compte que la conf qui m'intéressait (Comparing Dependancy Frameworks) est annulée... J'assiste sans conviction à un case study "Using JSR-272 and Spring for a Monetary System".

Ensuite, encore un dilemme: Holly Cummins, spécialiste des outils de diagnostic chez IBM (au style capillaire improbable), présente "Java Performance Tooling", mais je choisis "Simplifying JEE Development with Grails" par Guillaume Laforge, project manager de Groovy.

L'idée de Grails c'est d'appliquer les principes de productivité de Ruby et Groovy, tout en s'appuyant sur les bibliothèques et infrastructures existantes (Java, Spring, Hibernate, servlet containers, etc.). Par exemple, Grails génère un WAR, qui peut être déployé tel quel sur un serveur d'applications. Grails utilise GORM, un ORM bâti sur Hibernate, WebFlow, domain-specific languages, GSP (un équivalent de JSP), supporte des plugins, et nécessite aussi peu de fichiers de configuration que possible grâce à des conventions de nommage.

La démo est impressionnante, en quelques lignes et en live Guillaume crée deux classes, les relations entre elles, les tables correspondantes, les mappings relationnels, les finders, les controleurs, l'interface web... et redéploie sans redémarrer quoi que ce soit! Est-ce que ce serait Ruby on rails, avec la scalabilité et la puissance en plus??

Conf suivante, je choisis une prés de GlassFish, par Antonio Goncalves (Paris JUG). Pas grand chose à retenir, Glassfish est prêt pour la production, scalable, clusterisable, avec une belle interface d'administration (bon tous les gouts sont dans la nature). C'est l'implémentation de référence pour Java EE 5 et 6 et il est open source.

Plus intéressant, mais on ne s'étendra pas dessus, ce qui est annoncé pour la v3: un noyau ultra léger et ultra rapide (HK2: Hundred Kbyte Kernel), modulaire, avec des modules web, EJB, JRuby, PHP, JavaScript, etc. et le support OSGi! Bref, on reviendra.

Ouf, c'est fini, une bière, remise des prix du concours GigaSpaces/OpenSpaces... je discute avec le gagnant, un Brésilien qui a réalisé un projet pour la distribution des surplus alimentaires au Brésil (avec GWT en front!), l'occasion de pratiquer mon portugais :)

Demain la suite...

vendredi 18 avril 2008

Soyez createur de differences

cadre_imgTitre2En quelques heures de présentations, assumées comme un écho de la grand-messe de Las Vegas, c'est tout le nouveau visage du web qui a été dessiné. La toile de fond c'est internet bien sûr. Mais le support lui, devient multiple. Les applications riches sont à la fois sur internet mais aussi sur le poste de travail ou sur le mobile. Et la même information doit être disponible partout avec un mot d'ordre : la continuité. On doit pouvoir regarder le début d'une émission à la télé et la fin sur son PC ou son mobile. Il en va de même pour tous les services disponibles ou envisageables.

Parallèlement, l'enjeu n'est plus d'être présent sur internet mais d'y être vu, d'y être "trouvé" (selon l'expression de Dick Lantim). Tous les moyens sont bons pour entraîner les gens (de leur plein gré) sur votre site. Facebook est omniprésent ? Faites des mashups qui reprennent les points clé de votre site et feront de véritables appels d'air vers lui (Popfly). Google est incontournable mais n'aime pas beaucoup les sites multi-média ? Silverlight devient scrawlable (Quand l'agent détecté est un robot ou scrawler, le contenu renvoyé est du pur html, c'est le Silverlight SEO pour Search Engine Optimisation). Vous communiquez via MSN Messenger mais vous aimeriez envoyer autre chose que du texte ? Vous pourrez sous peu envoyer en guise de message des extraits de vidéos glanées sur les web tv (sous forme de cue point).

Enfin, la fidélisation devient primordiale. Après avoir fait venir l'utilisateur, le client, il faut qu'il reste, il faut qu'il adhère (dans tous les sens du terme). Il faut trouver les bonnes affordances (le gros mot n'est pas de moi mais d'Amélie Boucher de People Square). Là est mis en exergue la différence fondamentale entre utilité et utilisable. Si votre site est utile, les gens viendront, si il est "utilisable" (ergonomique) ils resteront. Et il ne faut pas négliger cela. Car à quoi servirait de déployer tant d'efforts et de budget pour sortir ce site dont vous rêviez, dont le marketing rêvait, que vos clients attendaient avec impatience, si après une heure de tentatives infructueuses, les-dit clients repartent insatisfaits, n'ayant pas compris comment ça marchait.

Allez, je ne résiste pas à une petite formule choc offerte pour l'occasion :

RDA + RIA* = RIA**

(* Rich Internet Application, ** Rich Interactive Application)

Cette formule est lourde de sens. Eh oui le focus n'est plus sur internet, il est sur l'interactivité.

jeudi 6 mars 2008

[MIX 08 - J1] RIA et Cloud computing

MIX 08 Ça blogue pas mal aux US depuis cette nuit. La grand-messe du Web 2.0 par Microsoft a commencé. Alors, qu'en ressort-il pour le moment ?

  • IE8 et Silverlight 2. Bon pour IE8 on est dans le lancement classique d'un nouvel opus du navigateur MS. Rien de très excitant. D'accord, d'accord la liste est longue, les nouveautés sont nombreuses. MS va dans le bon sens (adhérence à la norme). Mais on ne fait pas trois jours de symposium pour lancer un nouvel Internet Explorer. Alors ? Alors Silverlight ! Le battage commence. On avait déjà vu de quoi était capable le « flash killer » avec le site de Quicksilver. Il était temps de faire adhérer plus de marques. Ça commence bien : NBC Olympics, Hard Rock Memorabilia, Aston Martin. Les autres devraient suivre.
  • Expression Studio 2. A tester sans attendre, la version beta de la suite graphique nouvelle mouture.
  • SQL Server Data Services, voilà aussi des termes qui font plaisir. On entre dans le cloud computing. Le début d’une nouvelle ère ?
  • ASP.NET MVC et la preview de Deep Zoom Composer. Quelques bonne heures de programmation et de design en perspective pour tester tout ça.

Et ce n'est que la première journée. Le meilleur est pour la seconde journée tout à l'heure (décalage horaire oblige) avec l'intervention de Steve Balmer pour un Q&A sur IE8. Et mon petit doigt me dit que le numéro un ne va pas se déplacer juste pour parler de IE.

Pour un résumé de la journée en anglais : le blog de Chris Koenig.