<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Pierre's Embedded and Mobile Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/pierreca/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/pierreca/feed.xml</link>
    <description>Soulevons le capot des systèmes embarqués et mobiles</description>
    <lastBuildDate>Tue, 16 Apr 2019 05:24:19 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Windows Phone 8: les premiers articles techniques de la communauté</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/windows-phone-8-les-premiers-articles-techniques-de-la-communaut</link>
      <pubDate>Mon, 05 Nov 2012 05:02:03 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/11/05/windows-phone-8-les-premiers-articles-techniques-de-la-communaut/</guid>
      <description><![CDATA[Voila quelques jours que le SDK Windows Phone 8 est disponible et la communauté a déjà été très...]]></description>
      <content:encoded><![CDATA[<p>Voila quelques jours que le SDK Windows Phone 8 est disponible et la communauté a déjà été très active pour publier des articles détaillant les nouvelles fonctionnalités de celui-ci… Voici un petit billet pour lister ceux que j’ai trouvé (et que je mettrai à jour au fur et à mesure, n’hésitez pas à commenter).</p>  <p>La série de <a href="http://www.juliencorioland.net/">Julien Corioland</a> qui était à Build 2012</p>  <ul>   <li><a title="http://www.juliencorioland.net/archives/build-2012-windows-phone-8-application-model#.UJev7eXLSUk" href="http://www.juliencorioland.net/archives/build-2012-windows-phone-8-application-model#.UJev7eXLSUk">Windows Phone 8 Application Model</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/2-013" href="https://channel9.msdn.com/Events/Build/2012/2-013">https://channel9.msdn.com/Events/Build/2012/2-013</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-windows-phone-8-native-cpp-game-development#.UJev4-XLSUk">Windows Phone 8 Native C/C++ Game Development</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/3-046" href="https://channel9.msdn.com/Events/Build/2012/3-046">https://channel9.msdn.com/Events/Build/2012/3-046</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-partage-de-code-entre-windows-phone-8-et-windows-8#.UJev3OXLSUk">Partage de code entre Windows Phone 8 et Windows 8</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/3-043" href="https://channel9.msdn.com/Events/Build/2012/3-043">https://channel9.msdn.com/Events/Build/2012/3-043</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-windows-phone-8-in-app-purchase#.UJev1-XLSUk">Windows Phone 8 In App Purchase</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/2-016" href="https://channel9.msdn.com/Events/Build/2012/2-016">https://channel9.msdn.com/Events/Build/2012/2-016</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-developpement-dapplications-connectees-sous-windows-phone-8#.UJev0uXLSUk">Développement d’applications connectées sous Windows Phone 8</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/3-047" href="https://channel9.msdn.com/Events/Build/2012/3-047">https://channel9.msdn.com/Events/Build/2012/3-047</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-maps-geolocalisation-et-execution-en-arriere-plan#.UJevv-XLSUk">Maps, géolocalisation et exécution en arrière plan</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/2-017" href="https://channel9.msdn.com/Events/Build/2012/2-017">https://channel9.msdn.com/Events/Build/2012/2-017</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/build-2012-windows-phone-8-tiles-et-notifications#.UJevteXLSUk">Windows Phone 8: Tiles &amp; Notifications</a> (et la session correspondante: <a title="https://channel9.msdn.com/Events/Build/2012/2-019" href="https://channel9.msdn.com/Events/Build/2012/2-019">https://channel9.msdn.com/Events/Build/2012/2-019</a>)</li>    <li><a href="http://www.juliencorioland.net/archives/windows-phone-8-utilisation-du-proximitydevice-nfc#.UJevruXLSUk">Windows Phone 8: Utilisation du Proximity Device NFC</a></li>    <li><a href="http://www.juliencorioland.net/archives/windows-phone-8-ecrire-un-tag-nfc-et-lancement-dune-application-via-nfc#.UJevp-XLSUk">Windows Phone 8: Ecrire un tag et lancement d’une application via NFC</a></li> </ul>  <p>&#160;</p>  <p>Du coté de chez <a href="http://www.rudyhuyn.com/blog/">Rudy Huyn</a>:</p>  <ul>   <li><a href="http://www.rudyhuyn.com/blog/2012/10/31/bien-commencer-avec-azure-mobile-services-sur-windows-phone/">Bien commencer avec Azure Mobile Services pour Windows Phone</a></li>    <li><a href="http://www.rudyhuyn.com/blog/2012/10/31/windows-phone-8-et-la-compilation-dans-le-nuage/">Windows Phone 8 et la compilation dans le nuage</a></li>    <li><a href="http://www.rudyhuyn.com/blog/2012/10/30/donnez-une-tuile-8-0-a-votre-application-7-5/">Donnez une tuile 8.0 à votre application 7.5</a></li>    <li><a href="http://www.rudyhuyn.com/blog/2012/10/30/les-nouvelles-tuiles-de-windows-phone-8/">Les nouvelles vignettes dynamiques Windows Phone 8</a></li>    <li><a href="http://www.rudyhuyn.com/blog/2012/10/30/gerer-les-differentes-resolutions-de-splashscreen-sous-windows-phone-8/">Gérer les différentes résolutions de SplashScreen sous Windows Phone 8</a></li> </ul>  <p>&#160;</p>  <p>Du coté de chez SOAT:</p>  <ul>   <li><a title="http://blog.soat.fr/2012/11/windows-phone-8-nouveau-sdk-nouveaux-outils/" href="http://blog.soat.fr/2012/11/windows-phone-8-nouveau-sdk-nouveaux-outils/">Windows Phone 8: Nouveau SDK, Nouveaux Outils</a></li> </ul>  <p>&#160;</p>  <p>De la part de <a href="http://blog.naviso.fr/wordpress/">Samuel Blanchard</a>:</p>  <ul>   <li><a title="http://blog.naviso.fr/wordpress/?p=1573" href="http://blog.naviso.fr/wordpress/?p=1573">Text To Speech et Accessibilité dans Windows Phone 8</a></li> </ul>  <p>&#160;</p>  <p>Par <a href="http://www.guruumeditation.net/">Olivier Matis</a>:</p>  <ul>   <li><a href="http://www.guruumeditation.net/blog/reconnaissance-vocale-multi-language-avec-windows-phone-8">Reconnaissance Vocale Multi-langages avec Windows Phone 8</a></li> </ul>  <p>&#160;</p>  <p>J’en profite pour remettre les miens:</p>  <ul>   <li><a href="http://blogs.msdn.com/b/pierreca/archive/2012/10/30/le-sdk-windows-phone-8-est-disponible.aspx">Les outils et les liens utiles pour le SDK Windows Phone 8</a></li>    <li><a href="http://blogs.msdn.com/b/pierreca/archive/2012/10/31/windows-phone-8-faites-le-plein-de-nouveaut-233-s-rapide-224-int-233-grer-dans-votre-application.aspx">Les nouveautés du SDK Windows Phone 8 avec des exemples de code</a></li> </ul>  <p>&#160;</p>  <p>Et du coté de la communauté anglophone, il y a des ressources immanquables:</p>  <ul>   <li><a href="http://blogs.msdn.com/b/interoperability/archive/2012/10/30/added-support-for-wp8-in-apache-cordova-sencha-touch-and-other-open-source-frameworks.aspx">Le support des frameworks PhoneGap, Sencha Touch, Ogre3D, etc</a></li>    <li><a href="http://www.developer.nokia.com/Community/Wiki/What's_new_in_Windows_Phone_8">Le résumé des nouveautés du SDK illustrées par Nokia</a></li>    <li><a href="https://channel9.msdn.com/events/build/2012?sort=sequential&amp;direction=desc&amp;term=&amp;t=windows-phone&amp;t=windows-phone-apps">Les sessions de la Build 2012 sur Windows Phone 8</a></li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8: Faites le plein de nouveautés rapide à intégrer dans votre application</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/windows-phone-8-faites-le-plein-de-nouveauts-rapide-intgrer-dans-votre-application</link>
      <pubDate>Wed, 31 Oct 2012 09:39:50 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/10/31/windows-phone-8-faites-le-plein-de-nouveauts-rapide-intgrer-dans-votre-application/</guid>
      <description><![CDATA[Windows Phone 8 offre un grand nombre de nouvelles APIs qui vont permettre aux développeurs de...]]></description>
      <content:encoded><![CDATA[<p>Windows Phone 8 offre un grand nombre de nouvelles APIs qui vont permettre aux développeurs de proposer de nouvelles expériences à leurs utilisateurs, et améliorer grandement l’intégration dans l’OS. Le but de cet article est de faire le tour des plus faciles et rapides à intégrer.</p>  <h3>Ou sont les outils ?</h3>  <p>Tous les liens importants sont listés dans cet article, alors lancez les téléchargements/installations pendant que vous lisez cet article !</p>  <p><a href="http://blogs.msdn.com/b/pierreca/archive/2012/10/30/le-sdk-windows-phone-8-est-disponible.aspx">Les liens utiles du SDK Windows Phone 8</a></p>  <h3>Que faire du code existant ?</h3>  <p>Réponse courte : on peut tout garder ! 100% des API de Windows Phone 7.0/7.1 sont présentes dans Windows Phone 8. Ceci étant dit, le passage à une nouvelle version et l’ajout de fonctionnalités est souvent l’occasion de ré-architecturer un peu son code. Pourquoi ne pas le rendre plus portable, par exemple pour être présent aussi sous Windows 8 ? Pour cela je vous réfère à la série d’articles sur le portage et le partage de code entre Windows 8 et Windows Phone :</p>  <p><a href="http://blogs.msdn.com/b/pierreca/archive/2012/05/28/strat-233-gies-et-techniques-de-partage-de-code-c-et-xaml-entre-windows-phone-et-windows-8-consumer-preview-partie-1-introduction-les-diff-233-rences-entre-les-plateformes-224-avoir-en-t-234-te.aspx">Stratégies et Techniques de Partage et de Portage de code entre Windows Phone et Windows 8</a></p>  <p>Que vous décidiez de modifier votre code existant ou pas, vous pouvez par ailleurs tester votre application sur un Windows Phone 8 et constater que sans rien changer, elle fonctionne, voire noter un gain de performance significatif, principalement dû au nouveau matériel, et aux optimisations réalisées sur l’OS et le Runtime.</p>  <h3>Si vous préférez un document offline et l’application exemple:</h3>  <p>Voici le lien vers le dossier Skydrive contenant les deux:</p>  <p><a title="http://sdrv.ms/Sx5VsO" href="http://sdrv.ms/Sx5VsO"><font size="4"><strong>http://sdrv.ms/Sx5VsO</strong></font></a></p>  <h3>&#160;</h3>  <h3>Quels sont les nouveaux scénarios possibles ?</h3>  <p>Passons maintenant aux nouveaux scénarios, que nous allons étudier en commençant par les plus rapides à intégrer (de l’ordre de quelques minutes !!) et en poussant vers les plus compliqués.</p>  <h4>En moins d’une heure…</h4>  <p>Vous pourrez avoir intégrer des nouvelles vignettes dynamiques, animées, et de différentes tailles, et de l’intégration sur l’écran de verrouillage. Vous pourrez également profiter des nouveaux launchers et choosers, de l’expérience Nokia Maps, des fonctionnalités de reconnaissance et synthèse vocales, d’un gain de performance non négligeable sur le LongListSelector… et aussi éventuellement revoir vos layouts et vos assets pour les nouvelles résolutions J</p>  <h4>En une demi-journée…</h4>  <p>Associez votre application à des types de fichiers ou des schémas d’URL, devenez une application « Lens » intégrée à l’appareil photo, ou bien un fournisseur de contact pour le hub contacts/people. Profitez de la nouvelle option de géolocalisation en background. Monétisez votre contenu et les bonus de vos applications avec les nouvelles options d’achat In-App. </p>  <h4>Et pour aller plus loin…</h4>  <p>Intégrez de nouvelles fonctionnalités ou du code existant avec le nouveau modèle de développement en C++, tirez parti de la technologie NFC pour s’identifier, payer ou établir une communication entre 2 appareils et profiter ensuite du Bluetooth ou du Wifi pour échanger des données, Intégrez-vous au wallet pour offrir à l’utilisateur d’y retrouver ses cartes de fidélité, cartes de membres, et éventuellement des coupons de réduction… Autoriser l’application à tourner 100% du temps en background pour faire de la géolocalisation… Ces points-là méritent des articles à part entière, nous ne les traiterons donc pas dans cet article-ci.</p>  <h1>Passons à la pratique</h1>  <h4>Les nouvelles vignettes dynamiques</h4>  <p>Le nouvel écran d’accueil supporte 3 tailles de vignettes : </p>  <ul>   <li>Les petites, d’environ ¼ de la taille des vignettes « normales »</li>    <li>Les vignettes carrées, auxquelles nous étions déjà habituées</li>    <li>Les vignettes larges, qui font la taille de deux vignettes carrées</li> </ul>  <p>Avec ces nouvelles tailles viennent de nouveaux modèles, à l’instar des vignettes de Windows 8, qui permettent d’animer (ou pas) votre vignette principale et les vignettes secondaires.</p>  <ul>   <li><strong>StandardTile</strong>, qui permet d’avoir une icône, un titre, éventuellement du texte au dos, et un compteur</li>    <li><strong>FlipTile</strong>, qui se retournera aléatoirement et supporte des contenus sur l’avant et l’arrière de la vignette.</li>    <li><strong>CycleTile</strong>, qui permettra de faire défiler verticalement du contenu (texte ou photos)</li>    <li><strong>IconicTile</strong>, qui mettra en valeur votre icône et éventuellement du texte ou un compteur associé.</li> </ul>  <p>&#160;</p>  <p>Chacun de ces modèles existe dans les formats normaux et larges, le petit format étant déduit du premier. A chaque modèle est associé une structure de donnée contenant le texte et éventuellement l’adresse des images qu’on veut afficher, il s’agit des classes héritant de la classe abstraite ShellTileData.</p>  <p>Comme avant, on pourra donc créer une telle structure de donnée, la remplir avec les informations à afficher, et créer une nouvelle vignette correspondante en appelant la méthode ShellTile.Create( …) pour une nouvelle tuile secondaire, ou bien la méthode Update() pour les vignettes existantes.</p>  <p>&#160;</p>  <pre class="code"><font size="2"><span style="background: white; color: rgb(43, 145, 175);">FlipTileData </span><span style="background: white; color: black;">ftd = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">FlipTileData</span><span style="background: white; color: black;">();
ftd.Title = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Flip Tile Title&quot;</span><span style="background: white; color: black;">;
ftd.Count = 42;
ftd.BackBackgroundImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileMedium.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
ftd.WideBackContent = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Flip Tile Wide Back Content&quot;</span><span style="background: white; color: black;">;
ftd.WideBackBackgroundImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileLarge.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
ftd.SmallBackgroundImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileSmall.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);

</span><span style="background: white; color: rgb(43, 145, 175);">ShellTile</span><span style="background: white; color: black;">.Create(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/TilesAPI.xaml&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative), ftd, </span><span style="background: white; color: blue;">true</span><span style="background: white; color: black;">);</span></font></pre>

<pre class="code"><span style="background: white; color: black;"><font size="2"></font></span></pre>

<pre class="code"><span style="background: white; color: black;"><font size="2"></font></span></pre>

<p><font size="2"></font></p>

<pre class="code"><font size="2"><span style="background: white; color: rgb(43, 145, 175);">IconicTileData </span><span style="background: white; color: black;">itd = </span><span style="background: white; color: blue;">new  </span><span style="background: white; color: rgb(43, 145, 175);">IconicTileData</span><span style="background: white; color: black;">();
itd.BackgroundColor = </span><span style="background: white; color: rgb(43, 145, 175);">Colors</span><span style="background: white; color: black;">.DarkGray;
itd.Title = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Iconic Tile Title&quot;</span><span style="background: white; color: black;">;
itd.IconImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/IconicTileMediumLarge.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
itd.SmallIconImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/IconicTileSmall.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
itd.Count = 42;
itd.WideContent1 = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Wide Content 1&quot;</span><span style="background: white; color: black;">;
itd.WideContent2 = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Wide Content 2&quot;</span><span style="background: white; color: black;">;
itd.WideContent3 = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Wide Content 3&quot;</span><span style="background: white; color: black;">;

</span><span style="background: white; color: rgb(43, 145, 175);">ShellTile</span><span style="background: white; color: black;">.Create(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/TilesAPI.xaml&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative), itd, </span><span style="background: white; color: blue;">true</span><span style="background: white; color: black;">);</span></font></pre>

<p><font size="2"></font></p>

<pre class="code"><font size="2"><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">images = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">List</span><span style="background: white; color: black;">&lt;</span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">&gt;();
images.Add(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileLarge.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative));
images.Add(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileMedium.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative));
images.Add(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileSmall.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative));

