Planning de la rentrée 2013-2014

Trainings gratuits au Microsoft Innovation Center de Mons

Plein de nouvelles formations planifiées au MIC pour la rentrée, avec des sessions sur Windows Phone et Windows 8 en C#/XAML et en JavaScript/HTML5! Toutes ces formations sont évidemment gratuites, en français, et ouvertes à tous!

Create your Windows 8 app in HTML5

How different is Windows 8? What is the rush to build apps for the Windows 8 platform and why are developer communities reacting differently to Windows 8?  This Windows Store App course introduces HTML5, CSS3, and JavaScript and helps you learn HTML5/CSS3/JavaScript programming skills. This course is an entry point into both the Web application and Windows Store apps.

 18 septembre, 5 novembre, 10 janvier

 

The Ins & Outs of Windows Phone 8 apps

The ins & outs of Windows Phone 8 is a hands on introduction to building apps for Windows Phone. We’ll guide you through the unique aspects of the Windows Phone platform and you’ll have the chance to build on your knowledge immediately! Your app at the end of the day!

 30 septembre, 12 novembre, 20 janvier

 

Making your first Windows 8 app

This workshop is a free and fun training from developers, for developers. Expertise is offered in a fun, low key, interactive way and you’ll have the chance to test and experiment with your new knowledge!

 16 octobre, 9 décembre, 12 février

 

Make your app run into the Cloud 

Et pour étendre les capacités de vos apps et lier tout ça avec le cloud, sachez qu'une session Cloud & Windows Azure est également prévue et sera donnée par Nick Trogh, Developer and Platform Evangelist chez Microsoft BELUX.

In this workshop, we’ll teach you how to add a cloud backend to your app. Free, fun, no-fluff, you will learn how to add a cloud-based backend service to a Windows Store app using Windows Azure Mobile Services. And you’ll have the chance to test and experiment with your new knowledge!

 11 décembre

 

Encore plus de sessions

