Dot.Blog

C#, XAML, Xamarin, UWP/Android/iOS

Roadmap Microsoft

Microsoft nous prépare plein de bonnes choses pour les mois à venir ... Quelques dates plus ou moins précises ont filtré aux dernières TechEd USA, voici un condensé des principales annonces de cette roadmap :

Commençons par les produits n'ayant pas de date annoncées mais dont on sait que cela viendra assez vite :

  • Silverlight 3. Plus de 50 nouvelles features dont la possibilité de faire tourner les applications en dehors du browser (comme une appli desktop WPF).
  • Blend 3, qui viendra dans la même foulée ainsi que le Silverlight Toolkit et les .NET RIA services.
  • Windows mobile 6.5.

Les produits annoncés pour la fin 2009/début 2010 :

  • Windows 7 le tant attendu ! Notamment avec le multi-touch... (yapluka trouver des 22" qui supportent ça sans trop casser la tire-lire !)
  • Visual Studio 2010 et .NET 4. Je ne peux malheureusement rien en dire, la bêta que j'ai est sous NDA mais je vous en parlerai dès que ça sera possible (disons sans trahir la NDA qu'il y a un nouveau look, et que par exemple le designer de Silverlight est intégré à l'IDE comme pour WPF, mais non je n'ai rien dit ! :-) ). On trouve aussi F#, langage avec lequel il faudra compter dans l'avenir. De nombreuses infos sont déjà accessibles sur ce langage, une petite recherche sur le Web vous en dira plus.
  • Windows server 2008 R2
  • Exchange 2010
  • Windows Azure
  • Hyper-V Server 2008 R2
  • Et plein d'autres produits (Geneva, Dublin, Stirling, Velocity... autant de noms de code qui auront bientôt un nom officiel !).

A venir en début 2010 :

  • Office 2010 (donc) avec Office Web, Sharepoint 2010, Visio 2010, Project 2010...

Première moitié 2010 :

  • SQL Server 2008 R2
  • Madison, nom de code de la base de données orientée massivement parallèle et gestion de Tera octects dans tous les sens.

Pour plus de détails et avoir plus d'infos vous pouvez accéder au blog de Bruce Kyle qui a posté un billet avec des liens intéressants sur la roadmap.

Le DVD des TechEd est arrivé !

Pour les chanceux qui ont participé aux TechEd Developers 2007 qui se sont tenues à Barcelone du 5 au 9 novembre (voir mes billets à ce sujet), la boucle est enfin bouclée avec l'arrivée du DVD dans nos chaumières !

La bonne surprise c'est qu'il s'agit de 2 DVD et non d'une seul puisque la pochette contient aussi celui des TechEd IT Forum, événement qui se tenait au même endroit la semaine suivante (12-16 novembre). En raison malgré tout des coûts liés à un séjour de deux semaines certainement peu d'entre nous ont pu participer aux deux événements chacun ayant choisi celui qui lui semblait le plus proche de ses besoins immédiats. Néanmoins, les participants de l'IT Forum seront certainement très heureux de visualiser les vidéo des sessions des TechEd Developers, l'inverse sera tout aussi vrai. Il faut donc remercier Microsoft de n'avoir pas mesquiné en envoyant à tout le monde les deux DVD !

L'année commence donc bien et même si les vidéos étaient disponibles sur le Web pour les participants (nouveauté 2007) dès la semaine suivante les TechEd, chacun appréciera le confort d'un DVD ne nécessitant pas forcément d'être connecté en ADSL pour voir ou revoir les meilleures conférences.

SQL Server 2008 et le type FileStream - résumé de la conférence DAT304 des TechEd 2007

Gérer des données "raw" tels que des fichiers multimédia, de la documation, etc, dans une base de données est un sujet qui divise les développeurs depuis longtemps. SQL Server 2008 va (enfin) mettre fin à cette dispute de principe !

DAT304 - Managing Unstructured Data in SQL Server 2008: Introducing the Filestream Datatype

Je n'ai suivi que partiellement cette conférence, il faudra d'ailleurs que je profite de la diffusion en ligne des vidéos pour les participants aux TechEd pour la regarder en totalité. Ce qui m'intéressait c'était l'info elle-même qui se résume à un nouveau type champ dans SQL Server. Mais c'est une avancée de taille, je vais vous expliquer pourquoi en quelques lignes...

Le duel blob vs file system pour les données raw

En effet, il y a d'une côté les tenants du "tout file system" c'est à dire le stockage des fichiers en dehors de la base de données avec juste le stockage des noms de fichiers dans la base elle-même. Pour: la simplicité, la gestion des flux du file sytem généralement plus performante que les blobs. Contre: le manque cruel de consistence, pas de contexte transactionnel, backups à faire séparément, etc, etc. Je fais partie des "anti" d'ailleurs.

De l'autre côté il y a ceux qui préfèrent le stockage en blob. Pour : consistence des données, contexte transactionnel, backup unique, etc. Je pour pour cette solution en général. Contre : les blobs sont moins rapide en lecture / écriture de flux que le file system, certains SGBD imposent des limites à la taille des blobs. Si on fait abstraction de ce dernier argument (il suffit d'utiliser une base n'ayant pas cette limite, par exemple SQL Server 2005 ou même Firebird/Interbase), le léger inconvénient de la rapidité (qui reste modeste et peu gênant dans la plupart des cas) est largement, à mon avis et par expérience, compensé par les avantages de cette technique. Reste qu'on peut faire mieux...

Mélanger le meilleur des deux solutions 

C'est justement ce que propose SQL Server 2008 avec le nouveau type FileStream qui est une extension de VARBINARY(MAX) qui s'en distingue par un attribut lors de la création du champ.

Le principe est simple : on marie le meilleur des deux solutions existantes. On prend la souplesse (gestion des quotas par ex) et la rapidité du file system (NTFS obligatoirement) et on l'associe à la cohérence des données de la solution blob. En gros, SQL Server 2008 stocke les fichiers dans le file system mais assure l'accès à ces fichiers comme à n'importe quel autre champ ce qui permet la gestion transactionnelle, le backup unique et centralisé.

Conclusion 

Une solution simple et performante à un problème de plus en plus crucial, les utilisateurs devant de plus en plus gérer des données lourdes (photos, documents digitalisés, vidéos...) en synchronisme parfait avec les bases de données. Une fichier client peut comporter une photo, une fiche article une vidéo de présentation, tout cela n'est plus "exotique", cela devient une contrainte légitime d'exploitation.

Pour l'instant SQL Server 2008 est en bêta, mais comme son nom l'indique il devrait être bientôt sur le marché...

Encore une bonne idée, ingénieuse et simple à mettre en oeuvre. Je trouve que les équipes de dev de MS ont vraiment l'âme créative depuis qu'on est entré dans ce que j'appelle "l'ére .NET". Souhaitons que ça dure le plus longtemps possible !

A+ pour un nouveau billet. Stay tuned !

Entity Framework Application Patterns. Résumé de la conférence DAT303 Teched 2007

Hier je vous ai résumé la conférence DAT201 qui présentait l'Entity Framework. Aujourd'hui je vous parlerai plus brièvement d'une autre conférence. Cette brièveté du résumé ne doit pas vous induire en erreur : la conférence DAT303 de Pablo Castro, Technical Lead, est peut-être la meilleure à laquelle j'ai assitée.

D'abord Pablo est un jeune gars sympa. Ensuite malgré un fort accent cubain ou mexicain il a soutenu une conf à un rythme d'enfer tout en étant d'une grande clareté, une vraie conf technique comme je les aime, faite par un passionné qui connaît son affaire. Enfin, cette conférence dépassait le cadre de la présentation générale pour parler vrai et pratique. Là, Pablo m'a appris des choses sur l'Entity Framework. Des trucs pas simples à découvrir tout seul, une conférence qui fait vraiment gagner du temps et de la compétence. Merci Pablo !

Si le résumé sera court c'est que 95% de la conférence de Pablo était basée sur du code. Vous imaginez bien qu'il n'était pas possible de prendre le tout en sténo dans la pénombre de la salle de conf... J'ai revisionné aujourd'hui la conf (puisque toutes les sessions principales ont été filmées), et franchement même assis dans mon bureau à l'aise il nétait pas possible de noter la totalité des manips, toutes essentielles. J'ai d'ailleurs demandé à Pablo s'il pouvait avoir la gentillesse de m'envoyer le code source de ces démos, et s'il accèpte je les mettrais en téléchargement ici.

Donc de quoi s'agissait-il ?

Bien entendu de l'Entity Framework, depuis mon billet d'hier vous devez savoir de quoi il s'agit (sinon foncez lire ce dernier, ne vous inquiétez je ne bouge pas, vous pourrez revenir ici plus tard :-) ).

