| « Séminaire gratuit à Toulouse | DNG à TechEd » |
En direct de Barcelone pour TechEd 2006 (suite et fin)
TechEd 2006 a lieu cette année à Barcelone. Comme à l'accoutumée, Microsoft a mis les grands moyens avec un centre de convention entièrement dédiée à un évènement qui drainera encore cette année plusieurs milliers de visiteurs.
Côté Off, il faut avouer que l’édition 2006 a un positionnement plutôt compliqué. Depuis 2004, Microsoft n’a pas vraiment opéré de révolution dans ses produits. Et les annonces, qui d’habitude pleuvent dès les premières heures de l’évènement, ne sont pas vraiment légion cette semaine. En deux ans, l’éditeur s’est attaché à développer tout ce qu’il a annoncé en 2004. Or, les développeurs sont exigeants et en veulent toujours plus, plus d’annonces, d’innovation ou de CTP révolutionnaires.
Mais il faudra s’y faire, 2006 est une année de transition, Vista est bientôt dans les bacs, .NET Framework 3.0 (aka WinFX) est annoncé en RTM et Office 2007 pointe le bout de son nez. Dans ces conditions, ce TechEd sera donc une répétition plus « mature » de la dernière PDC. Là où Microsoft s’exclamait à l’époque « on va faire » il est aujourd’hui fier d’annoncer « on l’a fait ».
Ainsi, l’agenda de la semaine reflète t-il cet état d’esprit. Beaucoup de sessions sur WPF, WCF, C# V3, Biztalk, Office VSTO. Le seul trublion de la semaine étant AJAX qui s’est invité à coup de sessions, d’ailleurs toutes aussi intéressantes les unes des autres, sur son Framework maison : ATLAS.
Dans ce contexte, nous essaierons de vous faire un retour plutôt informel des sessions que nous avons suivi avec couverture quasiment temps réel. La formalisation des articles sera donc forcément moins travaillée qu’à l’accoutumée.
-----
[Envoyé spécial : Sami]
Anders Hejlsberg sur C#V3 – 9h à 10h
La salle accueillant cette session a été prise d’assaut quasiment 10 minutes avant le début. C’est donc assis par terre, devant les écrans LCD dédié pour l’occasion, que j’ai suivi avec grand intérêt cette présentation d’Anders Hejlsberg .
Cela dénote aussi que la masse des développeurs n’est pas encore sensibilisée à C# V3. Même si nous évoquons régulièrement le sujet sur DNG depuis 3 ans, le « vrai » lancement de Linq ne commence que maintenant.
Sur le fond donc, rien de nouveau, les fonctionnalités de C#V3 en 2007 sont toujours celles de 2003. L’article suivant rédigé à l’époque est donc toujours d’actualité. L’inférence de type, les méthodes d’extensions, les lambda expression, etc…
Il y a tout de même quelque chose de nouveau (en tout cas me concernant), c’est la possibilité de compiler en IL un arbre d’expression Linq faire quelque chose du type
Func<param1, param2> f = ExpTree.compile();
Cette possibilité ouvre la voie à de nombreux domaines d’applications. L’arbre d’expression Linq devient en quelque sorte un CodeDOM évolué et générique. Une approche vraiment très intéressante…
[Envoyé spécial : Sami]
Clemens Vasters et Swartz sur l’accès aux données et les transactions dans WCF
Les deux speakers de cette session ne sont plus à présenter. Je pensais disposer d’un retour pragmatique de Microsoft sur les particularités de WCF en terme de gestion transactionnelle, et nous avons plutôt eu droit à un cours magistral avec des concepts généraux et abstraits sans une seule ligne de code (au ¾ de la session). Les slides reflètent clairement la teneur de la session. Un coup pour rien.
[Suite]
[Envoyé Spécial : Sami]
DEV307 – WCF – After the code rush : Secure Service Hosting
Cette session fût une vraie merveille. J’avoue avoir été littéralement scotché par les talents de pédagogue de Michael Willers, architecte pour la société Newtelligence. La session fût menée tambour battant sur le thème (qui au passage n’a pas grand-chose à voir avec le titre) du threat modeling, encore très peu connu en France. Ce procédé consiste à prendre une application orientée services (en l’occurrence s’exécutant sous WCF) pour en extraire tous les risques potentiels d’échec. Le terme « échec » est pris ici au sens large, c'est-à-dire toute intrusion possibles mais aussi l'échec d’installation, les pannes de machines, les échecs d’invocation, le non respect des règles de sécurité. Michael Willers nous a ainsi présenté un Framework destiné à aider les concepteurs de services dans leurs tâches d’installation, de déploiement et de configuration de services "safe" (cet outil est distribué en licence GPL).
L’idée consiste à proposer du code qui mettra en place :
- des ACL sur les services Windows (tout le monde a l’habitude de faire tourner ses services avec un compte local system, c’est un anti-pattern)
- des ACL sur les logs (tout le monde ne doit pas nécessairement lire les traces de vos services)
- le rollback lors de l’installation des services
- la mise en place d’agents destinés à surveiller les échecs
- le hosting automatique sous IIS (quid des applications pools, du modèle de sécurité de http.sys)
- la gestion du mode Full Trust (aujourd’hui WCF impose que les clients s’exécutent sous un régime de sécurité faible)
- une politique permettant d'éviter le syndrôme du SPOF (Single Point Of Failure) qui fait que tout un système SOA peut s’écrouler si une machine avec des responsabilités importantes et non répliquées s’écroule
Il est parti d’une modélisation simple d’un scénario d’exécution de services (sous Visio, mais l’outil en l’occurrence n’est pas important dans ce cas). A partir de ce diagramme, il a identifié tous les scénarios d’échecs possibles pour produire des solutions de sécurisation. Et ses solutions sont loin d’être triviales. Une grande partie du code de Michael s’appuie sur des invocations natives ou des paramétrages plutôt bas niveau (le proxy ASP.NET permettant de disposer de privilèges Partial lorsqu’on s’exécute en FullTrust en est l’exemple parfait).
Dès lors, on s’aperçoit que la plateforme Windows est encore loin de proposer un hosting nativement « safe ». Le chemin qui mène à la sécurisation est semé d’embûches et les compétences pour implémenter une démarche de threat modeling plutôt pointues.
A noter qu'il existe des outils chez Microsoft permettant de déduire des les modèles de threat (un modèle de menaces) à partir d’un scénario.
Bref, si ce domaine est en pleine ébullition il est aussi immature. Autant dans la réflexion que dans les outils proposés. Peut-être qu’un jour viendra où l’OS sera nativement « threat safe » (et pas Thread Safe ;-)) en implémentant par défaut les mécanismes se trouvant dans le Framework de Michael. Jusqu’ici, il faudra malheureusement encore bricoler manuellement pour sécuriser ses services (et qui dit bricolage dit « coût »).
[Env. Spec. SJ]
DEV345 Creating Custom Activities with Windows Workflow (WF)
Une session plutôt scolaire sur les activités WF et leur chaînage. On a eu droit au classique designer et au différents types d'activités (IfElse, Parallel, etc...)
Bref, rien de réellement transcendant par rapport au whitepaper "introduction WF" que Microsoft propose sur son site.
Jeudi 9
Anders sur Linq for SQL (ou la stratégie mapping o/r de MS)
Beaucoup, beaucoup de choses à dire sur cette session. Même si l'outil m'est familier, Anders a toujours une manière bien à lui de présenter les choses. Quelque part il reflète aussi l'angle d'approche de l'éditeur sur ce sujet un peu "sensible". Cette session s'est attachée à aborder les thèmes suivants :
- fichier XML / custom attributes pour modéliser le mapping
- Lazy loading, ou plutôt "Delay Loading" comme aime à le souligner MS
- N+1 Select
- Verrous optimistes et pessimistes
- Select/Join fetching (la manière de récupérer les relations)
- Les partial classes pour représenter l'entité "technique"
- Le designer d'entités
- L'appels aux procédures stockées et fonctions SQLServer dans Linq
Nous y reviendrons car il y a vraimnet beaucoup de choses à dire sur ce sujet (message subliminal : quasiment de quoi occuper un Symposium entier ;-))...
DEV308 Proven practices for implementing services
Une session essentiellement basée sur des bonnes pratiques de conception de services Web tout en insistant sur les anti-patterns liées au développement d'interfaces WSDL.
Avec des messages du type :
- préférez l’approche orientée messages avec des interfaces du type proposant uniquement des messages et non des paramètres. Ex Add(OperandeMsg) plutôt que Add(x, y)
- travailler avec des types Nullable et éviter de sérialiser une valeur « null » en retour de méthode
- préférer les MessageContract de WCF (plus extensibles) que le DataContract
- personnaliser les messages XML à l’aide de wrapper
- éviter les types « non interopérables »
Bref, une session utile mélangeant concepts généraux et démarche pragmatique au travers de WCF. Une session qui prouve le caractère plus mature des produits que MS propose cette année. Les CTP d’il y a deux ans sont loin, l’éditeur est décidé à évangéliser ses développeurs sur les bonnes pratiques de conception.
DEV232 IIS 7
IIS 7 sera assurément une des grandes stars de l’année. Même si, assez curieusement, ce serveur fait encore peu parler de lui.
Sur le fond, MS a totalement revu sa copie. Fait marquant, le speaker (product leader IIS7) a fait une sorte de mea-culpa à demi-mot. IIS 5 est une boite noire qui a énormément desservi l’image de l’éditeur par ses nombreux trous de sécurité (notamment les buffer overflow). IIS 6 est une évolution majeure mais pêche par son modèle d’extensibilité, assez limité (seuls sept types d’évènements pouvant être récupérés par des handlers).
IIS 7 est une ré-vo-lu-tion. C’est l’outil le plus audité en interne. L’approche orientée module fait son apparition sur un modèle très proche d’Apache. D’ailleurs dans la pratique, on s’aperçoit que de nombreuses fonctionnalités ont été inspirés du célèbre serveur web open source et c’est tant mieux :
- un modèle d’extensibilité avec la possibilité de développer des modules (managés ou non)
- la possibilité de charger / décharger des modules
- un pipeline de traitement des messages évolué
- la métabase disparaît au profit de fichiers de configuration (l’équivalent d’un httpd.conf en XML)
- une forte intégration d’ASP.NET mais sans effet boite noire
- une API évoluée de diagnostic et de monitoring (et c’est là que IIS 7 peut faire la différence par rapport à Apache, plutôt dépourvu de ce côté)
- un modèle multi-thread mais aussi multi-process
- une magnifique console d’administration (pas vraiment utile pour les hosters)
- un excellent outil en ligne de commande pour le mode batch (plus utile)
- un déploiement par xcopy des webapp (un peu comme les .war de Java)
- des erreurs 500 beaucoup plus intelligentes avec des messages explicites et non des stacktraces bas niveau
Bref, on regrettera simplement que IIS 7 ne soit disponible que dans Vista.
[Envoyé Spécial : Lionel Laské (C2S)]
DEV212: Comparing .NET and Java: The View from 2006
L'excellent David Chappell se propose de comparer dans cette session les fonctionnalités et les promesses des plate-forme .NET et Java jusqu'en 2008.
Pour cela il repose sur un schéma en couche traditionnel qui décrit une application aujourd'hui:
* Accès aux données,
* Définition de la logique métier (objets),
* Conteneur d'exécution de la logique métier: serveur web et composants métiers ,
* Interface: web, standalone, service.
Première étape de la démonstration, un retour vers le passé: en 1996 Microsoft sortait ASP, ADO et MTS et devenait ainsi leader sur le serveur. En 1996 Sun sortait la première JDK et prenait de l'avance sur la partie cliente. Depuis la sortie de J2EE en 1999 et du .NET Framework en 2002, les choses se sont complètement inversées ! Voilà ce que propose les deux plateformes en 2006:
.NET Framework 2.0
* ADO.NET,
* C#, VB, ...,
* ASP.NET, ASMX/WSE, .NET Remoting, Enterprise Services, System Messaging,
* Browser pour le client léger, WinForm,
J2EE 1.4:
* JDBC,
* Java,
* Servlet/JSP, JAX-RPC, RMI, EJB, JMS,
* Browser pour le client léger, Rien pour le client lourd (Swing et Eclipse RCP ne sont pas dans J2EE)
Deuxième étape de la démonstration: que proposent les plate-forme pour demain. D'abord, selon David Chappell, pour le futur la couche de définition s'enrichie de workflows et de règles qui permettront de mieux définir la logique métier. Selon cette définition pour le futur, voilà ce que propose la plate-forme .NET:
.NET Framework 3.0
* ADO.NET,
* C#, VB, ... + Windows Workflow Foundation + Le moteur de règle de WF
* ASP.NET, WCF
* Browser et AJAX, WinForm,
Pour Java la situation est moins claire, selon David Chappell, la plate-forme Java est déchirée entre trois alternatives:
* JavaEE 5 poussé par le JCP (contrôlé à 90% Sun (sic)),
* Open SOA poussé par les gros éditeurs notamment IBM et BEA,
* La communauté Open Source avec notamment Eclipse, Spring et Hibernate
Si l'on s'intéresse aux deux premiers, cela donne:
Java EE:
* JDBC, JPA,
* Java, Rien pour le Workflow,
* Servlet/JSP, JAX-WS, RMI, EJB 3.0, JMS,
* Browser et AJAX, Rien pour le client lourd (Swing et Eclipse RCP ne sont pas dans Java EE)
Open SOA:
* SDO,
* Java, BPEL,
* Servlet/JSP, SCA,
* Browser et AJAX
Pariant sur la victoire de la démarche Open SOA, David fait ensuite une comparaison des différentes couches entre les deux plateformes: ADO.NET vs SDO, Java vs C#, WF vs BPEL, WPF vs Swing/Eclipse.
David conclu en rappelant que depuis plusieurs années les deux plate-formes ont toujours avancées dans des directions similaires, proposant finalement toujours des fonctionnalités équivalentes.
Même si les approches diffèrent elles ont toujours des avantages et des inconvénients.
Il avoue que selon lui Microsoft a aujourd'hui de l'avance mais qu'il ne peut imaginer que Java ne puisse la rattraper, la compétition étant une nécessité pour tout le monde.
[Envoyé Spécial : Lionel Laské (C2S)]
Session "Off" underground habituelle de Miguel De Icaza : Cross Platform .NET with Mono and Mainsoft
Novell et plus particulièrement Miguel de Icaza proposait dans l'hôtel en face du centre de conférence une session "off" sur la plate-forme Mono.
Mono est le portage Open Source de .NET. Il repose sur les spécifications ECMA de la CLR et du langage C# et sur une réécriture des librairies du Framework. Mono est multi-plateforme (Linux, Windows, MacOS, ...).
Miguel de Icaza présentait Mono 1.2. Les nouveautés de Mono 1.2 sont le support désormais complet des WinForms (au niveau .NET framework 1.1) et, côté langage, le support des nouveautés du .NET Framework 2.0 et en particulier des Generics.
Miguel fait quelques démos en compilant une application WinForm sous VS 2005 et en l'exécutant sur Linux et inversement en compilant une application GTK (!) sous Linux et en l'exécutant sur Windows XP. Il fait également la démonstration sur MacOS du moteur de création de jeux Unity dont l'interface de construction est réalisée en Mono.
Autre nouveauté, la disponibilité d'un plug-in Visual Studio pour tester directement le fonctionnement d'une application .NET sur Mono (à terme il sera possible de l'exécuter sur un Linux distant).
Le support complet du .NET Framework 2.0 (WinForms mais aussi ASP.NET) est prévu pour Mono 2.0 dont la sortie est plannifiée le 2ème trimestre 2007.
Mono 2.0 intégrera également un support partiel de WCF. Un projet parallèle nomé Olive se fixe pour objectif d'ici 9 mois de disposer d'un portage complet de WCF, WF et Cardspace. Rien n'est prévu pour WPF car Miguel n'aime pas WPF (c'est comme ça).
La séance de questions/réponses est l'occasion de se poser la question de la viabilité et de l'intérêt du projet. Selon Miguel, l'objectif de Mono est pour Novell d'attirer les développeurs et les applications sur Linux. Il cite quelques projets où la migration de Windows vers Linux s'est justifiée pour des raisons de coût de licence.
MainSoft présente également sa solution de portage des applications ASP.NET sur J2EE. Cette solution commerciale fonctionne en utilisant un cross compiler qui traduit le code IL .NET en bytecode Java. L'ensemble des librairies de Mono ayant également été traduite en bytecode Java via ce cross compiler, cela permet l'exécution sur un serveur J2EE (Tomcat, Websphere ou autres) d'une application .NET. Cela fait également que MainSoft est un gros contributeur du projet Mono.
La solution MainSoft est complètement intégrée: la génération mais aussi le déploiement s'effectuant entièrement depuis Visual Studio.
Une démonstration est effectuée sur le Portal Starter Kit et le Personal Web Site Starter Kit.
[Envoyé Spécial : Lionel Laské (C2S)]
DEV340: Building Data-Driven Applications with WPF
Le data-binding est la capacité de lier des données à une IHM. Cette session explique (particulièrement mal il faut bien le dire) comment cela est possible avec WPF.
Le data-binding est au coeur du fonctionnement de WPF. En fait avec WPF on peut lier n'importe quelle propriété de n'importe quel contrôle à une donnée quelconque. C'est ainsi que l'on peut très facilement lier deux contrôles pour faire changer la couleur d'un texte en fonction de la position d'une barre de défilement.
Au-delà des éléments simples, le data-binding est aussi utilisable pour des collections de valeurs. C'est ce qui permet d'alimenter une liste avec un ensemble de noeuds d'un fichier XML. Dans ce cas, on va utiliser un DataTemplate qui va permettre de spécifier le format de chaque item généré.
Pour supporter le data-binding WPF les objets doivent:
* Implémenter une interface INotifyPropertyChanged. Cette propriété permet de notifier que la valeur d'une propriété de l'objet a changée. Tous les objets graphiques de WPF l'implémentent.
* Implémenter une interface INotifyCollectionChanged. Cette propriété permet de notifier qu'une collection a changée: c'est-à-dire qu'il y a eut ajout, modification ou suppression d'élément. WPF propose de nombreuses collections qui l'implémentent.
Pour spécifier qu'on fait du binding sur un objet, on indique simplement sur la propriété cible la source du binding, c'est le runtime de WPF qui se chargera de l'alimentation automatiquement en fonction des données. Comme toujours on peut indiquer le binding soit directement depuis le XAML soit par appel du code. Il faut noter également que le binding peut être: one shot, unidirectionnel ou bidirectionnel.
Ce qui est amusant c'est qu'on peut utiliser comme source du binding non seulement des éléments graphique de WPF ou des collections dédiées (XmlDataProvider, ObjectDataProvider, ...) mais aussi n'importe quel objet de n'importe quel méthode. S'il s'agit d'échange de chaînes cela peut s'effectuer automatiquement, si on lie des types très différents, on doit construire et déclarer des "Converter" que WPF va appeler pour transformer une données brute en une donnée exploitable par la source.
Bref, le data-binding de WPF c'est comme pour l'IHM, un vrai boulversement de la manière de penser le data-binding.
----------------------
NdM : Et voilà, TechEd touche à sa fin. J'en profite pour remercier Lionel pour ses précieuses contributions. Pour ma part, cette semaine fût très enrichissante même si je n'ai pu assister à toutes les sessions programmées dans mon agenda inital.
7 commentaires
Sinon!
Keep us up to date with techEd 2006.
We live in Africa. But I believe that one Day Microsoft will organisez a kind of days in Africa. This is not yet the case.
Thanks Sami.
http://www.mseventseurope.com/Teched/06/Pre/Live/DefaultDev.aspx