Pierre's Embedded and Mobile Blog

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

Posts
  • Pierre's Embedded and Mobile Blog

    [La question qui tue] Portabilité des applications métier de Windows Mobile 6.5 vers Windows Phone 7

    • 12 Comments

    “Je suis un pro, j’ai fait le choix de Windows Mobile il y a des années, je vois plein de buzz positif autour de Windows Phone 7 mais il parait que la compatibilité n’est pas assurée… Or j’ai des collaborateurs avec des applications d’entreprise, comment je fais ?”

    Mauvaise nouvelle, il n’y a pas de réponse simple. Ce n'’est pas si grave que ça non plus, parce qu’il y a quand même toujours une réponse :) Chaque cas étant particulier c’est difficile de faire des généralités pertinentes, mais on va essayer quand même de se faire une opinion et de “dégrossir” le terrain. En tous cas, On va lister quelles questions et avec quelles informations appeler votre serviteur pour trancher sur une potentielle migration de Windows Mobile 6.x vers Windows Phone 7.

    L’usage: terminal durci ou pas?

    D’abord si vous faites dans les terminaux durcis… Windows Phone 7 ne devrait pas être dans vos plans. Je ne dis pas que ça n’arrivera jamais (qui sait de quoi le futur est fait…) mais ce n’est pas pour ce type de terminaux que cet OS a été pensé. Windows Phone 7 est avant tout grand public, et l’OS, le SDK, les applications et le mode de déploiement des applications ont été pensées avec le grand public en tête. En plus les spécifications matérielles minimales de Windows Phone 7 sont souvent incompatible avec le milieu durci (écran capacitif obligatoire par exemple).

    Ceci étant dit, il existe tout une population “d’information worker” qui utilisent un terminal grand public pour des taches métiers: commerciaux ou agents de terrain avec une application de CRM, chauffeurs, etc. Sans compter la volonté pour un certain nombre d’entreprises de faire une application “intranet” ou “note de frais”. Toutes ces populations pourraient être concernées par des applications métier sur un smartphone sexy avec Windows Phone 7. Ca vaut vraiment le coup de se poser la question. Ou plutôt les questions, car il n’y en a pas qu’une… et tant qu’à faire autant commencer par la question la plus épineuse: le déploiement de l’application en question sur les terminaux.

    Le déploiement passe obligatoirement par le Marketplace public

    C’est le point sensible. Autant on pourra quasiment toujours contourner une difficulté technique, autant, celle là, ce n’est pas possible. Votre application sera visible par tout le monde. Voire, téléchargeable part tout le monde (à condition d’y mettre le prix que vous fixerez). Ca peut être un showstopper, comme une grande force: après tout, un simple système d’authentification peut vous permettre de protéger votre application tout en garantissant que vous êtes visible sur le Marketplace: prenons un exemple simple: vous avez une application “note de frais” qui est customizable par chaque client: la configuration du client lui est propre et ne doit pas forcément se trouver sur Marketplace. Quelqu’un d’anonyme qui téléchargerait l’application pourrait la voir en mode “restreint” et avoir l’option de vous contacter pour en savoir plus: Marketplace devient alors un vecteur de publicité et de leads. Dans le même genre d’optique, vous pouvez aussi utiliser l’authentification pour débloquer par exemple l’accès à des services spéciaux (internes par exemple) et sans authentification proposer à vos clients une application publique qui pourrait leur servir indépendamment de votre backend.

    Si votre application est faite par l’interne, pour l’interne, le cas est plus délicat: quoiqu’il en soit Microsoft étudie toutes les possibilités pour offrir aux entreprises la possibilité de déployer leur application sans passer par les moyens du grand public et saura revenir, on l’espère le plus vite possible, avec des propositions: dans tous les cas, ce n’est pas encore annoncé, et donc pas encore roadmapé…

    La technologie / Les fonctionnalités

    Une fois l’écueil “publication sur Marketplace” passé, reste à savoir si vous pouvez implémenter votre application sur Windows Phone 7 et combien ça va vous coûter.

    Tout a changé avec Windows Phone 7: l’OS, mais aussi le SDK, et le modèle applicatif. Pour de plus amples informations, je vous conseille l’article Comprendre la plateforme Windows Phone 7 sur MSDN. Du coup, il n’y a pas de compatibilité binaire entre Windows Phone 7 et les versions précédentes de l’OS ou entre le kit de développement Windows Phone 7 et les kits de développement précédents. D’une manière ou d’une autre il faudra réécrire l’application. Toute? Pas forcément… tout dépend de votre technologie de départ et de la modularité de votre code. Si vous avez opté pour le Compact Framework par le passé, alors il y a de fortes chances que vous puissiez réutiliser vos couches métiers, même s’il faudra vraisemblablement revoir la partie réseau. En ce qui concerne la couche de présentation en revanche, elle est à oublier, il faudra tout refaire avec Silverlight. Si vous aviez opté pour des technologies natives (C/C++, Win32, MFC…) alors il faudra tout bonnement tout réécrire.

    Une fois la décision sur la réécriture/portage validée, il faudra s’intéresser aux fonctionnalités du SDK. La bonne nouvelle est qu’il y a 98% de chances qu’il soit possible d’écrire une application iso-fonctionnelle à l’ancienne, même s’il faudra surement utiliser quelques ressources de la communauté, et peut-être un peu de malice. En effet, sans background processing par exemple il faudra peut-être recourir à un service online et des notifications en push pour provoquer des synchronisations de données par exemple . Un autre exemple, s’il y a besoin d’une base de donnée locale, Microsoft n’a pas encore porté SQL CE sur Windows Phone 7, mais SQLite existe déjà dans la communauté. Du coup, il est fort probable que votre application puisse, moyennant un peu d’adaptation, être portée. En revanche, il faut rester honnête, certain scénarios vont être impossible à implémenter pour le moment : par exemple le suivi de véhicule avec une application tournant en background dans le téléphone et uploadant régulièrement sa position GPS (il faudrait que l’application soit affichée à l’écran pour que cela marche), ou alors l’accès aux couches basses ou aux API de l’OS comme l’interfaçage avec un équipement particulier qui requiert l’accès à un port série et une pile Bluetooth.

    Après cette longue lecture, vous devriez avoir une idée un peu plus claire mais pas forcément très positive de l’idée du portage de votre application: cela représente de toutes façons pas mal de travail. Mais ce travail peut en valoir la peine. Windows Phone 7 marque une nouvelle page de l’histoire des smartphones avec une ergonomie différente centrée sur l’utilisateur. A vous de voir en fonction des usages, des besoins de vos collaborateurs et de l’image que vous voulez véhiculer. Les points bloquants mentionnés tout au long de cet article sont-ils réellement bloquants? ils ne l’ont pas forcément été pour d’autres! Dans tous les cas, toute l’équipe mobile chez Microsoft saura répondre aux questions et dissiper les doutes éventuels. Cet article n’est là que pour expliquer la base, car encore une fois il est impossible de faire des généralités sur les applications métiers… Alors contactez-nous!!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Inscription sur Marketplace: les ressources pour s'en sortir dans toutes les situations

    • 11 Comments

    Ca maintenant quelques semaines qu’on peut s’inscrire et publier des applications sur Marketplace. Seulement voila, le processus d’inscription, dépendant de vos comptes existants sur d’autres plateformes Microsoft, peut s’avérer… complexe. Sans compter la validation d’identité par Geotrust, dont on reparle un peu plus bas, ou les formulaires pour être éligible au paiement.

    Aujourd’hui l’idée de Microsoft est d’unifier les comptes développeurs à travers un seul portail, l’App-Hub: ainsi, qu’on soit développeur XBox ou Windows Phone, un seul compte, un seul endroit pour gérer tout son portefeuille d’applications. Ce qui fait du sens vu qu’avec XNA Game Studio 4.0 il devient très facile de faire des jeux multi-plateformes.

    Donc avant toute chose… connaitre les pages de ressources du portail Microsoft:

    Parce que des fois, il suffit de lire la doc… Smile

    Ensuite, https://billing.microsoft.com/ est le site qui unifie les paiements que vous faites avec votre live id: il est donc important que les informations (personnelles, professionnelles, de facturation) qui y sont enregistrées soient valides et valables! Je vous recommande de passer par là dès le départ pour mettre les choses en ordre.

    Enfin, sachez que votre identité est vérifiée par Geotrust, une entité indépendante de Microsoft, et que Geotrust est censé, après votre inscription, vous envoyer un email relatant comment vérifier cette identité (cela consiste la plupart du temps à envoyer un simple scan de pièce d’identité). Pour les entreprises, si vous avez rempli le champ “approver” lors de votre inscription, l’approver en question recevra un email lui demandant de valider que vous avez le droit de poster des applications: cela permet à plusieurs collègues d’accéder au compte Marketplace de la société avec leur live id individuel par exemple. Ces emails sont automatisés… et peuvent donc arriver dans votre filtre antispam !! si vous ne recevez pas de contacts de la part de Geotrust parce que vous n’avez pas la main sur ce filtre antispam par exemple, ce n’est pas grave, vous pouvez toujours les contacter en direct:

    GeoTrust Customer Support
    http://www.geotrust.com/support
    Hours of Operation: Mon - Fri 05:00 - 17:00 (PST)
    Email:     cs-orders@geotrust.com
    Web:       http://www.geotrust.com
    Phone:     1-866-436-8787 or 1-678-366-8399 option 2
    Live Chat: http://www.geotrust.com/support

    Je ne peux que recommander leur Live Chat qui est extrêmement réactif.

    Pour info, certains développeurs ont trouvés une feinte pour se faire valider le compte plus vite: soumettre une application bidon qui oblige Geotrust à vous passer en mode “haute priorité”… je ne recommande pas cette méthode, qui surcharge évidemment l’équipe certification, qui a déjà fort à faire!

    Ensuite, vient le temps des formulaires à remplir pour se rendre éligible au paiement. (Avant toute chose.. sachez que je ne suis pas juriste… j’aide comme je peux…)

    Le formulaire W8-BEN est le seul absolument nécessaire pour se faire payer: il est à renvoyer à Microsoft. Vous pouvez le retrouver directement sur l’App-Hub dans la section “payee details” de votre compte.

    Maintenant, vous pouvez aller plus loin en demandant à être exempté du prélèvement à la source de l’impôt américain (c’est quand même 30%…). Pour cela il faut un numéro ITIN ou un EID, qui s’obtient auprès de l’IRS (l’institut qui gère les impôts américains). Pour obtenir ce numéro… il faut remplir un formulaire W-7, et pour justifier cette demande, utiliser la lettre de justification de Microsoft que vous pouvez générer directement depuis l’App-Hub. L’obtention de ce numéro ITIN permet de certifier que vous vous comportez correctement vis à vis de la loi Américaine, et de la loi de votre pays, et est sujette aux accords entre l’organisation des impôts de votre pays, et de l’IRS.

    On reprend:

    • Demander la lettre de justification de Microsoft
    • Remplir le formulaire W7 de l’IRS pour obtenir un numéro ITIN ou un EID
    • Remplir le formulaire W8-BEN en indiquant le numéro ITIN ou EID

    Ca peut prendre un peu de temps, et ça peut ressembler à la maison qui rend fou, mais c’est un processus légal et standard auquel n’importe quel citoyen est obligé de se conformer quand on reçoit des revenus depuis les US, indépendamment de Microsoft!! Sachez que vous pouvez retrouver toutes ces informations directement dans la section “payee details” de votre compte, et que l’IRS a une antenne à l’ambassade américaine qui est joignable par téléphone. A priori, les fiscalistes, comptables, etc sont censés comprendre toutes ces choses… si vous en avez dans votre entourage, faites vous aider!

  • Pierre's Embedded and Mobile Blog

    [Humeur] AppFab09: à un mois de la deadline, what’s cookin’?

    • 10 Comments

    AppFab09 c’est le concours d’applications pour Windows Mobile de Microsoft France: le but, pousser les gens à publier rapidement leur appli sur Marketplace. A la clef, des lots pour les meilleurs applications (campagne de pub, netbook, smartphones…) mais aussi pour “exciter” un peu, un abonnement MSDN pour les 60 premiers développeurs à publier leur application…

    Laissez moi redire (réécrire) ça calmement:

    Les 60 premières applications publiées se verront offrir un abonnement MSDN. Je ne parle pas des 60 meilleures, mais des 60 premières. Les meilleures parmi ces 60 auront les lots sus-mentionnés. Tout cela bien entendu à condition de s’être inscrit sur le site http://www.appfab09.fr

    Comme j’ai accès à la base des inscrits à AppFab09, je sais qu’il y en a plusieurs centaines… alors où sont les applis? quand je pense que ça prend à peine une heure d’écrire un équivalent d’iFart, et qu’il n’y en a même pas sur le marché Français… pas de trimmer mp3 pour fabriquer des sonneries, pas d’appli velib, pas d’appli pour les horaires de bus, même pas une calculatrice ou un convertisseur de devises… autant de créneaux pour se faire offrir rapidos un abonnement MSDN Premium, qui pour info, vaut dans les 2600 euros.

    Je rephrase: pour 75 euros, vous publiez une appli sur Marketplace dans le mois, vous avez 4 autres certifications offertes, et si vous êtes dans les 60 plus rapides, on vous offre un abonnement MSDN premium. Simple, non? Alors allez-y!!

  • Pierre's Embedded and Mobile Blog

    Internationalisez votre application Windows Phone 7

    • 8 Comments

    Le Marketplace de Windows Phone 7 autorise une diffusion mondiale de l’application, mais aussi des diffusions spécifiques dans des marchés localisés. Par exemple vous pouvez avoir envie de diffuser une version Française de votre application sur les terminaux en langue française, et en Allemand sur les terminaux allemands. C’est ce qu’on appelle la localisation. De la même manière, certaines valeurs se représentent différemment d’un pays à l’autre : par exemple la date s’écrit au format mm/jj/aaaa dans les pays anglo-saxons mais jj/mm/aaaa dans les pays francophones. En utilisant les bons outils, on peut indiquer au téléphone d’adapter son affichage en fonction des options choisies par l’utilisateur. C’est ce qu’on appelle la globalisation. Localisation et globalisation forment les deux mamelles de l’internationalisation d’une application, et se servent de plusieurs notions qu’il faut connaitre :

    La notion de culture se réfère à un ensemble de préférences (langage, monnaie, affichage des dates…) qu’on identifie par un code en deux parties : <langage>-<region>. Par exemple, en-us pour anglais-états-unis ou fr-fr pour français-France qui n’est pas la même chose que fr-ca (français-canada). Ce code peut aussi porter le nom de « Locale ».

    Il y a 3 types de « culture » dans le framework : « invariant » qui désigne justement l’absence de culture choisie, «  neutral » qui représente un langage sans association à une région particulière (fr par exemple) et specific qui représente une culture associée à la fois à un langage et une région.

    La classe CultureInfo nous permettra de récupérer les informations à propos de la culture comme celle qui a été paramétrée dans le système, le formatage des différents types de données (date, monnaie, etc) et jusqu’à un calendrier spécifique (et oui, le calendrier hébreu est différent du calendrier japonais !!)

    La notion d’encodage, qui est un outil pour représenter les différents caractères utilisés par une langue de façon numérique : les plus connus sont ASCII, UTF-8, Unicode… Il est bon de savoir que Windows Phone 7 utilise l’Unicode. La classe Encoding vous aidera à vous abstraire des problèmes potentiels d’encodage (par exemple lors du téléchargement de données qui ne sont pas encodées en Unicode)

    La globalisation et l’utilisation de la classe CultureInfo

    La première (et peut-être la seule) chose à savoir est qu’il existe deux instances de la classe CultureInfo dont se sert votre application : il s’agit des propriétés CurrentCulture et CurrentUICulture de l’objet Thread.CurrentThread. Cela permet de savoir par exemple comment un objet de type DateTime sera affiché lors de l’appel à sa méthode ToString(). Pour choisir la façon d’afficher ces types de données d’une manière qui n’est pas celle choisie à l’échelle du système (dans le menu Settings du terminal Windows Phone 7) il suffit de créer une nouvelle instance de la classe CultureInfo en lui passant en paramètre la locale souhaitée (par exemple fr-FR) et assigner cette instance aux propriétés CurrentCulture et CurrentUICulture.

    CultureInfo ci = new CultureInfo("fr-FR");
    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;

    La localisation – bien répartir ses ressources pour supporter proprement différents langages

    Comme par le passé avec le .NET Compact Framework, la première étape de la localisation consiste à utiliser des fichiers de ressources (extension .resx). On peut ajouter ces fichers avec dans le menu « Add -> Add New Item » en choisissant « Resource File ».

    clip_image002

    Attention, pour que le framework retrouve ses petits il faut adopter une stratégie de nommage particulière : d’abord un fichier de ressources par défaut qu’on nomme <NomDuFichierRessources>.resx  puis ensuite les fichiers de ressources localisées qu’on nommera de la façon suivante : <NomDuFichierRessources>.<Locale>.resx.

    Je vous conseille de commencer par créer uniquement le fichier par défaut, y insérer toutes vos chaines de caractères, et ensuite seulement, une fois que toutes les ressources par défaut sont créées, copier/coller et renommer le fichier pour les différentes cultures à supporter, avant de changer le contenu des chaines de caractères : de cette manière vous êtes sûr que toutes les chaines de caractères localisées ont le même nom indépendamment de la culture…

    Il faut ensuite définir la culture par défaut supportée par l’application (celle qui utiliser la fichier <NomDuFichierRessources>.resx). Pour cela dans l’explorateur de solution, cliquez sur le nom du projet et choisissez ses propriétés (Properties). Dans l’onglet Application, cliquez sur le bouton Assembly Information et dans la liste Neutral language choisissez la culture par défaut.

    clip_image004

    Dernière opération « manuelle » s’il en est, fermez votre projet et ouvrez le fichier .csproj dans un éditeur de texte : c’est fait un fichier xml. Trouvez le tag  <SupportedCultures> et ajoutez toutes les locales que votre application doit supporter (y compris la locale par défaut) dans ce tag, séparées par des points-virgules.

    <SupportedCultures>en-US;fr-FR;</SupportedCultures>
    

    Il ne reste plus qu’à utiliser ces fichiers de ressources dans votre projet : là encore, il faut suivre quelques étapes : c’est un peu plus compliqué qu’avec le .NET Compact Framework car il faut que ces chaines de caractères localisées soient accessible à la fois depuis le code et le XAML sous forme de ressources.

    D’abord, ouvrez chacun de vos fichiers ressources et dans la liste « Access Modifier » en haut de l’éditeur sélectionnez la valeur « Public ». Il faut le faire pour chacun des fichiers ressources.

    clip_image006

    Ensuite, il faut créer une nouvelle classe dans votre application (qu’on appellera comme on veut, j’utilise ici « LocalizedStrings » car c’est ce qui est suggéré par la documentation MSDN) dans laquelle on créera une propriété qui reverra vers ces fichiers de ressources fraichement créés : dans le bout de code suivant, LocalizedResources est le nom que j’ai choisi pour mon fichier de ressources, on retrouve donc une classe de ce type dans l’espace de nommage de mon application.

    public class LocalizedStrings
    {
        public LocalizedStrings()
        { }
    
        private static LocalizedResources locTestResources = new LocalizedResources();
        public LocalizedResources LocTestResources { get { return locTestResources; } }
    }

    Après ça, il faut ouvrir le fichier App.xaml et dans la section « <Application.Resources> » il faut rajouter le bout de code suivant :

    <Application.Resources>
        <local:LocalizedStrings xmlns:local="clr-namespace:LocalizationTest" x:Key="LocalizedStrings" />
    </Application.Resources>
    

    Si votre projet dispose de plusieurs fichiers de localisation, il suffit de rajouter des propriétés dans la classe LocalizedStrings.

    Enfin, il n’y a plus qu’à utiliser ces ressources dans le code XAML avec un simple Binding de la façon suivante :

    {Binding Path=LocTestResources.PageName, Source={StaticResource LocalizedStrings}}

    Et dans le code C#, c’est d’une simplicité déconcertante : il suffit d’accéder à la classe LocalizedResources :

    PageTitle.Text = LocalizedResources.PageName;

    Vous voilà maintenant en mesure de supporter plusieurs langages dans une même version de votre application, effort qui saura sans aucun doute séduire vos utilisateurs. Attention cependant à bien réfléchir à vos traductions !!

  • Pierre's Embedded and Mobile Blog

    Wake on Lan depuis votre téléphone

    • 8 Comments

    Soyez green, faites des économies d’énergie! Quoi, vous avez un serveur à la maison? assassin! Il ne sert pas forcément toute la journée en continu!

    Oui, mais le problème c’est qu’on a pas forcément idée de quand on pourrait en avoir besoin… il faudrait pouvoir l’allumer et l’éteindre à distance juste quand on en a besoin. La fonction Wake-On-Lan de la majorité des cartes mères récentes (traduisez, ATX, ca fait quand même un bail) est là pour ça: elle permet en envoyant un “magic packet” sur le port ethernet de réveiller la machine: c’est comme appuyer sur le bouton “ON” à distance.

    Ce qu’on va faire en quelques lignes, c’est écrire un petit programme qui nous permet de réveiller le PC ou son serveur à distance avec son téléphone mobile.

    Le “magic packet” est composé de 6 fois 0xFF suivi de 16 fois l’adresse MAC de la machine à réveiller: facile à générer!

    Byte[] OutputBuffer = new Byte[102];
    
    /* The first 6 bytes */
    for (int i = 0; i < 6; i++)
        OutputBuffer[i] = 0xFF;
    
    /* Then we parse the mac address, and put it into an intermediate buffer */
    String StrippedMacAddress = Regex.Replace(tbMac.Text, "[^a-f0-9]", "");
    
    if (StrippedMacAddress.Length != 12)
    {
        MessageBox.Show("Please enter the mac address formatted as xx:xx:xx:xx:xx:xx");
        return;
    }
    
    Byte[] MacAddressBuffer = new Byte[6];
    for (int i = 0; i < 6; i++)
    {
        String s = StrippedMacAddress.Substring(i * 2, 2);
        MacAddressBuffer[i] = Byte.Parse(s, System.Globalization.NumberStyles.HexNumber);
    }
    
    /* Then we copy this Mac address 16 times */
    for (int i = 6; i <= 96; i+=6)
        MacAddressBuffer.CopyTo(OutputBuffer, i);

    Plusieurs choses à souligner dans ce petit bout de code:

    • D’abord l’utilisation de l’expression régulière permet de ne pas avoir à s’occuper de savoir comment l’utilisateur formatte son adresse mac (avec des :, ou des – ou des .). Ensuite on teste le nombre de caractères, c’est basique, et pas forcément élégant mais bon ca évite que l’utilisateur ne rentre n’importe quoi. Certes certain format “corrects” ne passeraient pas le test, mais on veut aussi garder le code simple :)
    • Pour la copie x16 de l’adresse MAC, il vaut mieux la convertir en tableau de byte avant… Dans le code dont je me suis inspiré, celui qui avait écrit le code refaisait un parsing de la chaine de caractère à chaque itération! Sur ce genre de petits bouts de code, le gain en optimisation n’est pas forcément critique, mais ca ne doit pas empêcher de faire les choses intelligement, car sur un téléphone mobile, il y a d’autres applications qui tournent en même temps! :)
    • Pour l’incrément de boucle, il peut paraitre étrange, à la base j’avais écrit ça:
    for (int i = 1; i <= 16; i++)
        MacAddressBuffer.CopyTo(OutputBuffer, i*6);

    L’incrément est plus classique (i++) mais du coup on fait une multiplication à chaque fois. j’ai les multiplications en horreur (ça coute cher dans un micro embarqué) donc je préfère les éviter en utilisant i+=6. c’est surement du snobisme, mais bon… en attendant je gagne un tout petit peu de batterie :)

    Bref, il reste à envoyer ce “magic packet”, et c’est l’affaire de quelques lignes:

    /* We're finally ready to send the packet, so let's do it! */
    try
    {
        IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Parse(tbIpAddress.Text), int.Parse(tbPort.Text));
        UdpClient myUdpClient = new UdpClient();
        myUdpClient.Send(OutputBuffer, OutputBuffer.Length, remoteEndPoint);
        myUdpClient.Close();
    }
    catch (Exception ex)
    {
        MessageBox.Show("Problem sending the WOL Datagram:\r\n" + ex.Message, "Datagram not sent", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
    }

     

    Je n’inclue pas le code du formulaire, archi-simple, qui contient 3 text box et deux soft keys (à préférer aux boutons, non disponible dans le SDK standard pour les terminaux sans touchscreen!): un pour quitter, un pour lancer envoyer le magic packet: Vous aurez compris que tbMac est la TextBox pour l’adresse MAC, tbIpAddress pour l’adresse IP, et tbPort le numéro de port.

    Quoi, un numéro de port???

    Ben oui, parce que le serveur il est derrière une box, et donc il faut paramétrer la box pour laisser passer le magic packet par un certain port: choisissez celui qui vous plait! en fait la machine à réveiller n’en a rien à faire, du port sur lequel elle reçoit le magic packet: c’est juste histoire de passer le firewall!

    Merci Blaise pour l’idée, le bout de code de référence (même si c’était du VB!)!

     

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Les outils de développement en Français sont disponibles

    • 8 Comments

    Jusqu’à présent le kit de dev WP7 était dispo uniquement pour la version US de Visual Studio et Expression Blend. Les versions localisées sont enfin disponibles., y compris en Français!!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Toutes les nouveautés du SDK de Mango expliquées!

    • 8 Comments

    La future mise à jour de Windows Phone 7, nom de code « Mango », va apporter son lot de nouveautés en termes de fonctionnalités, et pour supporter ça, le SDK s’enrichit considérablement  : au programme, plus de 1500 nouvelles APIs, et pour commencer, le support de Silverlight 4 !! On va pouvoir profiter du multitasking, une base de données locale, des sockets, des nouvelles API pour les capteurs, plus de souplesse sur la gestion des tuiles et des notifications en push, l’intégration de Silverlight et XNA, de la réalité augmentée, l’accès aux contacts et au calendrier… et j’en passe.

    Le multitasking

    Le multitasking était interdit pour les applications tierces dans la première version du SDK, mais avec Mango il y a maintenant des scénarios spécifiques dans lesquels il sera possible de faire tourner du code en background.

    Un autre avantage avec le multitasking est la possibilité de revenir à une application sans temps de chargement. En fait par défaut avec Mango, l’application sera désactivée mais sa mémoire ne sera pas libérée : on dira que l’application sera « dormante ». La mémoire ne seralibérée que si c’est nécessaire, sachant qu’on peut avoir jusqu’à 5 applications dormantes en même temps. En revanche, il est possible qu’à un certain point, l’application soit tombstonée, c’est pouquoi quoi qu’il arrive il faudra faire de la sauvegarde de contexte. En revanche, au chargement, on pourra tester avec une simple API à tester si l’application est dormante ou tombstonée.

    En plus de « fast app switching », les API de multitasking introduisent 3 concepts :

    • Les services
    • Les agents
    • Le background processing « générique »

    Nous allons détailler ces 3 cas de multitasking dans les sous-parties suivantes.

    Les services

    Il devient avec Mango possible de piloter des services du système avec des API : par exemple, des alarmes (comme le réveil), et des reminders (comme ceux du calendrier). Un autre service accessible est la lecture audio en background (par exemple pour les applications radios) qui permettra d’utiliser l’API MediaStreamSource qui permet de customiser le pipeline audio (ce qui inclut la potentielle gestion des DRM ou des protocoles spéciaux). Le dernier service est le transfert de données en background qui permettra de télécharger des données même quand l’application sera dormante ou tombstonée. L’avantage de ce service est qu’il persiste même malgré un redémarrage du téléphone!

    Les agents

    Les agents permettent de faire tourner du code en background, dans un processus différent de l’application.

    On peut faire à peu près tout dans les agents : accéder au réseau, au GPS, mettre à jour les tuiles dynamiques, etc. En revanche évidemment on ne peut pas manipuler d’interfaces graphiques, ni le micro ou la camera.

    Les agents permettent d’ouvrir un certain nombre de scénarios comme la synchro de donnée, le tracking, la localisation sociale, etc.

    Le background processing générique

    Quand l’application ne tourne pas au premier plan (foreground) l’agent devra adopter l’un des deux types suivants :

    - Périodique : Exécute du code pendant 15 secondes toutes les 30 minutes

    - En mode inactif : quand le téléphone est branché sur le secteur, et sur une connexion qui n’est pas cellulaire.

    Les sockets

    Dans la première version du SDK le développeur ne disposait que des canaux http et https pour communiquer entre le téléphone et le cloud. Il sera maintenant possible d’utiliser des sockets, en TCP et en UDP, en Unicast et en multicast. Cette implémentation des sockets est donc elle-même plus riche que celle de Silverlight 4 !! Sur scène Jaime Rodriguez et Scott Guthrie ont démontré un client IRC qui, grâce à une librairie opensource déjà existante, aurait été codée (en tous cas c’est ce que veux la légende) en moins d’une heure ! Mais ce n’est pas la seule chose qu’on aura vu… car Joe Belfiore aura également annoncé Skype…

    Les tuiles et les notifications en push

    Avec la première version du SDK il y avait 2 moyens de manipuler les tuiles : avec des notifications en push, ou à intervalles réguliers avec l’API ShellTileScheduler. Et on avait 3 différents « champs » : le texte, un compteur, et l’image.
    Le SDK Mango introduit un nouveau modèle de programmation des tuiles, le modèle « local » qui permet d’éditer une tuile depuis l’application si elle est en foreground, ou depuis un background agent.

    Une autre nouveauté est de pouvoir avoir plusieurs tuiles par application : depuis l’application on pourra choisir d’afficher différentes tuiles, manipulables individuellement, et qui pourraient mener vers différentes parties de l’application.

    Dernière chose, il sera maintenant possible d’accéder aux deux faces de la tuile pour l’animer sur l’écran d’accueil et fournir plus d’infos aux utilisateurs !

    Les performances ont été grandement améliorées, à la fois entre le serveur et le téléphone, et à l’intérieur du téléphone. Et pour ceux qui se posent la question : non ce n’est pas du polling, oui c’est bien du Push.

    Enfin, la charge « embarquable » dans une notification passe de 1Ko à 4Ko, et le nombre maximal d’applications pouvant utiliser les notifications en push sur un terminal passe de 15 à 50.

    En ce qui concerne les toasts, il va maintenant être possible de « paramétrer » la notification afin de naviguer directement vers un endroit spécifique de l’application si on clique sur le toast.

    Des API d’accès à plus de ressources du téléphone : capteurs, contacts, calendrier…

    En premier lieu, de nouveaux launchers et choosers permettront d’accéder aux contacts, au calendrier, aux adresses des utilisateurs et de lancer l’application Bing Maps y compris pour des itinéraires. Il sera possible de manipuler des « alarmes » et des « reminders » pour enrichir l’expérience de votre application quand elle n’est pas lancée, et s’intégrer encore mieux dans le système. Mais ce n’est pas tout : il y aura également accès à plus de capteurs : la boussole, et même un gyroscope optionnel ! Non seulement aura-t-on accès à ces capteurs, mais aussi à un framework qui permettra de les manipuler et d’en intégrer facilement les données dans l’application. Enfin et ce n’est pas la moindre des nouveautés, les développeurs auront un accès direct à la caméra ! Les exemples de la keynote du MIX tournaient autour du scan de code-barres, mais aussi de la réalité augmentée! Dernier détail… il sera aussi possible de manipuler… les sonneries !

    L’intégration de Silverlight et XNA

    Dans la première version du SDK il fallait choisir entre une application XNA et une application Silverlight, avec Mango, on peut utiliser les deux dans la même application ! Non seulement il sera possible d’ouvrir, depuis une application Silverlight, une « page » qui utilise la game loop et le rendering XNA, mais il sera également possible de superposer des contrôles Silverlight au-dessus d’une scène XNA, et bien entendu, d’avoir des interactions entre les deux ! Je ne sais pas pour vous, mais moi quand je pense à ça et en même temps l’accès direct à la caméra, j’ai une grosse envie de réalité augmentée !

    Pour le fun, ce qui n’ont pas vu la keynote de MIX, vous pourrez la retrouver après l’évènement, vous devriez sauter directement vers 1h25 pour voir la démo énorme de Scott Guthrie à propos du sujet.. une bonne barre de rire en perspective !

    L’amélioration des outils de développement

    Les outils étaient déjà particulièrement sympas avec la v1 du SDK, mais nous avons reçu quelques feedbacks à propos de la simulation de l’accéléromètre et du GPS : avec Mango, ça sera possible !! La nouvelle version des outils incluera des outils pour simuler l’accéléromètre et le GPS dans l’émulateur. Les développeurs auront donc accès à une fenêtre en plus dans l’émulateur qui représentera le terminal en 3D et permettra de le manipuler dans l’espace, et pour le GPS, à une carte qui permettra de simuler des évènements GPS (nouvelle localisation, mais également, un trajet !).

    Une autre grosse demande que nous avons pris en compte est la possibilité d’instrumenter son code pour faire de l’analyse de performances, et directement dans Visual Studio, on pourra lancer une analyse de performance sur les temps d’exécution et les allocations mémoire, lorsque l’application tourne.

    La base de données locale

    Il est des applications qui ont besoin de manipuler de grandes quantités de données : que ce soit des applications avec des structures de données complexes (ce qui est le cas de beaucoup d’applications métiers), ou bien tout simplement avec de grandes quantités de données comme par exemple, une application dictionnaire. Dans ces cas, l’isolated storage, et le stockage de fichiers « à plat » n’est pas une option idéale. C’est pourquoi avec Mango nous rajoutons une base de données locale, et la possibilité d’interagir avec cette base de données avec des requêtes LINQ ! Les scénarios de requêtages vont bien sur être beaucoup plus performant et comme le démontrait Jaime Rodriguez sur scène à la keynote, l’implémentation par exemple de fonctions de recherches sera beaucoup plus simple !! Les fondations de cette base de données et de ce système de requêtage sont bien entendu SQL CE et ADO.NET.

    Il sera possible d’adopter une approche « code first » dans laquelle on créera les objets en code, qu’on « décorera » avec des attributs particuliers qui transformeront le modèle objet en une base de données, avec quelques API simples pour manipuler cette base à la main si besoin.

    Internet Explorer 9

    Le nouveau navigateur du téléphone intègre le support de HTML5, et même l’accélération hardware. Bonne nouvelle le contrôle WebBrowser d’une application Windows Phone se comportera de la même manière. Nous allons pousser les gens a utiliser les spécifications stables d’HTML5, et le navigateur intégrera le support de la geolocalisation par exemple. Comme avec Internet Explorer sur le PC la démarche de Microsoft est de supporter les standards stables qui garantissent l’expérience « same markup » pour tous les terminaux possibles et imaginables.

  • Pierre's Embedded and Mobile Blog

    [Vacances de Geek] Des kits Microframework pour hobbyistes qui déchirent du poney des bois à moins de 50$

    • 7 Comments

    Je ne parle pas assez souvent du .NET Microframework à mon goût dans ces pages, mais là, je suis en vacances, et donc je geeke, avec une petite trouvaille que j’ai fait sur internet la semaine dernière: les kits FEZ de chez GHI Electronics. Ces kits sont des merveilles pour hobbyistes: voici leur histoire (enfin, ce n’est que le début…)

    Etape 1: http://www.tinyclr.com

    Le site est pratique, clair, toute la doc, les schémas électroniques sont accessibles facilement (pas d’inscription ou de trucs comme ça)

    Le forum: pas énormément de trafic, mais il est régulier: et surtout on a une réponse directe de l’équipe de support en quelques heures (j’ai eu la réponse à ma première question en 12 minutes 37 secondes!!!!)

    La documentation est claire, facile à lire, même pour les débutants et mise à jour hyper régulièrement (dans les jours qui suivait, la doc reflétait la réponse à la question que j’avais posé sur le forum)

    Les SDK sont aussi mis à jour hyper régulièrement (ils ont déjà adopté le .NET MF v4!!)

    Etape 2: Le Matos

    Première constatation: y’a du choix! sur deux plateformes de base: La FEZ Domino à 99$ et la FEZ Mini à 49$ (FEZ, c’est pour “Freaking Easy”: on verra ça plus tard, quand on aura les mains dessus ;)).

    La FEZ Domino est une petite carte complète avec entrées/sorties, etc, la FEZ Mini est plus un “coeur” de système, qui est autonome et calculé pour s’intégrer dans quelque chose de plus gros (une carte de développement maison par exemple).

    Et la… épiphanie! énorme bonne surprise: hallucinante tellement c’est bon (oui, bon, ok, c’est difficile de transmettre ça en texte…)

    Ces deux plateformes sont justes les plus connues et les plus utilisées dans le monde de l’électronique hobbyiste et OpenSource. Il doit y avoir littéralement des centaines de milliers de robots et autres petits montages qui les utilisent…

    Et maintenant tous ces petits montages peuvent potentiellement êtres pilotés par des cartes .NET MicroFramework qui sait faire 1000000 de trucs en plus! (Webservices anybody? WPF? HTTPS? etc etc :))

    Il s’avère que j’ai moi même une Board of Education de chez Parallax et une carte Next Step v2 de chez Lynxmotion, qui sont toutes deux pilotées par un Basic Stamp… et hopla j’y met du MicroFramework :) Le truc le plus hallucinant: pour plus de puissance c’est moins cher!

    En plus des cartes de bases, on retrouve sur le site des extensions en tout genre:

    • Pour la Domino, des “shields” (c’est le même principe que les shields d’Arduino): des cartes d’extension qui s’empilent au dessus de la carte de base
    • Pour la FEZ Mini, un Starter Kit à 99$ (FEZ Mini inclue) qui permet de connecter une palanquée de capteurs et d’extensions (comme des écrans LCD, des modules Zigbee ou Bluetooth, et même une carte de décodage MP3!!)

    Etape 3: La commande

    Après 2 heures à examiner toutes les docs de toutes les extensions comme si c’était du pr0n, je fini par opter pour un Starter Kit FEZ Mini, avec un écran LCD en plus, et 2 FEZ Mini supplémentaires pour ma Board of Education et ma Next Step V2… Je m’inscris pour pouvoir passer commande (pas contraignante, l’inscription, 1 formulaire, 4 minutes) et là, j’avoue, première pillule pas évidente: ils n’acceptent de livrer que par FEDEX, c’est en gros 60$ de livraison. Ouch…
    2 jours plus tard, FEDEX m’appelle pour me dire qu’ils ont le matos et qu’ils livrent quand je veux :) j’ai rarement vu du matos comme ça livré aussi vite. On paye cher, mais c’est du service de qualité! Bon alors après le dédouanement (Encore Ouch, pas loin de 60 euros encore… pour 325$ de matos), faut déballer tout ça… La boite est propre, les composants sont là, bien emballés… On va passer au test :)

    Etape 4: Le test

    Téléchargement et installation du SDK facile depuis http://www.tinyclr.com, pas besoin de rentrer dans les détails. Ensuite on branche la carte et là le driver ne s’installe pas… normal, pour tous les kits .NET Microframework il faut installer le driver à la main, et c’est toujours la même chose: c’est dans Program Files/GHI Electronics/GHI NETMF SDK/Usb Drivers. Ca aussi, facile.

    Je récupère aussi le code de test du starter kit sur la bonne page du site, nouveau projet NET MF dans Visual Studio, je copie/colle le code, et je décide de le déployer directement sur la carte, comme d’habitude. Et là, une exception saute en me disant qu’il est impossible de trouver l’USBizi (c’est le chipset sur la carte FEZ Mini)… En fait c’est juste un soucis de firmware: un nouveau SDK est sorti la semaine dernière et nécessite un nouveau firmware qui n’était évidement pas celui de la carte qui avait été fabriquée avant… Encore une fois, la doc super claire m’a permis de résoudre la situation en moins de 10 minutes (tout est hyper détaillé dans la documentation: en voila le squelette… juste pour que vous vous rendiez compte de la rapidité de la chose):

    • Le petit utilitaire MFDeploy pour checker la version du firmware intallée… et constater que ce n’est pas la bonne
    • Passage de la carte en mode bootloader (Appuyer sur un bouton quoi) puis connexion au port USB et installation du driver “bootloader” de l’USBizi
    • Démarrage de TeraTerm et transfert en XModem du nouveau firmware… Et voila…

    Une fois le firmware flashé, je relance le projet, et ça y est, le programme marche. Etape suivante, je branche donc l’écran LCD, je télécharge le petit bout de driver depuis le site (c’est juste 1 page de C# à inclure dans le projet) et 3 minutes plus tard, avec du code simplissime (une ligne pour dire ou l’écran est branché sur le kit, et une deuxième qui est tout simplement l’appelle à une méthode Print), je pouvais écrire ce que je voulais (“Hello FEZ World” en l’occurence) sur l’écran… Hallucinant de simplicité… Pour ceux qui savent comment ça peut être em***ant de connecter proprement un LCD à un petit Microcontrolleur quand on est pas de ce monde là…

    Résumé de la situation

    • Yabon kits pas cher et livrés vite
    • Yabon code super simple et bien documenté
    • Yabon robots à base de MicroFramework très bientôt sur ce blog !!

    Allez faire un tour sur http://www.tinyclr.com: et commandez un peu de matos (non, je ne touche pas de comm!) ça serait bien qu’on puisse commencer à partager des petits montages funs avec le Microframework et ces kits low-costs mais high quality :)

  • Pierre's Embedded and Mobile Blog

    [Microsoft Days] Session sur Windows Phone 7 pour les développeurs

    • 6 Comments

    Les Microsoft Days c’est reparti, et les rencontres techniques commencent demain à Aix! J’aurai le plaisir d’y animer une session pour développeurs: “Silverlight et XNA: Développeurs, à vous le mobile”. L’occasion de se rencontrer et d’échanger :-)

    Le planning est le suivant:

    • Aix-en-Provence: 30 Septembre
    • Paris: 7 Octobre
    • Lyon: 12 Octobre
    • Toulouse: 14 Octobre
    • Strasbourg: 18 et 19 Octobre
    • Lille: 20 et 21 Octobre
    • Nantes: 02 et 03 Novembre

    Inscrivez-vous et viendez!

  • Pierre's Embedded and Mobile Blog

    Windows Phone 8 annoncé!

    • 6 Comments

    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 sur le blog de l’équipe Windows Phone et le webcast des 2 heures de keynote sur Channel 9.

    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 Sourire Notamment le SDK et les nouveaux outils de développement basés sur Visual Studio 11 plus tard cet été.

    Une nouvelle version majeure de Windows Phone

    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:  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…

    • Les processeurs multi-coeurs
    • de nouvelles résolutions d’écrans: WXGA (1280x768) et 720p (1280x720) en plus de la résolution WVGA classique (800x480)
    • Le stockage amovible (Micro SD)
    • Différents usages du NFC (partage, paiement…)
    • 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.
    • 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.
    • 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.

    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!

    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!

    Windows Phone 8 pour les développeurs

    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:

    • Un modèle de développement en C++, natif, sera disponible!
    • 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!
    • Des API de paiement “in-app”
    • La VoIP disponible pour les développeurs
    • 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!
    • 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 Clignement d'œil

    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…

    Windows Phone 8 en entreprise

    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.

    Windows Phone 8 partout dans le monde

    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.

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Comment marche le capability detection tool?

    • 5 Comments

    Le capability detection tool est un petit utilitaire en ligne de commande qui va permettre de scanner votre application afin de détecter automatiquement, en fonction des API utilisées, quelles sont les “capabilities” à indiquer dans le manifest de votre application. Il est critique d’indiquer les bonnes capabilities dès le début car par défaut, elles sont toutes activées: ces capabilties sont d’ailleurs indiquées sur la page de votre application sur Marketplace et pourrait donc induire l’utilisateur en erreur sur ce que fait votre application réellement…

    Le capabiltiy detection tool se trouve dans le dossier C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v7.0\Tools\CapDetect. il faut ouvrir un command prompt et appeler la ligne de commande suivante:

    CapabiltiyDetection.exe Rules.xml “CheminVersLeDossierDeVotreApplication”

    L’outil vous retournera alors directement dans la fenêtre de commande les capabilities à inclure dans votre manifest dans la section <capabilities> (le fichier WMAppManifest.xml se trouve en dépliant les Properties de votre application)

    WMAppManifest

    Comment marche cet outil? Il scanne en fait le code de votre application à la recherche des API qui nécessite certaines capabilities. Et les règles qui régissent cette détection sont justement indiquées dans le fichier Rules.xml qu’on spécifie dans la ligne de commande Smile Ce fichier est plutôt simple à comprendre: pour chaque capability, l’outil va chercher des namespaces, des classes ou des méthodes qui requièrent celle-ci.

    Par exemple:

    <Capability ID="ID_CAP_MICROPHONE" Type="Security">
            <Assembly Name="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553">
                <Namespace Name="Microsoft.Xna.Framework.Audio">
                    <Class Name="Microphone" />
                </Namespace>
            </Assembly>
    

    indique qu’on incluera la capability “ID_CAP_MICROPHONE” si on trouve une référence à l’assembly Microsoft.Xna.Framework, et qu’on utilise la classe Microphone définie dans le namespace “Microsoft.Xna.Framework.Audio”.

    Du coup si vous vous demandez pourquoi l’outil retourne une capability que vous ne croyez pas avoir besoin de spécifier: un petit coup d’oeil dans ce fichier Rules.xml pourra surement éclairer votre lanterne.

    Il arrive souvent par exemple que l’outil indique ID_CAP_NETWORKING alors que l’application ne fait pas forcément directement appel au réseau: mais le simple fait de spécifier une Uri locale dans du XAML (pour une image par exemple) peut faire que l’utilitaire détecte le besoin du réseau.. à tort. Laisser la clause using System.Net alors qu’on en a pas besoin provoque la même réaction… et cette clause est automatiquement ajoutée dans le template par défaut, il faut donc penser à bien nettoyer ses usings! Dans ce cas, vous pouvez enlever cette capability de votre manifest, mais attention tout de même à bien retester complètement votre application sans cette capability pour être sur que tout fonctionne quand même!!

  • Pierre's Embedded and Mobile Blog

    L’Accélérateur Windows Phone et les friday labs : du nouveau pour les développeurs mobiles

    • 5 Comments

    image

    L’Accélérateur Windows Phone, c’est une série de moyens mis à votre disposition, vous, les développeurs, pour vous aider tout au long de votre parcours sur la plateforme Windows Phone 7: formation, conception de l’application, compréhension du marketplace et de l’app-hub, jusqu’à la publication!

    Derrière ce programme se cache une “vraie personne” (pas un robot quoi) qui voue ses journées à vous aider, et qui va tacher de répondre à toutes vos requêtes:

    • Des ressources techniques: accès à l’app-hub offert, téléphones à disposition, support…
    • Du coaching: que ce soit de l’aide sur un point spécifique du développement, ou de la formation plus avancée (et gratuite) on devrait pouvoir vous aider à ne jamais vous sentir bloqué dans votre développement!
    • De la visibilité: que ce soit à l’évènement Le Web 11, sur Marketplace, ou à travers la réalisation d’une vidéo de promotion de votre application. Faisons en sorte que votre application soit un succès dès sa publication!

     

    Les friday labs, c’est tout simplement les portes de Microsoft France qui s’ouvrent tous les vendredis entre 10h et 18h pour les développeurs Windows Phone 7 qui souhaitent rencontrer des experts du développement Windows Phone 7, que ce soit pour du support technique, des feedbacks avisés sur une application, passer la certification… Bref, c’est l’occasion d’échanger, au sein du Microsoft Technology Center, sur le développement Windows Phone 7. N’oubliez pas de vous inscrire sur le site avant de passer!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7.5] Utiliser les réseaux sociaux pour faire connaitre votre application!

    • 5 Comments

    Avec Mango, le SDK Windows Phone 7.1 s’est enrichi de 2 launchers à dimension “sociale” : ShareStatusTask, et ShareLinkTask. Ces launchers permettent de publier sur Facebook, Windows Live, Twitter, des statuts ou des liens en utilisant le compte de l’utilsateur configuré sur le téléphone, sans avoir à passer par l’authentification du SDK Facebook. Ca rend le développement de composants sociaux de l’application beaucoup plus simple. Idée du jour: utiliser ces launchers pour que vos utilisateurs puissent partager leur usage de votre application, et le lien vers l’application elle-même !

    L’application qui va nous servir d’exemple est Klout Kikimeter. c’est une application que j’ai développé pour cet article (il fallait avoir quelque chose à partager!)… et qui permet de mesurer votre “influence en ligne” en utilisant Klout. Pas de jugement de valeur ici, mais bon, moi j’appelle ça “mesurer son kiki”.

    On va voir 2 usages différents de l’application: le premier, le plus simple, partager un statut. le deuxième: partager le lien, et en l’occurrence je vous propose de partager un lien directement vers l’application… L’utilisateur partageant ainsi le lien vers votre application, et ses contacts pourront directement lancer la version web de marketplace sur son PC, ou directement l’application Marketplace du téléphone (qui marche même depuis le hub people!)

    Premier cas d’utilisation: partager un statut

    Rien de plus facile: il suffit de faire appel à ShareStatusTask, c’est juste 3 lignes de code:

    ShareStatusTask sst = new ShareStatusTask();
    sst.Status = "Somebody measured a Kiki! " + TwitterScreenName + " scores " + Score.ToString() + " on Klout!";
    sst.Show();

    Ce qui nous donne l’expérience suivante :

    Screen Capture (2)

    Jusqu’ici c’est enfantin.. la partie suivante se corse un peu: nous allons essayer de partager un hotlink de notre application depuis le téléphone.

    Second cas d’utilisation: partager un hotlink vers son application, depuis le téléphone

    Pour cela, on utilise la ShareLinkTask, qui ressemble beaucoup à la ShareStatusTask:

    ShareLinkTask slt = new ShareLinkTask();
    slt.Title = "klout kikimeter";
    slt.Message = "I use this app to measure my kiki online! check it out! ";
    slt.LinkUri = new Uri("http://www.windowsphone.com/s?appid=2d2a85b1-d6ee-43f4-a302-4ada9fc606ea", UriKind.Absolute);
    slt.Show();

    et voila!

    Screen Capture

    En plus d’un message, vous pouvez voir qu’il faut un lien, et un titre. Hors au moment de la conception de l’application, le deeplink permettant d’ouvrir l’application Marketplace sur la bonne page n’existe pas encore (puisque votre application n’est pas publiée)!

    La méthode que j’avais trouvé à l’origine consiste à procéder en 2 temps… Une première publication de l’application, en mode cachée, créera l’ApplicationId qui permettra de publier une mise à jour après… et passer l’application en mode public. Ca crée un petit overhead, mais peu importe, car l’application n’a même pas besoin d’être complète! juste certifiable, car au fur et à mesure des mises à jour l’ApplicationId ne change plus.

    Mais depuis, Vivien Chevallier nous a trouvé une idée beaucoup plus propre… la solution sur son blog (un indice: il utilise le fichier WMAppManifest.xml)

    Voila, 2 petits trucs rapides pour rendre votre application un peu plus “sociale” et profiter du phénomène des réseaux sociaux pour faire votre pub!

    Si vous voulez aller plus loin dans la découverte des réseaux sociaux et de leur usage dans une application mobile, je vous invite également à regarder le webcast de cette session sur les APIs des réseaux sociaux, par Nicolas Humman aux Techdays 2012.

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Le SDK pour VS2010 RTM est disponible!

    • 5 Comments

    Nombre d’entre nous, développeurs mobiles, n’en pouvions plus de ne pouvoir installer la RTM de Visual Studio 2010, car le SDK pour Windows Phone 7 n’était compatible qu’avec la RC. La CTP Refresh vient corriger tout ça!

    Les outils sont comme d’habitude téléchargeables à partir de http://developer.windowsphone.com

    Les liens utiles:

    happy installing // happy coding!

  • Pierre's Embedded and Mobile Blog

    LiveMeeting sur la plateforme robotique Sumo de l'Imagine Cup

    • 4 Comments

    Jeudi 8 Janvier, à 18h30 se tiendra le LiveMeeting sur Microsoft Robotics Developer Studio et plus particulièrement le fonctionnement du service Sumo qui sera la plateforme du Round 1 de l'Imagine Cup.

    Sur environ une demi-heure, nous nous pencherons sur le squelette du service Sumo pour comprendre où écrire le code et « l’intelligence » du robot.

    Dans un second temps, nous aurons une discussion ouverte et nous répondrons aux questions afin que les participants soient prêts à installer et démarrer leur robot dès la fin du livemeeting

    Le lien d'inscription

    A jeudi!

  • Pierre's Embedded and Mobile Blog

    Windows Phone 7 Design Day: tout pour comprendre et vous former au design Metro, le 8 novembre au campus Microsoft

    • 4 Comments

    clip_image002

    Le 8 novembre, sur le Campus Microsoft à Issy-les-Moulineaux, on vous invite à rencontrer un des “Senior UX Designer” à l’origine de l’interface Metro de Windows Phone 7: Arturo Toledo.

    L’agenda est le suivant:

    • 10h: Bienvenue!
    • 10h15: metro: the foundation
      • Comprendre Metro, l’agencement, la typographie, les animations, les spécificités d’une expérience utilisateur sur téléphone
      • 11h: Pause!
    • 11h15: think: sketch, wireframe, prototype
      • Brainstorming créatif, techniques… la réflexion avant la conception
    • 12h: design: visual, interaction, motion
      • Le langage visuel, les graphismes, les animations et les patterns d’interactions
      • 12h45: déjeuner!
    • 14h: refine: best practices
      • bonnes pratiques, amélioration des performances perçues, utiliser les fonctionnalités du téléphone…
    • 14h45: make it XAML
      • importer du contenu dans Expression Blend, agencer et créer des contrôles…
      • 15h30: pause!
    • 15h45: workshop
      • démarrer une nouvelle application ou faites vous conseiller sur votre design!

     

    Voila quelques formations au design metro et quelques sessions sur le sujet auxquelles je participe, mais jamais encore je n’avais vu un planning d’évènement sur le sujet aussi bien gaulé (gauler étant un terme technique, bien entendu Clignement d'œil). Que vous soyez développeur Windows Phone 7 ou pas, je pense que vous allez en prendre plein la vue… il faudra vraiment y être!

    L’inscription c’est par ici!

  • Pierre's Embedded and Mobile Blog

    Update de l’AppHub Windows Phone 7: béta et distribution privée, nouveau SDK pub, nouveau dashboard….

    • 4 Comments

    Aujourd’hui se lance la version améliorée de l’AppHub, le dashboard développeur qui permet de publier une application sur le Marketplace Windows Phone 7… et c’est une sacrée update! De très nombreux feedbacks de notre communauté ont été intégrés, et la liste des nouveautés est impressionnante:

    Nouveaux modèles de distribution d’application: béta privée, et distribution cachée

    “Je veux pouvoir faire tester mon application avant de la publier!”

    Il est maintenant possible de proposer une beta à des utilisateurs en indiquant leur live ID dans le dashboard, sans passer de certification, et sans débloquer leur téléphone: ils recevront un email, et pourront télécharger l’application et l’utiliser pendant 90 jours. Limitée à 100 utilisateurs, forcément gratuite, et sans mécanisme d’update (i.e.. nouvelle version == nouvelle beta).

    “Je veux pouvoir distribuer mon application sans qu’elle soit visible!” ou bien “je veux un marketplace privé!”

    Pour ceux qui veulent déployer leur application en privé, il est aussi possible, après certification, de ne pas publier l’application mais obtenir un lien privé, sans contrôle d’accès: à vous de voir ensuite comment vous distribuez votre lien, et faites votre sécurité dans l’application! pas de limite en nombre d’utilisateurs ou en durée d’utilisation, et la possibilité d’utiliser le système d’updates pour pousser les nouvelles versions. il est aussi possible de passer l’application en distribution publique plus tard, et même de choisir si elle sera gratuite ou payante!

    Processus d’inscription simplifié pour les développeurs indépendants et les étudiants

    “J’en peux plus de Geotrust, ça fait 3 semaines que j’essaye d’ouvrir un compte pour débloquer mon téléphone!”

    Pour la catégorie Individual, une simple carte de crédit valide (qu’on rentre de toutes façons au moment de payer l’abonnement) suffit pour valider le compte, plus besoin de passer par le processus Geotrust. Pour les étudiants, le compte sera validé par dreamspark, et l’âge vérifié avec le Live ID, plus besoin de publier une première application, pour que le compte soit validé.

    Inscription, soumission d’apps, reporting… un dashboard beaucoup plus clair, avec des informations plus pertinentes

    “Je veux comprendre ce qui se passe avec mes applications!”

    Toutes les parties du dashboard Marketplace ont été grandement améliorées: le processus d’inscription est plus simple, plus pertinent (par exemple, on ne demande plus de remplir les informations bancaires pour les gens qui publient des applications gratuites). Le processus de soumission aussi bénéficie d’améliorations (le statut de certification est plus explicite par exemple). Enfin le reporting aussi est amélioré: daily downloads, crash counts, graphes consolidés de downloads, et surtout possibilité de les exporter..

    Le SDK de pub Microsoft Advertising bientôt disponible dans plus de pays, notamment la France!

    “Je veux pouvoir intégrer de la pub dans mon application et toucher des sous-sous!”

    Disponible auparavant uniquement aux états-unis, on pourra bientôt intégrer le SDK “officiel” de pub in-app de Microsoft dans les applications, notamment en Europe et en Asie… Vous retrouverez à l’occasion un article sur ce blog pour vous en parler!

    Plus de pays pour soumettre des applications, et pour les distribuer!

    “Je veux que mon application soit visible par le monde entier!”

    Une amélioration sensible pour tous ceux qui publient une application à vocation internationale: vous allez maintenant pouvoir régionaliser votre application pour 19 pays de plus (incluant le Brésil, l’Argentine et la Colombie, l’Inde, l’Afrique du Sud, certains pays d’Europe de l’Est dont la Pologne, la Russie…) et publier votre application depuis 9 pays de plus (dont la Chine, l’Inde, l’Afrique du Sud…). Enfin le global publisher program continue d’être disponible pour tous les pays qui ne sont pas encore listés dans ces listes…

    Soumission d’applications pour Mango dès le mois prochain!

    “Mon application est prête je veux pouvoir la distribuer aux gens qui ont déjà installé Mango!”

    Patience, ça arrive! une version RC des outils devrait arriver d’ici la fin Août et avec ça la possibilité de soumettre des applications sur Marketplace directement à destination des terminaux Mango!

    Toutes ces nouveautés sont également détaillées sur le blog officiel des développeurs Windows Phone 7.

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Petit outil utile : l'Isolated Storage File Explorer

    • 4 Comments

    La plupart des applications utilisent l’isolated storage pour stocker des préférences, des données, faire un cache, etc. Il est parfois difficile de “debugger” l’isolated storage: ne serait-ce que voir ce qu’il y a dedans, ou vérifier qu’une sauvegarde s’est effectuée correctement. En plus il faut pouvoir gérer l’évolution de l’isolated storage au fur et à mesure des updates de l’application, car il n’est effacé qu’à la désinstallation complète, pas pour une update. Un explorateur de fichier pourrait être bien utile… mais jusqu’à il y a peu ça n’existait pas… jusqu’à peu Smile

    Le projet Windows Phone 7 Isolated Storage File Explorer sur codeplex résoud cette problématique: il offre la possibilité de naviguer dans l’Isolated Storage d’un Windows Phone 7 ou d’un émulateur depuis un petit utilitaire Windows indépendant, ou même directement à l’intérieur de Visual Studio!

    La documentation explique le processus tout à fait simplement:

    D’abord, on ajoute la référence:

    IsolatedStorageFileExplorer

    Ensuite, on lance le service, par exemple à l’intérieur de l’event handler Application_Launching (dans App.xaml.cs)

    IsolatedStorageExplorer.Explorer.Start("localhost");

    Et après y’a plus qu’à utiliser le petit soft livré dans l’installer dont le raccourci est disponible dans le menu démarrer, ou bien dans le menu “other windows” de Visual Studio Smile

    209664     209663

    Développeurs, si vous utilisez cet utilitaire, n’oubliez pasd’enlever la référence et le code qui va avec dans votre application une fois le debuggage de l’Isolated Explorer fini, si vous ne voulez pas que vos utilisateurs explore votre espace de stockage!!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Animations “Tilt” sur des contrôles, et transitions entre les pages

    • 3 Comments

    Metro, le langage de design de Windows Phone 7, encourage l’utilisation des animations et du mouvement  dans l’interface graphique. Utilisées avec parcimonie, animations  des contrôles et transitions de pages fournissent un feedback visuel à l’utilisateur sur ce qui se passe sur le téléphone : par exemple confirmer à l’utilisateur qu’il a tapé sur le bon élément d’une listbox en le faisant “tilter” (l’élément va légèrement pivoter sur lui-même, s’enfoncer en quelque sorte dans l’interface. Malheureusement le SDK Windows Phone 7 de base ne contient pas d’animations à réutiliser pour “imiter” le comportement natif. Et il n’est pas trivial de redévelopper ces animations. Heureusement, Le Silverlight Toolkit est là pour nous aider.

    Utiliser un Tilt Effect comme feedback visuel

    Pour gérer le feedback visuel de l’appui sur un contrôle de l’utilisateur, le “tilt” est l’animation la plus utilisée dans Metro. On trouve dans les sample codes Windows Phone 7 sur MSDN exactement cet effet, implémenté sous la forme d’un DependencyObject. Le code d’exemple est fourni sous la forme d’une solution qui montre comment se servir de cet effet. Il faut d’abord importer le fichier TiltEffect.cs dans notre propre solution:

    SolutionTiltEffect

    Ensuite il faut référencer son namespace,, directement dans le XAML:

    xmlns:local="clr-namespace:ControlTiltEffect"
    

    Enfin, il reste à utiliser la propriété TiltEffect.IsTiltEnabled pour activer ou désactiver cet effet sur tous les enfants du contrôle sur lequel on applique ce DependencyObject.  Par exemple l’appliquer aux éléments d’une ListBox:

    <ListBox local:TiltEffect.IsTiltEnabled="True">
    

    On peut aussi choisir de l’appliquer à une page entière (en utilisant cet attribut directement au niveau de la PhoneApplicationPage) puis choisir de “supprimer” ce TiltEffect sur certains éléments (comme par exemple les boutons, qui bénéficient en général d’autres mécanismes de feedback visuel. Dans ce cas là on peut utiliser l’attribut suivant:

    <Button local:TiltEffect.SuppressTilt="True" />

    Insérer des transitions entre les pages d’une application

    Les transitions sont utilisées pour rendre la navigation entre les pages plus naturelle et fluide. Le Silverlight Toolkit permet d’utiliser toute une bibliothèque de transition entre les pages, dont certaines imitent celles de l’interface native. On va ainsi retrouver les transitions suivantes:

    • roll et rotate qui sont plutôt des transitions pour passer des modes portraits à paysage et dont on peut régler le sens
    • slide qui permet de faire glisser la page vers n’importel quel coté, en entrée ou en sortie
    • swivel qui fait pivoter la page sur l’axe des X en entrée ou en sortie.
    • turnstile, qui rappelle une page qui se tourne, dans un sens ou dans l’autre

    L’intégration de ces transitions est extrêmement simple et en deux étapes: d’abord, il faut changer une ligne de code dans le fichier app.xaml.cs: plus précisément, dans la méthode InitializePhoneApplication, on instancie une PhoneApplicationFrame qu’on assigne à l’objet RootFrame. Pour utiliser les transitions du Silverlight Toolkit, il faut instancier une TransitionFrame à la place:

    RootFrame = new TransitionFrame();

    Ceci étant fait, il ne reste plus qu’à intégrer, en XAML, la transition souhaitée, page par page. Par exemple, pour des transitions de type Turnstile en entrée et sortie de page:

    <toolkit:TransitionService.NavigationInTransition>
        <toolkit:NavigationInTransition>
            <toolkit:NavigationInTransition.Backward>
                <toolkit:TurnstileTransition Mode="BackwardIn"/>
            </toolkit:NavigationInTransition.Backward>
            <toolkit:NavigationInTransition.Forward>
                <toolkit:TurnstileTransition Mode="ForwardIn"/>
            </toolkit:NavigationInTransition.Forward>
        </toolkit:NavigationInTransition>
    </toolkit:TransitionService.NavigationInTransition>
    <toolkit:TransitionService.NavigationOutTransition>
        <toolkit:NavigationOutTransition>
            <toolkit:NavigationOutTransition.Backward>
                <toolkit:TurnstileTransition Mode="BackwardOut"/>
            </toolkit:NavigationOutTransition.Backward>
            <toolkit:NavigationOutTransition.Forward>
                <toolkit:TurnstileTransition Mode="ForwardOut"/>
            </toolkit:NavigationOutTransition.Forward>
        </toolkit:NavigationOutTransition>
    </toolkit:TransitionService.NavigationOutTransition>
    

    Et c’est tout!

    Vous n’avez maintenant plus d’excuse pour intégrer les “mouvements” de base de Metro. Mais attention à ne pas en abuser: plus une animation est utilisée (voire sur-utilisée), plus elle perd de sa valeur dans l’interface!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Slides et codes d'exemple de l'Après-Midi du Développement du 3/12/2010

    • 3 Comments

    Et voila à peine le temps de le préparer qu’il est déjà passé cet après-midi du développement sur le thème de “la dissection du SDK Windows Phone 7”. On aura parlé des API, hardware et software, du tombstoning et des notifications en push, de Metro, analyse de performances et une fin sur Marketplace, et notamment ses règles. Merci à tous les présents! Merci également à Julien et Simon qui ont animé avec moi ces 4 heures de présentations particulièrement denses.

    En attendant le webcast, voici déjà les slides et les codes d’exemple que j’ai montré:

     

    Ou bien tout simplement le lien vers le dossier Skydrive contenant la totale:

    Encore un grand merci à tous, et rendez-vous dès le 15/12, toujours au campus, pour un après-midi du développement sur l’asynchronisme!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Localisez le titre ou le nom de votre application

    • 3 Comments

    Suite à mon premier article sur la localisation, ou plutôt d’une manière générale l’internationalisation d’une application Windows Phone 7, j’ai eu pas mal de retours sur le fait que la méthode qui consiste à utiliser des fichiers de ressources ne marche qu’à l’intérieur de l’application, mais pas pour le titre de l’application en lui-même: celui qui apparait sur le système et éventuellement sur la vignette dynamique qu’on peut accrocher à l’écran d’accueil. Pour ce cas précis, il faut utiliser une autre méthode… plus complexe, qui est détaillée sur cette page MSDN:

    • Créer un projet DLL Win32 qu’on appellera AppResLib.dll
    • Ajouter dans les ressources une table de chaines de caractères qui ne contient que le titre de l’application et le titre à afficher sur la vignette dynamique
    • Builder la DLL et renommer le résultat en AppResLib.dll.xxxx.mui avec xxxx qui peut être 0409 pour en-US, 040c pour fr-Fr, 0407 de-DE, 0410 pour it-IT, 0809 pour en-UK et 0c0a pour sp-SP.
    • La rebuilder et la renommer (en oubliant pas de changer les chaines de caractères) pour chaque langue qu’on vise
    • Déplacer tous les fichiers renommés dans le répertoire du projet Windows Phone 7 et les inclure en tant que “Content” dans le projet
    • Modifier le fichier WMAppManifest.xml pour utiliser ces chaines de caractères de la DLL.

    Le processus détaillé sur MSDN

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Développeurs, avez-vous passé votre téléphone à Mango?

    • 3 Comments

    Depuis la beta 2 des outils (fin Juillet) il est possible de passer son téléphone à une ROM beta de Mango. Si vous avez déjà un compte sur l’App-Hub vous avez surement déjà reçu un email d’invitation à cette beta, hébergée sur Connect. (Si vous ne retrouvez pas cet email, vérifiez votre dossier spam… l’invitation vient de msftconn@microsoft.com.

    Le processus de mise à jour est relativement sans risque, mais il faut quand même être conscient qu’il fait perdre la garantie constructeur. Point extrêmement important tout de même, n’oubliez pas l’étape de backup du téléphone, car il sera nécessaire d’utiliser ce point de restauration pour revenir à Nodo avant la mise à jour officielle et de production de Mango.

    Si vous n’avez pas encore de compte développeur, c’est le moment d’en créer un! C’est de toutes façons obligatoire pour publier une application (Si vous ne cherchez pas à faire d’applications juste à profiter de Mango, cette béta n’est pas pour vous). Rendez-vous sur l’App-Hub avec votre LiveID, et suivez le guide.

    Une fois le compte créé, vous pouvez demander une invitation à la beta en passant par ce formulaire en ligne. N’oubliez pas de bien lire les instructions, de bien respecter le backup du téléphone (et le backup du backup) et prévoyez entre 1 et 2 heures de votre temps…

    Je profite de ce post pour vous rappeler qu’avoir la beta de Mango sur le téléphone ne suffit pas: il faut aussi télécharger les outils de dev, et mettre à jour vos toolkits. Pour l’instant on est à la Release Candidate des outils. Pas d’inquiétude pour autant quant à la stabilité de votre machine de dev, la béta de Mango étant parfaitement stable pour continuer à développer pour la version actuelle de Windows Phone 7 (et oui, vous allez voir, vous allez peut-être continuer un peu…)

    Pour que l’installation des outils se passent bien assurez-vous de désinstaller d’abord l’ancienne version des outils, et du client Zune. Attention choisissez bien dans votre panneau de configuration le meta-installer (Windows Phone 7.0 SDK – ENU). Vérifiez avec la fonction recherche qu’il n’y a plus rien qui concerne Windows Phone 7 avant de vous lancer dans la nouvelle installation.

    Enfin, avant de passer votre application à Mango, relisez bien ce post qui décrit ce que fait Marketplace avec les updates Mango des applications. Une fois que vous aurez publié une mise à jour de votre application pour Mango, vous ne pourrez plus poster de mises à jour pour la version pré-Mango de votre application… qui continuera à être téléchargée par tous les gens qui n’ont pas encore migré !! Réfléchissez donc bien au timing de votre mise à jour et aux besoins de vos utilisateurs!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone] le SDK Windows Phone 7.1 est disponible en version finale (RTW) et en français

    • 3 Comments

    wp7sdk71rtwC’est encore une annonce sur le blog développeurs Windows Phone 7 qui nous l’apprend, le SDK Windows Phone 7.1 (pour Mango) est arrivé en version finale (RTW: Release To Web). Il est disponible en version multilingue, c’est à dire que vous pouvez l’installer en Français! Il vous suffit de choisir votre langage dans la liste déroulante sur la page de téléchargement.

    Quelques points qui me paraissent intéressants à souligner:

    • Le nouvel émulateur dispose d’outils pour simuler le GPS (depuis une carte Bing) et l’accéléromètre (dans une vue 3D). Il intègre aussi le navigateur IE9 pour Windows Phone 7 qui supporte le HTML5 et vous permet de tester le rendu de votre site web.
    • Un outil de profiling a été inclus, pour mesurer les performances CPU et mémoire de vos apps (et éventuellement trouver des bugs!)
    • Un marketplace test kit qui vous permet de simuler chez vous les tests automatisés de la certification
    • Le contrôle pub de Microsoft Advertising, disponible maintenant en France! Mais ça ne doit pas vous encourager à mettre de la pub dans vos applications Tire la langue

    Pour ce qui est du processus de mise à jour…

    • Si vous avez le SDK 7.0 alors vous pouvez directement installer le 7.1 sans désinstaller les outils précédents.
    • Si vous avez le SDK 7.1 en version RC ou Beta, il faudra le désinstaller avant.

    Par ailleurs, le déploiement de la mise à jour Mango est en cours depuis hier! vos utilisateurs vont donc s’attendre à trouver une version de votre application pour Mango Sourire C’est le moment de soumettre vos mises à jours!

    Pour l’instant, la dernière version 7.0 restera disponible pour les terminaux 7.0 et vos mises à jours avec le SDK 7.1 seront déployées sur les terminaux Mango. D’ici la fin octobre on vous offrira un contrôle encore plus fin de vos mises à jours et vous pourrez faire évoluer en parallèle la branche 7.0 et la branche 7.1. il n’y a donc plus aucune raison d’attendre pour mettre vos applications à jour!

    Happy updating!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7.5] Supprimer le “pinch to zoom” sur un contrôle WebBrowser

    • 3 Comments

    Le ViewPort

    Le ViewPort se défini dans le code HTML. Il indique la largeur “virtuelle” de la page web. Sur un terminal mobile, on a envie d’ajuster le ViewPort en fonction de la largeur de l’écran, et d’une plateforme à une autre, ça peut varier (ça sera la même pour tous les Windows Phone). Le ViewPort permet de définir plusieurs propriétés:

    • width: par défaut, 320 (pixels). Comme ça c’est compatible iPhone, et après c’est le navigateur qui se charge de faire la conversion “pixels web –> pixels réels”.
    • height : par défaut, 480
    • user-scalable: permet de définir si l’utilisateur peut zoomer dans la page

     

    Certaines plateformes définissent des paramètres comme minimum-scale, maximum-scale, ou initial-scale… Ils ne sont pas supportées par IE9 dans Windows Phone.

    Le truc classique en manipulant le viewport pour supprimer l’effet de zoom, c’est de passer le paramètre user-scalable à “no” et le paramètre “width” à “device-width”:

    <meta name="viewport" content="width=device-width, user-scalable=no"/>  
    

     

    Supprimer les manipulations

    Mais cela ne suffit pas! En effet, si l’utilisateur essaie de zoomer, la page zoomera quand même… puis reviendra en place automatiquement, empêchant d’afficher un autre niveau de zoom que celui prescrit initialement, mais indiquant à l’utilisateur que son geste a bien été pris en compte (bonne pratique d’ergonomie en général, mais pas top quand on veut cacher qu’on utilise une webview… parce qu’on sait tous que c’est pourri!).

    Pour supprimer cet effet, il faut supprimer carrément les évènements de manipulation au niveau du contrôle WebBrowser. cela nécessite un peu de code qui m’a gentiment été soufflé par nos amis d’Ucaya, et plus particulièrement Romuald, dont l’origine est ce post de Colin Eberhardt:

    private void WebBrowser_Loaded(object sender, System.Windows.RoutedEventArgs e)
    {
        var border = ((Microsoft.Phone.Controls.WebBrowser)sender).Descendants<Border>().Last() as Border;
    
        border.ManipulationDelta += Border_ManipulationDelta;
        border.ManipulationCompleted += Border_ManipulationCompleted;
    }
    
    private void Border_ManipulationCompleted(object sender,
                                        ManipulationCompletedEventArgs e)
    {
        // suppress zoom
        if (e.FinalVelocities.ExpansionVelocity.X != 0.0 ||
            e.FinalVelocities.ExpansionVelocity.Y != 0.0)
            e.Handled = true;
    }
    
    private void Border_ManipulationDelta(object sender,
                                            ManipulationDeltaEventArgs e)
    {
        // suppress zoom
        if (e.DeltaManipulation.Scale.X != 0.0 ||
            e.DeltaManipulation.Scale.Y != 0.0)
            e.Handled = true;
    
        //// optionally suppress scrolling
        //if (ScrollDisabled)
        //{
        //    if (e.DeltaManipulation.Translation.X != 0.0 ||
        //      e.DeltaManipulation.Translation.Y != 0.0)
        //        e.Handled = true;
        //}
    }

    Evidemment, il faut associer la méthode WebBrowser_Loaded à l’évènement Loaded du contrôle WebBrowser…

    Petite précision à propos de ce bout de code: il utilise la très excellente extension LinqToVisualTree qu’il faudra donc ajouter également au projet…

    Et voila, plus d’effet de zoom. Ceci étant dit, ça ne doit pas vous encourager à utiliser les WebBrowser pour autre chose qu’afficher des pages HTML… et surtout, quelqu’en soit votre utilisation, ne les utilisez jamais, AU GRAND JAMAIS, dans un Panorama ou un Pivot, ça casse l’expérience de navigation horizontale. Il y a une place spéciale en enfer pour les gens qui font ça. Vous voilà prévenu!

    Du bon usage du contrôle WebBrowser

    Les contrôles de type “WebBrowser”, (ou WebView) sont rarement bien utilisés…

    Un WebBrowser, c’est fait pour afficher du contenu web (du HTML) parce qu’on ne veut/peut pas le parser (par exemple, une page d’authentification OAuth).

    • Ce n’est pas fait pour éviter d’avoir à créer une expérience native.
    • Ce n’est pas fait pour réutiliser des vues entre différentes plateformes.
    • Ce n’est pas fait pour s’acheter une place sur un store, qu’on n’aurait pas eu avec un site web mobile.

     

    Malheureusement 90% du temps c’est ça qu’on voit. Il ne faut pas faire. Une expérience native c’est justement pour avoir quelque chose de spécifique à chaque plateforme, en terme d’ergonomie, de look’n’feel. C’est ce que les utilisateurs attendent! Malheureusement le développement d’application n’est pas toujours piloté par le développeur soucieux de la beauté du code, ou le créa soucieux de la beauté des visuels et des animations. Des fois, le responsable du projet qui n’a pas assez de sous, ou de temps, et qui doit faire avec ce qu’il a… et on se retrouve avec des webviews mal utilisées.

    Alors quand on utilise un contrôle WebBrowser, pour de bonnes ou de mauvaises raisons, il faut en contrôler le comportement. Sinon on se retrouve sur wtfmobileweb.com.

    Encore merci à @RomuxX pour l’info, et pour d’autres lectures intéressantes sur le sujet, je vous encourage à aller voir la page sur le développement web pour Windows Phone 7.5, sur MSDN.

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7.5 Design Day] Les slides!

    • 3 Comments

    Comme promis (bien qu’avec un peu de retard) voici les slides du Windows Phone 7.5 Design Day du 8 Novembre, au campus Microsoft. Une journée pendant laquelle Arturo Toledo (@arturot) et Corrina Black (@corrinab) sont venus présenter les méthodes et les outils de conception d’une expérience Windows Phone 7.5. Durant cette journée, nous avons accueilli plus de monde qui prévu, ce qui nous aura conduit à aménager une deuxième salle en parallèle pour la matinée, durant laquelle j’aurai présenté ce slide deck là, aussi sur Metro.

    Merci beaucoup à tous d’être venus aussi nombreux, et sachez que nous allons annoncer très bientôt, pour début janvier, une autre journée sur le thème de l’ergonomie et du design!

    Vous pouvez également retrouver un post d’Arturo sur son blog qui parle de son expérience pendant sa tournée d’Europe!

Page 1 of 10 (240 items) 12345»