Mais il n'était plus question ici de parler en général ou même en détail du fonctionnement de EF, il s'agissait de voir comment s'en servir "en vrai" dans trois conditions :

  • En 2 tiers
  • Dans une application Web
  • Au sein d'une architecture 3-tiers

En effet, le principal problème de toute surcouche est de manger un peu plus de CPU et de mémoire que la couche du dessous. C'est la règle en informatique, plus c'est pratique et puissant, plus la machine doit pédaler. Et même si EF est très efficace et très optimisé, ce qu'il fait en plus possède forcément un coût. Il est donc essentiel de pouvoir maîtriser ce coût en faisant des économies là où cela est possible.

La bonne nouvelle c'est que EF le prévoit et que la mise en oeuvre est simple. La moins bonne nouvelle c'est que la chose devient un poil plus "mystique" et qu'il faut réfléchir un peu plus. Mais un informaticien paresseux des neurones est soit en chômeur en puissance, soit un ex-informaticien au RMI...

Change tracking et Identity resolution

Deux mécanismes peuvent être économisés (et les ressources CPU/RAM qui vont avec) : Le change tracking et l'identity resolution. Le premier, détection des changements, permet à l'EF de savoir quels objets ont été modifiés pour savoir comment appliquer les mises à jour à la base de données. Si certaines entités (ou grappes d'entités) ne seront pas modifiées on peut alors se passer du mécanisme de détection des changements... L'identity resolution, ou résolution des identités est utilisée pour identifier de façon formelle toutes les instances des entités. Il est en effet primordial pour le système de savoir à quel(s) enregistrement(s) de la base de données corespond(ent) l(es) entité(s) sinon il est impossible d'envisager des fonctions comme le refresh, l'update ou le delete...

Heureusement EF est très bien conçu et il est possible de stopper ces mécanismes là où on le désire. Ce court billet (qui devient déjà long...) n'entrera pas dans les détails, je prépare un article sur la question, format plus adapté à un long exposé technique avec exemples de code.

Des entités qui passent les frontières... 

Un autre problème se pose, notamment dans les applications en multi-tiers : lorsqu'une instance d'entité est passée en dehors du système, EF en perd la trace... Imaginons un serveur applicatif qui utilise EF pour accéder à une base de données afin d'offrir des services de type WCF (ex remoting, pour simplifier) ou même des services Web. Les changements dans les objets ont lieu en dehors même de la machine qui utilise EF. Le lien est cassé et si l'objet revient au serveur applicatif qui doit en retour mettre à jour la base de données, EF ne le connaîtra plus et ne pourra pas l'intégrer à son mécanisme de mise à jour de la base.

Là encore EF permet de contourner le problème. La façon de le faire sera aussi décrite dans le papier en cours de préparation, soyez patients !

Compilation LINQ 

Enfin, Pablo a montré comment économiser des ressources du côté de LINQ cette fois-ci en utilisant la possibilité de compiler la requête sous la forme d'un delegate qu'il suffit ensuite d'appeler. L'utilisation des expressions Lambda et l'utilisation des interfaces idoines permettent même d'avoir une requête compilée mais paramétrique dont le résultat peut être réutilisé dans une autre requête LINQ. Pas de magie, et peu de code à taper pour réaliser tout cela. En revanche, une fois encore, cela ne s'improvise pas si on ne connaît pas l'astuce.

Conclusion

Une conférence riche, dense et instructive. Je pourrais en parler encore des pages entières mais sans la contrepartie du code exemple et des explications qui vont avec ce billet deviendrait vite ennuyeux. Je préfère m'arrêter là et réserver les détails d'implémentation pour l'article que je prépare sur ce sujet. Bien entendu il sera annoncé ici et sera téléchargeable gratuitement comme d'habitude.

Une dernière chose, Pablo nous a fait voir un peu Astoria, un procédé permettant d'exposer une (partie d'une) base de données en HTTP dans un formalisme XML. Une sorte de Web service généré automatiquement pour chaque classe et qui, par des GET ou des POST permet d'accéder aux données mais aussi de mettre à jour les données dans un mécanisme de type accès à une page Web ! Je n'ai pas eu le temps de creuser la question ni de faire tourner de bêta de Astoria, mais soyez sûrs que dès que j'en aurais fini avec mon tri de toutes les conférences des TechEd, Astoria sera au programme !

Plein de nouveautés encore à venir, so, stay tuned !

 

Entity Framework - Résumé de la session DAT201 aux TechEd 2007

Cette conférence était l'une de celle que j'attendais le plus. De ce que j'avais déjà vu de LINQ et de ce qui tournait autour de cette nouveauté du framework 3.5 je savais qu'il y avait là un joyau... Les quelques essais que j'avais faits avec la Bêta de VS 2008 n'avaient qu'attisé ma curiosité. Je désirais donc à tout prix voir la session DAT 201 : Entity Framework Introduction pour refaire le tour complet de la technologie pour être sûr de ne pas passer à côté d'un élément essentiel.

Et c'est encore mieux que ce que je pensais. C'est une pure merveille, une avancée aussi spectaculaire que la naissance du framework .NET lui-même. Rien de moins.

L'Entity Framework

La session DAT 201, présentée par Carl Perry, Senior Program Manager Lead chez Microsoft, se voulait une introduction, un tour du propriétaire de l'Entity Framework. Mais kesako ? Le "cadre de travail pour entité" en français. Avec ça vous êtes bien avancé !

Pour faire le plus court possible disons que l'EF (Entity Framework) est une nouvelle couche d'abstraction se posant sur ADO.NET et permettant tout simplement d'accéder aux données de façon totalement objet et surtout dans le respect d'un schéma conceptuel et non plus en travaillant avec la base de données, son schéma physique et son SQL.

Est-ce que vous êtes plus avancé ? j'ai comme un doute... Mais les choses vont s'éclaircir avec la suite de ce billet.

Pour mieux comprendre la différence ne serait-ce que dans le code, comparons les deux types d'accès aux données, ADO.NET 2.0 et EF.

L'accès aux données de ADO.NET 2.0

Voici un code typique d'accès aux données via ADO.NET 2.0 tel qu'on en voit dans toutes les applis ou presque :

On retrouve toute la chaîne d'opérations usuelles, de la création et l'ouverture de la connexion jusqu'à l'itération dans le resultset retournée par le DataReader suite à l'envoi d'une Command dont le contenu est du pur SQL exprimé dans le dialect spécifique de la base de données cible.

Cette méthode est puissante, souple, mais elle possède de nombreux pièges. Par exemple l'accès aux données du DataReader s'effectue par les noms de champ. Une simple coquille à ce niveau et le bug ne sera détecté qu'à l'exécution, peut-être dans 6 mois chez le client quant il utilisera cette fonction particulière du logiciel. Le coût de cette coquille peut être énorme s'il s'agit d'un logiciel diffusé en grand nombre (hot line de maintenance, détection du bug - pas toujours simple, création d'une mise à jour - les sources elles-mêmes ont bougé, problème de versionning, diffusion de la mise à jour et découverte de nouveaux problèmes - incompatibilités d'une des modifications, etc, etc). J'arrête là le scénario catastrophe car selon les lois de murphy je suis encore en dessous de la réalité, et vous le savez comme moi...

Le pire c'est que je n'ai relevé qu'une seule des erreurs possibles, ce code possède bien d'autres pièges qui agiront comme des aimants à bugs ! Un autre exemple, toujours sur l'accès aux données lui-même : Il n'y a aucun contrôle de type. Je passe sur les conséquences que vous pouvez imaginer dans certains cas.

Car il y a plus grave encore : pour obtenir les données il faut taper un ordre SQL spécifique à la base cible... D'une part cela n'est pas portable, d'autre part ce n'est que du texte pour le compilateur. On écrirait "coucou" à la place de l'ordre SELECT ça compilerait tout aussi bien.

Je ne vous refais pas l'énumération des problèmes en cas de coquille (fort probable) dans une longue chaîne SQL. Je vous épargnerais aussi la liste des ennuis si l'admin de la base de données change le nom d'un champ ou le type de l'un d'entre eux ou s'il réorganise une table en la coupant en 2 ou 3 autres pour des raisons d'optimisation. C'est tout le soft qui devra être corrigé à la main sans rien oublier.

Bref, aussi génial que soit le framework .NET, aussi puissant que soit ADO.NET, on en était encore au même style de programmation des accès aux données que ce que ADO Win32 ou dbExpress chez Borland avec Delphi permettaient. Une logique proche, collée devrais-je dire, au schéma physique de la base de données et totalement inféodée à son dialect SQL, le tout avec des accès non typés aux données.

