Le Post Infeeny

Les articles des consultants et experts Infeeny

Archives Mensuelles: juin 2013

How to Use Point-of-Sale Devices in Your App (3-029)

Session animée par Mike Hall

Cette session doit montrer comment utiliser des périphériques comme un lecteur de carte ou un scanner de code à barre dans une app Windows Store avec les nouvelles API 8.1.

On commence par une démo d’une app par InnerFence.

Il existe une norme Unified POS.

Il existe déjà une librairie POS.NET pour les apps Desktop.

Avec 8.1, on a maintenant une librairie POS.RT pour les apps Modern UI (sur tous les processeurs).

Cette librairie propose une abstraction de la partie hardware.

Elle peut aussi s’utiliser dans une app Desktop.

Elle supporte les devices connectés par USB HID.

On peut toujours utiliser les classes USB HID Keyboard qui vont remplir des champs texte, mais on aura beaucoup plus de contrôle avec POS.RT.

On nous explique ensuite comment démarrer une session d’utilisation d’un périphérique.

Notes :

  • Il faut ajouter des capacités dans les manifeste de l’app : print, pointofservice…
  • Il y a une notion de Claim pour pouvoir utiliser le device, notamment s’il y plusieurs apps POS snapped en même temps. On a une 1ère démo de ce point.

2ème démo : coder une app avec un lecteur de code à barre et un lecteur de carte magnétique

Une démo tout simple, mais complète ! Une fois sur la Surface, une fois sur la mini tablette Acer

Assigned Access : ça permet de bloquer un utilisateur sur une app, et donc notre app POS !

3ème démo : Royal Gate qui développe des solutions de POS au Japon (PayGate : lecteur bluetooth, imprimante bluetooth)

Session intéressante qui ouvre plein de nouveau scénario d’utilisation des devices Windows 8.1 !

Pierre-Yves Hemery

The Future of C++ (2-306)

Session animée par Herb Sutter

La session commence par l’annonce qu’une roadmap est prévue pour que VC++ devienne conforme a la norme ISO. Enfin Herb Sutter met entre guillemet le mot « conforme » 😉

On apprend ensuite que les fonctionnalités de C++ 14 ont été définies il y a à peine deux mois.
S’ensuit un rappel de l’historique de C++.

Herb Sutter annonce ensuite que Microsoft veux se conformer à la fois à C++ 11 et C++ 14.

Annonce qu’à chaque prochaine version de Visual Studio (RTM et CPT) on aura l’arrivée de nouvelles fonctionnalités de VC++.

Dans VC++ 2013 Preview on a :

  • Explicit conversion operators
  • Raw strings loterals
  • Function template default arguments
  • Delegating constructors
  • Unifor, initialization and initliazer_lists
  • Variadic templates
  • Compilation plus rapide
  • Support de la STL y compris vector<int>{1, 2, 3, 4}

Nouvelles fonctionnalités :

  • Initialisation des membres non statiques.
  • = default permet d’éviter d’écrire une fonction par défaut (exemple constructeur)
  • = delete permet de supprimer une définition d’une fonction (voir explication dans la vidéo pour mieux comprendre)
  • Aliases permet d’éviter les arguments d’un templates à l’utilisation
  • Ajout de quelques fonctionnalités de C99 afin de pouvoir utiliser des librairies C comme FFMPEG

Fonctionnalités en chantier

  • __func_ (par le même qu’en C), extended sizeof
  • Implicit move generation
  • Ref-qualifiers: & et && pour *this
  • Lambda return type deduction
  • Function return type deduction
  • Capture généralisée des lambda
  • Generic lambdas

On peut ensuite voir un tableau complet des fonctionnalités prévues dans C++ 14 et VC++ 14.

Et on a une emphase particulière sur l’implémentation de async/await dans C++ avec un exemple très amusant sur le code illisible qu’il faut écrire dans certains cas en C++ avec la manière actuelle de faire de faire de l’asynchrone (C++ promises).