</span><span style="background: white; color: rgb(43, 145, 175);">CycleTileData </span><span style="background: white; color: black;">ctd = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">CycleTileData</span><span style="background: white; color: black;">();
ctd.Count = 42;
ctd.CycleImages = images;
ctd.SmallBackgroundImage = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/Tiles/FlipCycleTileSmall.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
            
ctd.Title = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Cycle Tile Title&quot;</span><span style="background: white; color: black;">;
            
</span><span style="background: white; color: rgb(43, 145, 175);">ShellTile</span><span style="background: white; color: black;">.Create(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/TilesAPI.xaml&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative), ctd, </span><span style="background: white; color: blue;">true</span><span style="background: white; color: black;">);</span></font></pre>



<h4>Changer le contenu de l’écran de verrouillage</h4>

<p>Une nouvelle API de Windows Phone 8 permet de changer l’image de fond de l’écran de verrouillage, ainsi que les 3 lignes de texte qui apparaissent sous l’heure, et éventuellement un compteur avec une mini-icône, comme les applications mails.</p>

<p>Le changement de l’image de fond se fait en appelant d’abord l’API du LockScreenManager pour récupérer l’autorisation de changer celui-ci, puis il suffit de lui indiquer l’URL (locale) de l’image à utiliser. Moins de 10 lignes de code :</p>

<p>&#160;</p>

<pre class="code"><font size="2"><span style="background: white; color: blue;">try
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(!</span><span style="background: white; color: rgb(43, 145, 175);">LockScreenManager</span><span style="background: white; color: black;">.IsProvidedByCurrentApplication)
    {
        </span><span style="background: white; color: blue;">await </span><span style="background: white; color: rgb(43, 145, 175);">LockScreenManager</span><span style="background: white; color: black;">.RequestAccessAsync();
    }

    </span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">LockScreenManager</span><span style="background: white; color: black;">.IsProvidedByCurrentApplication)
    {
        </span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">imageUri = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;ms-appx:///Assets/wpbackground.png&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.RelativeOrAbsolute);
        Windows.Phone.System.UserProfile.</span><span style="background: white; color: rgb(43, 145, 175);">LockScreen</span><span style="background: white; color: black;">.SetImageUri(imageUri);
    }
}
</span><span style="background: white; color: blue;">catch </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">Exception </span><span style="background: white; color: black;">ex)
{
    </span><span style="background: white; color: green;">// Handle exception
</span><span style="background: white; color: black;">}</span></font></pre>

<pre class="code"><font size="2"><span style="background: white; color: black;"></span></font></pre>

<p>Pour ce qui est du texte et éventuellement du compteur, en fait c’est encore plus simple (et logique) : le lockscreen reprendra le texte et le compteur de la vignette dynamique principale de l’application. Il faut donc que l’application soit épinglée sur l’écran d’accueil et que l’utilisateur ait choisi d’avoir ces notifications sur son écran de verrouillage.</p>

<h4>Devenir un Store de contacts</h4>

<p>Avec la version précédente du SDK, il était possible d’accéder à la liste de contacts (avec des API LINQ) en lecture seule, et éventuellement d’écrire dans un store existant, avec le launcher SaveContactTask.</p>

<p>Il est maintenant possible de devenir un fournisseur de contacts, au même titre que les réseaux sociaux ou de comptes mails existants nativement. Il faut commencer par créer (ou ouvrir, s’il est déjà créer) le store de contacts propre à l’application :</p>

<pre class="code"><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">store = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: rgb(43, 145, 175);">ContactStore</span><span style="background: white; color: black;">.CreateOrOpenAsync();</span></pre>


<p>Ensuite, on peut y faire des requêtes, pour par exemple afficher la liste des contacts déjà enregistrés par l’application :</p>

<pre class="code"><span style="background: white; color: rgb(43, 145, 175);">ContactQueryResult </span><span style="background: white; color: black;">cqr = store.CreateContactQuery();
</span><span style="background: white; color: rgb(43, 145, 175);">IReadOnlyList</span><span style="background: white; color: black;">&lt;</span><span style="background: white; color: rgb(43, 145, 175);">StoredContact</span><span style="background: white; color: black;">&gt; contacts = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">cqr.GetContactsAsync();
</span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(contacts.Count &gt; 0)
    Dispatcher.BeginInvoke(() =&gt; lbxContacts.DataContext = contacts.ToList());</span></pre>



<p>Enfin, on peut ajouter de nouveaux contacts simplement:</p>

<p>&#160;</p>

<pre class="code"><span style="background: white; color: rgb(43, 145, 175);">StoredContact </span><span style="background: white; color: black;">c = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">StoredContact</span><span style="background: white; color: black;">(store);
c.DisplayName = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;John Doe&quot;</span><span style="background: white; color: black;">;
            

</span><span style="background: white; color: rgb(43, 145, 175);">IDictionary</span><span style="background: white; color: black;">&lt;</span><span style="background: white; color: blue;">string</span><span style="background: white; color: black;">, </span><span style="background: white; color: blue;">object</span><span style="background: white; color: black;">&gt; props = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">c.GetPropertiesAsync();
props.Add(</span><span style="background: white; color: rgb(43, 145, 175);">KnownContactProperties</span><span style="background: white; color: black;">.Email, </span><span style="background: white; color: rgb(163, 21, 21);">&quot;john@doe.com&quot;</span><span style="background: white; color: black;">);
props.Add(</span><span style="background: white; color: rgb(43, 145, 175);">KnownContactProperties</span><span style="background: white; color: black;">.MobileTelephone, </span><span style="background: white; color: rgb(163, 21, 21);">&quot;118218&quot;</span><span style="background: white; color: black;">);
            
</span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">c.SaveAsync();</span></pre>



<p>Facile, et on obtient ensuite une fiche contact dans le hub avec lequel l’utilisateur peut interagir, et éventuellement la lier aux autres fiches qu’il aurait de différentes sources sur le même contact :</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/1050.wp_ss_20121031_0001_462E437D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/1050.wp_5F00_ss_5F00_20121031_5F00_0001_5F00_462E437D.png"><img title="wp_ss_20121031_0001" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="wp_ss_20121031_0001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/6431.wp_ss_20121031_0001_thumb_6A7327FF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/6431.wp_5F00_ss_5F00_20121031_5F00_0001_5F00_thumb_5F00_6A7327FF.png" width="288" height="483" /></a></p>

<p>&#160;</p>

<h4>S’intégrer au calendrier</h4>

<p>En plus des alarmes et des rappels, qui permettaient d’imiter l’expérience native du réveil ou du calendrier pour rappeler à l’utilisateur un évènement, et en plus de l’accès en lecture seule au calendrier, l’arrivée de Windows Phone 8 rajoute un launcher qui permet de sauvegarder un évènement dans le calendrier :</p>

<pre class="code"><span style="background: white; color: rgb(43, 145, 175);">SaveAppointmentTask </span><span style="background: white; color: black;">sat = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">SaveAppointmentTask</span><span style="background: white; color: black;">();
sat.StartTime = </span><span style="background: white; color: rgb(43, 145, 175);">DateTime</span><span style="background: white; color: black;">.Now + </span><span style="background: white; color: rgb(43, 145, 175);">TimeSpan</span><span style="background: white; color: black;">.FromDays(1);
sat.Details = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Details of the appointment&quot;</span><span style="background: white; color: black;">;
sat.Subject = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Appointment generated from an app&quot;</span><span style="background: white; color: black;">;
sat.EndTime = sat.StartTime + </span><span style="background: white; color: rgb(43, 145, 175);">TimeSpan</span><span style="background: white; color: black;">.FromHours(2);

sat.Location = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;location&quot;</span><span style="background: white; color: black;">;
sat.Show();</span></pre>



<h4>Rajouter le partage de photos/vidéos sur les réseaux sociaux</h4>

<p>A l’instar des ShareLinkTask et ShareStatusTask qui permettent, depuis Windows Phone 7.5, de partagere des liens et des statuts sur les réseaux sociaux, la nouvelle ShareMediaTask va permettre de partager des photos et des vidéos.</p>

<p>&#160;</p>

<pre class="code"><span style="background: white; color: rgb(43, 145, 175);">ShareMediaTask </span><span style="background: white; color: black;">smt = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">ShareMediaTask</span><span style="background: white; color: black;">();
smt.FilePath = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/ApplicationIcon.png&quot;</span><span style="background: white; color: black;">;

smt.Show();</span></pre>



<h4>Profiter du LongListSelector natif</h4>

<p>Ce contrôle, qui était avant fourni dans le Silverlight Toolkit (qui s’appelle maintenant le Windows Phone Toolkit) est maintenant natif. Au menu, le même usage, mais de meilleures performances. Changez juste l’assembly !</p>

<pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;AddrBookItemTemplate&quot;&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">StackPanel </span><span style="background: white; color: red;">VerticalAlignment</span><span style="background: white; color: blue;">=&quot;Top&quot;&gt;
        &lt;</span><span style="background: white; color: rgb(163, 21, 21);">TextBlock </span><span style="background: white; color: red;">FontWeight</span><span style="background: white; color: blue;">=&quot;Bold&quot;  </span><span style="background: white; color: red;">Text</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">Name</span><span style="background: white; color: blue;">}&quot; /&gt;
    &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">StackPanel</span><span style="background: white; color: blue;">&gt;
&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate</span><span style="background: white; color: blue;">&gt;

&lt;</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;AddrBookGroupHeaderTemmplate&quot;&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Border </span><span style="background: white; color: red;">Background</span><span style="background: white; color: blue;">=&quot;Transparent&quot; </span><span style="background: white; color: red;">Padding</span><span style="background: white; color: blue;">=&quot;5&quot;&gt;
        &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Border </span><span style="background: white; color: red;">Background</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">PhoneAccentBrush</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">BorderBrush</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">PhoneAccentBrush</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">BorderThickness</span><span style="background: white; color: blue;">=&quot;2&quot; </span><span style="background: white; color: red;">Width</span><span style="background: white; color: blue;">=&quot;62&quot; 
    </span><span style="background: white; color: red;">Height</span><span style="background: white; color: blue;">=&quot;62&quot; </span><span style="background: white; color: red;">Margin</span><span style="background: white; color: blue;">=&quot;0,0,18,0&quot; </span><span style="background: white; color: red;">HorizontalAlignment</span><span style="background: white; color: blue;">=&quot;Left&quot;&gt;
            &lt;</span><span style="background: white; color: rgb(163, 21, 21);">TextBlock </span><span style="background: white; color: red;">Text</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">Foreground</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">PhoneForegroundBrush</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">FontSize</span><span style="background: white; color: blue;">=&quot;48&quot; </span><span style="background: white; color: red;">Padding</span><span style="background: white; color: blue;">=&quot;6&quot; 
    </span><span style="background: white; color: red;">FontFamily</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">PhoneFontFamilySemiLight</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">HorizontalAlignment</span><span style="background: white; color: blue;">=&quot;Left&quot; </span><span style="background: white; color: red;">VerticalAlignment</span><span style="background: white; color: blue;">=&quot;Center&quot;/&gt;
        &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Border</span><span style="background: white; color: blue;">&gt;
    &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Border</span><span style="background: white; color: blue;">&gt;
&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate</span><span style="background: white; color: blue;">&gt;

&lt;</span><span style="background: white; color: rgb(163, 21, 21);">phone</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">JumpListItemBackgroundConverter </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;BackgroundConverter&quot;/&gt;
&lt;</span><span style="background: white; color: rgb(163, 21, 21);">phone</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">JumpListItemForegroundConverter </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;ForegroundConverter&quot;/&gt;
&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Style </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;AddrBookJumpListStyle&quot; </span><span style="background: white; color: red;">TargetType</span><span style="background: white; color: blue;">=&quot;phone:LongListSelector&quot;&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Setter </span><span style="background: white; color: red;">Property</span><span style="background: white; color: blue;">=&quot;GridCellSize&quot;  </span><span style="background: white; color: red;">Value</span><span style="background: white; color: blue;">=&quot;113,113&quot;/&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Setter </span><span style="background: white; color: red;">Property</span><span style="background: white; color: blue;">=&quot;LayoutMode&quot; </span><span style="background: white; color: red;">Value</span><span style="background: white; color: blue;">=&quot;Grid&quot; /&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Setter </span><span style="background: white; color: red;">Property</span><span style="background: white; color: blue;">=&quot;ItemTemplate&quot;&gt;
        &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Setter.Value</span><span style="background: white; color: blue;">&gt;
            &lt;</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate</span><span style="background: white; color: blue;">&gt;
                &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Border </span><span style="background: white; color: red;">Background</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">Converter</span><span style="background: white; color: blue;">={</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">BackgroundConverter</span><span style="background: white; color: blue;">}}&quot; </span><span style="background: white; color: red;">Width</span><span style="background: white; color: blue;">=&quot;113&quot; </span><span style="background: white; color: red;">Height</span><span style="background: white; color: blue;">=&quot;113&quot; </span><span style="background: white; color: red;">Margin</span><span style="background: white; color: blue;">=&quot;6&quot; &gt;
                    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">TextBlock </span><span style="background: white; color: red;">Text</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">FontFamily</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">PhoneFontFamilySemiBold</span><span style="background: white; color: blue;">}&quot; </span><span style="background: white; color: red;">FontSize</span><span style="background: white; color: blue;">=&quot;48&quot; </span><span style="background: white; color: red;">Padding</span><span style="background: white; color: blue;">=&quot;6&quot; 
        </span><span style="background: white; color: red;">Foreground</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">Converter</span><span style="background: white; color: blue;">={</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">ForegroundConverter</span><span style="background: white; color: blue;">}}&quot; </span><span style="background: white; color: red;">VerticalAlignment</span><span style="background: white; color: blue;">=&quot;Center&quot;/&gt;
                &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Border</span><span style="background: white; color: blue;">&gt;
            &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">DataTemplate</span><span style="background: white; color: blue;">&gt;
        &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Setter.Value</span><span style="background: white; color: blue;">&gt;
    &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Setter</span><span style="background: white; color: blue;">&gt;
&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Style</span><span style="background: white; color: blue;">&gt;</span></pre>

<pre class="code"><span style="background: white; color: blue;"></span></pre>

<pre class="code"><span style="background: white; color: blue;"></span></pre>

<p>&#160;</p>

<pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">phone</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">LongListSelector </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Name</span><span style="background: white; color: blue;">=&quot;lls&quot; 
                        </span><span style="background: white; color: red;">GroupHeaderTemplate</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">AddrBookGroupHeaderTemmplate</span><span style="background: white; color: blue;">}&quot;
                        </span><span style="background: white; color: red;">ItemTemplate</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">AddrBookItemTemplate</span><span style="background: white; color: blue;">}&quot;
                        </span><span style="background: white; color: red;">JumpListStyle</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">AddrBookJumpListStyle</span><span style="background: white; color: blue;">}&quot;
                        </span><span style="background: white; color: red;">LayoutMode</span><span style="background: white; color: blue;">=&quot;List&quot;
                        </span><span style="background: white; color: red;">HideEmptyGroups</span><span style="background: white; color: blue;">=&quot;True&quot;
                        </span><span style="background: white; color: red;">IsGroupingEnabled</span><span style="background: white; color: blue;">=&quot;True&quot; /&gt;</span></pre>



<h4>Comment gérer proprement les nouvelles résolutions ?</h4>

<p>Les terminaux Windows Phone 7 et 7.5 n’avaient qu’une seule définition : WVGA, soit 800x480. Avec Windows Phone 8, les fabricants ont la possibilité d’utiliser 2 nouvelles définitions en plus : WXGA (1280x768) et 720p (1280x720). Dans le cas de la première, on garde le même ratio largeur/hauteur, mais pas dans le second ! Il va donc y avoir une petite bande noire en haut de l’écran (de 53px) si vous n’adaptez pas votre layout dynamiquement (la feinte principale consistant à utiliser des &quot;*&quot; et des &quot;Auto&quot; dans les propriétés des tailles de vos contrôles. Une page de la documentation est dédiée à ce sujet et vous permettra de comprendre ce qu’il faut faire pour tirer parti de toutes les résolutions au mieux :</p>

<p><a href="http://msdn.microsoft.com/en-US/library/windowsphone/develop/jj206974(v=vs.105).aspx">Multi-Resolution Apps for Windows Phone</a></p>

<p>Pour ce qui est des assets graphiques, (images, etc) vous avez la possibilité de les resizer dynamiquement (dans ce cas je vous conseille de les prévoir pour la résolution 1280x768 et faire du downscaling plutôt que l’inverse), ou bien d’utiliser un petit helper qui permet de savoir sur quelle image se binder en fonction de la résolution :</p>

<p>Une classe statique, ResolutionHelper, qui retourne de manière lisible la définition de l’écran :</p>

<pre class="code"><span style="background: white; color: blue;">public enum </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions </span><span style="background: white; color: black;">{ WVGA, WXGA, HD720p };

</span><span style="background: white; color: blue;">public static class </span><span style="background: white; color: rgb(43, 145, 175);">ResolutionHelper
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">private static bool </span><span style="background: white; color: black;">IsWvga
    {
        </span><span style="background: white; color: blue;">get
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Application</span><span style="background: white; color: black;">.Current.Host.Content.ActualHeight == 800
            &amp;&amp; </span><span style="background: white; color: rgb(43, 145, 175);">Application</span><span style="background: white; color: black;">.Current.Host.Content.ScaleFactor == 100;
        }
    }

    </span><span style="background: white; color: blue;">private static bool </span><span style="background: white; color: black;">IsWxga
    {
        </span><span style="background: white; color: blue;">get
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Application</span><span style="background: white; color: black;">.Current.Host.Content.ScaleFactor == 160;
        }
    }

    </span><span style="background: white; color: blue;">private static bool </span><span style="background: white; color: black;">Is720p
    {
        </span><span style="background: white; color: blue;">get
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Application</span><span style="background: white; color: black;">.Current.Host.Content.ScaleFactor == 150;
        }
    }

    </span><span style="background: white; color: blue;">public static </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions </span><span style="background: white; color: black;">CurrentResolution
    {
        </span><span style="background: white; color: blue;">get
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(IsWvga) </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.WVGA;
            </span><span style="background: white; color: blue;">else if </span><span style="background: white; color: black;">(IsWxga) </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.WXGA;
            </span><span style="background: white; color: blue;">else if </span><span style="background: white; color: black;">(Is720p) </span><span style="background: white; color: blue;">return </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.HD720p;
            </span><span style="background: white; color: blue;">else throw new </span><span style="background: white; color: rgb(43, 145, 175);">InvalidOperationException</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;Unknown resolution&quot;</span><span style="background: white; color: black;">);
        }
    }
}</span></pre>