Je donnerai également des formations au MIC Brussels (voir leur agenda) sur les mêmes sujets, mais probablement en anglais cette fois (cela dépendra de l'audience :)).

[Azure] Backup automatique de SQL Azure et restauration

10. July 2013 15:55 by Renaud in Windows Azure  //  Tags: , , , ,   //   Comments (0)

Si vous utilisez Azure, et les bases de données SQL, vous savez que vos données sont en sécurités, et que vous pouvez par exemple utiliser la géo-réplication pour vous assurer que même en cas de défaillance technique d'un datacenter tout entier, vos données soient toujours disponibles dans un autre datacenter (par exemple sur un autre continent), dans une base de données synchronisée avec celle en production.

Toutefois, cela ne vous met pas à l'abris d'une erreur humaine. Si vous effacez des données importantes, après synchronisation, vous n'aurez aucun moyen de les récupérer. Voici donc un moyen simple de faire des backup régulièrements pour pouvoir, en cas de pépin, restaurer votre base de données dans un état acceptable.

Si vous vous connectez au portail et que vous vous rendez dans la section des bases de données, vous pourrez voir dans la barre d'action en bas qu'il vous est possible d'exporter et d'importer des bases de données.

Regardons déjà ce que cela nous permet:

Export manuel

L'export permet de créer un fichier BACPAC à partir d'une base de données en production. Qu'est-ce qu'un BACPAC? Il s'agit d'un fichier contenant des informations décrivant le schéma d'une base de données, ainsi que son contenu

Ce fichier est généralement utilisé dans deux cas de figure:

  • migrer une base de données d'un serveur vers un autre;
  • archiver une base de données (faire un backup).

Globalement, ce fichier nous permettra par la suite d'être importé pour créer une nouvelle base de données à l'identique sur le serveur de notre choix.

En sélectionnant la base qui nous intéresse et en cliquant sur Exporter, une fenêtre s'ouvre pour nous demander où stocker le fichier de backup. En fait, Azure attends de vous que vous lui indiquiez un conteneur d'un stockage Azure. Le fichier .bacpac va en effet être stocké dans un blob.

Si ce n'est pas déjà fait, créez donc un compte. Sinon sélectionnez celui qui vous convient. Choisissez le conteneur (ici sqlbackup) et entrez les informations de connexion au SQL Server sur lequel se trouve la base de données. Confirmez, patientez quelques secondes, et vous pourrez finalement retrouver votre fichier sauvegardé dans votre compte de stockage:

 

Import manuel via le portail

Pour réutiliser maintenant ce fichier via le portail, c'est très simple: on va utiliser le bouton d'import vue précédemment.

Il suffit alors de fournir le fichier BACPAC créé juste avant, donner un nom à la nouvelle base de données et choisir un serveur sur lequel déployer cette base de données.

Validez, et vous pourrez voir votre nouvelle base de données dans le dashboard:

Automatiser l'export

Il existe une API qui permet de faire des exports automatiquement. Vous pourrez trouver ici les sources de SQLDatabaseBackup. Cet outil fait appel à l'API de Azure pour créer un BACPAC d'un DB et le stocker dans un Blob. La procédure utilisée est celle recommandée sur MSDN (cf: Windows Azure SQL Database Backup and Restore / Recommended Backup Strategy):

Recommended Backup Strategy

Creating a database copy and then exporting a BACPAC file gives you a transactionally consistent backup file of the database that is portable and can be stored in Windows Azure storage or on-premises locations. This file then can be used for a rollback plan to protect against user or application errors, or in the event of loss of the entire region.

Bref, téléchargez les sources, compilez-les et ouvrez une console pour exécuter l'application en ligne de commande. Voici la liste des paramètres que vous pouvez utiliser:

    -server [SQL Database server (sans .database.windows.net)]
    -database [la db à backuper]
    -databasecopy (facultatif) [Le nom de la db temporaire, par défaut: database_copy]
    -user [nom d'utilisateur]
    -pwd [mot de passe]
    -storagename [nom du compte de stockage pour les blob]
    -storagekey [clé secrète du blob storage]
    -container (facultatif) [le conteneur de blob à utiliser, par défaut: sqlbackup]
    -datacenter [le datacenter dans lequel se trouve la db (et non pas le blob storage)]
        (westeurope | southeastasia | eastasia | northcentralus | northeurope | southcentralus | eastus | westus)
    -cleanup

Par exemple, ceci pourrait être une commande valide:

SQLDatabaseBackup.exe -server tfde53dse -database mydatabase -user admindb -pwd password -storagename storageaccount -storagekey yUfnVH+iIrO4sgS+Sr60PRzIMUQv5tFPpKYtr03QTKDxl9ZLr4Y7IkxPkQRJrarqnDX5mWCoA== -container backupfolder -datacenter westeurope

Pour automatiser cette tâche, nous allons tout simplement utiliser un fichier Batch et le Task Scheduler de Windows.

Voici le script .bat qui va lancer l'exécution de l'outil: on ouvre une console, on se déplace jusqu'à l'exécutable et on lance la commande:

START cmd.exe /k "cd C:\Users\path\to\tool\folder\ & SQLDatabaseBackup.exe -server tfde53dse -database mydatabase -user admindb -pwd password -storagename storageaccount -storagekey yUfnVH+iIrO4sgS+Sr60PRzIMUQv5tFPpKYtr03QTKDxl9ZLr4Y7IkxPkQRJrarqnDX5mWCoA== -container backupfolder -datacenter westeurope"

Ouvrez ensuite le Task Scheduler, et créez une nouvelle tâche (Create Basic Task): un wizard s'ouvre, qui vous permet de configurer la tâche:

  • Son nom
  • Sa récurrence (par exemple, tous les jours à midi)
  • Le type d'action: "Start a program"
    • Sélectionnez alors le fichier .bat que vous venez de créer.

Pour finir, allez dans les propriétés de cette tâche et faites les modifications suivantes:

  • Dans l'onglet Conditions, décochez Démarrer la tâche seulement si l'alimentation est branchée. En effet, ce qui compte c'est de demander à Azure de faire le boulot. Ensuite, peu importe que votre PC reste en ligne ou pas, et donc pas de raison de s'inquiéter d'une éventuelle panne de batterie.
  • Dans l'onglet Settings, cochez Run task as soon as possible after a sceduled start is missed. Avec cette option, si votre ordinateur était éteint au moment où un backup aurait dû avoir lieu, ou si pour toute autre raison une tâche n'a pas pu être lancée, le Task Scheduler exécutera la tâche dès que possible.

A priori, comme j'allume rarement mon laptop moins d'une fois par jour, je suis sûr grâce à cette config d'avoir un backup quotidien de mes bases de données!

Restaurer une DB avec SQL Server Management Studio 

Pour finir, si vous n'avez pas envie de passer par le portail de Windows Azure pour restaurer un fichier BACPAC, vous pouvez également le faire depuis SQL Server Management Studio (version express, version complète d'évaluation, ou sur MSDN).

Connectez-vous à votre SQL Server Azure, et faites un clique droit sur le dossier Databases dans l'Object Explorer. Sélectionnez Import Data-tier Application...

Suivez le wizard, qui vous permet également de récupérer le fichier BACPAC directement depuis un compte de Blob Storage. Choisissez les settings de la DB (édition Web 1Go pour les db standard de WebSite) et lancez l'opération. Et voilà votre nouvelle base de données créées sur le serveur!

[Windows 8] Générateur de politique de confidentialité

4. June 2013 21:37 by Renaud in Windows 8, Windows Azure  //  Tags: , , ,   //   Comments (1)

Vous le savez sans doute, sur Windows 8, l'utilisateur doit toujours garder le contrôle sur son système. Et pour cela, Microsoft n'a pas seulement fait en sorte que le système soit sécurisé, mais a également établi quelques règles pour nous les développeurs. Ces règles visent particulièrement à informer l'utilisateur de l'usage que nous pourrions faire de leurs données.

Ainsi, pour utiliser des fonctionnalités de Windows 8 qui touche au respect de la vie privée (GPS, accès aux librairies personnelles comme les documents, les photos, etc, ...), il est nécessaire de le déclarer explicitement. L'utilisateur verra alors - avant de télécharger l'application - que vous réclamez l'un ou l'autre droit.

En ce qui concerne l'accès à internet, les choses sont également très claires: si votre application fait usage d'internet, vous devez fournir à l'utilisateur une Politique de Confidentialité consultable en ligne!

Alors si vous êtes un peu fainéants ou que vous n'avez aucune idée de comment héberger une page web, voici un petit générateur que j'ai mis en ligne sur mon compte Windows Azure:

http://w8privacy.azurewebsites.net/

Rien de très complexe, mais c'est surtout pratique :) développé en deux temps, trois mouvements avec Foundation. L'intérêt étant que vous aurez une page personnalisée (et multilingue!) pour votre application!

Il vous suffit de suivre les étapes, et c'est parti, vous aurez une URL unique que vous pourrez utiliser dans la page "À propos" de votre application ET dans le formulaire de soumission de votre application sur le Windows Store!

 

Bonus : si cela ne vous suffit pas tout à fait, les sources sont dispos sur GitHub: W8Privacy

Windows Azure Mobile Services : Intro

3. December 2012 15:12 by Renaud in Windows Azure  //  Tags: , ,   //   Comments (0)
Suite au Windows App Day et à l'excellente session de Kristof Rennen sur les Mobile Services, je me suis dit que je pourrais également faire un article sur le sujet. J'en avais parlé à l'occasion du premier Café Numérique de Tournai. Voici en quelques mots de quoi il s'agit :)