Annonce de la prochaine conférence GoingNative à Redmond entre le 4 et le 6 septembre 2013.

Une session intéressante mais qui va nécessiter quelques approfondissements pour comprendre toutes les nouvelles fonctionnalités.

John Thiriet

Stories from Building the New Windows Mail App (3-104)

Session animée par Jeremy Epling

Retour d’expérience sur la réalisation de la nouvelle application de mail et présentation des tops et pratiques utilisées.

L’application doit fonctionner correctement de matériel 8 pouces peut puissants aux all in one 27 pouces avec quad core.

On voit les différents concepts d’implémentation et les nouvelles possibilités d’ergonomie proposée dans 8.1 comme la possibilité d’ouvrir plusieurs fenêtres pour une même appli (ouvrir plusieurs mails en même temps).

Le choix de html pour l’application de mail a été principalement drivé par le fait que les mails sont souvent en html, ils sont donc plus faciles a restituer dans une app html. On voit comment ils ont découpé le layout et utilise les nouveaux contrôles comme la search box.

Pour les perfs, l’équipe a teste très régulièrement sur Windows RT car, si une app est rapide sur rt, elle est rapide partout. Le nouveau contrôle de Scheduler a beaucoup aidé à améliorer les perfs en permettant de coordonner les opérations, et en facilitant le fait de préparer des portions d’ihm non visibles (comme la fenêtre pour un nouveau mail).

L’appli mail utilise aussi les web workers pour construire des portions d’ihm en générant une string avec le html qui est ensuite envoyée dans l’ui (pas de dom dans les workers).

Pour les listes, garder un layout simple pour les items a un impact significatif sur les perfs (le layout grid par exemple peut parfois être couteux).

Penser ses sélecteurs css et les faire l’élue spécifique possible impacte aussi les perfs (ca se voit sous le nom blopr dans les outils de perf).

Guillaume Leborgne

Building a Great Authentication Experience into Your App (3-113)

Session animée par Karanbir Singh

Après la session sur Azure AD et ADFS, j’enchaîne sur la phase d’authentification d’un utilisateur.

Comment faire pour que l’authentification soit simple, rapide et faite qu’une seule fois ?

Rien de très nouveau pour commencer : utilisation d’un compte Microsoft et du SDK Live, Credential Locker, PasswordVault, roaming des credentials sur plusieurs devices via SkyDrive.

On poursuit avec le support de OAuth, l’intégration Facebook, Twitter, etc. avec le WebAuth Broker.

On peut intégrer son propre service au WebAuth Broker.

Le Web Authentication Broker supporte le SSO.

