Mars 2017
Volume 32, numéro 3
Cet article a fait l'objet d'une traduction automatique.
Bot Framework - Des robots plus intelligents
Par Kevin Alice | Mars 2017
Microsoft Bot Framework, LUIS, Azure Bot Service, les fonctions Azure j’entends il partout où ces jours : les robots sont les nouvelles applications. Une raison est la simplicité et l’efficacité qu’ils apportent à des tâches courantes. Considérer : Au lieu d’accéder à partir de Bing ou Google à deux ou trois sites Web ou plus pour réserver un vol ou de faire des réservations dans un restaurant, vous êtes en mesure de demander un type d’assistant numérique à faire pour vous. Mais il peut y avoir une raison encore plus importante pour les développeurs d’applications d’adopter cette tendance : Les applications mobiles deviennent de plus en plus difficile à créer. Créer qu’une seule application mobile accepte n’importe où entre 30 000 et demi un million de dollars pour chaque plateforme : iOS, Android et Windows.
True, il existe certaines technologies inter-plateformes, telles que Unity ou Xamarin, qui permet de réduire le coût de développement pour plusieurs plateformes. Mais les robots sont en train de devenir une autre option, le paradigme le décalage en utilisant une interface de conversation. Cette approche s’appuie sur les communications utilisé par l’humanité des milliers d’années et couvre les fonctionnalités vocales et texte (par exemple, Skype ou Messenger). L’interface utilisateur CONVERSATIONNELLE (CUI) peut également être améliorée des images, vidéos et les contrôles traditionnels tels que les boutons et CardActions. Dans les robots, le focus est sur la simplicité et les aspects physiques de l’entrée, au lieu d’élaboration de l’interface utilisateur avec les contrôles traditionnels.
L’avantage ? Un risque potentiel épargne des milliards de dollars d’agrégation que les organisations éloigner de création d’interfaces utilisateur distinctes pour chaque paradigme d’écran et à la place adopter des interfaces de conversation qui fonctionnent sur tous les périphériques et les facteurs de forme, avec un écran ou sans. Par exemple, j’ai créé un robot de pertinence (fitness) Active qui vous permet de trouver en cours d’exécution, cycle, de randonnée, ski et autres pistes près de chez vous. (Visitez bit.ly/2knZVbr à ajouter à Skype.) Alors que l’application propose une interface utilisateur riche et des contrôles, le robot est conçu pour comprendre votre entrée sous forme de conversation, comme indiqué dans Figure 1.
Figure 1 adéquation Active robot qui vous montre des traces
L’impact s’étend au-delà de développement d’applications. Robots peuvent relever les défis de sites Web qui deviennent de plus en plus difficiles de parcourir, de nombreuses à l’aide de normes ou des infrastructures Web anciens ou obsolètes. Essayez d’effectuer une tâche à n’importe quel site Web du service client, par exemple, et vous passerez probablement une bonne demi-heure essayer de naviguer dans le menu site Web.
Il y a aussi la portée unique de robots. Imaginez une application de jeu de cartes, tels que Solitaire. Avant de robots, j’ai dû créer une version pour chaque plateforme. Désormais, cependant, robots perturbent l’interruption est le verrouillage de la plateforme. Soudain, mes applications basées sur Windows fonctionnent comme des robots sur tous mes amis iPhone et Androïd. Pour quelle raison ? Étant donné que les robots fonctionnent sur les canaux, Skype, télégramme, Facebook Messenger, marge et autres plateformes d’applications omniprésents.
J’ai compris qu’il serait utile pour générer le jeu le plus populaire du monde à l’aide de Microsoft Bot Framework, donc Figure 2 montre ma de Solitaire, prêt à lire. (Visitez bit.ly/2jrzP7S à ajouter à Skype.)
Figure 2 mon Bot Solitaire sur Skype Handles 500 000 requêtes par semaine
Pour commencer à créer des robots, accédez au site Microsoft Bot Framework (dev.botframework.com). Vous pouvez créer des robots à l’aide de Microsoft .NET Framework ou Node.js, quelle que soit la technologie que vous préférez. Récemment, Microsoft a ajouté Azure Bot Service (bit.ly/2knEtU6) comme un autre moyen pratique d’implémenter des robots. Service Bot Azure offre une expérience basée sur un navigateur pour la création de robots à partir de modèles de facile à utiliser. Le service utilise les fonctions d’Azure, une architecture basée sur des événements de code sans serveur avec « fonctions » qui vous permettent d’économiser de l’argent et faire évoluer vos robots mieux.
Voici ce qui est remarquable de fonctions d’Azure : Lorsque j’ai commencé à travailler robots, j’ai réalisé que chaque fois que j’avais besoin d’un robot, que j’aurais à créer une application Web pour fournir un conteneur d’application. C’est parfait pour une application, mais pas pour plusieurs robots, dont chacun nécessite une infrastructure distincte. Au lieu de cela, les fonctions Azure vous permet en petits morceaux de hôte du code dans le cloud, sans vous préoccuper de l’infrastructure de l’application entière.
Analyse décisionnelle et développement de robot
Tout comme les applications, les robots sont ici pour vous aider dans une tâche spécifique, qu'ils peuvent le faire mieux. Par exemple, mon bot Solitaire peut jouer au Solitaire avec vous et peut-être même vous apprendre les règles et les astuces du jeu. True, il n’est pas susceptible de réussir le test Turing (un moyen de mesurer l’intelligence d’une machine développé par Alan Turing dans les années 1950), mais cela serait probablement superflue pour la plupart des robots.
De même, un robot pour votre bureau local automobile doit connaître certaines choses sur l’envoi d’un paiement pour votre inscription de licence ou vous aider à payer un ticket ou l’envoi d’une extension de licence pilote. Un bot météo doit répondre à toute question liée à la météo et l’intelligence du robot peut inclure des méthodes pour déterminer les besoins utilisateur et emplacement météorologiques spécifique.
Robots peuvent automatiser beaucoup de choses via une interface de conversation, mais ils peuvent également être améliorés des images, des boutons et autres contrôles qui facilement encore plus l’interaction avec les périphériques mobiles. Analyse décisionnelle Bot vraiment intervient lorsque les conversations sont ouvertes. À l’aide des boîtes de dialogue pour un ensemble prédéfini de réponses est une tâche de programmation standard et relativement simple. Répondre à une conversation humaine, en revanche, implique d’intelligence. Heureusement, Microsoft Bot Framework vous permet à la fois : LuisDialogs permet la prise en charge des conversations basée sur le langage naturel, tandis que les contrôles traditionnels plus permettent aux utilisateurs d’appuyer sur des boutons, des tapis roulants ou des autres contrôles pour sélectionner les options.
Intelligence est au cœur de la conversation interface utilisateur employée par nombreux robots, permettant une interaction intuitive avec des utilisateurs humains. Le nombre croissant de Services COGNITIF de Microsoft (bit.ly/2jx1kMQ) vous permet de brancher des fonctionnalités intelligentes dans votre robot. Ces services incluent (mais ne sont pas limitées à) :
- Vision
- Reconnaissance vocale
- Langage
- Connaissance
- Recherche
- Emplacement
Consultez l’article de fantastique de Sole Alessandro Del sur Services Cognitive à msdn.com/magazine/mt742868.
Rendre votre robot plus intelligent implique l’utilisation de certaines mesures courantes qui peut ne pas permettre via un test Turing, mais améliore certainement les conversations avec le robot :
- Boîtes de dialogue, les images et autres moyens de collecter des données normalisées, faire passer un message et simplifient les conversations
- Localisation
- Boîte de dialogue d’aide et de pipelines pour améliorer les fonctions de base de robot
- Données utilisateur (telles que l’emplacement) afin d’éliminer les questions de duplication
Vous ne seront trop ambitieux et essayez de créer un outil semblable à taille ville pensé approfondie ordinateur de Douglas Adams (à partir de « l’Hitchhiker Guide la galaxie »). Au lieu de cela, lorsque j’ai commencé à travailler mon robots, j’ai limité les aux fonctions qui ont été essentielles pour les tâches principales, comme un jeu de cartes ou suggérant les meilleures traces pour exécuter, puis l’améliorer leur Intelligence.
Intelligence du langage avec LUIS
Le premier composant intelligence envisager d’ajouter à une interface de conversation est Microsoft Language présentation Intelligence Service (LUIS). Ce service fonctionne en analysant les conversations ou lui envoyer des phrases et extraction des intentions réelles et des entités spécifiques à votre application. Pour ajouter une boîte de dialogue LUIS à votre robot, créez simplement une classe qui hérite de LuisDialog, inscrire votre application LUIS luis.aiand fournir l’id d’application et la clé pour la boîte de dialogue :
[LuisModel("<YOUR_LUIS_APP_ID>", "<YOUR_LUIS_APP_KEY>")]
[Serializable]
public class IntelligentLanguageDialog : LuisDialog<object>
Pour obtenir des instructions LUIS détaillées, consultez janvier de Ashish Sahu 20176 article de MSDN Magazine à l’adresse msdn.com/magazine/mt745095.
Dans mon robot de traces de pertinence (fitness) actif (Figure 3) j’ai défini les objectifs liés à des activités de pertinence (fitness) et attendre l’utilisateur à fournir d’emplacement et l’aptitude à l’activité dans le cadre d’un robot intelligent conversation. Je veux qu’un utilisateur peut indiquer, par exemple, « Afficher les traces de ski du Colorado, » et robot doit comprendre et propose un ensemble de suivis. Les utilisateurs de mon application Active adéquation exécuter millions de traces de tous les jours et en interrogeant l’adéquation Active, ils peuvent mapper l’intention de GetActivityLocation à partir de mon modèle LUIS, qui retourne la géographie et les entités d’activité dans le robot.
Figure 3 modèle LUIS
Imaginez la quantité de codage je devrais faire pour extraire des données toutes les entrées d’utilisateur non normalisée ! Une courte phrase humaine implique souvent un niveau de complexité qui uniquement les outils d’apprentissage machine peuvent comprendre et traiter. Ajoutez toutes les variations possibles de cette phrase simple et vous vous rendez compte qu’intelligence du robot est une tâche non triviale. Heureusement, LUIS agit comme un analyseur de conversation intelligent et un extracteur qui effectue tout le travail pour vous. Il vous suffit consiste à ajouter à votre robot.
Une fois que le modèle est défini, je peux l’apprentissage en fournissant des expressions qui vous aidera à LUIS comprendre quelles sont mes objectifs et obtenir des entités pour mon bot. Apprentissage du modèle pour Mon intention GetActivityLocation, fourni les énoncés suivants : « Show cycle pistes à proximité, » « snowboard dernière Show pistes en Autriche » et « étant la plus longs ski pistes dans l’Utah ? » En tant que Figure 4 s’affiche, une fois LUIS traite des entités, il met en surbrillance les entités que j’ai spécifié dans mon modèle. Que se passe-t-il si une entité ne reconnaît pas LUIS ? Il s’agit dans lequel vous effectuez l’apprentissage par le mappage d’entités manuellement. Par exemple, j’ai dû former mon robot de reconnaître « snowboard » en tant qu’activité.
Figure 4 modèle formation LUIS
Ensuite, vous définissez des méthodes qui gèrent les intentions retournées par votre modèle LUIS. Vous pouvez avoir des méthodes qui gèrent un aucune intention ou les autres modes de votre modèle, en tant que Figure 5 montre.
Modes de gestion de la figure 5
[LuisIntent("None")]
public async Task NoneIntent(IDialogContext context, LuisResult result)
{
await context.PostAsync(
$"You have reached the none intent. You said: {result.Query}"); //
context.Wait(MessageReceived);
}
// Go to https://luis.ai and create a new intent,
// then train/publish your luis app.
// Finally, replace "GetActivityLocation" with the name of your newly
// created intent in the following handler.
[LuisIntent("GetActivityLocation")]
public async Task GetActivityLocation(IDialogContext context, LuisResult result)
{
await context.PostAsync(
$"You have reached the GetActivityLocation intent. You said:
{result.Query}"); //
context.Wait(MessageReceived);
}
Chaque fois que le modèle détermine que l’entrée correspond à un objectif GetActivityLocation, il appelle mon bot (méthode). Le résultat est retourné par LUIS dans l’objet LuisResult et inclut les entités, telles que l’emplacement et l’activité. Par exemple, je souhaite vérifier si les entités contiennent un pays. Pour ce faire, j’utilise la méthode TryFindEntity de l’objet LuisResult, recherchez le type d’entité « builtin.geography.country ». LUIS fournit un certain nombre d’entités prédéfinies, ce qui simplifie considérablement le travail pour vous. Vous trouverez une liste complète de ces entités à bit.ly/2kWgCHR.
Notez que l’entité builtin.geography contient sous-entités, telles que des pays et ville. Une entité qui contient les entités secondaire est appelée une entité composite. Dans ce cas, m’intéresse plus particulièrement l’entité secondaire du pays, comme indiqué dans Figure 6.
Figure 6 recherche le pays
// Go to https://luis.ai and create a new intent, then train/publish your luis app.
// Finally, replace "GetActivityLocation" with the name of your
// newly created intent in the following handler.
[LuisIntent("GetActivityLocation")]
public async Task GetActivityLocation(IDialogContext context, LuisResult result)
{
await context.PostAsync(
$"You have reached the GetActivityLocation intent. You said:
{result.Query}"); //
EntityRecommendation country;
if(result.TryFindEntity("builtin.geography.country", out country))
{
await context.PostAsync($"Country: {country.Entity}");
}
context.Wait(MessageReceived);
}
Conseils pratiques robot
Microsoft effectue pèse sur le devant de développement bot, libération des outils tels que le langage Intelligence Service (LUIS) et le Service de robot Azure permet de rationaliser la création et la gestion de cette nouvelle classe de logiciels. La bonne nouvelle est que la plupart des applications aujourd'hui peuvent être facilement transformées robots, avec la conversation UI (CUI) parfait pour plusieurs tâches et les types d’applications. Pour obtenir le meilleur parti de votre effort de développement bot, voici quelques éléments à prendre en compte :
Lecture de couverture : Un des aspects plus convaincantes robots est qu’ils s’exécutent dans les canaux qui sont trouvent sur chaque PC, les Tablet PC et les smartphone, telles que Skype, Facebook Messenger et télégramme. Optimiser le public visé par publication robots sur plusieurs canaux. En outre, tirer parti des services disponibles pour localiser votre robot en plusieurs langues.
Être un Conversationalist : Faire bon usage de l’interface CONVERSATIONNELLE, ce qui est parfait pour plusieurs tâches et les types d’applications. Pour de meilleurs résultats, vous concentrer sur conversation interfaces telles que la conversation instantanée, voix et langage, plutôt que des contrôles d’interface utilisateur traditionnelles comme des boutons.
Service, entrez : Le nouveau Service de robot Azure est une plateforme en nuage qui réduit la surcharge de l’infrastructure et permet des projets à l’échelle de votre robot. Derrière cette capacité est fonctions Azure, ce qui permet aux développeurs de petits morceaux de hôte du code dans le cloud.
Obtenir actif : Lorsque vous créez des robots, se concentrer sur l’ou les tâches que chaque robot doit résoudre spécifique. Ne pas compliquer davantage, AI plus n’est pas toujours mieux. Démarrer avec la tâche principale que votre robot doit résoudre, puis d’injecter intelligence.
Plus fort : Rendre l’intelligence intégrée LUIS utiliser pour activer des conversations ouvertes et de fournir une entrée pour votre robot. Pour de meilleurs résultats, veillez à former votre modèle LUIS, en mettant l’accent sur un ensemble concis d’entités et les modes. La moins « tolérance » dans votre modèle, mieux c’est l’intelligence artificielle effectuera !
Bien sûr, je dois également connaître l’entité d’activité (vous pouvez utiliser adéquation Active pour suivre les activités de plus de 50, par exemple en cours d’exécution, cycle, ski et snowboard). Par conséquent, lorsque je me demander : « Où est la meilleure ski en Autriche ? » Attendre le robot adéquation Active pour renvoyer « ski » en tant qu’entité de mon activité, comme indiqué dans Figure 7.
Figure 7 le GetActivityLocation intention en action avec l’émulateur de robot
Par conséquent, j’ai mis à jour ma méthode GetActivityLocation pour retourner l’activité. Notez que contrairement à builtin.geography.country, mon activité n’est pas une entité intégrée. Pourtant, LUIS figures il est bien joli une fois quelques séquences pendant l’apprentissage du modèle, comme indiqué dans Figure 8.
Figure 8 apprentissage du modèle avec les séquences
// Go to https://luis.ai and create a new intent, then train/publish your luis app.
// Finally, replace "GetActivityLocation" with the name of your newly
// created intent in the following handler.
[LuisIntent("GetActivityLocation")]
public async Task GetActivityLocation(IDialogContext context, LuisResult result)
{
await context.PostAsync(
$"You have reached the GetActivityLocation intent. You said:
{result.Query}"); //
EntityRecommendation country;
if(result.TryFindEntity("builtin.geography.country", out country))
{
await context.PostAsync($"Country: {country.Entity}");
}
EntityRecommendation activity;
if (result.TryFindEntity("activity", out activity))
{
await context.PostAsync($"Activity: {activity.Entity}");
}
context.Wait(MessageReceived);
}
Bot Framework fournit des exemples de code générique approfondie pour c# à bit.ly/2gHupjget pour Node.js à bit.ly/2kWolWx.
Vos connaissances sur l’emplacement
Nombreux robots fournissent des réponses en fonction du lieu, mais peut devenir fastidieux de réponses de l’emplacement de codage. Dans l’exemple précédent, j’ai utilisé les intelligence LUIS afin d’obtenir une entité géographique intégrée analysée par LUIS à partir de la conversation. Heureusement, le contrôle d’emplacement Microsoft Bing fait désormais partie du Framework Bot, ce qui rend la collecte des données basée sur l’emplacement qui sont beaucoup plus faciles pour les développeurs.
Gestion de site pour robot Framework fournit également une interface visuelle qui inclut des mappages (voir Figure 9). Cela peut être très pratique si votre robot a besoin fournir des adresses qui incluent des codes postaux, ville, région et localité des données à partir d’une interface facile à utiliser ou native qui fonctionne dans les canaux tels que Skype et Facebook Messenger.
Figure 9 gestion de site à l’aide de l’Interface visuelle de Bing Maps
Pour utiliser un contrôle Bing emplacement, simplement pour obtenir une clé API Bing Maps et un composant de la boîte de dialogue emplacement pour un projet .NET (via NuGet) ou Node.js (via npm), puis initialiser et appeler une instance de la boîte de dialogue emplacement dans votre code :
var options = LocationOptions.UseNativeControl | LocationOptions.ReverseGeocode;
var requiredFields = LocationRequiredFields.Locality |
LocationRequiredFields.Region |
LocationRequiredFields.Country;
var prompt = "Where are you looking for trails?";
var locationDialog = new LocationDialog(
apiKey, this.channelId, prompt, options, requiredFields);
context.Call(locationDialog, this.ResumeAfterLocationDialogAsync);
LocationDialog fournit des options pour demander les divers champs adresse et la personnalisation des invites. Lorsque le résultat est renvoyé, vous pouvez la gérer dans une méthode de reprise, comme indiqué dans Figure 10.
Figure 10 gestion des résultats de l’emplacement dans une méthode de reprise
private async Task ResumeAfterLocationDialogAsync(
IDialogContext context, IAwaitable<Place> result)
{
var place = await result;
if (place != null)
{
var address = place.GetPostalAddress();
var formattedAddress = string.Join(", ", new[]
{
address.Locality,
address.Region,
address.Country
}.Where(x => !string.IsNullOrEmpty(x)));
await context.PostAsync(
"Where are you looking for trails " + formattedAddress);
}
context.Done<string>(null);
}
Au-delà de LUIS
Outre LUIS, cognitifs Services fournit un nombre d’autres API qui permettent à vos robots possédant des compétences qui peuvent sembler complexes incomprehensibly pour un développeur individuel ou une entreprise à implémenter. Heureusement, vous n’êtes pas obligé de faire vous-même :
- Recommandations API vous permet d’inclure des recommandations sur les produits (par exemple, des produits fréquemment achetés ensemble) ou des recommandations d’utilisateur personnalisées.
- API de vision ajoute avancée des images et vidéo compétences à vos robots à reconnaître les objets, populaire faces, âge, sexe ou même des sentiments.
- Éducation API de base de connaissances peut ajouter des connaissances academic créer Q se comme et ajouter des compétences de base de connaissances spécifique à votre robot.
Il est intéressant de mentionner que les robots sont également ouverts aux API et des services tiers. Vous pouvez utiliser vos propres services et API à rendre vos robots unique et résoudre les problèmes qui n’ont pas été résolus avant. En effet, Bot Framework ouvre un nouvel univers de possibilités, ainsi qu’évolution des connaissances humaines et d’accessibilité, via des interfaces de conversation simples et facile à utiliser.
Nouvelles et intéressantes
En plus des mises à jour régulières Framework robot pour le .NET Framework et Node.js, ainsi que les API REST, Microsoft a récemment ajouté fonctionnalités acceptant bot développement au niveau supérieur.
Parmi les derniers ajouts Framework Bot, Bot Service Azure, il propose désormais un moyen simple de tirer parti de la commodité et l’évolutivité du cloud pour vos projets bot (bit.ly/2knEtU6). Service de robot, illustré Figure 11, utilise les fonctions d’Azure et une collection de modèles de démarrage rapide pour vous aider à tirer le meilleur parti votre robot code et permettre à vos robots à s’adapter à n’importe quel niveau (bit.ly/2kuo9Bb). Par exemple, vous pouvez choisir de base, modèles bot formulaire, Proactive, LUIS, ou Question et la réponse, chacun offrant un outil prêt à l’exécution vous pouvez développer si nécessaire.
Robot de modification de la figure 11 Code directement dans le navigateur de Service
Fonctions Azure est la technologie de Service de robot Azure, en fournissant des expériences pilotées par événements basés sur l’architecture serveur et de calcul à la demande. Cela fait signifie que vous n’avez plus besoin une infrastructure onéreuse qui héberge l’application pour chaque outil. Au lieu de cela, vous permettre de robots beaucoup plus léger et les faire évoluer plus facilement et enregistrer sur un effort de développement et de temps, tout en simplifiant la connectivité avec les Services Cognitive.
Le fabricant QnA (qnamaker.ai) est un autre ajout intéressant de mentionner. Disponible à partir du Service de robot Azure comme un modèle de projet de robot, QnA Maker remplit un scénario très courant pour robots qui répondent aux questions classiques à partir d’une base de connaissances existante.
Pour résumer
Microsoft Bot Framework offre un moyen simple et rapide pour commencer à créer des robots, fournissant une interface de conversation pour les applications nouvelles et existantes ou de services. Il vous permet de créer de nouvelles expériences et atteindre des milliards d’utilisateurs connectés via Skype, Facebook Messenger, télégramme et autres canaux. Microsoft cognitifs Services inclut de nombreuses API intelligent, vous pouvez ajouter à votre robot.
L’infrastructure de robot écosystème augmente rapidement et vous pouvez tirer parti de cette en ajoutant services inclus avec les Services cognitifs ou à l’aide des API à partir de fournisseurs tiers pour rendre vos robots plus efficacement et plus efficaces. Nombre de détections peut entraîner voyage qui commence par un outil très simple pour vous et vos utilisateurs. Les robots sont en effet les nouvelles applications (ou extensions des applications existantes), et avec intelligence ajoutés, ils véritablement devient très puissants. En outre, ils réduisent votre temps de développement, les efforts et les coûts.
Répondre à mes robots
J’ai développé quelques robots sur le dernier quelques mois, j’ai donc décidé de les partager avec vous à partir d’un emplacement pratique, répertoriés dans Figure A. Les extraire et voir si elles peuvent vous inspirer pour créer vos propres. (Le lien fourni avec chaque ajoute ce robot Skype.)
Figure A ma Collection de robots
ROBOT | Description |
Solitaire (bit.ly/2jrzP7S) | Solitaire est considéré comme jeu de cartes plus populaires au monde. Maintenant au lieu de lancer une application, vous pouvez utiliser votre client de chat favoris, tels que Skype, à apprécier le jeu. |
Pertinence (fitness) active (bit.ly/2knZVbr) | Rechercher des traces dans le monde entier, exécuté, effectue un cycle, guider ou ski – toutes à partir de réseau social de pertinence (fitness) supérieur au monde. |
UNO (bit.ly/2k4AzyH) | Jouer à ce jeu de carte renommée sur Skype, Messenger ou télégramme. |
FreeCell (bit.ly/2l0NM9b) | FreeCell est un jeu de cartes grand et complexe avec plusieurs niveaux de difficulté. Démarrer avec les niveaux facile et apprenez à lire. |
Eights folles (bit.ly/2kY7EdN) | Découvrez ce jeu de carte facile à apprendre. |
Coffre de jeux de cartes (bit.ly/2klXOCV) | Apprenez à maîtriser certains jeux carte plus populaires, y compris le Solitaire, UNO, Eights fou, 101, Freecell et Mau-Mau. |
Kevin Ashley*(@kashleytwit) est un architecte passionné de Microsoft. Il est co-auteur de « Professional Windows 8 Programming » (Wrox, 2012) et un développeur d’applications principales, les robots et les jeux, notamment Active Fitness (activefitness.co). Il présente souvent sur la technologie à divers événements, secteur présente et présentations techniques en ligne. Dans son rôle, il travaille avec des Démarrages et des partenaires, conseils sur la conception de logiciels, entreprise et stratégie technologique, architecture et le développement. Suivez son blog à l’adresse kevinashley.com et sur Twitter : @kashleytwit.*
Merci à l'expert technique Microsoft suivant d'avoir relu cet article : Mat Velloso