Renaud Dumont

{.NET Blog}

La Kinect nouvelle génération bientôt disponible sur PC

Microsoft vient tout juste d'annoncer sa nouvelle console, la Xbox One (pré-commandable sur Amazon). En gros: un nouveau look, plus de puissance, et une box all-in-one. En effet, elle ne viendra pas seule puisqu'elle sera accompagnée de la Kinect nouvelle génération!

La super bonne nouvelle, même si cela semblait évident, c'est la confirmation que cette nouvelle Kinect arrivera sur PC prochainement. C'est ce que rapporte le site Shacknews:

According to Kinect program manager Scott Evans, Microsoft plans on bringing the new Kinect to PC. "We will bring this to PC," he told us. "We will have more information soon."

On ne sait donc pas encore quand, mais on ne peut qu'être impatient aux vues des nouvelles possibilités!

La nouvelle Kinect est de faite plus précise. Elle permet de détecter et suivre les mouvements du corps quasiment sans aucune latence. Elle peut suivre entièrement jusqu'à 6 personnes simultanément, là où la version précédente se limitait à 2 personnes. La Kinect pouvait déjà suivre les mouvements du corps, mais désormais elle peut le faire avec plus de détails. On peut ainsi suivre plus d'articulations, connaître l'orientation des épaules et la position même des pouces des mains. La Kinect regardera également votre visage, pouvant ainsi dire si vous souriez, si vous regardez ou non vers l'écran, si vous portez des lunettes, etc... Et plus impressionnant encore, la Kinect peut monitorer votre rythme cardiaque!

Pour voir le tout en vidéo, voici le test de The Verge: Kinect Xbox One / Hands on.

Quand on voit déjà ce que permettait la dernière version du SDK, avec le tracking des mains, la reconnaissance faciale, la modélisation 3D... Cela ne fait nul doute que beaucoup de développeurs à travers le monde doivent être impatients de voir arriver la version PC et le nouveau SDK qui l'accompagnera! Smile

[Windows 8] Développez en HTML 5 pour Windows 8

* Petite pub perso Tongue Out *


Ces derniers moi j'ai écrit un bouquin traitant de Windows 8 avec Loïc Bar et Simon Boigelot. Ce livre parle du développement d'applications pour le store Windows 8 à base de HTML 5 et de JavaScript !

Ce livre s'adresse aux débutants, aux personnes n'ayant pas nécessairement d'expérience avec les technologies du monde Microsoft. Vous n'avez jamais fait de .NET? Mais vous avez déjà bidouillé avec du HTML?

Si vous voulez passer à la vitesse supérieure, tirer profit du nouvel OS de Microsoft et pourquoi pas commencer à gagner un peu d'argent en vendant vos applications, ce livre est pour vous ! :)

Développez en HTML 5 pour Windows 8

[Windows 8] Créer un timer rond en XAML

Pour le développement du jeu WordDefy pour Windows 8, Matthieu (@MatthieuVdh) et moi avons demandé l'aide d'une amie graphiste. Et comme elle nous a rapidement pondu un super truc, la moindre des choses c'était de tenter de le reproduire à l'identique ! Il y a plusieurs bons côtés à cela : premièrement on a une app avec un look plutôt sympa, et deuxièmement j'ai pu jouer avec Blend et m'amuser avec le XAML, ce qui fait que j'ai appris pas mal de choses!

Une des parties consistait à reproduire un Timer en forme de cercle. Pour que vous y voyez plus clair, voici le compteur original tel que designé et le résultat final (qui est assez ressemblant :)) en XAML :

Design original
Design original

Résultat en XAML
XAML

Conception d'un RoundedTimer

Il existe plein d'exemples de timer sur le web, mais aucun fonctionnant sous WinRT. Et évidemment, le XAML sur Windows 8 a quelques particularités qui font que l'exemple ne sont pas toujours utilisables. J'en ai donc recréé un avec Blend !

Générer un Path

