“Help’Aged Mesh Camera” ou comment envoyer une photo sur Live Mesh CTP (LiveFx) depuis Windows Mobile

Samedi 30 mai 2009

Lors du développement de notre projet Help’Aged, projet gagnant de la finale française Imagine Cup 2009 (plus d’info sur le projet), nous avons mis en place une démonstration qui était censée être “sympa” si seulement nous avions eu une bonne réception du réseau mobile (GPRS, EDGE ou UTMS) dans la salle de présentation :)

Logo - HD - No backgroundPour faire court Help’Aged est une sorte d’OS ergonomique pensé principalement pour les personnes âgées ou ayant diverses pathologies. L’interface très simple et intuitive s’utilise au moyen d’un écran tactile. Help’Aged héberge ensuite différentes applications pensées “usage” : je veux je peux (et je n’ai pas besoin de cliquer sur X bouton avant de pouvoir faire mon action !).

Toutes les applications pour Help’Aged sont rassemblées dans un “Application Store”, un catalogue d’application hébergé dans le cloud Azure. Grace au SDK d’HelpAged, chaque développeur peut facilement, en WPF, venir développer son application Help’Aged et l’envoyer sur le cloud Azure pour la mettre à disposition de tous. Help’Aged offre ici une plateforme hautement extensible et à forte valeur ajoutée.

Architecture HelpAged

Autre point clé d’Help’Aged est son coté “ubiquitaire” ! En d’autre terme, vous pouvez accéder à votre environnement (données, applications, paramètres) depuis n’importe quelles “machines Help’Aged”. Pour ce faire nous utilisons les Live Services et plus particulièrement le Live Framework (Live Mesh Tech Preview) comme unité de stokage propre à chaque utilisateur (identifié au moyen d’un LiveID).

Un article complet sur l’architecture sera bientôt écrit et publié sur le site web d’Help’Aged que je vous invite à consulter pour plus d’information : www.help-aged.fr.

Help’Aged, LiveFX et Windows Mobile : la démo

Les applications de base de l’environnement Help’Aged propose une galerie photo permettant de parcourir ses albums photos, rien de plus normal comme fonctionnalité de nos jours :)

photoManger

Au démarrage de l’application, celle-ci vient synchroniser manuellement les photos présentes sur le Live Mesh (version Tech Preview) de l’utilisateur pour les mettre en local (et permettre un accès en mode déconnecté et une rapidité de lecture). Si Live Mesh Tech Preview et son modèle de ressource ne vous sont pas familier, je vous invite à lire mes précédents posts pour plus d’informations : Nouvelle CTP Avril 2009 du Live Framework et le Resource Model et l’annonce du Live Framework Explorer.

Comme pour toutes ressources dans Live Mesh (MeshObject), nous pouvons aisément le partager avec d’autre pour que chaque membre de la famille, par exemple, puisse ajouter des photos afin qu’elles soient directement affichées dans la galerie de l’utilisateur.

image Mais plutôt que devoir sortir un ordinateur pour envoyer la photo n’est-il pas plus simple de sortir notre téléphone portable que nous avons dans notre poche 80% du temps ? Vous sortez votre téléphone pour immortaliser une photo qui est envoyée illico sur votre compte Mesh, synchronisée sur tous vos périphériques et partagée avec vos amis.

image

Pour illustrer une de nos démos, nous avons donc développé un petit utilitaire pour Windows Mobile nommé “Help’Aged Mesh Camera” permettant de prendre des photos et de les envoyer dans un dossier Live Mesh :

Screen01 Screen08 Screen10

Envoyer une photo depuis Windows Mobile sur Live FX en pratique

Pour un effet démo “live”, l’application sur Help’Aged (la galerie photo) s’abonne à l’événement ChangeNotificationReceived du datafeed “LiveMeshFiles” qui est déclenché dès qu’il y a un changement dans les DataEntries de ce feed. En d’autre terme, dès qu’une photo est ajoutée/supprimée dans dossier sur Live Mesh, l’application cliente est notifiée pouvant ainsi mettre à jour sa galerie photo.

La méthode de chargement est similaire à ce qui suit ci-dessous :