Certes ADO.NET 2.0 permettait d'aller un cran plus loin avec la génération des DataSet typés sous VS 2005. Une réelle avancée, mais qui n'était qu'un "arrangement" avec le modèle physique.

L'accès aux données avec ADO.NET Entity Framework

Dans cet exemple (qui fait exactement la même chose que le précédent) et dont nous comprendrons plus loin les détails on peut distinguer plusieurs choses :

  1. Il n'y a plus de SQL, il a disparu.
  2. On ne s'occupe plus de l'ouverture et de la fermeture de la connexion ni même de sa création.
  3. Les données sont interrogées en C#, bénéficiant d'Intellisense et du contrôle syntaxique.
  4. On itère à travers une liste d'objets dont les propriétés sont typées.

Non, ne cherchez pas l'astuce de ce côté là... si si, vous vous dîtes "le SQL a été tapé ailleurs il est simplement caché maintenant". Non. Dans cette façon d'accéder aux données personne n'a tapé de SQL, personne n'a créé de connexion à la base. Enfin, si, quelqu'un s'est chargé de tout cela de façon transparente : l'Entity Framework.

L'évolution dans les accès aux données

 

Sur le schéma ci-dessus on voit en colonne, respectivement : le niveau d'abstraction, le langage d'interrogation et le résultat des requêtes. En ligne nous trouvons ADO.NET 2.0 et, en dessous, ADO.NET EF.

  • Le niveau d'abstraction de ADO.NET 2.0 est de type bas niveau, c'est à dire qu'il colle au schéma de la base de données (le modèle physique, le MPD).
    Le niveau d'abstraction de EF change totalement puisqu'ici on travaille en haut niveau, celui du schéma conceptuel (le MCD).
  • Côté langage d'interrogation, ADO.NET repose sur le dialecte SQL de la base cible exprimé sous la forme de chaînes de caractères dans le code.
    De son côté EF offre LINQ, ou Requêtage intégré au Langage (Language-Integrated Query) totalement indépendant de la base cible.
  • Enfin, pour les résultats des requêtes, ADO.NET offre un accès non typé source d'erreurs, là où EF offre des objets aux propriétés typées.

On le voit ici clairement, le bon technologique est faramineux, c'est bien au niveau d'un modèle conceptuel qu'on va travailler en ignorant tout du modèle physique et du langage de la base de données !

C'est d'autant plus extraordinaire lorsque, comme moi, on commence à avoir quelques heures de vols et qu'on a connu moultes tentatives couteuses et infructueuses chez plusieurs éditeurs de logiciels de créer des couches d'abstraction pour accéder aux données de différentes bases sans modifier l'application... Ce rêve de pouvoir fournir qui sa compatibilité, qui son logiciel de gestion médical sous SQL Server autant que Oracle ou MySQL en configurant juste l'application mais sans la recompiler ni même en maintenir plusieurs versions, ce rêve est aujourd'hui une réalité, une extension naturelle de .NET !

Pour l'instant tout ceci se trouve au niveau du développeur mais il semble évident qu'on puisse pousser la logique au niveau de l'utilisateur. J'y suis particulièrement sensible puisque, vous le savez certainement, je suis l'auteur et l'éditeur de MK Query Builder, un ensemble de composants permettant à l'utilisateur final d'interroger librement les données d'une application (il s'agit de ce qu'on appelle un requêteur visuel ou Visual Query Builder). Quand je vois le temps, le code nécessaire pour offrir modestement à mon niveau les fonctionnalités avancées de MKQB aux utilisateurs finaux, je ne peux que rester admiratif et ressentir un respect immense pour l'équipe Microsoft qui a développée LINQ et l'Entity Framework !

L'Entity Data Model (EDM)

L'EDM est le schéma conceptuel des données dans EF. C'est un vocabulaire qui décrit le schéma conceptuel pour être exact. Visual Studio 2008 le représente graphiquement sous forme d'entités et de liens comme un diagramme de classe.

Il permet au développeur de fixer le cadre des données qu'il souhaite voir, conceptuellement et sans rapport direct avec le schéma physique de la base de données.

EDM représentent d'une part les entités et des relations.

Les entités sont des types distincts (des classes) qui possèdent des propriétés qui peuvent être simples (scalaires) ou complexes. Les relations décrivent pour leur part la façon dont les entités sont liées. Il s'agit d'une déclaration explicites des noms de relation et des cardinalités.

Mais quand met-on les mains dans le camboui ? Il faut bien qu'à un moment ou un autre ce modèle conceptuel puisse correspondre avec le schéma de la base de données... Oui, bien entendu, mais une fois encore, pas de bas niveau ici.

Le schéma EDM peut être créé et modifié totalement graphiquement par le développeur (sous VS 2008) mais ce dernier possède aussi le moyen de faire le mapping entre les entités "idéales" de EDM et les entités physiques de la base de données. Pour cela deux façons coexistent : la plus simple consiste à faire un drag'n drop entre l'onglet des connexions SGDB de VS 2008 et l'espace de travail du schéma EDM ! On prend des tables, on les pose, et le schéma s'écrit de lui-même, relations comprises.

Par exemple la pattern courante "many to many" qui relie une table de lycéens à la table des options suivies par chacun fait intervenir une troisième table dans le schéma physique, celle qui contient les paires de clés lycéen/option. Ainsi un lycéen peut suivre plusieurs options et une option peut être suivies par plusieurs lycéens. Un classique des classiques. Cette pattern est détectée par EDM qui créé automatiquement une jointure n-n entre les deux entités, comme dans le schéma conceptuel de la base de données.

EDM automatise ainsi 95% de la création du schéma conceptuel, même si celui-ci ressemble encore beaucoup au modèle physique de la base. C'est là qu'interviennent les 5% restant : le développeur peut à sa guise supprimer ou ajouter des champs, des relations, et il indique explicitement à EDM comment les mapper sur les tables existantes dans la base de données.

Prenons l'exemple d'une base de données correctement optimisée et standardisée. Une fiche client pouvant posséder une adresse de livraison et une adresse de facturation, le concepteur de la base à séparer les deux informations. On a d'une part une table des clients et de l'autre une table des adresses plus deux jointures AdresseFacturation et AdresseLivraison qui parte de Client vers Adresse avec une cardinalité 0..1/1..1, c'est à dire qu'un client peut posséder 0 ou 1 adresse de facturation, 0 ou 1 adresse de livraison et que chaque adresse doit correspondre à 1 et 1 seul client (si on ajoute un type dans Adresse pour indiquer Facturation ou Livraison, le MCD pourra d'ailleurs exprimer la cardinalité sous la forme d'un lien dit identifiant avec Client).

Sous EDM, si on place les tables par drag'n drop, par force on trouvera dans le schéma les deux entités Client et Adresse avec ses liens. Toutefois cela n'est pas réellement intéressant. D'un point de vue conceptuel nous allons travailler sur des fiches Client, et ses fiches possèdent une adresse de livraison et une autre de facturation. Pour nous, conceptuellement, ces adresses ne sont que des propriétés de Client. On se moque totalement des problèmes d'optimisation ou des règles de Codd que l'admin de la base de données a ou non suivi pour en arriver à créer deux tables... Cela appartient au modèle physique et nous ne voulons plus nous embarrasser de sa lourdeur et de son manque de pertinence conceptuelle.

Le développeur peut alors ajouter à Client deux propriétés, AdresseFacturation et AdresseLivraison, qui seront des propriétés complexes (retournant une fiche Adresse). Il supprimera aussi l'entité Adresse du schéma et enfin indiquera à EDM le mapping de ces deux nouveaux champs.

A partir de maintenant l'application pourra obtenir, trier, filtrer, des instances de Client qui possèdent, entre autres propriétés, une adresse de livraison et une autre de livraison. Plus aucun lien avec le schéma de la base de données, uniquement des choses qui ont un sens du point de vue conceptuel. C'est EF qui s'occupera de générer les requêtes sur les deux tables pour créer des entités Client.

Cela fonctionne aussi en insertion et en mise à jour... Le rêve est bien devenu réalité. Mieux, on peut personnaliser les requêtes SQL (en langage de la base cible) si vraiment on désire optimiser certains accès. De même on peut utiliser des procédures stockées au lieu de table ou de vues, etc.

L'aspect purement génial de EF c'est qu'il offre un mode automatique totalement transparent pour travailler au niveau conceptuel sans jamais perdre la possibilité, à chaque niveau de sa structure, de pouvoir intervenir manuellement. Qu'il s'agisse des entités, de leur mappings, des relations autant que la possibilité de saisir du code SQL de la base cible. Certes ce genre de choses n'est absolument pas à conseiller, en tout cas pour l'écriture manuelle de SQL, c'est un peu un contre emploi de EF... Mais que la possibilité existe montre surtout l'intelligence de la construction de EF qui n'est pas une "boîte noire" sur laquelle il est impossible d'intervenir et qui, par force, limiterait les possibilités dans certains cas.

