Pierre's Embedded and Mobile Blog

Soulevons le capot des systèmes embarqués et mobiles

May, 2011

Posts
  • Pierre's Embedded and Mobile Blog

    Mise à jour du Windows Azure toolkit for Windows Phone 7: profitez du One-Month Pass pour l’essayer !

    • 0 Comments

    Un mois seulement après la sortie de la première version, voilà que la nouvelle version du kit de développement Windows Azure Toolkit for Windows Phone 7 a été mise à jour.  Ce SDK rappelons le inclus dans un seul template de projet les roles azure et l’application Windows Phone préconfigurées pour communiquer entre eux (storage accounts, etc). Les nouveautés de cette version 1.2 incluent le support de Windows Azure Access Control Service, un support total des Queues et un frontal web revampé.

    Pour le tester, n’hésitez pas à utiliser l’offre “One Month Pass” qui permet de bénéficier, pendant 1 mois et sans même rentrer son numéro de carte bleue, de 3 instances Azure, 10Go de stockage, 2 bases de données SQL AZure et 10Go de transferts entrants et sortants… bref, de quoi s’amuser Sourire Les liens utiles ci dessous:

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] la CTP Async par l’exemple: ça apporte quoi?

    • 2 Comments

    Lors du MIX11 il a été annoncé que la nouvelle CTP Async de Visual Studio supportait Windows Phone 7. Async est un framework qui apporte quelques éléments qui simplifient grandement la programmation asynchrone. Or comme on le sait quand on y a un peu touché, la très grande majorité des API du SDK Windows Phone sont asynchrones. Le problème du code asynchrone est qu’il est en général assez moche à regarder: ce n’est pas vraiment lisible, on passe en permanence d’une méthode à une autre, en induisant souvent des confusions et des problèmes d’accès entre threads, des delegate et des méthodes anonyme de partout, ça devient vite un gros plat de spaghetti.

    Sans en faire un tour complet un peu long, il suffit de s’intéresser aux deux mots clefs apportés par cette CTP Async pour en comprendre la génialitude: async, et await. Ces deux mots clefs permettent d’écrire de façon séquentielle un code asynchrone. Pour faire un exemple simple, nous allons prendre pour exemple un simple appel à un WebClient pour le classique client Twitter qui semble avoir remplacé ce bon vieux Hello World…

    Normalement, voila comment on écrit un appel à WebClient: on l’instancie, on s’abonne à l’évènement de complétion du téléchargement, et ensuite on lance le téléchargement. Le code qui est associé à l’event handler de complétion s’exécutera quand le téléchargement sera fini, et donc ça ressemble à ça:

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        WebClient wc = new WebClient();
        wc.DownloadStringCompleted += new DownloadStringCompletedEventHandler(wc_DownloadStringCompleted);
        wc.DownloadStringAsync(new Uri("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=pierreca"));
    }
    
    void wc_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
    {
        listBox1.ItemsSource = from tweet in XElement.Parse(e.Result).Descendants("status")
                                select new Tweet()
                                {
                                    PictureUrl = tweet.Element("user").Element("profile_image_url").Value.ToString(),
                                    Text = tweet.Element("text").Value.ToString(),
                                    UserName = tweet.Element("user").Element("screen_name").Value.ToString()
                                };
    }

    Maintenant avec la CTP Async on peut utiliser les mots clefs async et await pour tout écrire d’un seul bloc linéaire. D’abord on commence par signaler qu’une méthode va contenir du code asynchrone en la préfixant du mot clef async. Ensuite dans le corps de la méthode on utilise le mot clef await pour signaler que tout ce qui suivra l’appel préfixé de await sera exécuté au retour de cet appel… comme si le code était bloquant, sauf qu’il ne l’est pas Sourire Le bout de code suivant est donc équivalent au précédent:

    private async void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        WebClient wc = new WebClient();
        var items = await wc.DownloadStringTaskAsync(new Uri("http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=pierreca"));
    
        listBox1.ItemsSource = from tweet in XElement.Parse(items).Descendants("status")
                                select new Tweet()
                                {
                                    PictureUrl = tweet.Element("user").Element("profile_image_url").Value.ToString(),
                                    Text = tweet.Element("text").Value.ToString(),
                                    UserName = tweet.Element("user").Element("screen_name").Value.ToString()
                                };
    }

    Beaucoup plus lisible à mon humble avis!

    Les plus observateurs d’entre vous auront remarqué un changement que je n’ai pas signalé… on appelle maintenant la méthode WebClient.DownloadStringTaskAsync plutôt que WebClient.DownloadStringAsync. C’est une méthode d’extension qui est amené par la CTP et qui est renvoie Task<string>.. au lieu de void! En effet, il faut bien pouvoir récupérer le résultat de cet appel à await… qui va générer une Task dont le résultat est une chaine de caractères… l’utilisation de async et await n’est donc pas complètement transparente dans votre code: il faudra également modifier un peu vos prototypes de méthodes mais c’est le prix à payer pour bénéficier de l’élégance de ces nouveaux mots clefs!

    Maintenant que vous êtes convaincus que cette CTP est géniale, sachez que vous pouvez la télécharger ici. Attention à bien prendre la version “Refresh” pour être compatible avec le SP1 de Visual Studio Sourire Ensuite dans vos projets, n’oubliez pas de référencer l’assembly AsyncCtpLibrary_Phone.dll qui se trouve dans votre dossier documents, dans \Microsoft Visual Studio Async CTP\Samples.

    Quid de Rx?

    Rx et Async sont bien deux frameworks permettant d’écrire élégamment du code asynchrone, mais ils ne sont pas du tout voués aux même usages. Rx implémente le pattern duale de l’IEnumerable à savoir l’IObservable : au lieu d’itérer activement dans une collection, on s’abonne aux ajouts d’éléments dans cette collection. Rx permet donc de gérer des suites d’évènements et avec une syntaxe fonctionnelle commence même à ressembler à une espèce de “Linq to Events”. L’utilité de Rx est donc dans la gestion de scénarii asynchrones complexes impliquant par exemple plusieurs sources d’évènements, le besoin de gérer l’élément temps, etc. La CTP async a un but beaucoup plus modeste: tout simplement simplifier l’écriture du code et en améliorer la lisibilité.

  • Pierre's Embedded and Mobile Blog

    Après-Midi du développement XNA le 13 Mai au Campus Microsoft

    • 0 Comments

    Venez nous retrouver l’après-midi du 13 Mai sur le campus Microsoft à Issy-les-Moulineaux, pour un après-midi du développement sur XNA! Après Windows Phone 7, la Programmation Asynchrone, Entity Framework (publication des webcasts sous très peu), découvrez les bases du développement 3D et de jeu, sur PC, Xbox360 et Windows Phone 7:

    XNA dans tous ses états : La 3D à portée de code

    Tout au long de cet après-midi nous allons découvrir à la fois les bases et les notions de la 3D accélérée puis nous verrons la mise en œuvre de ces concepts en utilisant la technologie XNA sur un large éventail de plateformes : PC, Silverlight 5, Windows Phone 7 et Xbox. C’est XNA everywhere !

    Les speakers :

    • David CATUHE
    • Valentin BILLOTTE
    • Simon FERQUEL

    Date : 13 mai 2011, 14h-18h

    Lieu : Campus Microsoft
    41 Quai du Président Roosevelt - Centre de conférences Microsoft Issy-les-Moulineaux, France

      

    Vu ce qui arrive dans le futur SDK Mango de Windows Phone 7 je vous conseille fortement de vous mettre un peu à la 3D… Smile

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Un site sur l'interopérabilité et à destination des développeurs des plateformes concurrentes

    • 0 Comments

    Une ressource de plus intéressante à suivre, un site dédié à l’interopérabilité avec Windows Phone 7… Le mot “interopérabilité” étant à prendre avec des pincettes, car il ne s’agit pas ici d’ouverture de spécifications de l’OS, mais plutôt des manières de profiter, pour les développeurs Android, iPhone, etc, du travail qu’ils ont fait sur leurs plateformes de prédilection pour en profiter lors du portage de leur(s) applications(s) sur Windows Phone 7. On y retrouve notamment l’excellent tutorial de Jesse Liberty (le Windows Phone 7 Guide for iPhone Application Developers) et on verra très vraisemblablement du contenu similaire sur Android arriver. Gageons qu’il y aura aussi très vite du contenu HTML5 étant donné que la future version d’Internet Explorer 9 pour Windows Phone 7 devrait en avoir un support exemplaire…

    Un article très détaillé sur le sujet, sur le blog officiel de l’équipe de dev Windows Phone 7

Page 1 of 1 (4 items)