1
2
3
4
5
6
7
8
9
10
11
12
var myPicturesFolder = liveFx.Mesh.CreateQuery<MeshObject>().Where(mo => mo.Resource.Title == "My Pictures").FirstOrDefault();
if (myPicturesFolder != null)
{
    myPicturesFeed = myPicturesFolder.CreateQuery<DataFeed>().Where(d => d.Resource.Title == "LiveMeshFiles").FirstOrDefault();
    if (myPicturesFeed != null)
    {
        // Update the gallery when received a change notification of the DataFeed
        myPicturesFeed.DataEntries.ChangeNotificationReceived += (s, e) => UpdateGallery();
        // Update the gallery on the startup
        UpdateGallery();
    }
}

Pour le téléchargement en tant que tel des images sur le disque local, il nous suffira d’appeler la méthode ReadMediaResource pour chaque DataEntry représentant chacun de nos fichiers.  

1
2
foreach (var dataEntry in myPicturesFeed.DataEntries.Entries)
        dataEntry.ReadMediaResource(...);
Live Mesh Beta != Live Mesh Tech Preview

N’oubliez pas que “Live Mesh Beta” n’est pas ouvert sur des services REST; c’est pourquoi nous utilisons exclusivement Live Mesh Tech Preview (LiveFX) pour pouvoir interagir depuis nos applications. Mais aucun client sur LiveFx ne permet la synchronisation de répertoire (version CTP). Les clients Mac, Windows et Windows Mobile pour la synchronisation de répertoire sont seulement disponible pour Live Mesh Beta.

En d’autre terme pas possible de faire une démo du genre “je déplace ces fichiers dans mon dossier Mesh depuis mon bureau Windows et hop les photos sont dans le cloud” comme vous le faites avec Live Mesh Beta ! Pour cela il faut nous même écrire du code permettant d’envoyer un fichier sur LiveFX.

image

Comme je l’ai fais dans Live Framework Explorer avec le plugin “FileUploadingPlugin”, cela se résume à ces quelques lignes quand nous avons à disposition l’API .Net de Live FX :

1
2
3
// Upload a file using LiveFX SDK .NET
myDataFeed.DataEntries.Add(myFileStream, myFileName, myFileMimeType);
myDataFeed.UpdateAsync(myFileName);

Une API LiveFX sur Compact Framework ?

L’envoi de fichier comme montré ci-dessus semble très simple ! En quelques lignes seulement j’envoi mon fichier dans un DataFeed d’un MeshObject représentant mon dossier.

Cette simplicité est fournie par le SDK de Live FX. Ce SDK est actuellement disponible pour :

  • Le .NET Framework
  • Silverlight
  • Javascript

Mais quant est-il du Compact Framework pour les systèmes Windows Mobile ? Rien à disposition ?

Et si vous tentez d’ajouter les références de l’API .net, vous obtiendrez des erreurs à la compilation car les signatures des assemblies de la BCL (base class library) du .NET Framework et du .NET Compact Framework ne sont pas les mêmes ! Donc “chocolat” : pas de LiveOperatingEnvironment et autre LiveItem depuis notre application Windows Mobile :(

La solution : Vive les standards, vive HTTP !

Si vous avez bien suivi la technologie Live FX / Mesh Tech Preview, vous n’êtes pas sans savoir que côté Service tout est exposé en REST sur le protocole HTTP standard d’Internet depuis bien longtemps. En retour, le service renvoi les résultats dans le format que vous avez choisi (dans l’entête HTTP de votre requête) avec au choix : ATOM, RSS, POX ou JSON.

Les assemblies .NET, SL ou JS fournit dans le SDK de LiveFX ne font qu’interfacer l’envoi des requêtes HTTP et interprètent les réponses dans un modèle objet permettant un développement simple et rapide pour le développeur.

Pour citer mon post précédent :

Votre Live Operating Environment n’est pas fermé aux technologies Microsoft : n’importe quel langage ou plateforme sachant créer une requête HTTP et parser du XML (ou JSON) peut accéder et interagir avec notre LOE

Le Compact Framework étant tout à fait apte à créer des requêtes HTTP et parser du XML,  nous n’avons donc aucun frein pour accéder à Live Mesh depuis notre smartphone :)

Mission 1 : Récupérer un ticket LiveID