Les technologies évoluent, et les utilisateurs sont de mieux en mieux équipés et deviennent plus exigeants. Comment faire en sorte de créer une application qui soit à la hauteur de la demande des utilisateurs ? Il y a en quelque sorte un minimum requis d'office. Des features indispensables. Et cela peut parfois décourager le développeur qui souhaiterait se lancer. Par exemple, une application uniquement offline aura peu de chance de survivre après une réinstallation ou un changement de device, parce que l'utilisateur sera frustré d'avoir perdu ses données... Plusieurs difficultés s'opposent aux développeurs qui veulent se démarquer. Ils doivent par exemple :

  • Mettre au point un service web, sans spécialement savoir comment s'y prendre
  • Rendre ce service disponible via internet
  • S'habituer à la programmation asynchrone
  • Mettre en place et maintenir un moyen d'identification de l'utilisateur pour des scénarios un peu plus avancés

Tout cela demande de l'investissement et du temps. Et c'est là qu'il est bon de parler de Windows Azure Mobile Services. A eux seuls, les Mobile Services d'Azure résolvent les 4 points cités ci-dessus, et permettent encore davantage !

  • Ils permettent de créer une API de type REST en quelques clics, sans avoir à écrire une seule ligne de code.
  • Ils sont directement hébergés sur le cloud de Windows Azure, et sont pour le moment gratuits (jusqu'à 10 services).
  • Ils sont accompagnés d'un SDK disponible sur Windows 8, Windows Phone 8 et iOS et qui permet de communiquer hyper simplement avec le service, facilitant ainsi le développement.
  • Ils proposent de prendre en charge pour vous la gestion de l'identification avec différents providers tels que Microsoft (live), Facebook, Twitter et Google. Cela signifie que vous n'avez plus besoin de vous occuper vous mêmes des évolutions des APIs de chacun des provides. Microsoft le fait pour vous !

Création d'un service

La création en elle-même prend quelques secondes. Cela se passe en deux étapes. Choix du nom du service et association d'une base de données. On propose un nom de service. Azure vérifie que ce nom soit disponible. Si oui, on choisit entre la création et la réutilisation d'une base de données, et on passe à l'étape suivante qui est la configuration de cette dernière. Une fois qu'on a rempli ce rapide formulaire, Azure fait son boulot pour nous fournir un service mobile tout neuf.

Une fois le service créé, on a accès à l'habituel tableau de bord (dashboard) qui permet de contrôler rapidement l'utilisation du service en temps réel. Dès lors, le service est bel et bien disponible ! 30 secondes pour créer un service, c'est l'une des forces du cloud.

Pour pouvoir commencer à utiliser ce service et stocker des données, on va commencer par créer une nouvelle table via le portail.

Et c'est comme ça qu'en quelques clics, on résout les deux premiers problèmes du développeur ! Nous avons une API qui permet de stocker des données dans une table TodoItem, et qui est accessible via internet.

Utilisation du Mobile Services SDK

Si vous n'êtes pas familier avec les HttpClient et n'avez aucune idée de comment interroger un service REST en C#, ce n'est pas grave. Lorsque vous créez votre premier service, Azure vous propose de télécharger une application d'exemple utilisant le Mobile Service SDK. Ce SDK va vous faciliter la vie pour communiquer avec le service mobile et notamment pour effectuer les opérations de base que sont la lecture, l'insertion, la mise à jour et la suppression de données. Cette application contient une interface minimale pour gérer nos Todo. Si on regarde un peu les sources, on peut trouver dans la classe App un bout de code qui instancie un MobileServiceClient grâce à l'url du service et à la clé secrète de l'API (que l'on peut trouver sur le portail Azure) :

        public static MobileServiceClient MobileService = new MobileServiceClient(
            "https://cafentournai.azure-mobile.net/",
            "ryPMCIcJjtbkqmWrkGphhiHJXdIyoI27"
            );

Et là, vous vous dites sans doute qu'on n'a même pas encore défini ce qu'était un TodoItem... En fait, par défaut, le Mobile Service travaille avec des tables à schéma dynamique. Cela signifie que des colonnes sont automatiquement ajoutées pour pouvoir stocker toutes les propriétés des objets envoyés lors des requêtes ! Il n'y a donc pas besoin de décrire les tables côté service. On va simplement définir la classe côté client, avec quelques attributs :

    public class TodoItem
    {
        public int Id { get; set; }

        [DataMember(Name = "text")]
        public string Text { get; set; }

        [DataMember(Name = "complete")]
        public bool Complete { get; set; }
    }

A partir de là, on peut faire appel au service avec un peu de Linq. Par exemple, récupérer la liste des TodoItems qui n'ont pas encore été complété.

        List<TodoItem> items;

        private async void RetrieveUncompleteTodoItems()
        {
            IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>();

            // The query excludes completed TodoItems
            items = await todoTable
                .Where(todoItem => !todoItem.Complete)
                .ToListAsync();
        }

Laisser Azure gérer l'identification

Pour finir, ajouter une identification dans vos applications peut être un gros plus ! Pour garder un backup des données de l'utilisateur, ou permettre la synchronisation de données entre différents devices. Cela permet également de donner des droits d'accès plus spécifiques à chaque tables : si vous vous rappelez de l'étape de création de la table TodoItem, vous vous souvenez sans doute qu'il était possible de préciser des différents niveaux de permissions pour chaque fonction CRUD :

  • Everyone : cette option rend toutes vos données accessibles par défaut
  • Anyone with the Application Key : cette option restreint l'utilisation aux applications/utilisateurs possédant la clé secrète
  • Only Authenticated Users : les utilisateurs doivent être identifiés pour pouvoir communiquer avec l'API
  • Only Scripts and Admins : limite l'utilisation à la clé maître, ou aux scripts côté serveur.

Pour configurer tout ça, il suffit d'aller dans la partie Identity du portail, et de fournir des "clés" qui vous nous identifier auprès de différents providers tels que Microsoft, Facebook, Twitter, ... On peut donc aller sur https://developers.facebook.com/ ou https://dev.twitter.com/, créer une "application" pour obtenir des clés, et laisser nos utilisateurs s'identifier grâce à leurs propres comptes. Pour les comptes Microsoft, il faut aller sur le portail http://manage.dev.live.com/.

De retour dans mon application, il suffit d'une ligne de code pour demander à l'utilisateur de se connecter :

var user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.Twitter);