<p>Ensuite une classe sur laquelle l’interface pourra se binder et qui renverra l’image adaptée :</p>

<pre class="code"><span style="background: white; color: blue;">public class </span><span style="background: white; color: rgb(43, 145, 175);">MultiResImageChooser
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">public </span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">BestResolutionImage
    {
        </span><span style="background: white; color: blue;">get
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: blue;">switch </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">ResolutionHelper</span><span style="background: white; color: black;">.CurrentResolution)
            {
                </span><span style="background: white; color: blue;">case </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.HD720p:
                    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/ResolutionDependent/720x1280.jpg&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
                </span><span style="background: white; color: blue;">case </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.WXGA:
                    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/ResolutionDependent/768x1280.jpg&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
                </span><span style="background: white; color: blue;">case </span><span style="background: white; color: rgb(43, 145, 175);">Resolutions</span><span style="background: white; color: black;">.WVGA:
                    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Assets/ResolutionDependent/480x800.jpg&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
                </span><span style="background: white; color: blue;">default</span><span style="background: white; color: black;">:
                    </span><span style="background: white; color: blue;">throw new </span><span style="background: white; color: rgb(43, 145, 175);">InvalidOperationException</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;Unknown resolution type&quot;</span><span style="background: white; color: black;">);
            }
        }
    }
}</span></pre>



<p>Et pour finir, dans l’interface, instancier cette classe sous forme d’une StaticResource et se binder sur le champ approprié :</p>

<pre class="code"><span style="background: white; color: blue;"></span></pre>

<pre class="code"><span style="background: white; color: blue;"></span></pre>

<pre class="code"><span style="background: white; color: blue;"><pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">phone</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">PhoneApplicationPage.Resources</span><span style="background: white; color: blue;">&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">helpers</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">MultiResImageChooser </span><span style="background: white; color: red;">x</span><span style="background: white; color: blue;">:</span><span style="background: white; color: red;">Key</span><span style="background: white; color: blue;">=&quot;MultiResImageChooser&quot; /&gt;
&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">phone</span><span style="background: white; color: blue;">:</span><span style="background: white; color: rgb(163, 21, 21);">PhoneApplicationPage.Resources</span><span style="background: white; color: blue;">&gt;</span></pre>&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Image  </span><span style="background: white; color: red;">Source</span><span style="background: white; color: blue;">=&quot;{</span><span style="background: white; color: rgb(163, 21, 21);">Binding </span><span style="background: white; color: red;">BestResolutionImage</span><span style="background: white; color: blue;">, </span><span style="background: white; color: red;">Source</span><span style="background: white; color: blue;">={</span><span style="background: white; color: rgb(163, 21, 21);">StaticResource </span><span style="background: white; color: red;">MultiResImageChooser</span><span style="background: white; color: blue;">}}&quot;/&gt;</span></pre>



<p>Enfin, pour ce qui est du SplashScreen, il suffit de le mettre en 3 versions (pour les 3 résolutions) dans le XAP avec la convention de nommage suivante :</p>

<ul>
  <li>SplashScreenImage.Screen-WXGA.jpg </li>

  <li>SplashScreenImage.Screen-WVGA.jpg</li>

  <li>SplashScreenImage.Screen-720p.JPG</li>
</ul>

<p>&#160;</p>

<p>Et le système s’en sortira tout seul !</p>

<h4>Passer à Nokia Maps</h4>

<p>Si vous utilisez le contrôle Map, vous pouvez profiter de la qualité des cartes vectorielles de Nokia Maps quel que soit la marque du téléphone de votre utilisateur, en quelques étapes très simples :</p>

<ol>
  <li>Migrer votre projet à Windows Phone 8</li>

  <li>Enlever la référence à l’assembly Bing Maps et changer les namespaces là où ça s’impose </li>

  <li>Rajouter la capability « ID_CAP_MAP » dans votre manifest</li>

  <li>Recompiler</li>
</ol>

<p>&#160;</p>

<p>Pas besoin de changer le code, sauf peut-être pour enlever la clef d’API ;)</p>

<p>Sachez que les launchers BingMapsTask et BingMapsDirectionTask ouvriront également automatiquement Nokia Maps et non plus Bing Maps. </p>

<p>Vous pouvez également profiter des nouveaux launchers MapsTask, MapsDirectionTask, et MapsDownloadTask,&#160; qui offrent respectivement l’accès à l’application Nokia Maps, au guidage tour-par-tour, et au téléchargement de cartes pour une utilisation offline. Un exemple avec la MapsTask :</p>

<pre class="code"><span style="background: white; color: rgb(43, 145, 175);">MapsTask </span><span style="background: white; color: black;">mt = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">MapsTask</span><span style="background: white; color: black;">();
mt.ZoomLevel = 15;
mt.SearchTerm = </span><span style="background: white; color: rgb(163, 21, 21);">&quot;Pizza&quot;</span><span style="background: white; color: black;">;
            
mt.Show();</span></pre>



<h4>Rajouter la reconnaissance et la synthèse vocale</h4>

<p>Avec la reconnaissance vocale, vous allez pouvoir demander à l’utilisateur de parler à votre application, et récupérer le texte déduit par le moteur intégré à Windows Phone. La synthèse vocale, quant à elle, vous permettra de faire lire à l’application du texte, ce qui améliorera l’accessibilité de votre application.</p>

<h5>Reconnaissance vocale : avec l’interface standard, ou la vôtre !</h5>

<p>Voici comment utiliser l’interface graphique du système pour lancer la reconnaissance vocale : </p>

<pre class="code"><span style="background: white; color: green;">// Create an instance of SpeechRecognizerUI.
</span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">speechRecognizerWithUI = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">SpeechRecognizerUI</span><span style="background: white; color: black;">();

</span><span style="background: white; color: green;">// Start recognition (load the dictation grammar by default).
</span><span style="background: white; color: rgb(43, 145, 175);">SpeechRecognitionUIResult </span><span style="background: white; color: black;">recoResult = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">speechRecognizerWithUI.RecognizeWithUIAsync();

</span><span style="background: white; color: green;">// Do something with the recognition result.
</span><span style="background: white; color: black;">tbSpeechRecognized.Text = recoResult.RecognitionResult.Text + </span><span style="background: white; color: rgb(163, 21, 21);">&quot; || confidence: &quot; </span><span style="background: white; color: black;">+ recoResult.RecognitionResult.TextConfidence;</span></pre>



<p>Vous pouvez également lancer la reconnaissance vocale avec votre propre interface, mais attention à bien guider l’utilisateur ! Voici un exemple minimaliste, avec une boite de message indiquant juste que la reconnaissance vocale va démarrer :</p>

<pre class="code"><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">MessageBox</span><span style="background: white; color: black;">.Show(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;Recognize?&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(163, 21, 21);">&quot;SpeechRecognizer&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">MessageBoxButton</span><span style="background: white; color: black;">.OKCancel) == </span><span style="background: white; color: rgb(43, 145, 175);">MessageBoxResult</span><span style="background: white; color: black;">.OK)
{
    speechRecognizer = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">SpeechRecognizer</span><span style="background: white; color: black;">();
    </span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">recoResult = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">speechRecognizer.RecognizeAsync();
    tbSpeechRecognized.Text = recoResult.Text + </span><span style="background: white; color: rgb(163, 21, 21);">&quot; || confidence: &quot; </span><span style="background: white; color: black;">+ recoResult.TextConfidence;
}</span></pre>



<h5>Synthèse vocale : simple comme bonjour ;)</h5>

<p>Pour vocaliser du texte, il suffit de le passer en argument à une instance de la classe SpeechSynthesizer, en ayant précisé la voix à utiliser… sachant que l’utilisateur peut choisir une langue dans les paramètres du téléphone indépendamment de la langue de son interface graphique. Voici un petit exemple qui lit le contenu d’une TextBox :</p>

<pre class="code"><span style="background: white; color: green;">// Initialize the SpeechSynthesizer object.
</span><span style="background: white; color: rgb(43, 145, 175);">SpeechSynthesizer </span><span style="background: white; color: black;">synth = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">SpeechSynthesizer</span><span style="background: white; color: black;">();

</span><span style="background: white; color: green;">// Query for a voice that speaks French.
</span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">Voices = </span><span style="background: white; color: blue;">from </span><span style="background: white; color: black;">voice </span><span style="background: white; color: blue;">in </span><span style="background: white; color: rgb(43, 145, 175);">InstalledVoices</span><span style="background: white; color: black;">.All
                </span><span style="background: white; color: blue;">where </span><span style="background: white; color: black;">voice.Id == (lbxVoices.SelectedItem </span><span style="background: white; color: blue;">as </span><span style="background: white; color: rgb(43, 145, 175);">VoiceInformation</span><span style="background: white; color: black;">).Id
                </span><span style="background: white; color: blue;">select </span><span style="background: white; color: black;">voice;

</span><span style="background: white; color: green;">// Set the voice as identified by the query.
</span><span style="background: white; color: black;">synth.SetVoice(Voices.ElementAt(0));

</span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">synth.SpeakTextAsync(tbxSpeech.Text);</span></pre>



<h4>L’association avec des extensions de fichier et des schémas d’URL</h4>

<p>Voici une nouvelle option qui permettra à d’autres applications de lancer directement la vôtre, et d’avoir vos propres formats de fichier pour échanger des données d’un utilisateur à un autre.</p>

<h5>S’associer avec des extensions de fichiers</h5>

<p>Pour s’associer avec une extension, il faut signaler au système qu’on a cette capacité : cela se passe évidemment dans le manifest de l’application, dans lequel il faut rajouter, dans la partie extensions :</p>

<pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">FileTypeAssociation </span><span style="background: white; color: red;">Name</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">Windows Phone SDK test file type</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">TaskID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">_default</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">NavUriFragment</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">fileToken=%s</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">&gt;
  &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Logos</span><span style="background: white; color: blue;">&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Logo </span><span style="background: white; color: red;">Size</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">small</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">&gt;</span><span style="background: white; color: black;">/Assets/apitests-small-33x33.png</span><span style="background: white; color: blue;">&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Logo</span><span style="background: white; color: blue;">&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Logo </span><span style="background: white; color: red;">Size</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">medium</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">&gt;</span><span style="background: white; color: black;">/Assets/apitests-medium-69x69.png</span><span style="background: white; color: blue;">&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Logo</span><span style="background: white; color: blue;">&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">Logo </span><span style="background: white; color: red;">Size</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">large</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">&gt;</span><span style="background: white; color: black;">/Assets/apitests-large-176x176.png</span><span style="background: white; color: blue;">&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Logo</span><span style="background: white; color: blue;">&gt;
  &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">Logos</span><span style="background: white; color: blue;">&gt;
  &lt;</span><span style="background: white; color: rgb(163, 21, 21);">SupportedFileTypes</span><span style="background: white; color: blue;">&gt;
    &lt;</span><span style="background: white; color: rgb(163, 21, 21);">FileType </span><span style="background: white; color: red;">ContentType</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">application/text</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">&gt;</span><span style="background: white; color: black;">.apitests</span><span style="background: white; color: blue;">&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">FileType</span><span style="background: white; color: blue;">&gt;
  &lt;/</span><span style="background: white; color: rgb(163, 21, 21);">SupportedFileTypes</span><span style="background: white; color: blue;">&gt;
&lt;/</span><span style="background: white; color: rgb(163, 21, 21);">FileTypeAssociation</span><span style="background: white; color: blue;">&gt;</span></pre>



<p>Quand un fichier est téléchargé, par le navigateur, par email ou par une autre application, et que l’utilisateur tente de l’ouvrir en tapant sur l’icône de celui-ci (fournie, au passage, également par votre application), le système lancera votre application, avec en paramètre, un « token » permettant de récupérer ce fichier. La bonne pratique est donc de vérifier, en utilisant un UriMapper, si un nom de fichier est passé en paramètre au lancement pour éventuellement rediriger vers la page idoine, et l’ouvrir.</p>

<pre class="code"><span style="background: white; color: blue;">class </span><span style="background: white; color: rgb(43, 145, 175);">ApiTestsUriMapper </span><span style="background: white; color: black;">: </span><span style="background: white; color: rgb(43, 145, 175);">UriMapperBase
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">private string </span><span style="background: white; color: black;">tempUri;

    </span><span style="background: white; color: blue;">public override </span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">MapUri(</span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">uri)
    {
        tempUri = System.Net.</span><span style="background: white; color: rgb(43, 145, 175);">HttpUtility</span><span style="background: white; color: black;">.UrlDecode(uri.ToString());
        
</span><span style="background: white; color: blue;">        if </span><span style="background: white; color: black;">(tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/FileTypeAssociation&quot;</span><span style="background: white; color: black;">)) </span><span style="background: white; color: green;">// File association launch
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: green;">// Get the file ID (after &quot;fileToken=&quot;).
            </span><span style="background: white; color: blue;">int </span><span style="background: white; color: black;">fileIDIndex = tempUri.IndexOf(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;fileToken=&quot;</span><span style="background: white; color: black;">) + 10;
            </span><span style="background: white; color: blue;">string </span><span style="background: white; color: black;">fileID = tempUri.Substring(fileIDIndex);

            </span><span style="background: white; color: green;">// Get the file name.
            </span><span style="background: white; color: blue;">string </span><span style="background: white; color: black;">incomingFileName = </span><span style="background: white; color: rgb(43, 145, 175);">SharedStorageAccessManager</span><span style="background: white; color: black;">.GetSharedFileName(fileID);

            </span><span style="background: white; color: green;">// Get the file extension.
            </span><span style="background: white; color: blue;">int </span><span style="background: white; color: black;">extensionIndex = incomingFileName.LastIndexOf(</span><span style="background: white; color: rgb(163, 21, 21);">'.'</span><span style="background: white; color: black;">);
            </span><span style="background: white; color: blue;">string </span><span style="background: white; color: black;">incomingFileType =
                incomingFileName.Substring(extensionIndex).ToLower();

            </span><span style="background: white; color: green;">// Map the .apitests extension to the right page.
            </span><span style="background: white; color: blue;">switch </span><span style="background: white; color: black;">(incomingFileType)
            {
                </span><span style="background: white; color: blue;">case </span><span style="background: white; color: rgb(163, 21, 21);">&quot;.apitests&quot;</span><span style="background: white; color: black;">:
                    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/FileAssociationPage.xaml?fileToken=&quot; </span><span style="background: white; color: black;">+ fileID, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
                </span><span style="background: white; color: blue;">default</span><span style="background: white; color: black;">:
                    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;MainPage.xaml&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
            }
        }
        </span><span style="background: white; color: green;">// Otherwise perform normal launch.
        </span><span style="background: white; color: blue;">return </span><span style="background: white; color: black;">uri;
    }
}
</span></pre>

<p>Une fois dans la page, il faut utiliser les APIs SharedFolder pour récupérer le fichier passé en paramètre : </p>