Avant de pouvoir interagir avec le service LiveFx il faut au préalable être authentifié. La démarche est la suivante :

  1. On envoi une requête SOAP (contenant le Live Id et le mot de passe) sur le service Live-Id (https://dev.login.live.com/wstlogin.srf)
  2. Si l’authentification est correcte nous récupérons un ticket d’authentification
  3. Lors de l’envoi de nos requêtes HTTP sur le service LiveFx, on ajoute dans l’entête HTTP une clé nommée “Authorization” qui contiendra comme valeur notre ticket Live

Le code permettant la récupération du ticket d’authentification Live est disponible au travers du SDK de LiveFX dans le répertoire : X:\Program Files\Microsoft SDKs\Live Framework SDK\v0.91\Samples\AtomPub\ProjectManager\App_Code\WindowsLiveIdentity.cs

Pour récupérer notre ticket rien de plus simple maintenant :

1
2
3
 var liveIdTicket = WindowsLiveIdentity.GetTicket(
	new Uri("https://user-ctp.windows.net/"),
	new NetworkCredential("myLiveId@live.fr", "myPassword"));
Mission 2 : Prendre une photo et l’envoyer le fichier sur LiveFX

La prise de photo sous Windows Mobile est assez simple. Vous trouverez dans le namespace Microsoft.WindowsMobile.Forms la classe CameraCaptureDialog permettant d’afficher la boite de dialogue pour la Camera. Comme le montre le code ci-dessous il suffit simplement d’afficher la fenêtre de dialogue et si le retour est OK, récupérer le chemin du fichier complet.

1
2
3
4
5
6
7
//Open the camera capture dialog
var cameraCaptureDialog = new CameraCaptureDialog();
cameraCaptureDialog.Mode = CameraCaptureMode.Still;
if (cameraCaptureDialog.ShowDialog() == DialogResult.OK)
{
    var imageFilename = cameraCaptureDialog.FileName
}

Une fois la photo prise, il nous faut envoyer ce fichier sur Live Mesh. Comme le montre Oran Dennison sur le forum de Live Framework dans ce thread, il nous suffit de créer une requête HTTP de type POST qui contiendra le fichier sur l’URL des MediasResources de votre DataFeed “LiveMeshFiles”.

Et comment récupérer l’URL des MediasResources du datafeed de votre dossier ?

Pour cela nous allons nous servir de Live Framework Explorer (LFE) directement depuis notre Visual Studio pour récupérer l’URL de notre dossier. Il faudra au préalable, avoir créé le dossier, par exemple, en se connectant sur le Live Desktop :

image

Depuis LFE, se connecter et parcourir ses MeshObjects pour retrouver notre dossier et sur le click droit, afficher les DataFeeds “LiveMeshFiles” dans le navigateur (View in the browser) :

 image

Il suffira alors de copier-coller l’URL et d’y rajouter “/MediaResources” :

 image

Avec le code d’Oran (que j’ai encapsulé dans une méthode UploadFile), il nous restera plus qu’à poster le fichier sur l’URL trouvé ci-dessus avec notre ticket Live et le tour est joué :

1
2
3
// Upload the file (using HTTP POST) to the MediaResources URI
var result = WindowsLiveFx.UploadFile(liveAuthToken,
                new Uri(mediaResourcesUri), imageFilename);
Mission 3 : Récupérer les LiveMeshFolder et permettre de sélectionner le dossier

Jusqu’a maintenant nous avons réussi notre mission à savoir : envoyer notre photo dans Mesh. Seulement cela n’est pas très “propre” : mettre en dur dans le code l’adresse URL de notre dossier n’est pas très flexible et pratique pour l’utilisateur !

Nous allons donc rendre cela dynamique en proposant à l’utilisateur le choix du dossier sur Live Mesh :

Screen07

Mais comment récupérer la liste de nos dossiers Live Mesh et leurs URL des “MediaResources” ?

Reprenons LFE pour introspecter notre modèle de ressource sur notre liste de MeshObject à l’adresse : https://user-ctp.windows.net/V0.1/Mesh/MeshObjects/

image

Nous y retrouvons au format ATOM (format par défaut), notre dossier “DemoMesh” catégorisé “LiveMeshFolder” par la ligne :

1
<category term="LiveMeshFolder" scheme="http://user.windows.net/MeshObject" label="LiveMeshFolder" />

Une fois nos dossiers identifiés nous pouvons récupérer le lien vers les DataFeeds. Nous garderons en mémoire le titre du dossier ainsi que l’URL complète des DataFeeds et nous afficherons cette liste dans une ComboBox pour laisser le choix à l’utilisateur du dossier de destination.

Pour cela, j’ai créé une méthode “GetMeshXDocument” qui permet d’envoyer un GET HTTP sur Mesh (en tenant compte de l’authentification avec notre ticket Live) et de renvoyer la réponse ATOM dans un XDocument afin d’utiliser la puissance de LINQ pour récupérer le titre et URL des DataFeeds de tous mes LiveMeshFolder que je possède dans mon Mesh :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
XNamespace nsAtom = "http://www.w3.org/2005/Atom";
 
// Get the MeshObjects feed
var meshObjectsFeed = WindowsLiveFx.GetMeshXDocument(LiveIdTicket,
    Program.LiveFXRootURI + "/Mesh/MeshObjects/");
 
// Get the Title & DataFeeds Uri of each LiveMesh Folder
var meshFolders = meshObjectsFeed.Descendants(nsAtom + "entry").
    Where( // <category  .... term="LiveMeshFolder" />
        item => item.Descendants(nsAtom + "category").Any(
                cat => cat.Attributes("term").Any(
                    term => term.Value == "LiveMeshFolder")))
        .Select(item =>
            new MeshFolderInfo
            {
                Title = item.Element(nsAtom + "title").Value,
                DataFeedUri = item.Descendants(nsAtom + "link").Where(
                    lnk => lnk.Attribute("rel").Value == "LiveFX/DataFeeds").Single().Attribute("href").Value
            }).ToList();
 
// Add each folder in the combobox
meshFolders.ForEach(folder => cbFolder.Items.Add(folder));

Une fois la photo prise et le dossier sélectionné, il me reste encore à récupérer l’URL exacte des MediaResources afin d’envoyer le fichier à cette URL comme montré plus haut.

Pour cela il me faudra récupérer la liste des DataFeeds du dossier sélectionné afin de retrouver le DataFeed “LiveMeshFiles” pour récupérer l’URL de ses MediaResources. En (X)Linq :

1
2
3
4
5
6
7
8
9
10
11
// Get the DataFeed of the folder (MO) selected
var feeds = WindowsLiveFx.GetMeshXDocument(LiveIdTicket,
    Program.LiveFXRootURI + folderSelected.DataFeedUri);
 
// Find the MediaResources URI in the DataFeed selected
var mediaResourcesUri = feeds.Descendants(nsAtom + "entry").
   Where(
       item => item.Element(nsAtom + "title").Value == "LiveMeshFiles")
       .Select(
           item => item.Descendants(nsAtom + "link").Where(
                   lnk => lnk.Attribute("rel").Value == "LiveFX/MediaResources").Single().Attribute("href").Value).Single();

La suite est un jeu d’enfant, je n’ai plus qu’à envoyer mon fichier sur l’URL de mes MediaResources !

1
2
3
4
5
6
// Upload the file (HTTP POST) to the MediaResources URI
var result = WindowsLiveFx.UploadFile(LiveIdTicket,
    new Uri(Program.LiveFXRootURI + mediaResourcesUri), currentImage.FullName);
 
// Ok !
lblStatus.Text = result ? "Image sent !" : "Fail !";

Conclusion

Comme vous avez pu le constater, un des principaux atouts de Live Mesh (Tech Preview), comme pour beaucoup des services de la plateforme Azure, est son ouverture vers les standards Internet. Le fait que Live Mesh soit accessible au travers d’un service HTTP/REST lui permet une haute interopérabilité entre les technologies pourvu qu’elles sachent utiliser le protocole HTTP et les formats XML/JSON.

Même si nous n’avons pas à l’heure actuelle d’API LiveFx pour Windows Mobile, il est tout à fait possible d’interagir avec cette plateforme sans limite. Un ami à moi me fit la réflexion à l’issue d’une discussion autour de Live Mesh : “Dommage qu’il n’y ait pas de client pour iPhone”, après quoi je lui rétorquais “A toi de le développer si tu le souhaites, tu as tout ce qu’il faut pour !” :)