La première étape consiste à créer le cercle du compteur. Ce cercle doit être transparent au milieu. Pour faire cela, on va utiliser deux Ellipses et les combiner (ou plus précisément les soustraire). Placez donc deux Ellipses de manière à ce qu'elles soient centrées sur le même point, et avec l'une d'elle légèrement plus petite que l'autre.

Le code jusqu'à présent:

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    	<Ellipse Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stroke="Black" VerticalAlignment="Top" Width="200"/>
    	<Ellipse Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="140" Margin="190,270,0,0" Stroke="Black" VerticalAlignment="Top" Width="140"/>
    </Grid>

Pour obtenir le résultat voulu, on peut donc soustraire la deuxième Ellipse à la première ou exclure les zones de chevauchement (lisez aussi Combiner des formes et des tracés (Blend pour Visual Studio)). Faites un clique droit sur l'arbre visuel et les Ellipses sélectionnées et choisissez l'opération qui vous convient dans le menu Combiner

Le résultat de cette opération est un Path généré en remplacement des deux Ellipses précédemment créées. Le résultat devrait ressembler à ceci:

Et le code correspondant : 

    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    	<Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200"/>
    </Grid>

Ce cercle est la base de notre RoundedTimer... Passons à l'étape suivante: le clipping ! :)

Clipping Path

Le principe du clipping path est d'utiliser un élément pour délimiter la zone visible d'un autre élément. Malheureusement dans les apps Windows Store on ne peut pas utiliser un Path pour "masquer" un autre élément. Par contre on peut utiliser des Ellipse et des Rectangle pour délimiter une zone. 

Ajoutons par exemple un Rectangle dans sur un coin de notre cercle : 

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Rectangle Margin="160,240,1106,428" Width="100" Height="100"/>
    <Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200"/>
</Grid>

 

Le résultat obtenu est le suivant : 

On se retrouve avec un quart de cercle, ce qui va en fait représenter un quart de notre RoundedTimer ! Ce qu'il reste à faire est d'animer ce quart de Timer pour représenter le temps qui s'écoule.

Animer le Timer

Pour cela on va utiliser une Transformation sur l'élément RectangleGeometry. A vrai dire il y a sans doute plusieurs façon d'arriver au même résultat ! Pour ma part j'y suis arrivé en utilisant un SkewTransform.

Si l'on reprend le quart de cercle précédent, on peut l'animer en utilisant la transformation correcte : 

<Path Data="M100,30.5 C61.6162,30.5 30.5,61.6162 30.5,100 C30.5,138.384 61.6162,169.5 100,169.5 C138.384,169.5 169.5,138.384 169.5,100 C169.5,61.6162 138.384,30.5 100,30.5 z M100,0.5 C154.952,0.5 199.5,45.0477 199.5,100 C199.5,154.952 154.952,199.5 100,199.5 C45.0477,199.5 0.5,154.952 0.5,100 C0.5,45.0477 45.0477,0.5 100,0.5 z" Fill="White" HorizontalAlignment="Left" Height="200" Margin="160,240,0,0" Stretch="Fill" Stroke="Black" UseLayoutRounding="False" VerticalAlignment="Top" Width="200">
	<Path.Clip>
		<RectangleGeometry Rect="0,0,100,100">
			<RectangleGeometry.Transform>
                <!-- AngleY : De 0 à 90 -->
                <SkewTransform CenterX="100" CenterY="100" AngleY="0"/>
            </RectangleGeometry.Transform>
		</RectangleGeometry>
	</Path.Clip>
</Path>

En modifiant la valeur de la propriété AngleY, on peut animer joliment le timer ! Ainsi, avec un angle de 40°, on retrouve la forme suivante :

Il ne reste donc plus qu'à créer trois autres quarts du timer, et à les animer en changeant la valeur d'un des angles toutes les secondes grâce à un DispatcherTimer. L'important étant de voir comment appliquer la SkewTransformation, en jouant sur les propriétés Center et Angle !

Téléchargement / Sources

Vous pouvez télécharger le résultat final sous la forme d'une contrôle sur GitHub ! À vous de le customiser ! :)

