Pierre's Embedded and Mobile Blog

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

December, 2010

Posts
  • 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

    [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

    [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] Comprendre Metro, et en connaitre les ressources

    • 2 Comments

    J’ai eu la chance d’être invité en ce début de semaine au Microsoft Innovation Center (celui de Belgique, il n’y en a pas en France) pour animer une journée de workshop sur Metro, le langage de design de Windows Phone 7. Une journée sur les grands principes, la philosophie de Metro, mais aussi les outils et les méthodes pour appliquer et adapter Metro dans son application, ainsi qu’un tas de petits “trucs” pour aider à la réflexion lors de la conception de l’expérience utilisateur (Panorama ou Pivot? AppBar ou bouton? MVVM ou pas? etc), et des petites démos de base pour comprendre “dans le code” le fonctionnement des éléments de base de Metro (transitions, etc)

    Voici donc les ressources indispensables pour bien appréhender Metro:

    En plus de ça, pour autant que ce soit utile, mes slides :

    D’un point de vue plus technique, nous aurons parlé:

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Comment rendre une “zone touchable” autour d’un contrôle plus large que le contrôle lui-même

    • 0 Comments

    Il est dit dans les design guidelines de Metro qu’une zone tactile doit faire au minimum 7mm de coté, 9mm de préférence. Hors lorsqu’on dessine une interface tous les contrôles n’ont pas nécessairement cette taille, ce qui rend la manipulation au doigt difficile: l’utilisateur doit “viser” en quelque sorte. C’est une mauvaise expérience.

    Pour améliorer ça, il faut faire 2 choses: d’abord bien espacer les contrôles (un espace de 2mm entre chaque contrôle est recommandé), ensuite, augmenter la surface “touchable” de ces contrôles. Le problème est qu’augmenter la surface d’un contrôle risque de compromettrel’alignement de ce contrôle dans l’interface. Mais il suffit d’utiliser des marges négatives pour le réaligner Smile 

    Cette suggestion futée nous est proposée par Laurent Bugnion sur le blog de Galasoft, qui édite par ailleurs le toolkit MVVM Light et le behavior multitouch pour Windows Phone 7 dont nous reparlerons sous peu! Je vous invite à suivre son blog qui enrichira sans aucun doute votre feedreader de posts bien utiles!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] Rapports de downloads et paiement sur le Marketplace

    • 0 Comments

    Développeurs, réjouissez-vous enfin, vous allez pouvoir retrouver les statistiques de téléchargement de votre application sur le Marketplace! C’est le lien “reports” dans votre dashboard Windows Phone

    DownloadReports

    Par ailleurs, il semble que l’équipe en charge du paiement mette les bouchées doubles pour pouvoir payer au plus vite les développeurs méritants, et la nouvelle date annoncée pour les premiers paiements est fin janvier, au lieu de fin février! on vient de gagner un mois!

Page 1 of 1 (8 items)