Vous retrouverez les binaires et sources de HelpAged Mesh Camera ci-dessous

Bon Mesh à tous :)

[LiveFX] Le Resource Model et l’annonce du Live Framework Explorer 1.0 lors du MIX09 à Las Vegas

Mardi 19 mai 2009

Depuis le temps que je devais publier cet article resté près de deux mois dans mes brouillons, voila qui est fait !

Vous vous en souvenez peut être en début d’année de la sortie de MOB : Mesh Object Browser, une application WinForm fort bien utile pour les développeurs et ceux voulant comprendre le modèle de ressource du Live Framework.

image Le Live Framework que je vous ai présenté dans mon post consacré à la nouvelle CTP d’Avril 2009 est, je me cite, "une API permettant d’unifier l’accès aux services Live et en particulier au “Live Operating Environment“".

Le Live Operating Environment (LOE) est en quelque sorte votre ordinateur virtuel hébergé sur le Cloud Azure dans ce que l’on appelle le Live Desktop où vous retrouverez vos applications et données partageable avec n’importe qui et cela accessible depuis n’importe quel de vos devices (ordinateurs, laptop, smartphone, web,….) par des mécanismes de synchronisation assurant notamment le fonctionnement en mode déconnecté.

Votre Live Operating Environment est exposé au travers d’un service REST sur le protocole standard du Web qu’est le HTTP. Le format de retour se précise avec le champ "Accept" de l’entête HTTP de votre requête. Au choix :

  • ATOM
  • JSON
  • POX
  • RSS