Interroger les données

Pour interroger les données, EF nous donne le choix entre deux méthodes :

LINQ to Entities

C'est l'exemple de code donné en début de ce billet. LINQ To Entities est une extension de C# qui possède des mots clés proches de SQL (from, where, select..). Mais soyons clairs : LINQ to Entities permet d'interroger le modèle conceptuel, l'EDM, et non pas la base de données ! C'est le mélange entre LINQ et EDM qui permet à EF de générer lui-même le code SQL nécessaire.

LINQ est d'une extraorinaire puissance. D'abord on reste en C#, on bénéficie donc de Intellisense, du contrôle de type, etc. Ensuite, LINQ to Entities n'est qu'une des émanations de LINQ puisqu'il en existe des variantes comme LINQ to XML qui permet globalement la même chose mais non plus en interrogeant des schémas EDM mais des données XML. Le fonctionnement de LINQ dépasse le cadre de ce billet et j'y reviendrai tellement il y a de choses à en dire.

Entity SQL

Si tout s'arrêtait là, Entity Framework serait déjà énorme. J'en pers un peu mes superlatifs tellement je trouve le concept et son implémentation aboutis. Je suis un fan de EF et de LINQ, vous l'avez remarqué et vous me le pardonnerez certainement une fois que vous l'aurez essayé...

Mais en fait EF propose un second moyen d'interroger les données, la tour de babel SQL, c'est à dire Entity SQL.

Il existe en effet de nombreux cas où LINQ pourrait s'avérer plus gênant que génial. Par exemple dans certains cas où le requêtage doit être dynamique (la requête est construite en fonction de choix de l'utilisateur, un écran de recherche multicritère par exemple). Décrocher de EF pour ces cas (pas si rares) imposerait de revenir à du SQL spécifique de la base cible, écrit dans des strings non testables, recevoir des données non typées, créer et gérer des connexions à la base en parallèle de LINQ utilisé ailleurs dans le code, et plein d'autres horreurs de ce genre.

Heureusement, Entity SQL existe. Il s'agit d'un langage SQL spécial, universel dirons-nous, qui ajoute la sémantique EDM à SQL. Ce SQL là est spécial à plus d'un titre donc. Le premier c'est qu'il permet d'interroger l'EDM, le modèle conceptuel, comme LINQ, mais en SQL. Le second c'est que ce SQL "comprend l'objet" et sait utiliser non pas des tables et des champs mais des entités et des propriétés. Enfin, il est universel puisque lui aussi, comme LINQ, sera traduit par EF en "vrai" SQL de la base cible. Le même code Entity SQL fonctionne donc sans modification ni adaptation que la base soit Oracle, MySQL ou SQL Server !

Le rêve de certains éditeurs de logiciels dont je parlais plus haut s'arrêtait d'ailleurs là : créer un SQL interne à l'application qui serait traduit en SQL cible par un interpréteur lors de l'exécution. L'un des projets comme celui-là qui me reste en tête à coûté une fortune pour ne jamais marcher correctement... Entity SQL lui fonctionne de façon performante et s'intègre à Entity Framework ce qui permet de bénéficier de l'abstration conceptuelle et de l'environnement objet. La réalité dépasse largement le rêve.

La traduction des requêtes

Toutes les requêtes sont exécutées par la base de données. Je le sous-entend depuis le début mais c'est mieux de le (re)dire pour qu'il n'y ait pas de méprise...

Les requêtes LINQ et Entity SQL sont transformées en requêtes SQL de la base cible par Entity Framework grâce à l'EDM qui contient la description des entités, des jointures et du mapping.

LINQ et eSQL fonctionnent sur le même pipeline de requêtag. Il transforme les constructions de EDM en tables, vues et procédures stockées. Ce socle commun est basé sur un modèle de fournisseurs qui autorise la traduction vers différents dialectes SQL (donc des bases cibles différentes).

EntityClient, le fournisseur d'accès aux données de EF

"N'en jetez plus !" pourraient s'écrier certains... Et oui, ce n'est pas fini. En effet, et comme je le soulignais, Entity Framework permet d'intervenir à tous les niveaux, du plus haut niveau d'abstraction au plus bas, dans la cohérence et sans pour autant être obligé de faire des choix ou se passer de tel ou tel avantage.

On a vu que par exemple on pouvait injecter du SQL cible dans le modèle EDM, même si cela n'est pas souhaitable, c'est faisable. On a vu qu'on pouvait préférer eSQL à LINQ dans certains cas. De même on peut vouloir totalement se passer de l'objectivation des entités pour simplement accéder aux données de façon "brutes" mais sans perdre tous les avantages de EF.

Pour ce cas bien particulier EF propose un fournisseur de données appelé EntityClient. Il faut le voir comme n'importe quel fournisseur de données ADO.NET. Il propose le même fonctionnement à base d'objets Connexion, Command et DataReader. On s'en sert comme on se sert d'un fournisseur SQL Server ou OleDB sous ADO.NET 2.0.

Toutefois, EntityClient interroge lui aussi le schéma conceptuel, l'EDM. Le langage naturel de ce provider d'accès est eSQL (Entity SQL) présenté plus haut.

Utiliser EntityClient peut s'avérer utile lorsque l'application n'a pas du tout besoin d'objets, ou lorsqu'elle possède sa propre couche objet (business object layer par exemple) qu'elle souhaite alimenter sans passer par les instances d'entités de EF tout en bénéficiant de l'abstraction de EF (utiliser un SQL universel notamment).

Les métadonnées

L'Entity Framework fournit un service d'accès aux métadonnées. Il s'agit d'une infrastructure commune permettant de décrire le stockage, le modèle, et la structure des objets, les procédures stockées, les informations de mapping et même les annotations personnalisées.

L'API publique permet de créer et d'utiliser des MetadataWorkspace directement, d'obtenir des MetadataWorkspace depuis des ObjectContext, d'utiliser les métadata retournées par les enregistrements de données de EntityClient.

Conclusion

La présentation de Carl Perry était entrecoupée de quelques démos permettant bien entendu de mieux voir et comprendre les concepts exposés. Visual Studio 2008 permet d'utiliser l'Entity Framework de façon simple et naturelle, le voir est toujours préférable à le croire sur parole. En tant que témoin de la session, et ayant "joué" avec la bêta de VS 2008 bien avant et étant depuis hier comme tous les abonnés MSDN l'heureux possesseur de la version finale de VS 2008, je peux vous certifier que tout ce que j'ai dit ici est.. en dessous de la vérité ! Testez vous-mêmes Entity Framework et vous comprendrez à quel point les temps ont changé, vous sentirez par vous-mêmes ce fantastique bond technologique qui relègue toutes les autres tentatives de ce type ou approchant (comme ECO de Borland par exemple) au rang des antiquités d'un autre millénaire... Entity Framework c'est une claque aussi forte que la sortie de .NET lui-même, on ne programmera jamais plus après comme on le faisait avant..

 

Identity for .NET Application - la gestion des identités sous .NET

L'une des conférences qui m'a le plus marqué durant les TechEd tient tout autant de la qualité de son speaker qu'à son contenu, trop souvent négligé par les développeurs.

ARC204 - Identify for .NET Application : A Technology overview

La gestion des identités se limite dans 95% des cas à un simple "login", un coupe "nom d'utilisateur / mot de passe" géré par l'application ou la base de données. C'est le cas de la majorité des applications de bureau mais aussi des sites internet.
Simple à mettre en oeuvre, cette solution est malheureusement assez inefficace, voire dangereuse puisque grâce à elle le fishing a pu prendre l'essor qu'on lui connaît...

Une conférence passionnante sur un sujet difficile

David Chappell s'est ainsi attaqué à un sujet difficile, la sécurité informatique, et ce dans les conditions les pires pour un conférencier : un sujet uniquement verbal, sans jolie démo ni code. Parler de technique brute, de façon intelligente et sans endormir l'auditoire dont 80% au minimum n'est pas anglophone de naissance... Un sacré challenge parfaitement relevé par David. Ne pas s'ennuyer une minute sur un tel sujet réclame du speakler un pouvoir de conviction et un charisme certain. Un coup de chapeau à David donc.

Mais David n'a pas fait que bien parler, il a aussi, et surtout, fait un exposé clair sur la gestion des identité et ce que le framework pouvait nous proposer pour aller plus loin que le simple "login".

Login vs Identité