Pour l'intégrer dans votre app, rien de plus simple :

<Page
    x:Class="TestApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:roundedTimer="using:RoundedTimer"
    mc:Ignorable="d">
    <Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
        <roundedTimer:RoundedTimer x:Name="MyTimer" Width="200" Height="200" Duration="00:01:00" />
    </Grid>
</Page>

On instancie le timer dans le XAML, et on démarre le décompte avec un appel à la méthode Start() dans le code-behind :

        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            MyTimer.Start();
        }

 

Spotlight : La coupe de Belgique de robotique 2013 à l'UMONS

Ce weekend, j'ai eu la chance d'être invité par les organisateurs de la Coupe de Belgique de Robotique 2013 pour participer à une mini-conférence ! C'était une première pour moi... j'avoue n'avoir jamais participé à ce genre d'événement auparavant. Mais je dois dire que l'ambiance y est plutôt sympathique. Globalement, on y retrouve la même faune que lors d'un hackathon, mais avec des super-pouvoirs un peu différents puisque les gens là-bas ne font pas qu'écrire du code mais manient également le tournevis ou le fer à souder!

Bref, ça se passait donc ce weekend à l'UMONS, (établissement où j'ai fait un arrêt durant mon cursus scolaire), et j'ai pu y parler de Nao (allez voir le Developer's program) et de la Kinect pour PC

Je me suis donc retrouvé de l'autre côté de l'auditoire dans lequel j'ai suivi de nombreux cours d'algèbre et d'analyse ! :)

L'amphi avant l'arrivée des gens!

Crédits : Tomas Gosselin

Donc en deux mots, après une légère introduction à la Kinect suivie d'une présentation de Nao, j'ai montré comment on peut fusionner les deux mondes pour faire un truc super cool : contrôler Nao en faisant le singe devant la Kinect !

Crédits : Tomas Gosselin

L'exemple en soit est un peu simpliste. Je commence par calibrer l'application pour définir une zone dans laquelle je peux commander Nao à distance. Ensuite j'active le contrôle, et Nao commence à reproduire les mouvements de mes bras. Grâce au dernier SDK Kinect pour Windows et à la nouvelle Interaction API, je peux également contrôler l'ouverture des mains de Nao très facilement! Et pour finir, je peux me déplacer en dehors de ma zone de contrôle pour que Nao se déplace également pas à pas.

Les slides sont dispos sur Slideshare :  

 
Quel est l'intérêt de cette démo ? Montrer que l'association des deux technologies pourraient être très intéressante. On pourrait imaginer envoyer des robots dans des zones qui ne soient pas accessibles à des humains, et contrôler ces robots à distance de manière simple et précise. Évidemment, ce n'est pas encore aujourd'hui que Nao remplacera des pompiers pour sauver une victime prisonnière d'un bâtiment en flammes, mais ce n'est peut-être pas aussi improbable que ça en a l'air!

A suivre

Vous connaissez peut-être déjà les Developer's First Monday, ces afterworks organisés tous les premiers lundis du mois. Sachez qu'une des prochaines sessions sera sur le thème de la robotique. Si cela vous intéresse, faites-le savoir sur notre uservoice : https://micbelgique.uservoice.com/forums/191395-general/suggestions/3688770-session-gadgeteer

Developer's First Monday 01x03

Le 08 avril dernier, nous avons accueilli la deuxième édition des Developer's First Monday (en photo). Pour cet évènement, nous avions souhaité (enfin, via notre Uservoice, vous aviez souhaité) parler un peu d'Infrastructure et pas toujours de Dev ! Nous nous sommes donc retrouvés à une petite vingtaine pour écouter Gokan Ozcifci nous parler de Sharepoint 2013, de ses nouveautés et des best-practices. Nous avons également eu droit à l'intervention d'Arnaud Jund, fondateur de la communauté myTIC Pour ce troisième épisode,  c'est encore vous qui décidez ! Et nous aurons le plaisir de recevoir Pierre-Emmanuel (MEET member) et Norman Deschauwer de DotNetHub)