Vous l’aurez compris, votre Live Operating Environment n’est pas fermé aux technologies Microsoft : n’importe quel langage ou plateforme sachant créer une requête HTTP et parser du XML (ou JSON) peut accéder et interagir avec notre LOE. Au travers du "Live Framework SDK", Microsoft propose trois API simplifiant l’accès au LOE : une pour .NET, une autre pour Silverlight et une dernière pour Javascript ! Vous trouverez des exemples d utilisation du LOE, notamment avec d’autre langage comme PHP ou IronPython, sur le blog de l’equipe LiveFx.

Le Resource Model

Une fois connecté à votre LOE vous pourrez accéder à votre "Resource Model" (modèle de ressource) que forme vos données et applications.

Le Resource Model est le modèle de donnée de votre LOE. Il contient les ressources concrètes (type) et ses relations. Tout dans le Live Framework est exposé comme une ressource (application, donnée, notification, contact, profile, membres, etc…). Chacune de ces ressources disposes d’une URI fixe, d’un nom, d’un auteur, date de modification, etc…

L’avantage de ce découpage LOE <-> Resource Model est qu’il n’y a pas de lien fort entre le service responsable d’exposer en REST des collections de LiveItem et ce qu’on va réellement y stocker dans ces LiveItem que ce soit des contacts, des applications, des fichiers ou quoi que ce soit !

Aujourd’hui le Resource Model proposé dans le Live Framework est celui ci :

 

image

On y retrouve l’accès à notre Mesh, nos contacts et notre profile. Dans notre Mesh nous pouvons retrouver nos Devices, Applications, News et aussi nos MeshObject.

Chaque MeshObject contient une collection de Feed, des members pour la notion de partage, des news, des mappings pour la notion de synchronisation entre les Devices. Et c’est dans les DataFeed que nous retrouverons nos DataEntries qui matérialises nos entités dans notre LOE (par exemple un fichier dans Mesh est un DataEntries de type File d’un DataFeed de type LiveMeshFiles d’un MeshObject de type LiveMeshFolder).

Comment parcourir votre Resource Model ?

La première question que je me suis posé peu après avoir suivi les webcasts des sessions de la PDC en Octobre 2008 qui présentait le Live Framework était : comment parcourir notre Resource Model ?

Pour comprendre son fonctionnement comme pour développer on a besoin de savoir ce qu’il y a dedans, un peu comme on ouvre son SQL Studio Management ou phpMyAdmin pour explorer les tables, relations entre ces tables et données qu’elles contiennent.

Le Live Framework SDK offre un et un seul outil nommé le "Live Framework Resource Browser". Cet outil est ni plus ni moins qu’un browser web adapté pour la navigation du service REST "on the cloud" (Live Desktop) ou "local" (Local Desktop) du LiveFX. En effet ce browser à la particularité de  :

  • Activer les liens dans les flux pour une navigation facile
  • Formater les flux JSON
  • Permettre de sélectionner son format de sortie (JSON/POX/RSS/ATOM)
  • Éditer les requêtes HTTP

image image image

Cet outil bien que fort utile est limité en terme de recherche dans le Resource Model et de manipulation des LiveItem (création, édition et suppression). De plus en terme de visualisation, bien qu’un ordinateur n’aura pas de mal à lire des centaines de milliers de lignes de code (RSS, ATOM ou JSON), pour un humain c’est bien moins rapide, vite noyé dans la verbosité du langage et informations peu pertinentes !!!