Le login ne permet qu'une seule chose côté application : s'assurer que l'utilisateur .. connaît le login ! Trop d'informaticiens font un amalgame dangereux en déduisant un peut vite que cela connaître le login signifie connaître l'utilisateur. Le vol de login, qu'il s'agisse du fishing sur internet ou bien par d'autres moyens, est d'une simplicité déconcertante et s'appuie justement sur cette erreur de raisonnement des informaticiens : l'utilisateur connaît le login, c'est donc bien la même personne.

Erreur, grave erreur.

Ce qu'une application sécurisée doit connaître c'est l'identité de l'utilisateur. Et une identité n'est pas un login facilement utilisable par d'autres personnes.

De l'utilité de connaître l'identité d'un utilisateur

Connaître l'identité de l'utilisateur permet à l'application de s'adapter, notamment de trois façons :

  • L'autentification (je sais que c'est Oliver qui est devant son clavier et non par Albert)
  • La gestion des autorisations (Olivier peut accéder à la comptabilité, Albert ne peut qu'accéder aux fiches clients)
  • La personnalisation (Olivier préfère telle présentation des informations, Albert une autre)

Personnalités multiples

Nous sommes tous finalement atteint de ce syndrôme... Nous fournissons des identités différentes selon le contexte. Le plus souvent seul notre nom d'utilisateur est communiqué, parfois d'autres informations (nom réel, adresse postale, ...). Ainsi, votre fiche sur un site de vente contiendra votre adresse facturation et celle de livraison, alors que votre fiche sur un site communautaire contiendra la liste de vos hobbys, le nom de votre chat, etc...

Une identité ?

Une identité n'est donc finalement qu'un ensemble d'information concernant "quelque chose". Car les humains ne sont pas les seuls à posséder une identité, des programmes, des ordinateurs, des périphériques, des entreprises, etc, peuvent posséder une identité, donc un ensemble d'informations permettant de les identifier de façon fiable.

Token

Une identité peut ainsi être vue comme un ensemble de token. Un token est un ensemble d'octets, une suite d'information sur l'identité en question. Le token représente 1 ou plusieurs  "claims". je n'ai pas encore trouvé d'équivalent français convaincant... mot à mot un "claim" et une "réclamation". Dans le contexte il s'agit d'une information particulière qui peut être demandée (réclamée) sur l'identité en question.

Format de Token

Les tokens peuvent suivre n'importe quel formalisme. Par exemple il peut s'agir de tickets Kerberos. C'est un format intéressant mais il est figé et ne supporte pas les extensions.

Un autre format classique c'est le couple username/password. On a vu ses limites plus haut.

Enfin on peut utiliser un formalisme plus ouvert et plus puissant pour représenter les tokens : Security Assertion Markup Language, ou SAML.

SAML

SAML suit le formalisme XML, sa première vocation est d'être utilisé dans un contexte Web mais il est parfaitement utilisable sous Windows ou d'autres plateformes. S'agissant d'un format ouvert basé sur XML il peut servir à véhiculer n'importe quel "claim" et peut ainsi servir de base à un véritable système de gestion des identité standardisé.

Identity Provider

Un fournisseur d'identité est une autorité qui produit des claims sur des identités.

Par exemple, qui peut mieux que l'employeur certifier que untel est bien salarié de l'entreprise. Dans ce cas l'employeur est un fournisseur d'identité qui peut fournir des "claims" tels que : nom, adresse, numéro de sécurité sociale, etc.

Mais très souvent, et notamment sur internet, nous sommes tous notre propre fournisseur d'identity ! Nous nous créons des fiches, des comptes, fournissons des informations sur notre personne sous notre seule autorité.

On conçoit bien que si être son propre founisseur d'identity est particuluièrement pratique, cela ne permet en aucun cas à l'application qui se trouve en face de savoir réellement qui nous sommes. Rien ne m'interdit d'ouvrir un compte sur un forum de discussion au nom de Peter Pan ou de mon voisin. Personne ne peut le vérifier.

Il est donc nécessaire dans certains cas d'utiliser un fournisseur d'identité fiable et surtout reconnu comme tel par l'application qui doit vérifier l''identité des utilisateurs.

Deux catégories d'applications

Il existe deux catégories d'applications vis à vis de la gestion des identités :

  • Celles qui sont "domain based" (basées sur domaine), ce sont les plus courantes. Elle peuvent gérer les tokens dans un format fixe, par exemple les applications Windows qui accèptent les tickets Kerberos.
  • Celles qui sont "claim bases" (basées sur des "claims"). Elles peuvent potentiellement accepter plusieurs formats de token, par exemple une application Windows qui accèpte les claims en SAML.

Ces dernières applications représentent le futur.

La notion de forêt

Une forêt d'application est un ensemble de logiciels fonctionnant dans un "éco-système" donné. Une forêt définit un scope (une porté) pour les identificateurs (ID scope). Dans une forêt il n'y a généralement qu'un seul ID P (Identity Provider). Toutes les applications d'une forêt peuvent accéder aux et comprendre les mêmes tokens.

Pour les applications "domain bases" (basées sur un domaine), l'IDP peut être Active Directory Domain Service (AD). Il utilise les tickets Kerberos.

Les applications "claim based" (basées sur des "claims"), peuvent utiliser Active Directory Federation Service (ADFS). Les tokens sont en format SAML.

Technologie ouverte

Il faut insister sur le fait que ADFS n'est qu'un cas d'utilisation de SAML, c'est une implémentation de Microsoft mais la technologie elle-même peut être utilisée par d'autres éditeurs sur d'autres plateformes. ADFS est ainsi supporté par IBM, Oracle et bien d'autres.

La fédération

ADFS offre la notion de fédération c'est à dire la possibilité à des intervenants de se reconnaître mutuellement comme IDP valable et sincères. Cela permet à un utilisateur connu dans la forêt F1 d'accéder à des services offerts dans la forêt F2 avec une seule et même identité. On évite ainsi le maintien couteux et générateur d'erreur de multiples fiches d'identités dans plusieurs systèmes.

L'un des grands intérêts de ADFS est, par sa structure et son langage support (SAML) de pouvoir traverser aussi les frontières du matériel et des OS. Ainsi, un utilisateur identifié dans une forêt données (par exemple son domaine dans son entreprise) peut fort bien accéder à un service internet hébergé sur d'autres machines dans une autre forêt d'applications. ADFS est conçu pour facilité ce cas de figure puisque sa vocation première est le Web.

Le mécanisme

Sans entrer dans le détail des mécanismes en jeu ni jalonner ce billet de captures écran des slides de David, voici quelques clés pour comprendre les mécanismes en jeu.

Dans la vision classique, celle du simple login, c'est l'utilisateur qui envoit à l'application son couple nom/mot de passe. Ce couple peut être volé de différentes façons et l'application cible ne peut au mieux être sûr que d'une seule chose : le couple existe et est reconnu. Mais en aucun cas l'identité de l'utilisateur ne peut être certifiée.

Dans la vision "claim based", la nature des échanges est très différentes. En effet, c'est l'application qui réclame certains claims, ceux dont elle a besoin pour identifier l'utilisateur et c'est l'IDP, le fournisseur d'identité qui transmet, via le client, les token SAML (cryptés) à l'application. Dans ce schéma les tokens ne peuvent pas être volés et réutilisés car ils sont cryptés de façon différente à chaque fois. De plus, en eux même ils n'offrent pas forcément d'informations utiles hors de leur contexte (l'identité complète de l'utilisateur).

Une application par login devra stocker toutes les informations de l'utilisateur, par exemple ses préférences d'affichage, son adresse postale, etc. Dans une application 'claim based', l'application protégée réclamera le token "adresse postale" ou d'autres informations qui sont centralisée chez le fournisseur d'identité (IDP).

Cardspace

Sous .NET l'une des applications des mécanisme "claim based" est Cardspace. Son nom provient du fait que le logiciel se présente sous la forme de cartes (une image choisie par l'utilisateur) qui contiennent différentes informations. Cette gestion simple permet aux utilisateurs de gérer leurs différentes identités de façon convivial sans connaître les principes sous-jacents.

Cardspace fonctionne de base comme un IDP privé : l'utilisateur est son propre fournisseur d'identité. Toutefois Cardspace fonctionne aussi dans le cadre de fournisseurs d'identité externes ce qui rend cette solution très souple.

Cardspace peut utiliser de multiples IDP, la technologie n'est pas limitée à .NET, Vista ni même à Microsoft.

Conçu d'abord pour les applications Internet, Cardspace autorise toutes les utilisations. En mode 'single ID scope' (porté des ID simple) il permet d'accéder aux appliactions d'une forêt donnée. En mode cross scope il utilise la fédération et peut ainsi permettre l'accès à des applications de plusieurs forêts différentes.