La méthode LoginAsync prend en paramètre le provider que l'on veut utiliser. Dans ce cas-ci, c'est Twitter. Une interface familière va s'afficher pour demander à l'utilisateur d'entrer ses identifiants.

La méthode LoginAsync est effectivement asynchrone. C'est pour cela que l'on utilise le mot clé await. Lorsque l'utilisateur a entré ses informations et autorisé l'application, la tâche est effectivement terminée et retourne un objet décrivant l'utilisateur. A partir de ce moment, l'utilisateur peut communiquer avec l'API. Il n'y a rien d'autre à faire... Ce n'est donc pas à vous de devoir maintenir du code, et si demain Twitter ou Facebook décidaient de changer radicalement la manière dont fonctionnent leurs APIs, Microsoft mettrait à jour son SDK et votre application serait toujours fonctionnelle. Toutefois, cette façon de faire est assez limitée. Les utilisateurs ne restent pas connectés d'une session à l'autre, et doivent entrer leurs identifiants à chaque fois, ce qui semble un peu curieux. Mais d'après un post d'un employé de Microsoft sur MSDN, une mise à jour du SDK devrait sortir prochainement pour apporter une solution ! :)

As Xinyang notes, we'll soon be making improvements to our Login API to provide support for WebAuthenticationBroker's SSO feature. Also, in just a few weeks we'll be releasing an update that enables you to get and, most importantly, set the authenticationToken and userId meaning that you can cache the full Mobile Services credentials however you see fit. We'll provide plenty of samples that show how this works.