C’est de là qu’est né, chez Wygwam, le besoin de disposer d’un outil permettant une représentation graphique du Resource Model de notre Live Operating Environment.

1er projet MOB : Mesh Object Browser

image Développé en Novembre 2008, Mesh Object Browser est une petite application Winform permettant de visualiser au travers d’une Treeview notre Resourcel Model avec la possibilité de pouvoir éditer nos LiveItem dans une grille de propriétés.

MOB n’est sortie qu’un mois après, en Janvier 2009, sur la plateforme CodePlex en code ouvert à l’adresse : http://mob.codeplex.com/

Pour citer le magazine Programmez! :

Il s’agit pour le développeur de naviguer rapidement et simplement dans les objets Mesh et leur contenu. Il aidera donc grandement le développeur Mesh. L’outil est écrit en C#. Créé à l’origine par Sébastien Warin (qui a victorieusement participé à ImagineCup 2008 France), il est aujourd’hui rendu disponible par l’équipe Wygwam. Il permet outre la navigation de gérer les contenus des objets. Parmi les objets supportés en Live Desktop ou en desktop local : contacts, profils, Mesh Objects, Devices et les News.

image

Retrouvez Mesh Object Browser :

2ème projet : Live Framework Explorer 1.0

MOB offrait une représentation graphique facile à comprendre avec la possibilité de pouvoir éditer facilement nos LiveItem. Mais certaines informations nécessitent encore le Live Framework Resource Explorer quand la représentation graphique ne suffisait plus.

Du point de vue du développeur, nous nous retrouvons avec trois programmes lancés systématiquement :

  • Visual Studio pour notre développement
  • Mesh Object Browser pour pouvoir avoir une représentation graphique rapide
  • Live Framework Resource Model pour pouvoir fouiller les propriétés cachées dans nos LiveItem

C’est donc suite à ce constat renforcé avec les feedbacks des utilisateurs de MOB que j’ai développé fin Janvier ce qui allait devenir le Live Framework Explorer.

image

Le Live Framework Explorer (ou LFE) est un addin à Visual Studio qui va permettre accéder à votre Resource Model directement depuis votre environnement de développement. En quelque sorte l’intégration de MOB dans Visual Studio.

 image

L’autre particularité de LFE comparé à MOB est son architecture extensible permettant d’enrichir les fonctionnalités de LFE par le développement de plugin.

L’un des premiers plugins développés est le "View in browser" qui permet, toujours depuis Visual Studio, de pouvoir ouvrir le flux du LiveItem sélectionné avec la possibilité de sélectionner le format de sortie. En clair, l’intégration du Live Framework Resource Browser comme plugin de LFE.

image

Cela permet donc d’unifier le LFRB et MOB dans un seul outil intégré lui-même à votre environnement de développement Visual Studio.

Depuis la beta 1 fin Janvier, d’autre plugin ont vu le jour comme la possibilité d’uploader/downloader des fichiers directement depuis LFE, d’ajouter, modifier et supprimer des LiveItem, d’inviter des membres sur un MeshObject, etc…

Annonce au MIX09 de Las Vegas

D’abord présenté aux équipes de Microsoft Corp. en la personne de James Senior, LFE a tout de suite suscité un grand intérêt auprès de Microsoft. Si bien que Microsoft m’a gentiment invité à passer 3 jours à Las Vegas à l’occasion du MIX, et a proposé à Gregory Renard (Redo) une session sur le LiveFX afin de lancer officiellement la sortie de LFE !

image image

Ce fut aussi pour moi, l’occasion pour moi de rencontrer quelques personnes culte chez Microsoft comme Scott Guthrie (Corporate Vice President, Microsoft .NET Developer Platform), Nikhil Kothari (software architect in the .NET Developer Platform group), James Senior (Live Services Evangelist), Bill Buxton (Principal Researcher Microsoft Research) et enfin Nigel Ellis (Principal Architect of Microsoft SQL Services)

Scott Guthrie (Corporate Vice President, Microsoft .NET Developer Platform) Nikhil Kothari (software architect in the .NET Developer Platform group)

James Senior (Live Services Evangelist) Bill Buxton (Principal Researcher Microsoft Research)

Nigel Ellis (Principal Architect of Microsoft SQL Services)

LFE en Beta 5 et code ouvert sur CodePlex