Pour ceux qui n'ont pas suivi, de quoi s’agit-il ?

Si vous avez manqué la première et la deuxième soirée et que vous ne savez toujours ce qu'est le Developer's First Monday, voici un rappel : L’idée est de créer un rendez-vous récurrent pour les développeurs et autres professionnels de l’IT! Ce sera l’occasion de faire connaissance, mais aussi de partager notre noble savoir lors de courtes présentations. La soirée pourra évidemment se prolonger autour d’un verre pour les plus motivés ! Pour rendre la soirée encore plus intéressante, vous êtes invités à dire de quoi vous aimeriez parler ! Quels sont les sujets qui vous passionnent ? Dites-le nous, le UserVoice est là pour ça ! :)

Détails

Cette soirée se tiendra le 06 mai au MIC de Mons !

Lors de formations Agile, on se pose souvent la question des outils : quels outils pouvons-nous utiliser pour faire de l'agile ? Et si les agilistes promeuvent souvent des "outils" manuels (post-it, tableaux blanc, ...), il est parfois nécessaire de les accompagner d'outils informatiques. Depuis quelques années, Microsoft propose son outil TFS (Team Foundation Server) comme étant sa solution ALM (Application Lifecycle Management). Si les versions précédentes proposaient déjà des modules "agiles", ils proposent avec leur version TFS 2012, une solution complète pour la gestion de projet Agile, et intégrant les chefs de projet, les product owners, les développeurs, les testeurs, ... Cette session a pour but de démontrer les capacités de cet outil, et ce qu'il apporte dans le monde agile. Nous verrons entre autres :

  • l'analyse et le prototyping / storyboarding / sketching d'application
  • la définition et la priorisation du backlog
  • la planification des itérations et leur suivi (kanban, burndown chart)
  • le développement, et la traçabilité des exigences
  • le testing (TDD développement piloté par les tests, tests unitaires, tests d'acceptance)
  • l'intégration continue
  • le feedback client Toutes les démo se feront via les plate-formes Visual Studio 2012 et Team Foundation Server 2012.

Les exemple de code seront en C#.

Speaker

Pierre-Emmanuel Dautreppe, MEET Member et membre fondateur de DotNetHub !

Pierre-Emmanuel est un spécialiste .NET depuis 2002 et travaille actuellement comme expert technique et architecte agile dans des projets .NET. Il est passé dans le monde de l’agilité en 2005, et depuis ce jour, il partage ses expérience, recettes et déconevnues. Il essaye de partager les valeurs et la culture agile. Il donne des conférences et des formations en .NET (C#, testing, intégration continue, application lifecycle management, …) et en agile. En 2009, il a fondé le user group DotNetHub (www.dotnethub.be) pour promouvoir .NET et les méthodologies Agile au Bénélux et en France. Chaque année, il organisé la Journée Agile (Agile Tour francophone) en Belgique (www.journeeagile.be).

Inscriptions

En suivant ce lien : http://events.mic-belgique.be/event/developer-s-first-monday-3.

Ou directement sur cette page :

DevFM 01x02 : Sharepoint 2013

Pour le deuxième épisode des Developer's First Monday, deux particularités : 

- On fera une session IT Pro sur les nouveautés de Sharepoint 2013

- L'afterwork est exceptionnellement prévu pour le 2ème lundi du mois (le premier étant le lundi de pâques :))

Rendez-vous donc le 08/04 au MIC Belgique à partir de 18h pour une session donnée par Gokan Ozcifci, très actif dans la communauté Sharepoint et récemment nommé Microsoft Community Contributor !

Pour plus d'infos ou vous inscrire, rendez-vous là : http://events.mic-belgique.be/event/developer-s-first-monday-2-meets-the-it-crowd-sharepoint-2013

Et si vous n'avez pas envie de lire et que vous voulez juste venir, vous pouvez-le faire directement ici :

[MOOC] Windows 8 - 2/ Cycle de vie des apps Windows Store

 

Dans cette deuxième vidéo (la première étant ici : [MOOC] Windows 8 - 1/ Les contrats en C#) , on aborde le cycle de vie des applications Windows Store. Qu'est-ce qui change par rapport aux applications classiques? Pourquoi ces modifications? Et comment gérer tout ça? C'est ce que je vous explique ici !

La gestion du cycle de vie des applications Windows Store

Les applications Windows Store passent par différents états au cours de leur vie. Elles peuvent successivement être actives, suspendues, ou terminées.

Au sommaire :

- Qu'est-ce qui a changé ?

- Gérer le passage entre les différents états

- Sauvegarder la session des utilisateurs avec le SuspensionManager

- Le SplashScreen étendu

- Les BackgroundTask

- Mettre à jour les LiveTile depuis le background

 

  

Après avoir suivi cette vidéo :

Vous saurez comment sauvegarder une session utilisateur, effectuer des tâches en arrière plan et mettre à jour une vignette dynamique depuis votre application !

La suite

Dans la prochaine vidéo, on verra quelques Tips & Tricks sur le XAML, Visual Studio et Blend

Relive TechDays Belgium 2013 online: videos and slides available!

TechDays

2 weeks ago we closed the Microsoft TechDays 2013 in Antwerp. Close to 2900 IT Professionals, Developers and Students enjoyed 90 sessions with top content led by a broad selection of international and local top speakers. A special THANK YOU goes to our partners, our MVP’s and MEET (Microsoft Extended Experts Team) members and of course, all our enthusiastic attendees! What’s next? The session videos and slides are now available on www.techdays.be! (Re)live the sessions and take the next steps to truly master the technologies. Warm up with a selection from our Technical Evanglists Arlindo Alves and Katrien De Graeve:

Arlindo’s Top Selection Katrien’s Top Selection
Hackers (Not) Halted with Paula Januszkiewicz Become a Windows 8 and Windows Phone App Developer at TechDays with Ben Riga
Moving from Device Centric to a User Centric Management with Corey Hynes Bigger, Faster, Stronger: Optimizing ASP.NET 4 and 4.5 Applications with Mads Kristensen
Windows 8 Client: Part 1 "The OS internals for IT-Pro's" and Part 2 "The Application internals for IT-Pro's" with Tom Decaluwé Behind the scenes of (as many) C# language features with Bart De Smet

Enjoy! The TechDays Team Questions? Connect with us on Twitter, Facebook or simply via e-mail.

[MOOC] Windows 8 - 1/ Les Contrats en C#

Dans cette vidéo d'une heure, on passe en revue les contrats dans les applications Windows Store. Les contrats permettent de développer des applications qui soient cohérentes et intégrées avec l'ensemble du système Windows 8, ce qui donne globalement une meilleure expérience utilisateur.

Les Contrats

On parle ici des trois principaux contrats que sont le Search, le Share et les Settings. De quoi s'agit-il et comment les implémenter dans une application écrite en C# ? Toutes les réponses sont dans la vidéos.

Au sommaire :

03'40" : Search : permettre de chercher dans votre application depuis n'importe où et n'importe quand.
24'33" : Share : tirer profit du potentiel des autres applications grâce au partage de données App-To-App.
41'32" : Settings : rassembler les paramètres de l'app dans un seul endroit pour offrir une expérience consistante.

Après avoir suivi cette vidéo :

Vous aurez appris à développer des applications super-intégrées à Windows 8, ce qui rendra vos utilisateurs contents :) et ça fait toujours plaisir de recevoir des reviews positives !

La suite

Dans les prochaines vidéos, on parlera du Cycle de vie de l'application et on verra quelques Tips & Tricks sur le XAML, Visual Studio et Blend.

 

[Windows 8] Un exemple court pour comprendre ce que sont Promise, then() et done() avec WinJS

Le concept des Promise et la différence entre then() et done() sont assez difficiles à comprendre. Les explications dans la doc MSDN sont abstraites, et on pourrait croire que then() et done() font la même chose... mais ce n'est pas le cas. Voici un petit morceau de code qui, je pense, est plutôt explicite. Copiez/collez-le dans une nouvelle app Windows 8 JS/HTML et placez des breakpoints à chaque ligne, exécutez l'app, et lisez les commentaires. Le but de ce code est également de vous montrer qu'il n'est pas nécessaire avec les Promise d'écrire des fonctions, dans des fonctions, dans des fonctions... En effet, j'ai vu quelques personnes demander en quoi ça facilitait la vie d'utiliser les Promise avec WinJS. Ils demandent cela parce qu'ils pensent qu'ils doivent écrire du code comme cela :

asyncCall().then(function() {
    anotherAsyncCall().then(function(){
        aThirdAsyncCall();
    }
}

Et c'est vrai que dans ce cas, on pourrait se poser des questions sur l'utilité des Promise. On ne fait que réécrire du code avec des callbacks imbriqués pour finir avec un bordel absolu. Evidemment ce n'est pas le cas ! Regardez le code qui suit et lisez les commentaires :)

 WinJS.xhr({ url: "http://www.microsoft.com" })
        .then(function (microsoftResult) {
            // Ici, on reçoit une réponse, comme on s'y attendait.
            // Que faisons-nous ensuite? 
            // On pourrait faire un autre appel async,
            // ou juste retourner une valeur simple pour voir...
            // Retournons une url, que l'on utilisera 
            // par la suite pour faire une nouvelle requête :
            return "http://dev.windows.com";
        }).then(function (devWindowsUrl) {
            // devWindowsUrl contient simplement la valeur retournée dans la partie précédente.
            // Maintenant, essayons un autre appel async
            // et plutôt que d'utiliser des callbacks (then)
            // retournons simplement l'objet Promise !!
            return WinJS.xhr({ url: devWindowsUrl });
        }).then(function (devWindowsResult) {
            // Quand on arrive ici, on peut voir que dewWindowsResult ne contient pas de Promise.
            // Ca contient en fait le résultat de la Promise, c'est à dire la réponse à la requête.
            // C'est donc là que se situe la magie =)

            // Maintenant déclenchons une exception en appelant une fonction inexistante...
            return devWindowsResult.callNonExistingFunction();
        }).then(function (nonExistingResult) {
            // Nous n'atteignons pas ce point-ci...
            return "ha bon, ça existait finalement?";
        }, function (nonExistingError) {
            // Au lieu de ça, on arrive ici, parce que la Promise s'est terminée avec une erreur.
            // Mais c'est pas grave. Vu qu'on est là, on peut gérer cette erreur.
            // On va retourner un message gentil pour rassurer tout le monde.
            return "cette fonction n'existe pas mais c'est ok, on a géré l'exception !";
        }).then(function (errorHasBeenHandledResult) {
            // du coup, tout rentre dans l'ordre et on continue
            return "content =)";
        }).done(function (result) {
            // et pour finir, il faudrait cloturer par un appel à done()
            // La différence est que si une exception est déclenchée
            // à l'intérieur de cette fonction, l'exception sera vraiment lancée
            // et pas simplement passée comme paramètre à un prochain callback

            // L'exception sera lancée de manière asynchrone, donc si elle vous intéresse
            // il faut catcher les exceptions de la dernière chance au niveau de l'app

            // Essayez de dé-commenter cette ligne pour voir.
            //return result.callANonExistingMethod();
        }, function (error) {
            // Ici on peut éventuellement gérer une erreur renvoyée par l'appel asynchrone précédent.
            var resultError = error;
        });

Pour être sûr de catcher les exceptions asynchrone, un petit coup de WinJS pour ajouter un eventhandler au niveau de l'app :

    var app = WinJS.Application;
    app.onerror = function (error) {
        //Log the last-chance exception 
    };

Enfin, sachez que dans le cas où vous terminez par done(), si vous ne fournissez pas de callback pour le onError, et que la Promise se termine avec une erreur, cette erreur sera automatiquement forwardée, et donc une exception de la dernière chance sera déclenchée !