Dans un prochain article, on parlera plus en détails de l'identification, et de comment on peut dès maintenant permettre à l'utilisateur de ne pas devoir s'identifier à chaque session.

Développez votre app Windows début 2013 !

1. December 2012 15:12 by Renaud in Events, Windows 8, Windows Azure, Windows Phone  //  Tags: , ,   //   Comments (0)
Article original sur le blog du MIC.

Vous avez une idée d'application en tête depuis quelques temps et vous aimeriez la réaliser ? Ou bien vous êtes simplement curieux et avez envie d'apprendre les dernières technologies Microsoft ? A partir de janvier 2013, le MIC Belgique organise des labs (gratuits !) tournant autour du développement d'applications mobiles connectées au cloud. Le but est d'arriver à réaliser un projet de bout en bout qui soit disponible sur Windows 8 (tablette/pc) et/ou Windows Phone 8 (smartphone), tout en étant relié au cloud de Windows Azure.

Deux niveaux de sessions sont proposés pour répondre à vos besoins de manière adaptée, et vous permettre d'évoluer. Il y aura d'abord des sessions Discovery pour apprendre les bases. Et pour ceux qui veulent aller plus loin, nous continuerons avec des sessions Advanced présentant les aspects plus complexes ! Toutes ces formations sont gratuites, et destinées à une audience de développeurs .NET. Vous pouvez librement vous inscrire à une ou plusieurs sessions. Pas la peine toutefois de vous inscrire à deux sessions Discovery pour une même techno : il s'agira de la même formation ! Voici l'agenda complet : Discovery #1 :

15/01/13 Windows 8
22/01/13 Windows Phone 8
29/01/13 Azure Mobile

Discovery #2 :

30/01/13 Windows 8
05/02/13 Windows Phone 8
12/02/13 Azure Mobile

 Advanced :  /! Ces sessions sont destinées à des développeurs déjà expérimentés!

13/02/13 Windows 8
19 & 20/02/13 Windows Azure
22/02/13 Windows Phone 8        

Rendez-vous très prochainement au MIC ! ;)

TextBox

About the author

I'm a developer, blog writer, and author, mainly focused on Microsoft technologies (but not only Smile). I'm Microsoft MVP Client Development since July 2013.

Microsoft Certified Professional

I'm currently working as an IT Evangelist with an awesome team at the Microsoft Innovation Center Belgique, where I spend time and energy helping people to develop their projects. I also give training to enthusiastic developers and organize afterworks with the help of the Belgian community.

MIC Belgique

Take a look at my first book (french only): Développez en HTML 5 pour Windows 8

Développez en HTML5 pour Windows 8

Membre de l'association Fier d'être développeur

TextBox

Month List