Depuis notre retour du MIX, LFE a encore évolué et est actuellement disponible en version Beta 5 sur CodePlex à l’adresse http://lfe.codeplex.com/

Téléchargement direct : http://lfe.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=26624

Liste des plugins à ce jour :

  • FileDownloadingPlugin : to download a LiveMeshFile
  • FileUploadingPlugin : to upload a LiveMeshFile in a LiveMeshFolder
  • LiveFxBrowserPlugin : a LiveFxBrowserResource integration to browse in HTTP your Mesh and custom easily the output format (JSON, RSS, ATOM or POX)
  • LiveItemEditorPlugin : to edit a resource in a PropertyGrid and update this content on your Mesh
  • CreateLiveItemPlugin : to create an LiveItem in a LiveItemCollection (the LiveItem is type of TMeshItem of the collection)
  • DeleteLiveItemPlugin : to remove a LiveItem from a LiveItemCollection
  • VSSettingsImportExportPlugin : to import/export Visual Studio Settings file in Mesh
  • AddInvitationPlugin : to share your MeshObject by sending invitation

Alors n’hésitez plus, au même titre que le Reflector est pour le développement .NET, Live Framework Explorer (LFE) est l’outil indispensable pour vos développements sur LiveFX :)

A voir aussi :

http://lfe.codeplex.com/

[LiveFX] Nouvelle CTP Avril 2009 du Live Framework : Updatez-vous !

Mercredi 18 mars 2009

Suite à mon précédent post, je vais tenter de vous donner plus amples informations sur la nouvelle CTP d’Avril 2009 du Live Framework. Pour rappel le Live Framework est une API permettant d’unifier l’accès aux services Live et en particulier au « Live Operating Environment« .

Le Live Operating Environment (LOE) est en quelque sorte votre ordinateur virtuel hebergé sur le Cloud Azure dans ce que l’on appelle le Live Desktop où vous retrouverez vos applications et données partageable avec n’importe qui et cela accessible depuis n’importe quel de vos devices (ordinateurs, laptop, smartphone, web,….) par des mécanismes de synchronisation assurant notamment le fonctionnement en mode déconnecté.

image

On retrouve LOE dans la version CTP de Live Mesh Tech Preview désormais accessible pour tout le monde (voir ma note du 14mars). Pour les habitués de la technologie Live Mesh Beta (http://www.mesh.com), Live Mesh Tech Preview (http://developer.mesh-ctp.com) est un peu la même à la différence :

  • Live Mesh Tech Preview ajoute la notion d’application, non seulement vos données sont synchronisées sur vos devices et partageable avec vos contacts, mais aussi vos applications. En terme d’usage, dès que vous installez une application dans votre Mesh celle ci est automatiquement installée sur tous vos devices avec la possibilité de partager l’instance à vos contacts. Comme chaque device connecté au Mesh héberge le cache local de votre LOE, les applications comme les données sont accessibles et modifiables en mode déconnecté et automatiquement synchronisées au retour de la connectivité.
  • Le LOE sur Live Mesh Tech Preview est accessible via un service RESTful à l’adresse  https://user-ctp.windows.net/. De part l’utilisation de protocoles standard Internet pour consommer le service (REST, XML/RSS/POX/JSON) le Live Operating Environment est accessible depuis n’importe quelle plateforme, n’importe quelle technologie.

Pour plus d’information sur le sujet, je vous conseille vivement la lecteur de ces quatre articles :

Revenons au vif du sujet : updatez-vous !

Installation de la nouvelle CTP

Tout d’abord pour ceux ayant déjà installé les Live Frameworks Tools, il vous faudra les désintaller avant avec votre Visual Studio fermé !

Vous pourrez ensuite installer le Live Framework Tools for Microsoft Visual Studio April 2009 CTP à télécharger ICI.

Ce package installera à la fois le SDK Live Framework et les extensions pour Visual Studio.

livefxCTPAvril

A la suite de l’installation, vous retrouverez cette CTP en version 0.91 dans votre %PROGRAMFILES%\Microsoft SDKs sous le dossier Live Framework. A ne pas confondre avec le dossier Live Framework SDK qui est l’ancienne version (0.9) que vous pouvez supprimer si vous le souhaitez !

image 

Aussi je vous invite à vérifier la version de votre Live Framework Client qui doit être en version 0.9.3904.1 (à la date de publication de cet article !).

image

Si ce n’est pas le cas, il faudra supprimer votre device de votre Live Desktop et désintaller le Live Framework Client. Vous pourrez ensuite ré-ajouter votre device.

Notez que maintenant Live Mesh Beta et Live Mesh Tech Preview peuvent désormais tourner côte à côte.

Que contient cette CTP et quelles sont les nouveautés ?

Comme la version 0.9, cette nouvelle version contient :

  • Les librairies du Live Framework pour .NET, Silverlight et JS
  • Des exemples
  • L’outil Live Framework Resource Browser, un navigateur web spécialisé pour parcourir le LOE
  • Nouveautés : des codes snippets pour Visual Studio pour
    • Créer une connexion au LOE
    • Créer un MeshObject, DataFeed et DataEntry
    • Créer une Query et énumérer une LiveItemCollection

image 

Concernant les nouveautés de cette nouvelle CTP, on notera :

  • Support de Windows 7 et IE 8
  • Le support des Resources Script dans les applications SL et sur le Local LOE
  • Un seul installeur pour le SDK et les outils/extensions VS
  • Ameiloration de la stabilité et performance du client LOE
  • Messages d’erreurs plus explicite
  • Des code snippets pour C#
  • Et une série de mise à jour / correction de bugs

Quelques « breaking changes » dans votre code à corriger !

Si vous avez déjà développé avec le Live Framework, en updatant la librairie .NET avec cette nouvelle version 0.91, votre code risque de ne plus compiler ! Et pour cause, voici les trois principals « breaking changes » dans cette nouvelle CTP :

UserState pour les méthodes Async

Voici le genre d’erreur que vous allez rencontrer : « UpdateAsync/AddAsync take X arguments »

err3 err1

En effet, ces méthodes demandent en paramètre un object nommé « userState » afin de pouvoir passer un objet dans une tache asynchrone. Ce paramètre était jusque là facultatif voir inexistant. Si vous n’en avez pas l’utilité, passez un « null » :)