La version 2.0 de ADFS intègrera des IDP managés.

Synchronisation des identités

Les informations d'une identité sont souvent réparties dans plusieurs endroits. Maintenir la synchronisation entre toutes les informations d'une même identité est une tâche complexes.

Pour simplifier cette gestion Microsoft propose ILM (Identity Lifecycle Manager - Gestionnaire de cycle de vie des identités). ILM peut être programmé en VB ou C# et contient des règles de gestion. Il peut être utilisé au sein d'une même organisation ou bien entre plusieurs organisations. Les sources de données peuvent être très différentes et être gérées simultanément (données sous SQL Server, sous SAP, application mainframe IBM, etc).

Les choses se compliquent forcément. Mais comme conclue David : certes cela n'est pas le plus simple, mais le problème lui-même n'est pas très simple non plus...

Conclusion

Les développeurs doivent s'intéresser de plus près à la gestion des identités car la fiabilité de leurs applications en dépend.

Il est en effet important aujourd'hui et encore plus demain de concevoir des applications acceptant des ID de scopes différents autant que de fonder la gestion des identités sur le modèle "claim based" en utilisant ADFS pour le cross-scope et Cardspace pour internet notamment.

Un papier de Microsoft peut aussi être lu sur le sujet : Digital Identity for .NET Applications: A Technology Overview.

A bientôt pour un nouveau billet .. Stay tuned !

TechEd 2007 Barcelone - Résumé du Keynote

Je commence à dépouiller mes nombreuses notes. Tout logiquement, c'est par le keynote d'ouverture donné par S. "Soma"' Somasegar, Corporate Vice President de Microsoft que je commence...

Une introduction qui en dit long 

Comme toutes les conférences, le keynote est l'occasion de présenter les nouveautés, les objectifs et la roadmap. Le keynote des TechEd n'a pas échappé à cette coutume. D'ailleurs qu'importe s'il s'agit d'une figure de style imposée, c'est le contenu qui nous intéresse et nous n'avons pas été déçu.

Soma a commencé son intervention par une petite anecdote qui en dit long sur le changement de paradigme que nous vivons. Il n'était d'ailleurs pas innocent de sa part de commencer son keynote par cela. Tout comme la une d'un journal est réservée aux titres les plus importants, les premiers mots d'un keynote sont souvent essentiels...

Soma nous raconte que fatigué, arrivant de l'aéroport, il devait se rendre à un repas organisé dans un restaurant au nom étrange, "Moo". Et, bien que las et n'ayant qu'une envie, se coucher, il découvre un cadre superbe, et des mets délicieux présentés comme des oeuvres d'art.
C'est, dit-il, l'un de ses plus grands souvenirs gastronomiques de longue date et qui le marquera pendant longtemps.

Au passage on pardonnera à un américain de n'avoir pas "tilté", Moo est un restaurant hyper branché créé par les frères Roca possédant deux étoiles aux Michelin pour leur premier établissement (el Cellar de Can Roca à Gérone). On comprends mieux que ses papilles et ses yeux aient été à la fête ! D'ailleurs si vous allez à Barcelone réservez une table au Moo, vous ne serez pas déçu (comptez dans les 90 euros par personnes malgré tout, ce qui n'est pas cher pour des chefs "toqués").

Bref, les sens émoustillés par son repas, Soma est remonté dans un taxi pour aller se coucher, et là, sur le chemin lui est venu l'idée d'une analogie : l'efficacité seule ne compte pas, il faut aussi que ce soit beau, et que "l'expérience de l'utilisateur" soit inoubliable, ce qui ressemble bigrement au message qu'il souhaite faire passer sur le développement. Fini le moche qui marche, il faut faire du beau qui marche !

A noter que cette démarche n'est pas récente chez Microsoft, depuis le début de l'ère Windows l'observateur attentif aura remarqué que chaque version possède une esthétique de plus en plus soignée. La progression de la puissance des machines n'est bien entendu pas étrangère à celle, conjointe, des effets sonores et visuels de plus en plus sophistiqués. Une petite vidéo sur Youtube passe en revue toutes les musiques d'accueil des diverses versions de Windows, c'est court et cela permet de voir et entendre comment Microsoft peaufine le "look & feel" de l'environnement au fil des années (c'est à voir en cliquant ici).

De là, Soma trace la voie : l'avenir du développement c'est l'association des développeurs avec des designers. Microsoft a compris que nous savons pas dessiner, nous sommes repérés et il va falloir apprendre à collaborer avec ceux qui savent mettre en page et créer des objets visuels un peu plus sexy que des boutons gris et rectangulaires...

Est-ce que cette anecdote était réelle, ou bien Soma l'a-t-il préparé de longue date (à ce niveau dans la hiérarchie de Microsoft il n'y a assurément pas d'amateurisme), en tout cas il a su d'entrée de jeu nous rappeler que nos petits mickeys ne valent rien et qu'il va être nécessaire d'embaucher des gens qui savent faire mieux que nos icônes bricolées sous Paintshop.

C'est un changement radical que nous vivons et si j'insiste sur cette introduction du keynote c'est parce qu'il est essentiel de bien comprendre que nous avons changé d'ère. Chez Microsoft cette nouvelle ère porte plusieurs noms : Vista, Framework 2.0 (et suivants), VS 2005/2008, Expression Blend, Expression Design, WPF, Popfly...

Le succès

Ensuite, Soma nous a rappelé en quelques chiffres le succès de la nouvelle démarche Microsoft. Par exemple : 1 millions de licences VS 2005 dont 25% de versions Team System, et surtout 17 millions de downloads des versions Express !

Soma rappelle aussi que sur les forums MSDN 80 % des questions trouvent leur réponse et que même s'il désire que cela aille plus loin MSDN est malgré tout un endroit fabuleux pour aider et se faire aider. En gros le message est "n'oubliez pas de bookmarquer cette adresse et venez nombreux".
Au-delà de la propagande bien naturelle, il faut bien admettre que MSDN, forums compris mais pas seulement, est un fantastique puit d'informations. Quand on connaît l'indigence de la documentation en ligne chez d'autres éditeurs, on sait que sous l'auto-satisfaction de Microsoft se cache aussi une réalité factuelle.

Une mission : rendre tout possible

Microsoft définit sa mission d'une façon simple: aider et offrir les moyens logiciels à la foule de ceux qui souhaitent tirer quelque chose des technologies. Qu'il s'agisse des développeurs professionnels, équipes de développement, designer, étudiants, jusqu'au hobbyistes et aux simples enthousiastes et quelle que soit la cible visée, client légers et lourds, le Web, les serveurs, les périphériques. Pour ce faire, Microsoft multiplie les moyens tout en assurant la cohérence de ces derniers. Win32, .NET, Silverlight, Popfly, Expression, Visual Studio pro ou express, tous ces outils permettent à chacun, en fonction de ses objectifs, de tirer le meilleurs des technologies.

VS 2008 : l'annonce

VS 2005, vous avez-aimé ? alors vous allez adorer VS 2008 !

Sans énumérer ici toutes les nouveautés, disons que l'environnement est capable de cibler les frameworks 2.0 3.0 et 3.5 par simple configuration de chaque projet, avec upgrade automatique si on le désire. On peut donc continuer à maintenir des applications .NET 2.0 sans avoir besoin de passer de VS 2005 à VS 2008 sur le même poste de travail. De même on peut facilement partir d'un projet 2.0 et l'upgrader en 3.0 ou 3.5 pour tirer profit de WPF ou de LINQ par exemple.

Bien d'autres innovations sont intégrées au produit, j'y reviendrai certainement dans des billets et articles futurs. Le support étendu de CSS est assez fantastique, mais difficile à décrire ici en quelques mots. Les outils Office sont désormais intégrés à VS 2008 de base, de même qu'on trouve une librairie étendue de contrôles pour WPF (ainsi bien entendu que les designers visuels supportant XAML).

Un excellente nouvelle pour les abonnés à MSDN : nous pourrons télécharger VS 2008 final d'ici la fin du mois ! Les autres devront attendre vraisemblablement février 2008 pour la commercialisation officielle du produit.

Des avancées nombreuses

Si le bilan de ce qui a été accompli est largement positif, Soma insiste sur les avancées réalisées dans les produits releasés et ceux à venir très prochainement.

Les avancées de la plateforme 

Côté framework, l'intégration de LINQ et du Microsoft Sync Framework renforce encore la puissance de la plateforme. L'intégration du workflow, WPF et ses contrôles, WCF avec le support de REST, RSS, ATOM, JSON, tout cela est énorme.

