En direct de la Build

En direct de la Build

Bonjour à tous ,

Vous trouverez ci dessous, et dans la rubrique « Microsoft Build 2011 », les notes de l’ensemble des conférences auxquelles ont assisté nos trois « reporters »  MCNEXT :

Pierre Yves, directeur de pôle .NET
Roch Baduel, directeur de pôle Biztalk et expert .NET
Guillaume Leborgne , expert .NET

Ces messages ont été envoyés chaque jour à l’ensemble de la société  . Ils vous sont livrés tels quels .

Hubert de Charnacé
PDG de MCNEXT

Le conclusion de la build

 Bonjour à tous,

Cette semaine se termine et la build egalement. Beaucoup de choses intéressantes et surtout Windows 8 qui apporte son lot de nouveautes mais aussi de nouveaux terrains de jeu pour nous, developpeurs. Parmis tout ceci une des petite revolution est l’introduction de la nouvelle API Windows, car il s’agit bien de ca, vous l’aurez deviné : WinRT. Bien sur il y a les applications Metro, le XAML, le javascript et le HTML5. Tout ceci n est possible que grace a WinRT.

A priori, on va arreter un peu de vous spammer mais ce n’est qu’en attendant de vous faire un retour sur tout ce qu’on a vu, avec demos, lors d’une prochaine caviar party. (pour ceux qui ne connaissent pas ce sont des soirees techniques de MCNEXT).

Pierre-Yves, Guillaume et Roch

.Net developer view of Windows 8 apps

Message de Guillaume Leborgne

Une session tres tres interessante, a regarder en webcast !!!

 Quelques precisions pour commencer :

Les applications Metro en C# / XAML utilisent la CLR 4.5 avec un petit subset de l’api .Net

WinRT est une librairie en code natif, reposant sur DCOM, et expose en .Net, qui permet de manipuler les elements systeme.

 Les types manipules dans une application metro peuvent donc avoir plusieurs origins :

WinRT

Managed (Tuple, List, XDocument, …)

Mapped (Int32, string, IEnumerable)

Interop (IBuffer, IASync, …)

Les applications metro utilisent un profil CLR particulier optimise pour la typologie d’application. Un profil CLR est un jeu d’assembly de reference qui permettent de definer les parties de .Net qui sont accessibles dans une application.

Par exemple, le profil des applications metro s’appelle « .Net Core », et il est visible dans le repertoire (dans windows 8) Program files (x86)/Reference assemblies/Microsoft/framework

Dans ce profil, certaines choses ont ete supprimees : les API aui n’avaient pas de sens (par ex ASP.Net) , Les choses dangereuse ou obsoletes ,les choses dupliquees avec WinRT, les wrappers sur certaines fonctionnalites de l’OS (EventLog, PerfCounters, …)

Par ailleurs, certains elements sont presents mais ont ete refactore

 A titre d’exemple : 

metro comporte  15 assemblies, 60 namespaces, et 1000 types

WP7   comporte  22 assemblies, 88 namespaces, et 2000 types

.Net    comporte 120 assemblies, 400 namespaces, et 14000 types

 En d’autres termes, le code .Net d’une application metro n’est pas 100% compatible avec du code « standard », le portage reste cependant tres simple. Microsoft va mettre en ligne un guide pour expliquer le portage des API.

 En parallele, il est possible de faire des projets de type « Portable Library », qui sont compatibles sur tous les environnements .Net (WP7, Silverlight, Metro, XBox, …).

Dans metro on a acces a la BCL (c’est la partie qui a le moins change), a une stack Http specifique, la Serialization (avec un gros lifting), Linq 2 XML, MEF, la partie cliente de WCF, la reflection (mais pas sur les types prives et avec quelques amenagements).

 Les namespaces suivants ne sont pas accessibles :Data, Web, Remoting, Reflection.Emit, AppDomains
Certaines parties ont ete remplacees : System.Windows (WPF), Isolated Storage, Resources, Sockets, WebClient
Les parties qui ont ete modifies sont les suivantes : Serialization, Reflection, XML, Collections, Threading

 A+