<pre class="code"><span style="background: white; color: blue;">protected async override void </span><span style="background: white; color: black;">OnNavigatedTo(</span><span style="background: white; color: rgb(43, 145, 175);">NavigationEventArgs </span><span style="background: white; color: black;">e)
{
    </span><span style="background: white; color: blue;">try
    </span><span style="background: white; color: black;">{
        </span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">fileToken = NavigationContext.QueryString[</span><span style="background: white; color: rgb(163, 21, 21);">&quot;fileToken&quot;</span><span style="background: white; color: black;">];
        </span><span style="background: white; color: blue;">this</span><span style="background: white; color: black;">.fileName = </span><span style="background: white; color: rgb(43, 145, 175);">SharedStorageAccessManager</span><span style="background: white; color: black;">.GetSharedFileName(fileToken);
                
        </span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">storageFolder = Windows.Storage.</span><span style="background: white; color: rgb(43, 145, 175);">ApplicationData</span><span style="background: white; color: black;">.Current.LocalFolder;
                
        </span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">localFile = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: rgb(43, 145, 175);">SharedStorageAccessManager</span><span style="background: white; color: black;">.CopySharedFileAsync(storageFolder, </span><span style="background: white; color: blue;">this</span><span style="background: white; color: black;">.fileName, </span><span style="background: white; color: rgb(43, 145, 175);">NameCollisionOption</span><span style="background: white; color: black;">.ReplaceExisting, fileToken);

        </span><span style="background: white; color: blue;">using</span><span style="background: white; color: black;">(</span><span style="background: white; color: blue;">var </span><span style="background: white; color: black;">content = </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">localFile.OpenReadAsync())
        {
            </span><span style="background: white; color: blue;">using </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">DataReader </span><span style="background: white; color: black;">dr = </span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">DataReader</span><span style="background: white; color: black;">(content))
            {
                </span><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">dr.LoadAsync((</span><span style="background: white; color: blue;">uint</span><span style="background: white; color: black;">)content.Size);
                fileContent = dr.ReadString((</span><span style="background: white; color: blue;">uint</span><span style="background: white; color: black;">)content.Size);
            }
        }
    }
    </span><span style="background: white; color: blue;">catch </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">Exception </span><span style="background: white; color: black;">ex)
    {
        </span><span style="background: white; color: rgb(43, 145, 175);">Debug</span><span style="background: white; color: black;">.WriteLine(ex.Message);
    }
    </span><span style="background: white; color: blue;">finally
    </span><span style="background: white; color: black;">{
        </span><span style="background: white; color: blue;">base</span><span style="background: white; color: black;">.OnNavigatedTo(e);
    }
}
</span></pre>

<h5>S’associer avec des schemas d’URI</h5>

<p>L’association avec des schémas d’URI fonctionne sur le même principe que l’association avec des extensions de fichier. On déclare le support dans le manifest :</p>

<pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Protocol </span><span style="background: white; color: red;">Name</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">apitests</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">NavUriFragment</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">encodedLaunchUri=%s</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">TaskID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">_default</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: blue;">/&gt;
</span></pre>



<p>Puis on utilise un UriMapper pour capturer le lancement éventuel avec une URI en paramètre, afin de le traiter :</p>

<pre class="code"><span style="background: white; color: blue;">class </span><span style="background: white; color: rgb(43, 145, 175);">ApiTestsUriMapper </span><span style="background: white; color: black;">: </span><span style="background: white; color: rgb(43, 145, 175);">UriMapperBase
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">private string </span><span style="background: white; color: black;">tempUri;

    </span><span style="background: white; color: blue;">public override </span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">MapUri(</span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">uri)
    {
        tempUri = System.Net.</span><span style="background: white; color: rgb(43, 145, 175);">HttpUtility</span><span style="background: white; color: black;">.UrlDecode(uri.ToString());
        
</span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;apitests:UriAssociation?Parameter=&quot;</span><span style="background: white; color: black;">)) </span><span style="background: white; color: green;">// URI assocation launch
        </span><span style="background: white; color: black;">{
            </span><span style="background: white; color: green;">// Get the category ID (after &quot;CategoryID=&quot;).
            </span><span style="background: white; color: blue;">int </span><span style="background: white; color: black;">paramIndex = tempUri.IndexOf(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;Parameter=&quot;</span><span style="background: white; color: black;">) + 10;
            </span><span style="background: white; color: blue;">string </span><span style="background: white; color: black;">param = tempUri.Substring(paramIndex);

            </span><span style="background: white; color: green;">// Map the show products request to ShowProducts.xaml
            </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/UriAssociationPage.xaml?Parameter=&quot; </span><span style="background: white; color: black;">+ param, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
        }

        </span><span style="background: white; color: green;">// Otherwise perform normal launch.
        </span><span style="background: white; color: blue;">return </span><span style="background: white; color: black;">uri;
    }

}
</span></pre>



<p>Une fois la page chargée, il suffit de récupérer le paramètre dans le NavigationContext :</p>

<pre class="code"><span style="background: white; color: blue;">protected override void </span><span style="background: white; color: black;">OnNavigatedTo(</span><span style="background: white; color: rgb(43, 145, 175);">NavigationEventArgs </span><span style="background: white; color: black;">e)
{
    </span><span style="background: white; color: blue;">try
    </span><span style="background: white; color: black;">{
        parameter = NavigationContext.QueryString[</span><span style="background: white; color: rgb(163, 21, 21);">&quot;Parameter&quot;</span><span style="background: white; color: black;">];
    }
    </span><span style="background: white; color: blue;">catch </span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(43, 145, 175);">Exception </span><span style="background: white; color: black;">ex)
    {
        </span><span style="background: white; color: rgb(43, 145, 175);">Debug</span><span style="background: white; color: black;">.WriteLine(ex.Message);
    }
    </span><span style="background: white; color: blue;">finally
    </span><span style="background: white; color: black;">{
        </span><span style="background: white; color: blue;">base</span><span style="background: white; color: black;">.OnNavigatedTo(e);
    }
}
</span></pre>

<h5>Lancer une application tierce depuis un fichier ou une URI dans l’application</h5>

<p>Pour lancer une application tierce depuis un fichier ou une Uri, il suffit d’appeler une API du système, qui automatiquement proposera à l’utilisateur de télécharger une appli ayant la capacité d’ouvrir ce type du contenu si il n’y en a pas déjà d’installée. Ça tient en une ligne de code :</p>

<p>&#160;</p>

<pre class="code"><span style="background: white; color: blue;">await </span><span style="background: white; color: black;">Windows.System.</span><span style="background: white; color: rgb(43, 145, 175);">Launcher</span><span style="background: white; color: black;">.LaunchUriAsync(</span><span style="background: white; color: blue;">new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;apitests:UriAssociation?Parameter=&quot; </span><span style="background: white; color: black;">+ tbParameter.Text));
</span></pre>

<pre class="code"><span style="background: white; color: black;"></span></pre>

<pre class="code"><span style="background: white; color: black;"></span></pre>

<p>Il est également possible de lancer des pages de l’interface native (paramètres, etc) en suivant le même principe, avec les schémas d’uri réservés du système documentés.</p>

<h4>Devenir une « Lens app » et s’intégrer à l’expérience de prise de photo</h4>

<p>La photo est de plus en plus au cœur de Windows Phone : dorénavant, il existe un petit bouton (matérialisé par deux flèches) dans l’application-bar de l’application photo native, qui permet de choisir une application pour prendre la photo, en y appliquant des filtres par exemple pour modifier l’apparence de la photo, y appliquer un traitement, la partager directement… A vous d’inventer ces nouveaux usages !</p>

<p>Pour cela, vous devez vous enregistrer cette extension dans votre manifeste, puis vérifier au lancement de l’application, à l’aide d’un UriMapper par exemple, si la chaine de caractère « ViewfinderLaunch » est présente dans l’URL. et si c’est le cas, c’est que votre application est lancée depuis l’appareil photo. Dans ce cas-là, un simple UriMapper vous permettra de rediriger l’utilisateur vers une page de votre application qui appliquera votre traitement, tout en veillant de respecter les recommandations de design spécifique à ce type de page qui sont disponibles ici :</p>

<p><a href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662922(v=vs.105).aspx">Lens Design Guidelines for Windows Phone</a></p>

<p>Voici l’exemple d’extension à rajouter dans le fichier WMAppManifest.xml :</p>

<pre class="code"><span style="background: white; color: blue;">&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Extension </span><span style="background: white; color: red;">ExtensionName</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">Camera_Capture_App</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">ConsumerID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">{5B04B775-356B-4AA0-AAF8-6491FFEA5631}</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: red;">TaskID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">_default</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: blue;">/&gt;
</span></pre>

<p>Et celui de l’UriMapper : </p>

<p>&#160;</p>

<pre class="code">PrFont34Bin0BinSub0Frac0Def1Margin0Margin0Jc1Indent1440Lim0Lim1<span style="background: white; color: blue;">class </span><span style="background: white; color: rgb(43, 145, 175);">ApiTestsUriMapper </span><span style="background: white; color: black;">: </span><span style="background: white; color: rgb(43, 145, 175);">UriMapperBase
</span><span style="background: white; color: black;">{
    </span><span style="background: white; color: blue;">private string </span><span style="background: white; color: black;">tempUri;

    </span><span style="background: white; color: blue;">public override </span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">MapUri(</span><span style="background: white; color: rgb(43, 145, 175);">Uri </span><span style="background: white; color: black;">uri)
    {
        tempUri = System.Net.</span><span style="background: white; color: rgb(43, 145, 175);">HttpUtility</span><span style="background: white; color: black;">.UrlDecode(uri.ToString());
        </span><span style="background: white; color: green;">// Look for a URI from the lens picker.
        </span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">(tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;ViewfinderLaunch&quot;</span><span style="background: white; color: black;">))
        {
            </span><span style="background: white; color: green;">// Launch as a lens, launch viewfinder screen.
            </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;/Pages/Lense.xaml&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
        }

        </span><span style="background: white; color: green;">// Otherwise perform normal launch.
        </span><span style="background: white; color: blue;">return </span><span style="background: white; color: black;">uri;
    }

}
</span></pre>

<p>En enregistrant cette extension et cet UriMapper, la page « Lense.xaml » contenue dans le dossier « Pages » sera automatiquement lancée, si l’application est lancée depuis l’appareil photo. Attention à ne pas oublier d’inclure également l’iconographie correspondante pour que votre application apparaisse correctement dans la liste des lentilles (le LensPicker) : à savoir : </p>

<table cellpadding="0" border="0"><tbody>
    <tr>
      <td valign="top">
        <p><b>Phone resolution</b></p>
      </td>

      <td valign="top">
        <p><b>Icon size (pixels)</b></p>
      </td>

      <td valign="top">
        <p><b>Folder</b></p>
      </td>

      <td valign="top">
        <p><b>File name</b></p>
      </td>
    </tr>

    <tr>
      <td valign="top">
        <p>WVGA</p>
      </td>

      <td valign="top">
        <p>173 x 173</p>
      </td>

      <td valign="top">
        <p><b>Assets</b></p>
      </td>

      <td valign="top">
        <p>Lens.Screen-WVGA.png</p>
      </td>
    </tr>

    <tr>
      <td valign="top">
        <p>HD720p</p>
      </td>

      <td valign="top">
        <p>259 x 259</p>
      </td>

      <td valign="top">
        <p><b>Assets</b></p>
      </td>

      <td valign="top">
        <p>Lens.Screen-720p.png</p>
      </td>
    </tr>

    <tr>
      <td valign="top">
        <p>WXGA</p>
      </td>

      <td valign="top">
        <p>277 x 277</p>
      </td>

      <td valign="top">
        <p><b>Assets</b></p>
      </td>

      <td valign="top">
        <p>Lens.Screen-WXGA.png</p>
      </td>
    </tr>
  </tbody></table>

<p>&#160;</p>

<p>En plus de pouvoir être identifié dans le hub photo comme une application qui peut prendre des photos en entrée (PhotoViewer), ou les partager, vous pouvez maintenant également faire identifier votre application comme éditeur de photo, ou mieux, « appliquant un traitement riche sur une image ». Dans ce cas, les photos que vous aurez prise depuis votre application pourront être rééditez dans votre application directement depuis leur fiche dans le hub photo. Dans tous les cas, cela passe par un ajout d’extension à votre manifest :</p>

<pre class="code"><span style="background: white; color: blue;">&lt;!-- </span><span style="background: white; color: green;">Extend the photo edit picker. </span><span style="background: white; color: blue;">--&gt;
&lt;!-- </span><span style="background: white; color: green;">This is only for Windows Phone 8 apps. </span><span style="background: white; color: blue;">--&gt;
&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Extension </span><span style="background: white; color: red;">ExtensionName</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">Photos_Extra_Image_Editor</span><span style="background: white; color: black;">&quot; 
            </span><span style="background: white; color: red;">ConsumerID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">{5B04B775-356B-4AA0-AAF8-6491FFEA5632}</span><span style="background: white; color: black;">&quot; 
            </span><span style="background: white; color: red;">TaskID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">_default</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: blue;">/&gt;


&lt;!-- </span><span style="background: white; color: green;">Integrate as a rich media app. </span><span style="background: white; color: blue;">--&gt;
&lt;!-- </span><span style="background: white; color: green;">This is only for Windows Phone 8 apps. </span><span style="background: white; color: blue;">--&gt;
&lt;</span><span style="background: white; color: rgb(163, 21, 21);">Extension </span><span style="background: white; color: red;">ExtensionName</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">Photos_Rich_Media_Edit</span><span style="background: white; color: black;">&quot; 
            </span><span style="background: white; color: red;">ConsumerID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">{5B04B775-356B-4AA0-AAF8-6491FFEA5632}</span><span style="background: white; color: black;">&quot; 
            </span><span style="background: white; color: red;">TaskID</span><span style="background: white; color: blue;">=</span><span style="background: white; color: black;">&quot;</span><span style="background: white; color: blue;">_default</span><span style="background: white; color: black;">&quot; </span><span style="background: white; color: blue;">/&gt;
</span></pre>

<p>&#160;</p>

<p>Puis un bout de code dans un UriMapper pour rouvrir la bonne page (vous allez commencer à connaitre le système ;)) :</p>

<p>&#160;</p>