Bien entendu, Silverlight n'est pas oublié. Réalisant un rêve vieux comme l'informatique, promis par Java mais si difficile à mettre en oeuvre : la vraie portabilité des applications. PC, Mac, Linux, le développeur Microsoft peut atteindre toutes ces cibles avec un seul IDE, un seul langage, une seule plateforme. Aucun éditeur ne propose une telle offre et toute comparaison de Silverlight avec des solutions d'apparences proches est impossible car aucunes de ces dernières ne peut prétendre s'appuyer sur un ensemble aussi cohérent que le framework .NET et les outils de développements Microsoft comme VS 2008.

Les avancées des outils

Visual Studio 2008 améliore encore plus la productivité (si c'est possible !), ils ciblent toutes les plateformes récentes, il intègre les outils Office, propose des améliorations essentielles pour le développement Web.

La version Team System intègre des outils base de données pour intégrer ces dernières totalement au processus de travail collaboratif qui se limitait alors au code.

La suite Expression s'étend vers la gestion du workflow entre designers et développeurs et permet de s'adapter aux différents profils des utilisateurs.

Les avancées du contenu

Le contenu aussi sera renforcé !

MSDN 

Microsoft veut aller encore plus loin dans le lien communautaire entre les développeurs du monde entier. MSDN s'est étendu au fil du temps et représente une source d'information essentielle, mais il faut aller plus loin et en faire l'outil de la communauté des développeurs Microsoft. Ainsi, MSDN va s'enrichir d'un Code Gallery (répertoire de code source), d'un Wiki qui sera alimenté aussi bien par MS que par les utilisateurs de MSDN. Pour aller encore plus loin, Microsoft prévoit des outils de traduction issus de ses laboratoires de recherches pour rendre le Wiki multilingue par traduction automatique. Ainsi, selon l'exemple de Soma, la communauté des développeurs brésiliens pourra nourrir le Wiki directement utilisable et modifiable par des français ou des américains en faisant abstraction de la langue de chacun. MSDN Wiki c'est la tour de Babel devenue réalité...

Microsoft Patterns & Practices

Microsoft veut dans ce domaine aussi pousser encore plus loin ce qui a déjà été fait. La publication de guides, de patterns, de bonnes pratiques sera aussi boostée dans les mois et années à venir.

Une nouveauté qui concrétise cette volonté : les Blueprints S+S (Software + Service). Il s'agit de papiers sur les best practices et des guides sur les nouvelles plateformes, mais aussi de blocs de code source tout prêt à réutiliser dans ses projets autant que des plug-in pour VS.

La Roadmap

Annoncée à la fin de la conférence, comme il se doit, Soma nous présente la roadmap MS. Aucune véritable date de sortie, plutôt des directions à suivre et des nouveaux produits, mais cela est bien naturel puisque les nouveaux produits viennent de sortir ou seront releasés dans quelques mois... voir encore plus loin, même sans date, c'est déjà énorme, même si avec MS on n'attend pas inquiet des annonces pour se prouver que l'éditeur sera là l'année prochaine !

Les outils

Aujourd'hui : Visual Studio 2008, Microsoft Expression Studio, Popfly.

Demain : Visual Studio 10, la version CTP bêta de "Rosario" sera disponible dans le courant 2008. La version 2 de Expression Studio.

Les plateformes

Aujourd'hui : .NET 3.5, Silverlight 1.1

Demain : Silverlight vNext, .NET framework version 4.0

Les serveurs

Aujourd'hui : IIS, SQL Server 2005, Biztalk server 2006 R2, Commerce Server.

Demain : Windows Server 2008, IIS 7.0, SQL Server 2008, Biztalk server v6.

L'ouverture

Autre annonce d'importance, l'ouverture.

Microsoft va en effet modifier son système de licencing pour ouvrir l'IDE de Visual Studio à ses partenaires. De même, le code source du framework va être disponible, ce qui n'est pas la moindre des choses.

Les démos et le reste

Le keynote de Soma a été entrecoupé de quelques démos. Tony Goodhew, Product Manager Visual Studio, nous a montré quelques nouveautés de VS 2008. Exercice de style difficile, en quelques minutes et entre deux diapos de Soma, forcément on n'a pas vu grand chose d'extraordinaire (surtout si on a déjà la bêta pour jouer au bureau et qu'on a déjà tâté les nouveautés de ses petits doigts tremblotants de désir...).

Une petite vidéo amusante sur la véritable histoire du développement de VS 2008 a aussi été diffusée. Sur un ton humoristique on apprend (de très loin) que MS utilise ses propres outils pour créer les nouvelles versions (avec une interrogation : si un produit n'existe pas encore, comment s'en servir pour le créer ?).

Une autre démo, présentée par Dan Fernandez, Lead Product Manager Visual Studio, nous montre tout guilleret un add-in open source pour VS qui permet de développer des add-ins pour World War Craft. Pas réellement essentiel, mais comme ça avait l'air de le rendre heureux de butter des monstres et de voir ses propres messages s'afficher, on pardonne cette digression, c'est pas moi qui lancerait le premier bug à la tête d'un geek fou :-)

Il faut bien admettre que les démos et la petite vidéo n'étaient pas absolument nécessaires. Sans ces interruptions le Keynote aurait été plus court et plus percutant à mon avis. Le temps imparti à chaque démo était trop court pour avoir valeur de démonstration et à faire voir trop peu de choses si vite cela pouvait laisser penser que les nouveautés se limitaient à pouvoir écrire un plug-in pour jeu de rôle ou ajouter un panel Ajax à un site ASP.NET existant, ce qu'ont peut faire de longue date sous VS 2005. A mon sens il s'agit d'une petite erreur, mais qui finalement donne un visage humain (pour qui la perfection est un but inaccessible) à l'organisation sans faille des TechEd, ce que tous les particpants pourront constater dans les 4 jours qui suivront (et même au-delà avec la diffusion en ligne des video par exemple).

Conclusion

Un keynote dans les règles, de beaux produits à venir, plus d'ouverture, plus de productivité, plus d'importance donnée à la communauté, plus d'esthétisme, les graphistes sont nos amis, bref, il n'y a plus qu'à tester tout cela et s'en servir pour faire de jolis programmes !

Dans un prochain billet je vous parlerai certainement de LINQ. J'aime LINQ. LINQ est beau. LINQ est genial. LINQ est ... hmmm bon ok j'en fait trop. Mais c'est vrai, vous n'y couperez pas, je vais en parler et en reparler de LINQ !

Stay tuned !

L'après TechEd, les liens utiles (sites, blogs, documents)

Avant de s'attaquer aux articles, je fais le tri dans les infos que j'ai collectées durant les TechEd. Parmi celles-ci les liens, vers des sites ou des blogs, me semblent être une matière première qui mérite d'être partagée avec vous.

Les liens utiles des TechEd 2007

Cette liste de liens est tout sauf exhaustive. Il s'agit d'une sélection toute personnelle d'adresses que j'ai collectées au fur et à mesure durant les TechEd et que je tenais à partager avec vous...

Les sites

Nom Adresse Thèmes
Micro Framework SDK Download, Newsletter, Samples & Tools

http://msdn.microsoft.com/embedded/netmf

Windows Embedded Developer Center
.NET Micro Framework

http://www.dotnetmicroframework.com/

Embedded Programming with the Microsoft® .NET Micro Framework
F#

http://research.microsoft.com/fsharp

Langage F#
PopFly

http://www.popfly.com/

Site officiel MS Popfly
Silverlight

http://www.silverlight.net/

Site officiel MS Silverlight
blendables

http://labs.blendables.com/

Outils, composant pour Blend

 

Les blogs

Auteur Adresse Thèmes
John Gossman

http://blogs.msdn.com/johngossman/

C#, WPF
Dan Crevier

http://blogs.msdn.com/dancre/

ASP.NET
Dave Baker

http://blogs.msdn.com/davbaker

Micro framework, Windows CE, XP Embedded

Don Syme

http://blogs.msdn.com/dsyme

F#
Dan Fernandez

http://blogs.msdn.com/danielfe/

Lead Product Manager - Non-Professional Tools, Visual Studio Express and Popfly
WPF3D Team Blog

http://blogs.msdn.com/wpf3d

WPF et 3D
Charles Petzold

http://www.charlespetzold.com/

Site et blog de l'incontournable Petzold
Joel Pobar

http://blogs.msdn.com/joelpob/

CLR Program Manager
Chad Hower

http://www.KudzuWorld.com/blogs

"Kudzu"
Stephen Forte

http://www.stephenforte.net/owdasblog/

.NET
Bart De Smet

http://blogs.bartdesmet.net/bart

C#, Framework, Sql Server, WF
Bob Beauchemin

http://www.SQLskills.com/blogs/bobb

SQL Server
Roy Osherove

http://weblogs.asp.net/rosherove/

.NET
Neno Loje

http://www.dotnetjunkies.com/weblog/nenoloje/

.NET
Peter Foot

http://peterfoot.net/

.NET
Biztalk team blog

http://blogs.msdn.com/biztalk_server_team_blog

L'équipe MS de Biztalk
Dave Baker

http://blogs.msdn.com/davbaker

.NET, MF, Win CE, XP Embedded
David Gristwood

http://blogs.msdn.com/david_gristwood/

Application Architect chez Microsoft
Doug Mahugh

http://blogs.msdn.com/dmahugh

Open XML
Jezz Santos

http://blogs.msdn.com/jezzsa/

Software factory, Guidance in context..
Matt Winkler

http://blogs.msdn.com/mwinkle

WF, WCF
Olivier Bloch

http://blogs.msdn.com/obloch

Windows Embedded
Paul Andrew

http://blogs.msdn.com/pandrew

.NET, WF, Workflow, Framework
Steve Teixeira

http://blogs.msdn.com/texblog

Visual C++
Steve Lasker

http://Blogs.MSDN.com/SteveLasker

Sql server, code sample
pablo Castro

http://blogs.msdn.com/pablo

ADO.NET, Astoria, Entity framework
Windows PowerShell

http://blogs.msdn.com/PowerShell

L'équipe de Windows PowerShell
Simon Guest

http://simonguest.com/

SAO, Web Services, Office XML
Frank Prengel

http://blogs.msdn.com/frankpr

.NET, Gadgets & Devices, Embedded
Mike Taulty

http://mtaulty.com/

Entity Framework, ADO.NET
Giorgio Sardo

http://blogs.ugidotnet.org/Giorgio

ASP.NET, WPF, Vista
Olav Tollefsen

http://blogs.msdn.com/olavt/

LINQ, .NET 3.5

Les Documents

Nom Adresse
Virtualization for Windows: A Technology overview (.doc)

MS_Virtualization_Overview_v1.1.doc

PopFly Block SDK (.zip)

http://go.microsoft.com/fwlink/?LinkId=102098

 

Le journal des TechEd : Jour 5 - The End

Ca y est... C'est (déjà) fini Frown On aimerait tellement en voir plus, avoir plus de temps pour suivre tout...
83 conférences dans ma sélection, juste une poignée suivies, les TechEd devrait durer 1 mois !

Heureusement qu'à partir de la semaine prochaine les vidéo seront en ligne en attendant le DVD... En fonction de ma sélection, cela fait une bonne centaine d'heures... De quoi occuper les longues soirées d'hiver Laughing.

J'ai suivi aujourd'hui une conférence sur un langage un peu exotique, F#, vous connaissez ? Un dérivé de ocaml (Objective Caml) un style différent appelé "programmation fonctionnelle orientée objet". Avantage de F#, il fonctionnera sous MONO aussi. La conférence TLA405 se titrait "Parallel and Asynchronous Functional Programming on  NET with F#", tout un ... programme.
Simple curiosité ou langage d'avenir ? Je ne saurai vraiment pas le dire. C'est en tout cas la curiosité qui m'a amené à voir cette session, je suis content, je sais ce que c'est maintenant et je pourrai frimer à la machine à café "comment ? quoi ? tu ne connais pas F# ? quel hasbeen tu fais mon pauvre xxxxx (à remplacer par le nom du pauvre gus qui se trouvera là) !".

Non je plaisante, s'ouvrir l'esprit en regardant toujours ailleurs est certainement la qualité la plus importante du développeur, et peut-être la moins bien partagée quand on voit comment parfois les gens se cloisonnent et s'accrochent à leur savoir, à "leur" langage (comme s'ils l'avaient écrit eux-mêmes), à "leur" IDE... C'est en regardant C#, comme ça, pour m'informer que j'ai basculé vers .NET... 
Mais bon, là, je n'échangerai pas mon baril de C# contre deux de F#. Intéressant, certes, mais un peu trop exotique à mon goût. Mais faites-vous votre propre opinion en visitant la page du labo de recherche de Microsoft qui a planché sur ce nouveau langage.

Plus ardue mais passionnante, fut la conférence Win401 "Deep Reflection - Things You Really Need to Know About Reflection 2 0". Il s'agissait de voir en profondeur la réflexion sur certains aspects comme la façon d'inspecter les génériques ou même de créer des génériques au runtime.. La génération de code avec CodeDOM a été très instructive et il a fallut s'accrocher lorsque le speaker a décidé de nous entraîner dans le code IL et les méandres de la CLR. Je ne suis pas certain qu'après une semaine de conférences avoir choisir de clore par cette session était une excellente idée, j'ai la tête farcie Tongue out !

Les techEd sont terminées, mais en réalité seule la partie visible de l'iceberg vient de fondre : le plus gros du travail est à venir. Trier, digérer l'information, voir et revoir les vidéos, tester au calme chaque aspect démontré dans chaque conférence, en tirer la substantifique moëlle, et vous faire partager tout cela au travers d'articles à venir...

Pour le moment, c'est le sas de décompression : une soirée calme avec quelques rougets bien frais achetés à la Boqueria que je vais accompagner d'un riz le tout arrosé d'un bon rouge local ! Demain direction Figueras et le musée Dali, impossible d'en être si près sans aller voir les oeuvres du maître.

L'année prochaine, venez aux TechEd (qui auront lieu ici encore très certainement) et réservez-vous du temps pour voir du Picasso, du Dali, les maisons de Gaudi et toutes les splendeurs de Barcelone. Participer à une conférence sur F# ne suffit pas pour prétendre s'ouvrir l'esprit, l'art, les gens, sentir l'atmosphère d'une ville, d'une nation, c'est aussi important, je dirais même mieux, sur le plan personnel et humaniste, la visite d'une maison de Gaudi vous marquera à vie, alors que dans 20 ans vous ne vous souviendrez plus du paragraphe plus haut sur F# !

La suite bientôt sur ce blog... Du C#, du LINQ, du WPF, du Silverlight, vous n'avez pas fini de m'en entendre parler !

Le journal des TechEd : Jour 4

L'avant dernière journée de cette course folle s'achève...

Sélectionner les bonnes conférences est toujours délicat. Je vous parlais dans un précédent billet de l'excellente idée de Microsoft de filmer toutes les breakout sessions qui se retrouveront ainsi en video sur le DVD de la conf et dans l'attente de ce dernier qui seront téléchargeables sur le site des TechEd.

Mais il y a une autre façon de présélectionner les conférences, en téléchargeant les slides sur la page "My event" (à laquelle tout participant a accès avec son login). Les slides sont souvent "légers", beaucoup de speakers n'y mettent qu'un minimum préférant la démo en live au texte des diapos. Malgré tout cela permet de se faire une idée plus précise du plan que suivra le conférencier et d'affiner sa sélection.

Parmi les conférences de la journée, TLA403 "Loose coupling in practice - Composite UI Application block (CAB) in the real world" a retenu mon attention. Elle présentait notamment le "Smart Client Software Factory" dont la V2 est sortie en mai dernier, un ensemble de classes et d'outils facilitant la conception d'applications modulaires. La V2 intègre la gestion des CAB pour la distribution des modules. Vous pouvez télécharger la SCSF et ses sources sur Codeplex ou sur la page officile chez Microsoft: http://msdn2.microsoft.com/en-us/practices/bb190387.aspx .

La session présentée par David Platt était doublée dans l'après par une autre conf sur le même sujet présentée par Mario Szpuszta (TLA406). Je n'ai pas assisté à cette dernière qui, selon les slides, faisait intervenir Workflow Foundation dans les patterns proposées. Une conférence qu'il sera bon de visionner lorsque sa video sera mise en ligne donc...

La conférence TLA303 présentait le Visual Studio 2008 Shell et la façon de créer son propre IDE en se basant sur ce noyau. je n'ai suivi que le tout début préférant voir ce contenu en video plus tard car au même moment se tenait la TLA407 "Dealing with concurrency and multi-core CPUs with today's developement technologies", ou bien en français "comment gérer la concurrence et les microprocesseurs multi-coeurs avec les technos actuelles". Une conférence dense, très intéressante qui méritera une seconde écoute au calme quand la vidéo sera en ligne...

Bref, une journée encore bien chargée... Après 4 jours de conférences en anglais on se surprend à retrouver dans ses notes des paragraphes entiers notés en anglais sans s'en être aperçu.. L'immersion linguistique, c'est aussi un autre avantage des conférences internationales comme les TechEd !!

A demain pour le dernier jour !