Notes :

  • Quand on l’utilise avec Azure AD et une redirectURI (ms-app://{my SID}), le broker vérifie que le SID dans la redirection correspond bien à l’app installée
  • On peut personnaliser dans une certaine mesure la page de connexion

Aujourd’hui, chaque app gère la phase de login à sa manière. Pour pallier à cette inconsistance, on a désormais en 8.1 un framework « Accounts » pour le panel Setting. Il permet d’afficher le compte utilisé, se déconnecter, ajouter des liens, ajouter un ou plusieurs comptes (via les providers qu’on a spécifié dans notre app).

On peut trouver tous les samples en ligne.

A part pour le dernier point, pas grand-chose à découvrir dans cette session.

Pierre-Yves Hemery

Developing High Performance Websites and Modern Apps with JavaScript Performance Tools (3-316)

Session animée par Jonathan Carter

Les performances peuvent être considérées comme une feature des sites et des apps. Les mauvais ratings dans les stores sont souvent liés au ressenti sur les perfs et aux crashs.

Les scénarios à prendre en considération :

  • Temps de chargement
  • Réactivité de l’interface
  • Fluidité sur le scroll, le panning et les animations
  • Stabilité (consommation et fuites mémoire, plantages, consommation batterie)

Les outils présents permettent d’aider a diagnostiquer les problèmes. Les outils sont présents dans Visual studio et dans la dev toolbar de ie11.

On voit ensuite le pipeline du moteur html (a voir !) comprendre ce pipeline est important pour comprendre les problèmes.

On voit ensuite différentes demo. On commence par l’outil UI responsiveness dans ie qui permet de voir le pipeline de traitement. Le speaker explique en détail les différentes parties de l’outil et la démarche d’optimisation.

On voit ensuite la partie mémoire, et l’utilisation des outils de diag mémoire.

Session intéressante et bien expliquée.

Guillaume Leborgne

Visual Studio 2013 Diagnostics Tools for XAML-Based Windows Store Apps (3-322)

Session animée par Pratap Lakshman

La session commence par un rappel de ce qui peux causer des mauvaises notations d’applications sur le store :

  • App Freezes
  • Crashes
  • Mauvaise réactivité
  • Utilisation trop importante de la batterie

Outils d’analyses :

  • XAML UI réactivité
  • Utilisation CPU
  • Consommation d’énergie
  • Managed memory dump analysis

Rappels sur ce qui prend du temps en XAML :

  • Chargement, parsing, construction de l’arbre d’éléments et du modèle objet, formatage (style) et mis en forme (layout)
  • Affichage et rastérisation
  • Composition

Démo d’utilisation de l’outil d’analyse de réactivité de l’UI (UI Responsiveness Tool)

Petit schéma montrant comment analyser rapidement ce qui ne va pas dans le démarrage de l’application.

Démo de l’outil de diagnostic du CPU.

Efficience – Influence des resources systèmes

  • Les sources d’utilisation d’énergie les plus importantes sont le CPU, l’affichage et le réseau
  • L’affichage varie en fonction du type d’écran, des couleurs et de la luminosité
  • Le réseau varie selon le réseau et sa qualité (Filaire != Wiifi != 2G != 3G etc…)

S’ensuit un long chapitre sur la partie réseau téléphonique avec une démo à la clef.

Et après une présentation et une démo sur l’analyse de mémoire qui marche aussi avec des applications en production et de trouver les fuites de mémoire. Cependant ce n’est pas l’outil intégré à Visual Studio 2013.

Une session qui présente des concepts intéressants mais qui n’effleure que la surface de ce qu’il est surement possible de faire avec ces outils. Je m’attendais à plus efficace pour une session de niveau 300. C’est cependant quand même intéressant à regarder.

John Thiriet

Rendering PDF Content in Windows Store Apps (3-175)

Session animée par Chetan Parulekar

WinRT possède maintenant une api qui permet de rendre tout ou partie des pages d’un PDF sous la forme d’images.

On commence par une démo (plutôt classe) d’une application JavaScript qui permet de lire une liste d’articles en PDF.

L’API permet de récupérer les méta données du document et d’une page. Les images générées sont rendues en png par défaut. L’API gère les PDF protégés par mot de passe.

On aborde ensuite les options possibles pour le rendu. On peut spécifier la couleur de fond, le format d’image, la taille de destination, la possibilité de faire du High contraste, ou la portion de la page que l’on souhaite rendre. On voit un exemple en xaml et un exemple en js.

On aborde ensuite les best practices associées a cette api. Faire bien attention a libérer les ressources, et en particulier l’objet PDFPage et l’image générée. On voit l’intégration en xaml avec une flipview databindée et la libération du bitmapsource. Par ailleurs, la génération du PDF consomme des ressources. Penser a annuler les rendus si l’utilisateur navigue vite entre les pages. Le temps de rendu est proportionnel a la taille de la zone a rendre, un axe d’optimisation est de ne rendre que les portions visibles.

On termine par un exemple similaire avec DirectX.

Guillaume Leborgne

Windows Runtime Internals: Understanding the Threading Model (4-107)

Session animée par Martyn Lovell

Le but de la session est de présenter pourquoi le threading est important et comment le theading est implémenté dans WinRT et qu’est-ce qui se cache derrière la façade.

La session commence par une démo en C++ nommée « Media Buttons » qui montre tout les threads créés automatiquement par le système.

Pourquoi on a besoin de threads :

  • Services connectés au monde
  • Application responsive
  • Expérience touch
  • Plusieurs cœurs

Comment Windows parallélise :

  • Kernel threads
  • Separate processes
  • Brokers
  • Async operations

 Windows threading model :

  • UI objects dans le thread UI
  • Le thread principal vi aussi longtemps que l’application
  • La plupart des autres objets peuvent être utilisés dans n’importe quel threads
  • La plupart du travail est passé au ThreadPool
  • Les objets Windows suivent des règles naturelles et familières
  • Vous contrôlez la durée de vit d’un thread

 Le thread UI :

  • Les interfaces utilisateurs ont des besoin spécians
    • On ne veux pas que OK soit appuyé pendant le OnCancel
  • Les objet UI sont naturellement sérialisés
  • Ne pas faire de long travail sur le thread UI
  • A la place il faut passer un maximum de travail au thread pool

Demo : Comportement du thread UI

 UI Thread reentrency :

  • Les objets sur le thread UI n’ont pas besoin de locking pour se protéger eux-mêmes
  • Les thread UI ne sont pas réentrants
  • Quand vous faite un appel à un autre thread/process, seul les threads logiquement connectés peuvent vous rappeler
  • Les threads UI ne peuvent pas s’appeler en même temps (rejeté au moment de l’appel dans Windows 8.1)
  • Utiliser un dispatcher ou un objet asynchrone pour éviter ce genre d’appels

Schéma d’explication du « Single-threaded apartment reentrancy ».

 UI Thread waiting :

  • Pas de délais autorisés sur les threads UI
  • Most classic waiting primitives are inappropriate (Windows tue les applications ne répondant plus)
  • A la place il faut appeler des primitives UI-safe (C# await, C++ create_task, JS promise)

Démo : Safe view shutdown (MultipleView Sample)

 Le UI thread Principal :

  • L’interface principale de l’application est toujours lancée dans le thread UI principal
  • Le thread UI principal est utilisé pour gérer l’état global de l’application
  • Les autres threads UI sont pour les documents et les contrats
  • Le thread UI principal est vivant tant jusqu’à ce que l’application meure

 Threading dans l’environnement HTML :

  • Tout les threads sont des threads UI (même les web workers sont single-threaded)
  • Tout les évènement et complétions sont délivrées là où elle ont commencées
  • Utilisez les api standard des applications web au lieu du WinRT Core*

Threading en XAML :

  • Les objets UI sont liés à un threads
  • Utilise le dispatcher to déplacer le travail de l’ui dans le thread UI
  • Tout l’arbre XAML est dans un seul thread
  • Les évènements sont dans le thread UI

Objects and threading

  • Les protocoles basiques de WinRT sont threading-agnostic (Iunknown, Iinspectable)
  • La plupart des objets WinRT n’ont pas besoin de marshaling
  • Même les références à des objets hors du processus (proxies) sont agiles dans WinRT
  • Donc même si le marshaling existe toujours il est rarement visible et ce délibérément

Marshaling :

  • Les objet décident comment ils se marshallent (IMarshal, INoMarshal contrôlent le marshalling)
  • Les objets WinRT généralement « opt-out of marshaling »
  • Tout les marshalers sont fournis par le système avec l’aide des données générés par le MIDL

Thread pool threads :

  • Là où le travail long est effectué
  • Ils sont alloués, étendues et schedulés par le système
  • Les opérations async de WinRT tournent générallement dedans
  • Toujours initialisés par WinRT

Schéma démo des callback sur des objets asynchrones

Les objets agiles :

  • Objets qui peuvent travailler dans n’importe quel thread ou process sans être marshalled
  • Ils ne peuvent stocker que des objets agiles
  • Pas de stockage de Iinspectables
  • Ils sont simple à manipuler
  • La plupart des objets WinRT sont agiles

Apartments :

  • Apartments sont des concepts COM qui groupent et contrôlent les durés de vie des objets
  • Ils existent dans WinRT mais sont maintenant largement inutiles et remplacés par les objets agiles
  • Trois apartment
    • ASTA
    • MTA
    • NTA (Neutral threaded apartment utilisés par WinRT)

Appels cross-threads :

  • Les appels WinRT sont délivrés seulement quand le thread est prêt
  • Les appels sont en compétitions avec les autres pour obtenir l’attention d’un thread
  • Win 8.1 change :
    • Les appels ne bloquent plus les input
    • Le scheduler autorise les priorisation des work items

Une session intéressante qui explique tout ce qui se passe dans WinRT au niveau du threading. Définitivement à voir et à revoir.

John Thiriet

Securing Windows Store Applications and REST Services with Active Directory (3-518)

Session animée par Vittorio Bertocci

L’objectif de la session est de montrer comment sécuriser son app avec un AD on-premise ou dans Azure (du coup dans un contexte business).

Comment faire face aux ressources déportées en dehors du réseau interne, aux apps dans le cloud qui ont besoin de l’AD, au BYOD ou aux devices hors domaine… sans rendre fou l’IT ?

# Accéder aux ressources hors du réseau d’entreprise

Il  commence par expliquer les principes d’un serveur d’authentification avec un endpoint d’authentification + un endpoint  de jeton d’accès qu’on pourra ensuite utiliser pour accéder aux ressources.

Puis les jetons de refresh pour ne pas avoir à redemander ses credentials à l’utilisateur toutes les 5 minutes.

On passe maintenant à Windows Azure Active Directory qui, dans un contexte business, sera une projection de votre AD on-premise.

Azure AD dispose :

  • de différents endpoints d’authentification : OAuth2, SAML, WS-Federation, Metadata
  • un portail web de gestion des comptes
  • une API Graph pour récupérer les permissions

Début des démos.

1ère démo : présentation de la gestion de l’AD sur le portail Azure avec la configuration d’une app

2ème démo : une app de test pour montrer les différents types d’appels

Windows Server 2012 R2 ADFS supporte maintenant OAuth2.

# Authentification et session

Windows Azure Authentication Library (AAL) pour aider le développeur pour gérer les échanges de token , le cache… Dispo via un package NuGet.

AAL fonctionne avec Windows Azure AD et Windows Server ADFS.

On nous montre les quelques lignes de codes pour un appel sécurisé depuis une app Win8 (récupération d’un token et appel d’un service REST avec ce token).

AAL wrappe le WebAuth broker. Nouveauté avec Win8.1 on a la possibilité d’implémenter la sélection d’un compte dans les settings (plus de details dans la session 3-113)

# Device hors domaine

Nouveauté 8.1 : Workplace-join pour configurer un accès à un AD qu’on peut ensuite utiliser dans une app

On est en retard, les slides vont très vite…

Session intéressante, à creuser pour voir comment mettre tout ça en œuvre.

Pierre-Yves Hemery

App Performance: The Windows Performance Toolkit (3-100)

Session animée par Chell Sterioff

Objectif : se familiariser avec les outils d’analyses d’applications

Outils d’analyse de performance :

  • Visual Studio
  • Windows performance Toolkit
    • Windows Performance Recorder
    • Windows Performance Analyser

Démo de présentation du recorder et quelles sont les différentes options à notre disposition.

Démo de présentation de tout ce que présente l’analyseur et de la logique à utiliser pour diagnostiquer correctement des problèmes de performance.

Une session très orientée démo et assez difficile à suivre qui dans une certaine mesure entre en conflit avec précédente. La principale difference étant que celle-ci est orienté HTML alors que la précédente était XAML. A voir mais surement plusieurs fois et en plusieurs fois.

John Thiriet