<pre class="code">PrFont34Bin0BinSub0Frac0Def1Margin0Margin0Jc1Indent1440Lim0Lim1<span style="background: white; color: green;">// Launch from the photo edit picker.
// This is only for Windows Phone 8 apps.
// Incoming URI example: /MainPage.xaml?Action=EditPhotoContent&amp;FileId=%7Bea74a960-3829-4007-8859-cd065654fbbc%7D
</span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">((tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;EditPhotoContent&quot;</span><span style="background: white; color: black;">)) &amp;&amp; (tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;FileId&quot;</span><span style="background: white; color: black;">)))
{
    </span><span style="background: white; color: green;">// Redirect to PhotoEdit.xaml.
    </span><span style="background: white; color: black;">mappedUri = tempUri.Replace(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;MainPage&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(163, 21, 21);">&quot;PhotoEdit&quot;</span><span style="background: white; color: black;">);
    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(mappedUri, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
}


</span><span style="background: white; color: green;">// Launch from the rich media &quot;Open in&quot; link.
// This is only for Windows Phone 8 apps.
// Incoming URI example: /MainPage.xaml?Action=RichMediaEdit&amp;token=%7Bed8b7de8-6cf9-454e-afe4-abb60ef75160%7D
</span><span style="background: white; color: blue;">if </span><span style="background: white; color: black;">((tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;RichMediaEdit&quot;</span><span style="background: white; color: black;">)) &amp;&amp; (tempUri.Contains(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;token&quot;</span><span style="background: white; color: black;">)))
{
    </span><span style="background: white; color: green;">// Redirect to RichMediaPage.xaml.
    </span><span style="background: white; color: black;">mappedUri = tempUri.Replace(</span><span style="background: white; color: rgb(163, 21, 21);">&quot;MainPage&quot;</span><span style="background: white; color: black;">, </span><span style="background: white; color: rgb(163, 21, 21);">&quot;RichMediaPage&quot;</span><span style="background: white; color: black;">);
    </span><span style="background: white; color: blue;">return new </span><span style="background: white; color: rgb(43, 145, 175);">Uri</span><span style="background: white; color: black;">(mappedUri, </span><span style="background: white; color: rgb(43, 145, 175);">UriKind</span><span style="background: white; color: black;">.Relative);
}
</span></pre>

<p>Pour comprendre tout ce qu’on peut faire avec le hub photo, le mieux est encore de se référer au code d’exemple dédié à ça :</p>

<p><a href="http://code.msdn.microsoft.com/wpapps/Photo-Extensibility-Sample-db289044">Photo Extensibility Sample</a></p>

<p>Il existe encore plein d’autres sujets et nouveautés, qui méritent des articles à part entière pour en faire le tour : In-App Purchase, Intégration avec le Wallet, Utilisation de NFC que ce soit avec des tags ou bien pour appairer des appareils entre eux et échanger des données… sans compter les nouveautés du support C++ (et l’arrivée de frameworks type Unity ou Havok) ou HTML5 avec IE10 ! Beaucoup d’autres articles en prévision donc ;)</p>]]></content:encoded>
    </item>
    <item>
      <title>Le SDK Windows Phone 8 est disponible!</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/le-sdk-windows-phone-8-est-disponible</link>
      <pubDate>Tue, 30 Oct 2012 12:18:40 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/10/30/le-sdk-windows-phone-8-est-disponible/</guid>
      <description><![CDATA[Windows Phone 8 SDK sur le Download Center Microsoft  Il s’agit du web-installer: autrement dit,...]]></description>
      <content:encoded><![CDATA[<p><a href="http://dev.windowsphone.com/"><img style="margin-right: auto; margin-left: auto; float: none; display: block;" src="http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/image_5F00_13E1C341.png" width="640" height="252" /></a></p>  <p align="center"><a href="http://www.microsoft.com/en-us/download/details.aspx?id=35471"><strong><font size="4">Windows Phone 8 SDK sur le Download Center Microsoft</font></strong></a></p>  <p>Il s’agit du web-installer: autrement dit, il installe les composants en même temps qu’il le télécharge. Si vous voulez une iso complète à installer offline, le lien est sur la même page, un peu caché en dessous, je vous le remet ici:&#160; <a href="http://go.microsoft.com/fwlink/?LinkID=257234&amp;clcid=0x409">ISO Complète du SDK Windows Phone 8</a></p>  <h1>Des nouveaux outils</h1>  <p>Ce SDK amène évidemment énormément de nouvelles APIs, que j’aurai l’occasion d’exposer dans un article séparé. En ce qui concerne les outils en eux-même, sachez qu’on passe à <strong>Visual Studio 2012</strong>, à une nouvelle version de Blend, qu’on ajoute en plus des images 7.1 existantes <strong>des images d’émulateurs WVGA, WXGA et 720p.</strong> Ces émulateurs reposent sur la technologie Hyper-V, qui nécessite une machine avec Windows 8, en 64bits, et une fonctionnalité appelée SLAT qui améliore le support de la virtualisation. Si vous voulez tester votre machine pour savoir si elle supporte le SLAT, <a href="http://www.howtogeek.com/73318/how-to-check-if-your-cpu-supports-second-level-address-translation-slat/">lisez ce petit how-to</a>.</p>  <p>Du coté de Visual Studio, on va retrouver un nouveau <strong>Simulation Dashboard</strong> permettant de déclencher des évènements comme les reminders ou le verrouillage du téléphone et de simuler l’état du réseau. Le profiler de performances s’améliore également au passage avec plus d’infos. Enfin, l’éditeur de pages repose maintenant sur Blend et permet de concevoir l’application d’un seul coup pour les différentes résolutions. On a au passage rajouté <strong>un éditeur de manifest</strong> un peu plus graphique que ce qu’on avait avant…</p>  <p>Enfin<strong> les templates de projets ont été améliorés</strong> pour supporter nativement la localisation et la globalisation de l’application, et pour rajouter le support des nouveautés du runtime, notamment <strong>DirectX</strong>.</p>  <h1>Des exemples de code</h1>  <p><a href="http://code.msdn.microsoft.com/wpapps/site/search?f%5B0%5D.Type=Technology&amp;f%5B0%5D.Value=Windows%20Phone%208">De nombreux exemples de code sont déjà disponibles ici</a> pour illustrer les nouvelles fonctionnalités du SDK</p>  <h1>Le Toolkit Nouveau</h1>  <p>Le Windows Phone Toolkit est maintenant, pour plus de clarté, séparé du Silverlight Toolkit, sur codeplex. Certains contrôles sont devenus natifs (comme le LongListSelector) il faut donc cette nouvelle version pour en profiter dans les applications Windows Phone:</p>  <p><a title="http://phone.codeplex.com/" href="http://phone.codeplex.com/">http://phone.codeplex.com/</a></p>  <h1>Des sites plus clairs</h1>  <p>Au cas où vous les chercheriez… Voici…</p>  <ul>   <li><a href="https://dev.windowsphone.com/en-us/design">les recommandations de design</a></li>    <li><a href="http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff402535(v=vs.105).aspx">Le nouveau point d’entrée de la documentation en ligne</a></li>    <li><a href="https://channel9.msdn.com/Tags/windows+phone">Les vidéos de Channel 9 avec du Windows Phone dedans</a></li> </ul>  <p>&#160;</p>  <p>Et aussi au cas où, sur les blogs officiels</p>  <ul>   <li><a href="http://blogs.windows.com/windows_phone/b/windowsphone/archive/2012/10/29/meet-windows-phone-8.aspx">L’annonce de Windows Phone 8</a></li>    <li><a href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/10/30/announcing-the-new-windows-phone-8-developer-platform.aspx">La nouvelle plateforme de développement Windows Phone 8, par Kevin Gallo</a></li>    <li><a href="http://blogs.msdn.com/b/dotnet/archive/2012/10/30/announcing-the-release-of-the-net-framework-for-windows-phone-8.aspx">Les nouveautés du Framework .NET pour Windows Phone 8</a></li>    <li><a href="http://blogs.msdn.com/b/visualstudio/archive/2012/10/29/introducing-windows-phone-sdk-8-0.aspx">Les nouveautés des outils Windows Phone 8 sur le blog Visual Studio</a></li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>Dev Camp: Design d’une application Windows 8 et Windows Phone, par les designers, pour les développeurs</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/dev-camp-design-dune-application-windows-8-et-windows-phone-par-les-designers-pour-les-dveloppeurs</link>
      <pubDate>Mon, 29 Oct 2012 05:36:05 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/10/29/dev-camp-design-dune-application-windows-8-et-windows-phone-par-les-designers-pour-les-dveloppeurs/</guid>
      <description><![CDATA[Vous êtes développeurs, et que vous ailliez la chance de travailler avec un designer, un ergonome ou...]]></description>
      <content:encoded><![CDATA[<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2821.a89ff0a3-df21-440d-8132-bfab3d9c9f2b_50471983.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2821.a89ff0a3_2D00_df21_2D00_440d_2D00_8132_2D00_bfab3d9c9f2b_5F00_50471983.jpg"><img title="a89ff0a3-df21-440d-8132-bfab3d9c9f2b" style="margin: 0px 0px 10px 10px; float: right; display: inline; background-image: none;" border="0" alt="a89ff0a3-df21-440d-8132-bfab3d9c9f2b" align="right" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2746.a89ff0a3-df21-440d-8132-bfab3d9c9f2b_thumb_3606B05F.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2746.a89ff0a3_2D00_df21_2D00_440d_2D00_8132_2D00_bfab3d9c9f2b_5F00_thumb_5F00_3606B05F.jpg" width="240" height="169" /></a>Vous êtes développeurs, et que vous ailliez la chance de travailler avec un designer, un ergonome ou un graphiste, ou pas, vous aimeriez comprendre un peu mieux leur monde? le 29 novembre, nous vous invitons pour une après-midi faite pour vous <img class="wlEmoticon wlEmoticon-smile" style="style" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2844.wlEmoticon-smile_26EFD185.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2844.wlEmoticon_2D00_smile_5F00_26EFD185.png" />&#160; En voici le pitch: </p>  <p align="justify"><em>Le design d’une application moderne, que ce soit sur Windows 8 ou Windows Phone, repose sur un certain nombre de codes. Ces codes sont souvent exprimés dans le langage des designers interactifs, graphistes et autres ergonomes, mais sont souvent incompris des développeurs, qui n’ont pas nécessairement le background et les études pour en comprendre les tenants et aboutissants.</em></p>  <p align="justify"><em>Durant ce devcamp, des designers qui ont l’habitude de travailler avec les développeurs reviendront à la fois sur les fondamentaux, mais aussi sur les petits raffinements, qui font qu’une application aussi simple soit-elle, devient une expérience exceptionnelle pour l’utilisateur : le but : familiariser les développeurs avec ce langage, ces codes, car nombre d’entre eux n’ont pas la chance de travailler avec des designers.</em></p>  <p><strong>Un agenda qui couvre à la fois les fondamentaux, et des conseils pratiques pour vos applications:</strong></p>  <ul>   <li>Le design moderne dans Windows 8 /&#160; Windows Phone</li>    <li>Le savant mélange d’une image de marque et du style moderne </li>    <li>Les composants fondamentaux d’une interface</li>    <li>Les outils pratiques et l’intégration</li> </ul>  <p>&#160;</p>  <p align="center"><font size="4"><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032521913&amp;Culture=fr-FR"><strong>Inscrivez-vous, et RDV le 29 Novembre au centre de conférence Microsoft</strong></a></font></p>]]></content:encoded>
    </item>
    <item>
      <title>Debugger sur une tablette Windows 8 depuis son PC</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/debugger-sur-une-tablette-windows-8-depuis-son-pc</link>
      <pubDate>Mon, 10 Sep 2012 09:22:08 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/09/10/debugger-sur-une-tablette-windows-8-depuis-son-pc/</guid>
      <description><![CDATA[Debugger du code directement sur un téléphone ou une carte électronique, piloté depuis le PC du...]]></description>
      <content:encoded><![CDATA[<p>Debugger du code directement sur un téléphone ou une carte électronique, piloté depuis le PC du développeur, c’est assez classique dans les systèmes embarqués et le monde mobile. C’est aussi possible avec les tablettes Windows 8, et nettement plus pratique que d’avoir tout le tooling Visual Studio installé dessus, comme on peut le voir beaucoup en ce moment. Il suffit d’installer le Remote Debugger dessus (s’il n’est pas déjà inclus dans l’image de Windows qui est installée). Vous pouvez configurer le remote debugger comme un service qui tourne en permanence, ou comme une application, qui ne tourne donc que quand on l’active. Je préfère la seconde méthode… qui est par ailleurs celle recommandée. on obtient alors cette fenêtre:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3247.remote-dbg_0B4658C3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3247.remote_2D00_dbg_5F00_0B4658C3.png"><img title="remote dbg" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="remote dbg" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3247.remote-dbg_thumb_7F44688E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3247.remote_2D00_dbg_5F00_thumb_5F00_7F44688E.png" width="600" height="196" /></a></p>  <p>&#160;</p>  <p>Directement depuis son projet, on peut ensuite choisir de debugger sur la tablette plutôt que sur le poste local: ça se configure dans l’onglet Debug de votre projet:</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3162.remote-dbg-2_44E8F2AD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3162.remote_2D00_dbg_2D00_2_5F00_44E8F2AD.png"><img title="remote dbg 2" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="remote dbg 2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/6874.remote-dbg-2_thumb_35D213D3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/6874.remote_2D00_dbg_2D00_2_5F00_thumb_5F00_35D213D3.png" width="757" height="402" /></a></p>  <p>Le bouton “find” permet de trouver votre tablette, et il est possible d’entrer un nom d’utilisateur et un mot de passe pour sécuriser la connexion et éviter que n’importe qui se connecte n’importe où.</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3225.remote-dbg-3_7B0A6AFC.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3225.remote_2D00_dbg_2D00_3_5F00_7B0A6AFC.png"><img title="remote dbg 3" style="border: 0px currentcolor; display: inline; background-image: none;" border="0" alt="remote dbg 3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/6886.remote-dbg-3_thumb_!1B53.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/6886.remote_2D00_dbg_2D00_3_5F00_thumb_5F00_21001B53.png" width="400" height="501" /></a></p>  <p>&#160;</p>  <p>Ensuite, lancer le projet pour un debuggage comme d’habitude (la touche F5, le bouton Debug…) et l’application se lancera sur la machine distante, plutôt que sur la machine locale. Facile <img class="wlEmoticon wlEmoticon-smile" style="style" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/0508.wlEmoticon-smile_23C5D046.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/0508.wlEmoticon_2D00_smile_5F00_23C5D046.png" />&#160;</p>  <p>Pour tout savoir sur le remote debugger, <a href="http://msdn.microsoft.com/en-us/library/bt727f1t(v=vs.110).aspx">la page de doc sur MSDN</a> et le <a href="http://msdn.microsoft.com/en-us/library/hh441469.aspx">HowTo officiel</a>.</p>  <p>Happy debugging!</p>]]></content:encoded>
    </item>
    <item>
      <title>La rentrée des accélérateurs : les programmes d'accompagnement des développeurs de Microsoft France</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/la-rentre-des-acclrateurs-les-programmes-daccompagnement-des-dveloppeurs-de-microsoft-france</link>
      <pubDate>Fri, 07 Sep 2012 03:09:00 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/09/07/la-rentre-des-acclrateurs-les-programmes-daccompagnement-des-dveloppeurs-de-microsoft-france/</guid>
      <description><![CDATA[Les acc&eacute;l&eacute;rateurs Windows Phone et Windows 8 sont les programmes...]]></description>
      <content:encoded><![CDATA[<p>Les acc&eacute;l&eacute;rateurs Windows Phone et Windows 8 sont les programmes d&rsquo;accompagnement qui permettent aux d&eacute;veloppeurs de rentrer en contact avec Microsoft. Le but avou&eacute; : faciliter l&rsquo;arriv&eacute;e sur les stores des applications, en faisant sauter les barri&egrave;res &agrave; l&rsquo;adoption des technologies, et les freins au d&eacute;veloppement et &agrave; la certification. Pas de crit&egrave;re &agrave; l&rsquo;entr&eacute;e, mais plein de b&eacute;n&eacute;fices &agrave; la sortie&hellip;</p>
<p><a href="http://msdn.microsoft.com/fr-fr/accelerateur-windows-phone-7.aspx"><img width="605" height="145" title="clip_image002" style="border: 0px currentcolor; display: inline; background-image: none;" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/6406.clip_image002_006FB4CA.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/6406.clip_5F00_image002_5F00_006FB4CA.png" border="0" /></a></p>
<p>L&rsquo;acc&eacute;l&eacute;rateur Windows Phone a d&eacute;marr&eacute; depuis l&rsquo;an dernier, et a d&eacute;j&agrave; accompagn&eacute; jusqu&rsquo;au store plusieurs centaines de d&eacute;veloppeurs, et au moins autant d&rsquo;applications. Au programme :</p>
<ul>
<li>Des pr&ecirc;ts de t&eacute;l&eacute;phones</li>
<li>Des "jetons" pour obtenir gratuitement un compte de d&eacute;veloppeur sur le store Windows Phone (et donc la possibilit&eacute; de d&eacute;bloquer des t&eacute;l&eacute;phones pour le debuggage, et de publier des applications)</li>
<li>Du support technique</li>
<li>Du coaching r&eacute;gulier avec des membres actifs de la communaut&eacute; &agrave; la technicit&eacute; reconnue</li>
<li>Des webcasts d&eacute;di&eacute;s aux questions les plus remont&eacute;es par les d&eacute;veloppeurs de l&rsquo;acc&eacute;l&eacute;rateur.</li>
<li>De la visibilit&eacute; avec la mise en avant des applications sur le store.</li>
</ul>
<p>&nbsp;</p>
<p><a href="http://msdn.microsoft.com/fr-fr/windows/accelerateur-windows-8.aspx"><img width="605" height="100" title="clip_image004" style="border: 0px currentcolor; display: inline; background-image: none;" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2772.clip_image004_6CE25528.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2772.clip_5F00_image004_5F00_6CE25528.png" border="0" /></a></p>
<p>L&rsquo;acc&eacute;l&eacute;rateur Windows 8 est plus r&eacute;cent, &eacute;videmment, mais il compte d&eacute;j&agrave; plusieurs centaines de d&eacute;veloppeurs&hellip;</p>
<p>Au programme :</p>
<ul>
<li>La possibilit&eacute; de tester son application sur des tablettes Windows 8 de r&eacute;f&eacute;rence</li>
<li>Du coaching et des webcasts/sessions d&eacute;di&eacute;es, &agrave; la fois sur les aspects d&eacute;veloppement et design, par des experts de Microsoft France</li>
<li>Du support technique</li>
<li>De la visibilit&eacute; avec la mise en avant des applications sur &laquo; l&rsquo;appli du jour &raquo;&hellip; et pour les d&eacute;veloppeurs avec les plus belles applications, une arriv&eacute;e sur le store en avant-premi&egrave;re (et des dizaines de milliers de downloads d&rsquo;avance !)</li>
</ul>
<p>&nbsp;</p>
<p>Encore une fois, les acc&eacute;l&eacute;rateurs n&rsquo;ont pas de crit&egrave;re d&rsquo;entr&eacute;e &ndash; quel que soit votre projet ou votre plateforme pr&eacute;f&eacute;r&eacute;e, si vous faites une application, vous pouvez nous contacter. Derri&egrave;re ces programmes, des &laquo; vraies personnes &raquo; vous r&eacute;pondent (pas de robots, de mails automatis&eacute;s, ou de formulaires &agrave; la noix), et surtout, pas de pub, juste du concret, et peut-&ecirc;tre le d&eacute;but du succ&egrave;s&hellip; Certains d&eacute;veloppeurs se sont m&ecirc;me inscrits aux deux programmes ! Voici les liens vers les pages officielles :</p>
<ul>
<li><a href="http://msdn.microsoft.com/fr-fr/accelerateur-windows-phone-7.aspx">L&rsquo;acc&eacute;l&eacute;rateur Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/fr-fr/windows/accelerateur-windows-8.aspx">L&rsquo;acc&eacute;l&eacute;rateur Windows 8</a></li>
</ul>
<p>&nbsp;</p>
<p>N&rsquo;h&eacute;sitez pas aussi, &agrave; nous dire ce dont vous avez besoin <img class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2870.wlEmoticon-smile_04998C8F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2870.wlEmoticon_2D00_smile_5F00_04998C8F.png" /> ces programmes sont faits pour vous, et sont pr&eacute;vus pour &eacute;voluer avec vos id&eacute;es!</p>]]></content:encoded>
    </item>
    <item>
      <title>Les rendez-vous de la rentrée</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/les-rendez-vous-de-la-rentre</link>
      <pubDate>Tue, 28 Aug 2012 05:32:00 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/08/28/les-rendez-vous-de-la-rentre/</guid>
      <description><![CDATA[Cette ann&eacute;e va &ecirc;tre riche en opportunit&eacute;s pour les d&eacute;veloppeurs &ndash;...]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/0121.fierdetredev3_67EC54D9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/0121.fierdetredev3_5F00_67EC54D9.png"><img width="240" height="239" title="fierdetredev3" align="right" style="margin: 0px 0px 0px 10px; border: 0px currentcolor; float: right; display: inline; background-image: none;" alt="fierdetredev3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/0647.fierdetredev3_thumb_1FBE98FD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/0647.fierdetredev3_5F00_thumb_5F00_1FBE98FD.png" border="0" /></a>Cette ann&eacute;e va &ecirc;tre riche en opportunit&eacute;s pour les d&eacute;veloppeurs &ndash; des lancements de nouvelles plateformes, de nouveaux terminaux, et beaucoup d&rsquo;&eacute;v&egrave;nements techniques pour se retrouver et en parler. Rien que sur Septembre:</p>
<ul>
<li><strong>Le 03/09 </strong><a href="http://www.meetup.com/windowsapps/events/75511902/">Le Premier MeetUp Windows 8, Bi&egrave;res et Pizzas organis&eacute; par&nbsp; BeMyApp &agrave; l&rsquo;IESA</a></li>
<li><strong>Le 11/09 </strong><a href="http://formationw8.eventbrite.com/">Formation &agrave; Windows 8 pour d&eacute;veloppeurs HTML5/JS, par BeMyApp aussi, &agrave; l&rsquo;IESA aussi!</a></li>
<li><strong>Le 12/09</strong> <a href="http://www.visualstudiolaunch.com/vs2012vle/Home">Lancement de Visual Studio 2012 (Online)</a></li>
<li><strong>Le 14/09 </strong><a href="http://bemyapp.com/kingsnight/">La King&rsquo;s Night&hellip; suite des devkings, en une nuit de fast-code, avec un sujet tenu secret</a> <img class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/4331.wlEmoticon-smile_65CF5610.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/4331.wlEmoticon_2D00_smile_5F00_65CF5610.png" />&nbsp;</li>
<li><strong>Le 21/09 </strong><a href="http://www.facebook.com/events/353673754711997/">ModernUI Dating: le Meet-Up de la communaut&eacute; d&eacute;veloppeurs Windows 8</a></li>
</ul>
<p>&nbsp;</p>
<p>Paris n&rsquo;est pas la seule ville concern&eacute;e par les &eacute;v&egrave;nements de rentr&eacute;e, en effet, nous organisons &eacute;galement un <a href="http://www.microsoft.com/france/msdn/evenements-developpeurs/#/Default.aspx?search=Tour%20de%20France&amp;year=2012">Tour de France Windows 8 pour les d&eacute;veloppeurs</a> (avec du Windows Phone Inside <img class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d'&oelig;il" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/4338.wlEmoticon-winkingsmile_4C6752D6.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/4338.wlEmoticon_2D00_winkingsmile_5F00_4C6752D6.png" />):</p>
<ul>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522530&amp;Culture=fr-FR&amp;community=0">Lille le 27/09</a></li>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522528&amp;Culture=fr-FR&amp;community=0">Nice (Sophia Antipolis) Le 02/10</a></li>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522529&amp;Culture=fr-FR&amp;community=0">Strasbourg Le 04/10</a></li>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522527&amp;Culture=fr-FR&amp;community=0">Nantes Le 09/10</a></li>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522532&amp;Culture=fr-FR&amp;community=0">Toulouse Le 11/10</a></li>
<li><a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032522531&amp;Culture=fr-FR&amp;community=0">Lyon Le 16/10</a></li>
<li><a title="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032527665&amp;Culture=fr-FR&amp;community=0" href="http://blogs.msdn.com/controlpanel/blogs/posteditor.aspx/Paris le 30/10">Paris le 30/10</a></li>
</ul>
<p>&nbsp;</p>
<h2>Comment faire pour se tenir au courant des &eacute;v&egrave;nements?</h2>
<p>Il faut suivre, car il y a plusieurs endroits clefs en fonction des types d&rsquo;&eacute;v&egrave;nements:</p>
<ul>
<li><a href="http://www.microsoft.com/france/msdn/evenements-developpeurs/">La page des &eacute;v&egrave;nements d&eacute;veloppeurs sur MSDN</a></li>
<li><a href="http://www.meetup.com/windowsapps/">Les Meetups Windows 8 sur meetup.com</a></li>
</ul>
<p>&nbsp;</p>
<p>et du cot&eacute; des communaut&eacute;s:</p>
<ul>
<li><a href="http://www.facebook.com/groups/win8dev/">La communaut&eacute; Windows 8 sur Facebook</a></li>
<li><a href="http://www.facebook.com/groups/devwp7/">La communaut&eacute; Windows Phone sur Facebook</a></li>
<li><a href="http://www.facebook.com/Developpeurs.net">La page D&eacute;veloppeurs sur FB (toutes technos)</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Annuaires d’APIs pour développeurs en mal d’idées</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/annuaires-dapis-pour-dveloppeurs-en-mal-dides</link>
      <pubDate>Fri, 13 Jul 2012 05:10:24 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/07/13/annuaires-dapis-pour-dveloppeurs-en-mal-dides/</guid>
      <description><![CDATA[J’ai souvent l’occasion de croiser des développeurs qui ont envie de coder mais pas vraiment d’idée...]]></description>
      <content:encoded><![CDATA[<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3060.idea_69D82E54.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3060.idea_5F00_69D82E54.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 5px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="idea" border="0" alt="idea" align="right" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/4540.idea_thumb_55DE9BBE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/4540.idea_5F00_thumb_5F00_55DE9BBE.png" width="202" height="202" /></a>J’ai souvent l’occasion de croiser des développeurs qui ont envie de coder mais pas vraiment d’idée d’applications – on dirait même que c’est une tendance car la plupart des hackathons auxquels j’ai assisté récemment commencent par des pitchs d’idées, avant de se lancer dans le code, pour constituer des équipes.</p>  <p align="justify">On ressort souvent les grands classiques du genre “branche toi sur une source opendata!” mais la vérité c’est que ces sources sont rarement dynamiques (paye ton bon gros fichier CSV statique) et que ce n’est pas évident d’en faire quelque chose d’utile (une énième copie d’iToilettes?).</p>  <p align="justify">Il existe pourtant sur le web quelques “annuaires” d’APIs, officielles ou pas, payantes ou pas, mais qui sont des mines d’idées, surtout quand on les combine entre elles! </p>  <ul>   <li>     <div align="left"><a href="http://www.programmableweb.com/">ProgrammableWeb</a></div>   </li>    <li>     <div align="left"><a href="http://developer.mashery.com/page">Mashery</a></div>   </li>    <li>     <div align="left"><a href="http://www.mashape.com/">Mashape</a></div>   </li> </ul>  <p align="justify">&#160;</p>  <p align="justify">Presque sur le même principe, certains sites proposent des outils pour créer des APIs: ils ont souvent une liste de références intéressantes de gens qui utilisent leur backend: <a href="http://blog.programmableweb.com/2011/10/19/api-service-provider-roundup/">cet article de ProgrammableWeb en liste 11</a>…</p>  <p align="justify">Enfin, n’hésitez pas à chercher dans les petites lignes en bas de vos sites favoris… il se pourraient bien qu’il y ait une API accessible sur laquelle le site ne fait pas vraiment de pub…</p>  <p align="justify">Dernier point (et pas des moindres) : toutes les APIs ont des conditions d’utilisation, et ce n’est pas parce qu’une API est ouverte sur le net, qu’elle est automatiquement libre de droit et utilisable par n’importe qui n’importe comment… si vous voulez évitez les lettres de type “cease &amp; desist” des ayant-droits des données… lisez les petites lignes!</p>  <p align="justify">Happy summer coding!</p>]]></content:encoded>
    </item>
    <item>
      <title>Prototyping a connected object using the .NET Gadgeteer: the example of a steampunk meteo station</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/prototyping-a-connected-object-using-the-net-gadgeteer-the-example-of-a-steampunk-meteo-station</link>
      <pubDate>Wed, 11 Jul 2012 11:00:57 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/07/11/prototyping-a-connected-object-using-the-net-gadgeteer-the-example-of-a-steampunk-meteo-station/</guid>
      <description><![CDATA[For years I’ve had this very old voltmeter I wanted to do something with: I liked the beautiful...]]></description>
      <content:encoded><![CDATA[<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/5008.clip_image0026_2D9C5145.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/5008.clip_5F00_image0026_5F00_2D9C5145.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: right; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image002[6]" border="0" hspace="12" alt="clip_image002[6]" align="right" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/2352.clip_image0026_thumb_1E85726B.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/2352.clip_5F00_image0026_5F00_thumb_5F00_1E85726B.jpg" width="201" height="238" /></a></p>  <p align="justify">For years I’ve had this very old voltmeter I wanted to do something with: I liked the beautiful wooden case, the leather strap, but honestly, I had better tools for my day to day electronics experiments. I found a purpose for it when I started experimenting with the .NET Gadgeteer kit, and one of my first prototype of connected object: a simple meteo station that would measure temperature, humidity and pressure and upload data to a feed in Cosm, formerly known as Pachube, which is a connected objects web platform used to publish and consume realtime data. I had two goals with this project: have fun with the .NET Gadgeteer kits, and experiment on a complete connected object prototyping cycle (I’m not going to talk about industrialization or mass production here). </p>  <p align="justify">Here’s the plan:</p>  <ol>   <li>     <div align="justify">Discovering the .NET Gadgeteer tooling, and interfacing with sensors</div>   </li>    <li>     <div align="justify">Connecting to Cosm (Pachube)</div>   </li>    <li>     <div align="justify">Creating the steampunk GUI</div>   </li>    <li>     <div align="justify">Making the meteo station user-configurable using a small webserver</div>   </li>    <li>     <div align="justify">Prototyping the finished design using 3D modeling tools</div>   </li> </ol>  <p align="justify">&#160;</p>  <p align="center"><font size="4">&gt;&gt; If you want to download the whole article in a Word document, </font><a href="https://skydrive.live.com/redir?resid=1544E7C8D3F81201!3361"><font size="4">here’s the link</font></a><font size="4">. &lt;&lt;</font></p>  <h3 align="justify">Discovering the .NET Gadgeteer tooling, and interfacing with sensors</h3>  <p align="justify">The .NET Gadgeteer is a rapid prototyping environment for connected objects. Kits are manufactured by Microsoft partners, like GHI Electronics (<a href="http://www.ghielectronics.com">http://www.ghielectronics.com</a>), Seed Studio (<a href="http://www.seeedstudio.com/depot/">http://www.seeedstudio.com/depot/</a>), or the Mountaineer Group (<a href="http://www.mountaineer.org/">http://www.mountaineer.org/</a>). The core libraries (based on the .NET Micro Framework: (<a href="http://www.netmf.com)/">http://www.netmf.com)</a>) are maintained by Microsoft and the community, while the hardware specific drivers and updaters are maintained by the different partner.</p>  <p align="justify">Therefore, there are 3 different packages to install on top of Visual Studio 2010 (any version, Express will do) to install the .NET Gadgeteer tools: the .NET Micro Framework base, the Gadgeteer Core, and the hardware specific SDK. In our case, we are going to use a FEZ Spider Kit from GHI Electronics as well as a couple of sensors and a Wifi module.</p>  <p align="justify">Once you have installed everything, you can create your first .NET Gadgeteer application. You are then presented with a “designer” view of your project: at this time there’s only one motherboard in the designer. Using the toolbox, you can add the modules you are going to use. Once you have all the modules you need, you can either click on the connectors to wire them manually or right-click anywhere on the designer and select “Connect all modules”. If you don’t know anything about hardware, this will show you how to connect modules to the motherboard. Once this is done, you’re ready to start coding!</p>  <p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/5008.clip_image0046_6B493901.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/5008.clip_5F00_image0046_5F00_6B493901.jpg"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image004[6]" border="0" alt="clip_image004[6]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/4011.clip_image0046_thumb_42CA56ED.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/4011.clip_5F00_image0046_5F00_thumb_5F00_42CA56ED.jpg" width="605" height="333" /></a></p>  <p align="justify">Click on Program.cs to dive into the source code. At this point there’s only the main entry point, and a debug instruction. However all the objects needed to control the hardware have already been instantiated (in the Program.Generated.Cs file) and can be used right away. For example, if you have a temperature sensor, you can directly subscribe to the MeasurementComplete event, that will fire whenever a new measure is ready.</p>  <p align="justify">In our case, we are going to use a timer to regularly measure the meteorological parameters (temperature, pressure, and humidity). Everytime the timer fires, we will ask the different sensors to start measuring and they will notify us through their respective MeasurementComplete event that a new measure is ready.</p>  <p align="justify">First register for sensor events:</p>   <pre class="code"><font size="2">temperatureHumidity.MeasurementComplete += <span style="color: blue">new </span><span style="color: #2b91af">TemperatureHumidity</span>.<span style="color: #2b91af">MeasurementCompleteEventHandler</span>(temperatureHumidity_MeasurementComplete);
barometer.MeasurementComplete += <span style="color: blue">new </span><span style="color: #2b91af">Barometer</span>.<span style="color: #2b91af">MeasurementCompleteEventHandler</span>(barometer_MeasurementComplete);</font></pre>

<p>&#160;</p>

<p align="justify">Then instantiate the timer and start it:</p>

<div align="justify">
  <pre class="csharpcode"><font face="Courier New">GT.<span style="color: #2b91af">Timer </span>SensorTimer = <span style="color: blue">new </span>GT.<span style="color: #2b91af">Timer</span>(<span style="color: #2b91af">TimeSpan</span>.FromTicks(<span style="color: #2b91af">TimeSpan</span>.TicksPerMinute));
SensorTimer.Tick += <span style="color: blue">new </span>GT.<span style="color: #2b91af">Timer</span>.<span style="color: #2b91af">TickEventHandler</span>(timer_Tick);
SensorTimer.Start();</font></pre>
  </div>

<div align="justify">And here’s the timer handler code:</div>

<div align="justify">&#160;</div>

<p align="justify"></p>

<pre class="code"><font size="2"><span style="color: blue">void </span><font color="#333333">timer</font>_Tick(GT.<span style="color: #2b91af">Timer </span>timer)
{
    barometer.RequestMeasurement();
    temperatureHumidity.RequestMeasurement();
}
</font></pre>



<p align="justify">At this point, you already have an object that regularly measure meteorological parameters. You can compile and run it directly on the .NET Gadgeteer kit by connecting it to a USB port on your PC. It’s not connected though; we will handle that in the next part.</p>

<h3 align="justify">Connecting to Cosm</h3>

<p align="justify">Before connecting to Cosm, we need to connect to a network. GHI Electronics offer different modules, we’ll talk about the Wifi Module, and the Ethernet (J11D) module .When purchasing anyone of them, pay attention that there are different references depending on the motherboard you’re using. Read the docs!</p>

<p align="justify">The Ethernet module is the easier to program: here’s the code to connect to a network using DHCP:</p>

<div align="justify">
  <pre><font size="2">ethernet.NetworkSettings.EnableDhcp();</font></pre>
</div>

<p align="justify">The static equivalent:</p>

<div align="justify">
  <pre class="code"><font size="2">ethernet.NetworkSettings.EnableStaticIP(<span style="color: #a31515">&quot;192.168.0.10&quot;</span>, <span style="color: #a31515">&quot;255.255.255.0&quot;</span>, <span style="color: #a31515">&quot;192.168.0.1&quot;</span>);
<span style="color: blue">string</span>[] dnsServers = { <span style="color: #a31515">&quot;192.168.0.1&quot;</span>, <span style="color: #a31515">&quot;192.168.0.2&quot; </span>};
ethernet.NetworkSettings.EnableStaticDns(dnsServers);</font>
</pre>
</div>

<p align="justify">There are a couple of events you can subscribe to be notified about Network changes:</p>

<div align="justify">
  <pre class="code"><font size="2">ethernet.NetworkDown += <span style="color: blue">new </span>GTM.<span style="color: #2b91af">Module</span>.<span style="color: #2b91af">NetworkModule</span>.<span style="color: #2b91af">NetworkEventHandler</span>(ethernet_NetworkDown);
ethernet.NetworkUp += <span style="color: blue">new </span>GTM.<span style="color: #2b91af">Module</span>.<span style="color: #2b91af">NetworkModule</span>.<span style="color: #2b91af">NetworkEventHandler</span>(ethernet_NetworkUp);</font></pre>
</div>

<p align="justify">The Wifi module is also very straightforward to configure: you are going to use the same code, only you need to join a network first:</p>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: #2b91af">WiFi_RS21</span>.<span style="color: #2b91af">WiFiNetworkInfo </span>wifiInfo = wifi.Search(<span style="color: #a31515">&quot;&lt;SSID&gt;&quot;</span>);
wifi.Join(wifiInfo, <span style="color: #a31515">&quot;&lt;KEY&gt;&quot;</span>);</font></pre>
</div>

<p align="justify">The second step is to set the system time. Since there’s no “backup” battery that saves the clock time, one has to set it everytime the system is powered. This is done with a small NTP library called MicroNTP extracted from the Micro Framework Toolkit: <a href="http://mftoolkit.codeplex.com/">http://mftoolkit.codeplex.com/</a></p>

<pre class="code"><font size="2"><span style="color: #2b91af">DateTime </span>UtcTime = <span style="color: #2b91af">NtpClient</span>.GetNetworkTime(<span style="color: #a31515">&quot;0.fr.pool.ntp.org&quot;</span>);
Microsoft.SPOT.Hardware.<span style="color: #2b91af">Utility</span>.SetLocalTime(UtcTime + <span style="color: blue">new </span><span style="color: #2b91af">TimeSpan</span>(<span style="color: #2b91af">TimeSpan</span>.TicksPerHour * 2));</font></pre>

<p align="justify">The NTP server returns the Coordinated Universal Time (UTC) therefore I add the timezone difference (+2H, hardcoded here for readability reasons, it would have to be a system parameter, we’ll see later how to create a settings system.</p>

<p align="justify">Once you’re connected to a network you need to send (and eventually, receive) data from Cosm (Pachube). It’s using a simple REST API and JSON serialization… you just have to pass your API key in the headers. Here’s how to send a simple webrequest posting data to your feed:</p>

<pre class="code"><font size="2"><span style="color: blue">public void </span>Post(<span style="color: #2b91af">IFeedItem </span>item)
{
    <span style="color: #2b91af">HttpWebRequest </span>req = (<span style="color: #2b91af">HttpWebRequest</span>)<span style="color: #2b91af">WebRequest</span>.Create(<span style="color: blue">this</span>.AssociatedAccount.EventsUrl + <span style="color: blue">this</span>.Id.ToString());
    req.Method = <span style="color: #a31515">&quot;PUT&quot;</span>;
    req.ContentType = <span style="color: #a31515">&quot;application/json&quot;</span>;
    req.UserAgent = <span style="color: #a31515">&quot;NetduinoPlus&quot;</span>;
    req.Headers.Add(<span style="color: #a31515">&quot;X-PachubeApiKey&quot;</span>, <span style="color: blue">this</span>.AssociatedAccount.ApiKey);
    req.Timeout = 1000;
    <span style="color: blue">if </span>(<span style="color: blue">this</span>.AssociatedAccount.HttpProxy != <span style="color: blue">null</span>)
        req.Proxy = <span style="color: blue">this</span>.AssociatedAccount.HttpProxy;

    <span style="color: blue">string </span>content = item.ToJson(<span style="color: blue">this</span>.Id);
    <span style="color: #2b91af">Debug</span>.Print(content);


    <span style="color: blue">byte</span>[] postdata = System.Text.<span style="color: #2b91af">Encoding</span>.UTF8.GetBytes(content);
    req.ContentLength = postdata.Length;

    </font><font size="2"><span style="color: blue">try
    </span>{
        <span style="color: blue">using </span>(<span style="color: #2b91af">Stream </span>s = req.GetRequestStream())
        {
            s.Write(postdata, 0, postdata.Length);
        }

        <span style="color: blue">using </span>(<span style="color: #2b91af">WebResponse </span>resp = req.GetResponse())
        {

            <span style="color: blue">using </span>(<span style="color: #2b91af">Stream </span>respStream = resp.GetResponseStream())
            {
                <span style="color: blue">byte</span>[] respBytes = <span style="color: blue">new byte</span>[respStream.Length];

                <span style="color: blue">int </span>length = respStream.Read(respBytes, 0, respBytes.Length);

                <span style="color: blue">string </span>respString = <span style="color: blue">new string</span>(System.Text.<span style="color: #2b91af">Encoding</span>.UTF8.GetChars(respBytes));
                <span style="color: #2b91af">Debug</span>.Print(respString);
            }
        }
    }
    <span style="color: blue">catch </span>(<span style="color: #2b91af">Exception </span>ex)
    {
        <span style="color: #2b91af">Debug</span>.Print(<span style="color: #a31515">&quot;exception : &quot; </span>+ ex.Message);
    }
    </font><font size="2"><span style="color: blue">finally
    </span>{
        req.Dispose();
    }
}
</font></pre>

<div align="justify">&#160;</div>

<div align="justify">I’m not going to go into many details about how Cosm works. Most of these networks (like OpenSenSe) have the same kind of APIs so feel free to adapt them. For your convenience I’ve wrapped my code into a very simple nuget package that you can find here:</div>

<div align="justify">&#160;</div>

<ul>
  <li>
    <div align="justify"><a href="https://nuget.org/packages/PachubeDAL-NETMF/1.0.2">https://nuget.org/packages/PachubeDAL-NETMF/1.0.2</a></div>
  </li>
</ul>

<p align="justify">&#160;</p>

<p align="justify">And the sources are on codeplex:</p>

<ul>
  <li>
    <div align="justify"><a href="http://pachubedal.codeplex.com/">http://pachubedal.codeplex.com/</a></div>
  </li>
</ul>

<p align="justify">&#160;</p>

<p align="justify">The use of this package is really easy: first, instantiate an Account object and pass it your API key. Then you can create as many feeds as you want (I only have one here, with 3 datasets), and use the Post() method to send directly data to it:</p>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: #2b91af">Account </span>pachube = <span style="color: blue">new </span><span style="color: #2b91af">Account</span>(<span style="color: #a31515">&quot;miQnUMICT-KjWhDwOxWQuycKTiuSAKxCWGgrdTNyaUNEND0g&quot;</span>);
<span style="color: #2b91af">Feed </span>meteoFeed = <span style="color: blue">new </span><span style="color: #2b91af">Feed</span>(44741, pachube);
</font></pre>
  <font size="2" face="Courier New">&#160;&#160;&#160;&#160;&#160;&#160; </font></div>

<div align="justify">
  <pre class="code"><font size="2">meteoFeed.Post(<span style="color: blue">new </span><span style="color: #2b91af">DoubleFeedItem</span>(<span style="color: #a31515">&quot;barometer&quot;</span>, sensorData.Pressure));</font></pre>
</div>

<div align="justify"><font face="Courier New"></font></div>

<p align="justify">There you have it – a connected meteo station, in a few lines of code. Now, let’s make use of that screen!</p>

<h3 align="justify">Creating the Steampunk GUI : reading and displaying images from the SD Card, and charting data.</h3>

<p align="justify">There are two ways to create a user interface using the .NET Micro Framework. Either using the very small subset of WPF, or, a bit like a game, create a display loop and use graphical elements and fonts, just like a game. In my case, I really want my interface to have a steampunk feeling so I’m going to use a lot of images. Since it will be sealed in a box, I have no need for touch interactions, so I’m going to go for the game-like approach. I’ll have a timer that will regularly draw all images, in the right order and at the right place, depending on the various data I have. The only “non-image” data that I’m going to display is a graph, and for that all I need is a SetPixel() method. It’s very easy.</p>

<p align="justify">The first step of the creation of the user interface was to work with a designer (<a href="http://blogs.msdn.com/b/designmichel/">Michel</a>, who’s part of my team) to create a bitmap of the finished interface. Then, Michel generated all the images necessary to compose the interfaces: all the numbers, the different meteorological symbols, the fake copper plate, etc. </p>

<p align="justify">I will store the graphical assets on an SD Card, and load them at startup : here’s how to check that the SD Card is present and mounted:</p>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: blue">if </span>(sdCard.IsCardInserted)
{
    <span style="color: blue">if </span>(!sdCard.IsCardMounted)
        sdCard.MountSDCard();

    <span style="color: #2b91af">Debug</span>.Print(<span style="color: #a31515">&quot;sd card mounted&quot;</span>);
}</font></pre>
</div>

<p align="justify">And the files are accessed this way:</p>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: blue">var </span>storage = sdCard.GetStorageDevice();

<span style="color: blue">for </span>(<span style="color: blue">int </span>i = 0; i &lt; 10; i++)
{
    Numbers[i] = storage.LoadBitmap(i.ToString() + <span style="color: #a31515">&quot;.bmp&quot;</span>, <span style="color: #2b91af">Bitmap</span>.<span style="color: #2b91af">BitmapImageType</span>.Bmp);
}</font></pre>
</div>

<p align="justify">Then there is a very simple API to display an image:</p>

<div align="justify">
  <pre><font size="2">display.SimpleGraphics.DisplayImage(MetalCover, 0, 0);</font></pre>
</div>

<p align="justify">The only thing I have to do to build my user interface is to combine them in the right order to draw the bitmaps on top of one another. The problem is that, as you have correctly read, I’m using… bitmaps. .NET Micro Framework only supports JPEG, GIF and Bitmap images . Luckily for me the Bitmap class has a method that I can call to specify that a specific color should be treated as transparent… so I can lay a square bitmaps on top of one another and using a specific color (a really ugly pink color in my case) give them a square look: here’s an example of a clock number, and the corresponding transparency API:</p>

<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/0383.clip_image0056_5D2A4A04.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/0383.clip_5F00_image0056_5F00_5D2A4A04.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image005[6]" border="0" alt="clip_image005[6]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/6560.clip_image0056_thumb_0DDD51B0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/6560.clip_5F00_image0056_5F00_thumb_5F00_0DDD51B0.png" width="320" height="240" /></a></p>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: #2b91af">Color </span>Transparent = <span style="color: #2b91af">ColorUtility</span>.ColorFromRGB(255, 0, 255);
MetalCover = storage.LoadBitmap(<span style="color: #a31515">&quot;FondTransp.bmp&quot;</span>, <span style="color: #2b91af">Bitmap</span>.<span style="color: #2b91af">BitmapImageType</span>.Bmp);
MetalCover.MakeTransparent(Transparent);</font></pre>
</div>

<p align="justify">The trick with such a technique (which is not very elegant, but quit effective) to build an interface is to have pixel perfect assets and placements. Work with your designer and be precise!</p>

<p align="justify">The last thing is to draw the graph. It’s not very complicated, either algorithmically or technically: I just store a list of measures in memory, discarding them as new ones come in, much like a queue with a fixed length. Then I go through every element, drawing them backwards from the latest one, and making sure I never get out of the rectangle in which I’m allowed to draw. Here’s the code for the whole Graph class:</p>

<pre class="code"><span style="color: blue"><font size="2">class </font></span><font size="2"><span style="color: #2b91af">Graph
</span>{
    <span style="color: blue">public </span><span style="color: #2b91af">ArrayList </span>Values;

    <span style="color: blue">public double </span>Max;
    <span style="color: blue">public double </span>Min;


    <span style="color: blue">public </span>Graph(<span style="color: blue">int </span>Capacity)
    {
        Values = <span style="color: blue">new </span><span style="color: #2b91af">ArrayList</span>();
        Values.Capacity = Capacity;
    }

    <span style="color: blue">public void </span>Add(<span style="color: blue">double </span>measure)
    {
        <span style="color: blue">if </span>(Values.Count == Values.Capacity)
        {
            Values.RemoveAt(0);
        }

        Values.Add(measure);
        UpdateMinMax();
    }

    <span style="color: blue">private void </span>UpdateMinMax()
    {
        <span style="color: blue">int </span>index = Values.Count - 1;

        <span style="color: blue">this</span>.Min = (<span style="color: blue">double</span>)Values[index] - 3.0;
        <span style="color: blue">this</span>.Max = (<span style="color: blue">double</span>)Values[index] + 3.0;
    }

    <span style="color: blue">public void </span>Draw(<span style="color: #2b91af">Display_T35 </span>display, <span style="color: blue">uint </span>x, <span style="color: blue">uint </span>y, <span style="color: blue">uint </span>height) </font><font size="2"><span style="color: green">// width == capacity
    </span>{
        <span style="color: blue">double </span>a,b;
        <span style="color: blue">uint </span>offset;

        <span style="color: blue">if </span>(Max &gt; Min)
            a = -(height / (Max - Min));
        </font><font size="2"><span style="color: blue">else
            </span>a = 0;

        b = y - a * Max;

        <span style="color: blue">for </span>(<span style="color: blue">int </span>i = 0; i &lt; Values.Count; i++)
        {
            <span style="color: blue">int </span>index = Values.Count - 1 - i;

            <span style="color: blue">if </span>(a == 0)
                offset = y + (height / 2);
            </font><font size="2"><span style="color: blue">else
                </span>offset = (<span style="color: blue">uint</span>)System.<span style="color: #2b91af">Math</span>.Round(a * (<span style="color: blue">double</span>)Values[index] + b);

            DrawPoint(display, (<span style="color: blue">uint</span>)(x + Values.Capacity - i), offset);
        }
    }

    <span style="color: blue">public void </span>DrawPoint(<span style="color: #2b91af">Display_T35 </span>display, <span style="color: blue">uint </span>x, <span style="color: blue">uint </span>y)
    {
        display.SimpleGraphics.SetPixel(Gadgeteer.<span style="color: #2b91af">Color</span>.Black, x, y);
        display.SimpleGraphics.SetPixel(Gadgeteer.<span style="color: #2b91af">Color</span>.Black, x + 1, y);
        display.SimpleGraphics.SetPixel(Gadgeteer.<span style="color: #2b91af">Color</span>.Black, x, y + 1);
        display.SimpleGraphics.SetPixel(Gadgeteer.<span style="color: #2b91af">Color</span>.Black, x + 1, y + 1);
    }

    <span style="color: blue">public double </span>Mean(<span style="color: blue">int </span>Count)
    {
        <span style="color: blue">if </span>(Count &gt; 0 &amp;&amp; Values.Count &gt; 0)
        {
            <span style="color: blue">var </span>max = (Count &gt; Values.Count) ? Values.Count : Count;

            <span style="color: blue">double </span>tmp = 0.0;
            <span style="color: blue">for </span>(<span style="color: blue">int </span>i = 0; i &lt; max; i++)
            {
                tmp += (<span style="color: blue">double</span>)Values[max - i - 1];
            }
            tmp /= max;

            <span style="color: blue">return </span>tmp;
        }
        </font><font size="2"><span style="color: blue">else
            return </span>0;
    }
}</font></pre>

<div align="justify">&#160;</div>

<div align="justify">You may also see that I have a vertical bitmap indicating the latest value of measured temperature: Placing it on the interface requires a small trick: since it’s very high, it’s far larger than the screen, so using simple maths to know, according to the temperature, which section I need, I just cut a small part of it and display this small part: here’s how I do it:</div>

<div align="justify">
  <pre class="code"><font size="2"><span style="color: blue">int </span>pixel = (<span style="color: blue">int</span>)(System.<span style="color: #2b91af">Math</span>.Round((<span style="color: blue">double</span>)(40 - Status.Temperature) * 16.3)) - 38;
<span style="color: blue">if </span>(pixel &lt; 0)
    pixel = 0;

<span style="color: #2b91af">Bitmap </span>tmpCopy = <span style="color: blue">new </span><span style="color: #2b91af">Bitmap</span>(TemperatureIndicator.Width, TemperatureIndicator.Height);
tmpCopy.DrawImage(0, 0, TemperatureIndicator, 0, pixel, 34, 109);
display.SimpleGraphics.DisplayImage(tmpCopy, 137, 120);</font></pre>
</div>

<p align="justify">There we have the user interface for a connected meteo station… if you look at connected object however, you will guess that most of them need some configuration (network, usernames…). The next part is about how to build a small webserver within the meteo station, with a small form to configure its parameters (timezone, etc).</p>

<h3 align="justify">Building a webserver and configuration interface within the meteo station</h3>

<p align="justify">There’s a sample project for .NET Micro Framework that works great, but the .NET gadgeteer makes it even simpler: there’s a WebServer class already included, with basic routing functionalities. We’re going to use it. We will store the HTML files on the SD Card, as well as a configuration file.</p>

<p align="justify">Starting a WebServer is as simple as one line of code:</p>

<pre class="code"><font size="2"><span style="color: #2b91af">WebServer</span>.StartLocalServer(ethernet.NetworkSettings.IPAddress, 80);</font></pre>

<p align="justify">To configure routing (i.e. associate code execution with specific URLs), use the WebEvent class:</p>

<pre class="code"><font size="2"><span style="color: #2b91af">WebEvent </span>webevt = <span style="color: #2b91af">WebServer</span>.SetupWebEvent(<span style="color: #a31515">&quot;Settings.htm&quot;</span>);
webevt.WebEventReceived += <span style="color: blue">new </span><span style="color: #2b91af">WebEvent</span>.<span style="color: #2b91af">ReceivedWebEventHandler</span>(webevt_WebEventReceived);</font></pre>

<p>Once the webevent is configured, calling “<a href="http://ip:port/Settings.htm">http://ip:port/Settings.htm</a>” will automatically trigger the execution of the handler associated with the string “Settings.htm”. What we need to do in the handler, is therefore to return, as an HTTP response, the content of the Settings.htm file. </p>

<pre class="code"><font size="2"><span style="color: blue">void </span>webevt_WebEventReceived(<span style="color: blue">string </span>path, <span style="color: #2b91af">WebServer</span>.<span style="color: #2b91af">HttpMethod </span>method, <span style="color: #2b91af">Responder </span>responder)
{
    responder.Respond(LoadHtmlFile(path), <span style="color: #a31515">&quot;text/html&quot;</span>);
}</font></pre>

<p>The Responder class makes it really easy to send an HTTP response, and takes a byte array as the first argument of its Respond method. This byte array is generated from an HTML file stored in the SD Card: </p>

<pre class="code"><font size="2"><span style="color: blue">private byte</span>[] LoadHtmlFile(<span style="color: blue">string </span>path)
{ 
    <span style="color: blue">byte</span>[] result = <span style="color: blue">null</span>;
    <span style="color: blue">var </span>storage = sdCard.GetStorageDevice();
    <span style="color: blue">using </span>(<span style="color: blue">var </span>stream = storage.OpenRead(wwwRoot + path))
    {
        <span style="color: blue">using </span>(<span style="color: #2b91af">StreamReader </span>sr = <span style="color: blue">new </span><span style="color: #2b91af">StreamReader</span>(stream))
        {
            <span style="color: blue">string </span>content = sr.ReadToEnd();
            result = <span style="color: blue">new </span>System.Text.<span style="color: #2b91af">UTF8Encoding</span>().GetBytes(content);
        }
    }

    <span style="color: blue">return </span>result;
}</font></pre>

<p>Once the form is submitted with the right parameters, it’s caught with another WebEvent, and the configuration is saved to the SD Card before sending the response:</p>

<pre class="code"><font size="2"><span style="color: blue">void </span>setparams_WebEventReceived(<span style="color: blue">string </span>path, <span style="color: #2b91af">WebServer</span>.<span style="color: #2b91af">HttpMethod </span>method, <span style="color: #2b91af">Responder </span>responder)
{
    <span style="color: #2b91af">Config </span>c = <span style="color: blue">new </span><span style="color: #2b91af">Config</span>();
    c.Name = (<span style="color: blue">string</span>)responder.UrlParameters[<span style="color: #a31515">&quot;Name&quot;</span>];
    c.UtcOffset = <span style="color: blue">int</span>.Parse(<span style="color: #2b91af">HttpUtility</span>.UrlDecode((<span style="color: blue">string</span>)responder.UrlParameters[<span style="color: #a31515">&quot;UtcOffset&quot;</span>]));

    SaveConfigToSdCard(c);

    responder.Respond(LoadHtmlFile(path), <span style="color: #a31515">&quot;text/html&quot;</span>);
}</font></pre>

<p>The HttpUtility class that I’m using is from the community and can be found here:</p>

<ul>
  <li>
    <div align="justify"><a href="http://informatix.miloush.net/microframework/Source/UAM/InformatiX/SPOT/Web/HttpUtility.cs">http://informatix.miloush.net/microframework/Source/UAM/InformatiX/SPOT/Web/HttpUtility.cs</a></div>
  </li>
</ul>

<p align="justify">&#160;</p>

<p align="justify">The SaveConfigToSdCard method is very simple:</p>

<pre class="code"><font size="2"><span style="color: blue">private void </span>SaveConfigToSdCard(<span style="color: #2b91af">Config </span>c)
{
    <span style="color: blue">var </span>storage = sdCard.GetStorageDevice();
    <span style="color: blue">using </span>(<span style="color: blue">var </span>stream = storage.OpenWrite(configFilePath))
    {
        <span style="color: blue">using </span>(<span style="color: #2b91af">StreamWriter </span>sw = <span style="color: blue">new </span><span style="color: #2b91af">StreamWriter</span>(stream))
        {
            sw.Write(c.ToString());
        }
    }
}</font></pre>

<p align="justify">The Config object stores all the parameters :</p>

<pre class="code"><span style="color: blue">public class </span><span style="color: #2b91af">Config
</span>{
    <span style="color: blue">public string </span>Name { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
    <span style="color: blue">public int </span>UtcOffset { <span style="color: blue">get</span>; <span style="color: blue">set</span>; }
        
    <span style="color: blue">public static </span><span style="color: #2b91af">Config </span>FromString(<span style="color: blue">string </span>str)
    {
        <span style="color: #2b91af">Config </span>res = <span style="color: blue">new </span><span style="color: #2b91af">Config</span>();
        <span style="color: blue">string</span>[] settings = str.Split(<span style="color: #a31515">'\n'</span>);
        res.Name = settings[0].Split(<span style="color: #a31515">':'</span>)[1];
        res.UtcOffset = <span style="color: blue">int</span>.Parse(settings[1].Split(<span style="color: #a31515">':'</span>)[1]);
            
        <span style="color: blue">return </span>res;
    }

    <span style="color: blue">public override string </span>ToString()
    {
        <span style="color: blue">return </span><span style="color: #a31515">&quot;name:&quot; </span>+ Name + <span style="color: #a31515">&quot;\n utcoffset:&quot; </span>+ UtcOffset.ToString();
    }
}</pre>

<p align="justify">As you see, the serialization/deserialization mechanism is as simple as possible. Since we’re on an embedded system with limited capabilities, the simpler the code, the faster it runs: no need for fancy XML or JSON serialization here.</p>

<p align="justify">You could use the same kind of mechanism to build an API for your object so that other devices could connect directly to it. In the present case, it’s not necessary since we publish feeds to Cosm: we can use Cosm APIs!</p>

<p align="justify">As anything with a configuration, one has to think of a mechanism for resetting to factory defaults. We could do that with a simple button and a timer, it’s not really interesting to detail it here, but you’ll have to think about it!</p>

<h3 align="justify">Cherry on the cake: Using 3D modeling tool to prototype the object</h3>

<p align="justify">There are two ways to build a “physical” object around an electronic kit such as the gadgeteer: either by trial and error, at the risk of using a lot more material than what’s needed, or by being modeling it either on paper or using 3D tools. The pen &amp; paper is a simple approach so it works for simple objects, but the gadgeteer teams contributed 3D models of most parts of the kits, and even if you can’t afford professional tools such as SolidWorks (personally, I can’t) there are some free tools that work really great. While researching the subject to prepare this article I’ve used 123D, but I also gave a shot at FreeCad, SketchUp, and even had Blender installed (useful for 3D format transformation). These tools manipulate different formats, and for example SketchUp doesn’t support STEP files natively (this is the format used for the gadgeteer models). So you want to be careful about the tool you choose depending on the input format for models, and the output format you wish to have. Especially if you want to model some parts using a 3D printer!</p>

<p align="justify">Getting used to a CAD tool takes some time. You’re not going to make complex parts and assemblies overnight, and you’ll spend quite a few hours learning keyboard shortcuts, navigation, and good practices to be efficient. What I found out is that it’s more efficient to follow a couple of tutorials, rather than try to prototype directly the object you need. Then work on individual parts. Then assemble them. Don’t try to do the whole thing in one project directly. Here’s an example of the work in progress for the internals of my meteo station:</p>

<p align="justify"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/8304.clip_image0076_25948916.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/8304.clip_5F00_image0076_5F00_25948916.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="clip_image007[6]" border="0" alt="clip_image007[6]" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/7142.clip_image0076_thumb_789F263A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/7142.clip_5F00_image0076_5F00_thumb_5F00_789F263A.png" width="495" height="272" /></a></p>

<p align="justify">It’s your call to see what method you prefer. For most of my projects I’ve been experimenting directly with hardware, but in this case, since I didn’t want to damage the case, and since I wanted to have a reuseable design, I decided to go with the CAD tools.</p>

<h3 align="justify">Conclusion</h3>

<p align="justify">In this article, we’ve gone through the process of prototyping every function of a connected object, from the sensors, to the network, and configuration. Hopefully you now understand:</p>

<ul>
  <li>
    <div align="justify">How to use the .NET Gadgeteer tooling</div>
  </li>

  <li>
    <div align="justify">How to connect sensors, and get data from them</div>
  </li>

  <li>
    <div align="justify">How to work with different kind of files on the SD Card</div>
  </li>

  <li>
    <div align="justify">How to build a simple user interface</div>
  </li>

  <li>
    <div align="justify">How to post them on the network</div>
  </li>

  <li>
    <div align="justify">How to interface with Cosm</div>
  </li>

  <li>
    <div align="justify">How to buld a webserver in your object</div>
  </li>

  <li>
    <div align="justify">How to build a configuration mechanism</div>
  </li>
</ul>

<p align="justify">&#160;</p>

<p align="justify">We also made use of a few toolkits (mftoolkit, HttpUtility, Pachube DAL, etc) that will hopefully help you, and concluded on the possibility to use CAD tools to physically design the object around the 3D models of the gadgeteer components. Now it’s your turn to build something!</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Phone 8 annoncé!</title>
      <link>https://docs.microsoft.com/archive/blogs/pierreca/windows-phone-8-annonc</link>
      <pubDate>Thu, 21 Jun 2012 04:46:28 GMT</pubDate>
      <dc:creator><![CDATA[PierreCauchois]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/pierreca/2012/06/21/windows-phone-8-annonc/</guid>
      <description><![CDATA[A l’occasion du Windows Phone Summit à San Francisco, Terry Myerson, Joe Belfiore et Kevin Gallo se...]]></description>
      <content:encoded><![CDATA[<p>A l’occasion du Windows Phone Summit à San Francisco, Terry Myerson, Joe Belfiore et Kevin Gallo se sont partagé la scène pour montrer les premiers éléments de Windows Phone 8. Certaines fonctionnalités, et certains éléments de la plateforme et du SDK ont été révélés… Vous pouvez en retrouver le contenu <a href="http://windowsteamblog.com/windows_phone/b/windowsphone/archive/2012/06/20/announcing-windows-phone-8.aspx">sur le blog de l’équipe Windows Phone</a> et <a href="https://channel9.msdn.com/Events/Windows-Phone/Summit">le webcast des 2 heures de keynote sur Channel 9</a>.</p>  <p>En substance, auront été abordées quelques nouveautés de l’expérience utilisateur et les fondations de la nouvelle plateforme de développement. A ce stade, ce n’est pas une vue exhaustive, il y aura d’autres bonnes surprises dans les semaines qui viennent <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-smile" alt="Sourire" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/3718.wlEmoticon-smile_372330E7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/3718.wlEmoticon_2D00_smile_5F00_372330E7.png" /> Notamment le SDK et les nouveaux outils de développement basés sur Visual Studio 11 plus tard cet été.</p>  <h1>Une nouvelle version majeure de Windows Phone</h1>  <p>La chose la plus importante à comprendre à propos de Windows Phone 8 est qu’il s’agit d’une nouvelle version de Windows Phone, ce n’est pas une simple mise à jour:&#160; en effet, le coeur de Windows Phone 8, c’est Windows 8! Et avec un nouvel OS, vient du nouveau matériel, et de nouvelles fonctionnalités… </p>  <ul>   <li>Les processeurs multi-coeurs </li>    <li>de nouvelles résolutions d’écrans: WXGA (1280x768) et 720p (1280x720) en plus de la résolution WVGA classique (800x480) </li>    <li>Le stockage amovible (Micro SD) </li>    <li>Différents usages du NFC (partage, paiement…) </li>    <li>Internet Explorer 10 avec un support de HTML5 et des performances Javascript sans précédent, et des fonctionnalités de sécurité, comme un filtre anti-phishing par exemple. </li>    <li>Un “wallet” permettant de stocker des cartes de paiement, mais aussi des bons de réductions, des billets, etc. Tout ça relié à des cartes SIM sécurisée. </li>    <li>Nokia Maps! et notamment la fonctionnalité “offline” permettant de stocker des cartes directement sur le téléphone, et un “vrai” guidage GPS, sans avoir besoin de la connexion de données. </li> </ul>  <p>Certains éléments de la nouvelle expérience utilisateurs ont également été abordés, notamment le nouvel écran d’accueil, qui étend le principe des tuiles dynamiques… avec 3 tailles différentes, toutes disponibles pour les applications!</p>  <p><iframe height="315" src="https://www.youtube.com/embed/25DKXGKblOw" frameborder="0" width="560" allowfullscreen="allowfullscreen"></iframe></p>  <p>Ces nouvelles fonctionnalités, ces nouveaux matériels pour la nouvelle génération de Windows Phones, rendent malheureusement impossible la mise à jour des téléphones existants vers cette nouvelle version de l’OS. Cela ne veut pas dire que les terminaux existants ne bénéficieront plus d’améliorations: au contraire, une mise à jour est également prévue pour ces terminaux: il s’agit de Windows Phone 7.8, qui bénéficiera par exemple du nouveau start screen!</p>  <h1>Windows Phone 8 pour les développeurs</h1>  <p>L’autre question qui vient immédiatement en tête quand on parle de changement de plateforme, c’est la question de la compatibilité avec les applications existantes… Il y en a quand même 100.000 sur le marketplace Windows Phone! La bonne nouvelle (qui avait déjà été annoncée d’ailleurs) c’est qu’elle sont entièrement compatibles avec Windows Phone 8, il n’y aura pas de problème pour les faire tourner sur la nouvelle plateforme, sans modification. Et il sera très facile des les modifier pour bénéficier des nouvelles fonctionnalités, étant donné qu’on retrouve le modèle de développement XAML/C#! En parlant de modèle de développement, en vrac, les nouveautés:</p>  <ul>   <li>Un modèle de développement en C++, natif, sera disponible! </li>    <li>On retrouvera également DirectX… si vous regardez la vidéo du lancement vous retrouverez même une démonstration du moteur Havok sur Windows Phone 8! </li>    <li>Des API de paiement “in-app” </li>    <li>La VoIP disponible pour les développeurs </li>    <li>Des améliorations du multitasking notamment la possibilité d’avoir une application en background avec le tracking GPS activé, par exemple pour les applications sportives! </li>    <li>Un contrôle WebBrowser basé sur IE10… accélération 3D du rendu des canvas, touch events… que du bonheur pour les développeurs HTML5/Javascript <img style="border-bottom-style: none; border-left-style: none; border-top-style: none; border-right-style: none" class="wlEmoticon wlEmoticon-winkingsmile" alt="Clignement d&#39;œil" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/03/13/metablogapi/0675.wlEmoticon-winkingsmile_7680E477.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-03-13-metablogapi/0675.wlEmoticon_2D00_winkingsmile_5F00_7680E477.png" /> </li> </ul>  <p>Il est encore tôt pour révéler à quel point les applications Windows 8 et Windows Phone 8 seront similaires… mais ça sera une belle histoire. Vous pourrez alors voir une nouvelle version de mes articles précédents sur les techniques de portage…</p>  <h1>Windows Phone 8 en entreprise</h1>  <p>Les besoins des entreprises sont au coeur de Windows Phone 8: tout le contenu du téléphone (OS, données…) sera crypté, et le téléphone supportera le boot UEFI sécurisé. Les Windows Phone seront manageables avec les mêmes outils avec lesquels les entreprises gèrent leur parc informatique de PC, et la plateforme applicative supporte les applications métiers, et notamment la possibilité de les déployer sans passer par l’infrastructure Marketplace. Il sera également possible pour les entreprises d’avoir leur propre “hub”, par exemple pour gérer les infos des employés et leurs applications métiers.</p>  <h1>Windows Phone 8 partout dans le monde</h1>  <p>Windows Phone 8 supportera 180 pays, 50 langages, y compris l’arabe, le turque, le farsi… autre bonne nouvelle, les mises à jour de la nouvelle plateformes pourront passer “over the air”, plus besoin de connecter le téléphone au PC. Enfin, tous les téléphones recevront les mises à jour pendant au moins 18 mois. Les premiers OEMs à s’être déjà engagé dans la course à Windows Phone 8 sont Nokia (qui étaient également nos invités sur scène) mais également Samsung, HTC, et Huawei.</p>]]></content:encoded>
    </item>
  </channel>
</rss>