Building apps with Windows Workflow foundation and Windows Azure

Message de Roch Baduel

Building apps with Windows Workflow foundation and Windows Azure . La session commence par un rappel sur Windows Workflow. La session continue ensuite par un rappel sur Windows Azure

Pour hoster un Workflow sous Azure on peut utiliser :

–          WorkflowInvoker (appel simple)
–          WorkflowApplication (permet de fournir notamment la persistence)
–          WorkflowServiceHost (permet l’intégrtion avec la mesagerie, la gestion des workflow..)
–          IIS
–          AppFabric Server n’est pas supporté sous Azure et ne le sera pas

Démonstration : utilisation de WF et Azure pour valider les commentaires sur un blog

–          Un processseur de commentaire est implémenté dans un WorkerRole
–          Une activité custom WF est créée pour supprimer les commentaires
–          Les commentaires sont reçus depuis une queue et désérialisé en JSON
–          Le WorkerRole dépile les messages charge le workflow depuis un blob et l’execute en lui passant le commentaire
–          A coté il est possible avec une application qui réhost le designer de créer le workflow ou l’éditer et le stocker dans le blob
–          La suite de la démo montre qu’on peut configurer le Workflow dynamiquement pour par exemple supprimer les commentaires qui contiennent « http:// »

Les points faibles :

–          Tout doit être codé
–          Pas de stockage
–          Pas d’utilitaires

Annonce : Windows Azure Activity Pack CTP1 sur Codeplex offre des activités pour interargir avec les blob, table …

Démo suivante (disponible dans le SDK : ContosoPizza)

Attention dans azure il n’y a pas de transaction distribuée. On peut venir se greffer sur un transaction locale.

–          On peut dériver de PersistanceParticipant afin d’être invoké lors d’une persistance et ainsi on peut se greffer sur la transaction locale : il s’agit d’une extension qui peut être rajouter à la collection WorkflowExtensions du WF Host. Dans la démo l’extension est configurer dans le web.config (behavior)

Conlusion des la Démo ;

–          Le setup n’est pas immédiat
–          Ne peut être facilement modifier pour monter en charge

Objectifs pour hoster des workflow :

–          On veut la possibilité de monter en charge
–          La faciliter d’administration
–          Le multi tenant
–          Etre compatible avec les développements WF standards

 Azure Workflow Services

La démo montre le déploiement avec 3 requêtes http d’un WorkFlow sous Azure Workflow Service

Supportera :

n  Large scale
n  Déploiement simplifié
n  Intégration avec la messagerie
n  Pub/Sub
n  Multi tenant

Build world-ready metro style apps using xaml

Message de Pierre Yves hemery 

Derniere session de la semaine…

L’objectif de la session est de montrer comment localiser une metro app en xaml.
Le but etait de creer un mecanisme pour pouvoir ajouter une localisation rapidement sans toucher a son app.

Pour ca, on cree un repertoire par locale dans son projet avec
– les images localisees
– les textes dans un nouveau format .resw
on peut aussi utiliser une convention sur les fichiers (myasset.Fr-fr.png) plutot que l’approche par dossier.
Le RessourceManager se charge de retrouver les bons assets en fonction de la locale du user.

Note : pas de strongly type pour les resx, pas d’embedded resources dans la dll

# nouvel element dans le markup
on ajoute x:Uid pour associer la cle de localisation a un element pour toute ses proprietes.
ex. pour TextBlock si on a x:Uid= »mykey » on aura dans le resw mykey.Text=toto

Le meme mecanisme localise les images, les textes et meme les layouts (en ajoutant une vesion du .xaml dans les repertoires par locale).
Dans ce cas toutes les declinaisons de layout doivent avoir les memes elements car elles partagent le meme code behind.
Note : il existe un ResourceContext pour pouvoir ecrire des tests unitaires.
Note : on peut changer la langue par defaut (celle utilisee si pas de locale trouvee) dans les proprietes du projet
Note : les resw sont deployes en binaires .pri (makepri -dump peut convertir le binaire en xml pour voir ce qu’il contient)

 