Le type MIME

Pour ajouter un DataEntry à un DataFeed, nous utilisions la méthode Add (ou AddAsync) de l’objet DataEntryCollection où nous lui passons le stream de notre fichier ainsi que le « slug« , c’est a dire le nom du fichier tel qu’il sera exposé sur le service du LOE.

Le problème est que maintenant un troisième paramètre est requis : le type MIMME du fichier. Il vous faudra donc le renseigner où le laisser à string.Empty si vous ne vous en souciez pas !

err2

ConnectLocal n’existe plus

Avant, pour se connecter sur le LOE local, c’est a dire « hébergé » par notre device via le Live Framework Client, nous utilisions dans notre code la méthode ConnectLocal().

Étonnamment, à la compilation, cette méthode est marquée comme inexistante ! En analysant cette nouvelle CTP au Reflector, nous apprenons que cette méthode est devenue « privée » !

image

Bien entendu cette nouvelle CTP ne supprime pas la possibilité de se connecter sur le client local (Local Desktop), mais la méthode est un peu différente. En effet, on retrouve l’appel de la méthode ConnectLocal dans la méthode Connect :

 connectrlocal2

En fait, maintenant, pour se connecter en local, il suffit juste d’appeler la méthode Connect (ou ConnectAsync) en passant « null » comme credential :

image

En vous souhaitant une bonne « méshification » :)

[LiveFx] Nouvelle CTP du Live Framework pour TOUS !

Samedi 14 mars 2009

Et oui, depuis la sortie de la nouvelle CTP du Live Framework plus besoin d’avoir une invitation (token) pour pouvoir créer son compte sur Live Mesh Tech Preview ! Maintenant tout le monde peut développer ses applications à l’aide du Live Framework.

Pour cela rien de plus simple, rendez-vous sur https://lx.azure.microsoft.com/Cloud/Provisioning en vous identifiant avec votre Live ID.

Dans la page « Add Project », vous trouverez le lien pour activer votre compte :

lx

Observez le token :)

tokenFree

Et en deux cliques votre compte est activé,

invitOK

Vous disposerez alors de 25 projets pour développer des applications Mesh:

 OK2

… ainsi que d’un accès au Live Mesh Tech Preview : https://developer.mesh-ctp.com/ (adresse du service REST : https://user-ctp.windows.net/). Pour le SDK et les Tools en CTP Avril 2009 c’est ici !

A bientôt dans un prochain post sur les nouveautés de cette CTP :)