Si on a une librairie avec ses propres resources, elles sont mergees aves les ressources principales. Le .pri contient alors 2 resourcemap. A priori, le mecanisme ne gere pas mes les dates et les nombres

Extending the media platform using input, output and processing plugins

Message de Guillaume Leborgne

Extending the media platform using input, output and processing plugins. Une session prise en cours, pour cause de session full (c’est un peu irritant mais bon..). ça permet de voir comment on peut venir installer ses propres plugins de traitement vidéo, audio à l’éxécution dans une application métro.Les plugins permettent d’effectuer des traitements en temps réel. Changer le contraste d’une vidéo, faire de la détection de mouvement, du traitement, décodage…

Démo : reconnaissance d’objet dans un flux vidéo

–          Le  modèle objet est déjà bien établi sur la plateforme Windows 7

–          Windows 8 fourni WinRT qui peut être  utilisé depuis n’importe quel langage

–          Il est possible de s’intégrer avec DirectX 11

–          Les composants utilisés dans une application n’interragissent pas avec les autres applications

Design :

–          Les plugins sont des objets COM./C++

–          Pour les applications Metro, ils ne peuvent être installés sur la machine mais doivent pouvoir être activés

–          Le code natif est nécessaire pour des questions de performance, efficacité, accès au hardware…

Media foundation s’appuie sur DirectX et WASAPI et est utilisé par WinRT

Dans la démo : un composant C++ reçoit les trames vidéos et les passe tel quel. Il extrait les coordonnées des objets et les passe au code Metro.

Le composant implemente IMFTransform ( ProcessInput(), ProcessOutput()), IInspectable et une interface custom.Il produit 1 sample en sortie par sample en entrée. (une frame). Il n’existe pas qu’un seul format en entrée : parfois les pixels sont représenté dans un tableau 1D, parfois 2D. La représentation des pixels peut aussi varier (RGB ou Luminosité + couleur ou …)

On peut utiliser des fonctions pour nous assister dans le décodage/codage (ces fonctions peuvent être trouvées dans les exemples Media Foundation). Il est également possible de convertir l’entrée vers un format interne et de reconvertir en sortie

Comment créer le composant :

–          On défini les classes et les interfaces et l’idl

–          On Implémente les interfaces

–          On compile l’idl en Windows Runtime Metadata

–          On Inclus la dll avec l’appli et on la declare dans le manifest

En Javascript on peut installer les effets au runtime.

Il est également possible avec les MediaExtension WinRT d’enregistrer à l’éxécution un décodeur, un encodeur et celui-ci sera uniquement visible par l’application.

Building realworld metro apps with javascript

Session interessante a voir en webcast pour ceux qui s interesseraient au developpement d application windows 8 en html.

Le speaker a presente quelques concepts sur comment tunner son javascript pour avoir de bonnes perfs dans les applications.

 Il a ensuite fait un focus sur les specificites. Il est possible d utiliser des librairies tierces comme jquery mais il y a present present limitations. Par exemple, il y a quelques restrictions au niveau du XHR, et un principe de « Host inforcment ». Par defaut, l utilisation de innerHtml pour ajouter du contenu dynamique est soumise a un filtrage (pour des raisons évidentes de securite). Le filtrage porte sur les bailises scripts, les atteibuts »data-« , etc. Heureusement, ce filtrage peut informant by-passe, mails il faut le faire explicitement.

 
Par ailleurs, le javascript peut etre execute dans deux contextes differents. Soit dans un context local, soit dans un contexte web. Le present local peut acceder aux api tuner mais pas a des ressources internet. Le contexte web peut acceder a des ressources internet mais pas a WinRT…

La solution la plus simple pour acceder a un contexte web est d utiliser une iframe, et de communiquer par postMessage entre les deux.

 Pour decouvrir tous ces elements, il y a un sample appelle mashup dans le sdk