Techdays 2014 : Slide et Samples

by Nicolas Calvi 11. février 2014 18:30

Je viens de terminer ma session "Photos et autres sensors sur Windows Phone" avec Nicolas Delabarre (Nokia) et voici les slides (en pdf) ainsi qu'un projet Windows Phone 8 qui montre ce qui a été présenté au niveau des senseurs et de la réalité augmentée avec GART.

Slides : SessionWP8Techdays2014.pdf (2,86 mb)

Projet WP8 : SampleTechdays2014.rar (8,32 mb)

Pour la partie Nokia SDK Imaging, voici les liens évoqués par Nicolas Delabarre (Nokia) :

Point d’entrée des ressources techniques relative au SDK Imaging :
http://developer.nokia.com/resources/library/Lumia/nokia-imaging-sdk.html

Projets d’exemples basés sur le SDK Imaging (avec code source) :
http://developer.nokia.com/resources/library/Lumia/nokia-imaging-sdk/sample-projects.html

Forum de discussion dédié au SDK Imaging :
http://developer.nokia.com/community/discussion

Articles Wiki :
http://developer.nokia.com/community/wiki/Portal:Windows_Phone_Multimedia

N'hésitez pas nous poser des questions :)

CodePlex : Black Minecraft Editor

by Nicolas Calvi 3. février 2014 11:18

Voilà je me décide à lancer publier mon petit projet CodePlex "Black Minecraft Editor". Rien d'exceptionnel là non plus, c'est un outil qui permet de modifier les sauvegardes du jeu Minecraft, cela modifie autant les sauvegarde locale que serveur. Vous pouvez la télécharger à cette adresse :

https://blackminecrafteditor.codeplex.com/

Le lien a été rajouté à la liste de mes projets Codeplex sur le bandeau droit du blog.

N'hésitez pas à me faire vos retours car l'éditeur est en BETA !

 

CodePlex : Black NBT

by Nicolas Calvi 28. octobre 2013 16:36

Bonjour à tous, 

Un petit billet pour le lancement de mon nouveau projet CodePlex "Black NBT". Rien d'exceptionnel, juste une petite librairie et un client de test pour gérer les fichiers au format NBT (Named Binay Tag) dans sa spécification 19133. Vous pouvez la télécharger à cette adresse :

https://blacknbt.codeplex.com/

Le lien a été rajouté à la liste de mes projets Codeplex sur le bandeau droit du blog.

N'hésitez pas à me faire vos retours sur la librairie (le client est juste là pour décorer), je serais ravi d'avoir vos feedbacks.

 

Windows 8.1 : Classes XNA

by Nicolas Calvi 2. octobre 2013 12:02

Il m'est souvent arrivé de porter du code .Net (on va dire Classique, genre WPF, etc.) sur du Windows Store App. Une des problématiques que je rencontrais souvent était les bouts de code qui utilisaient des classes du Framework XNA.

De manière général, ces classes étaient souvent les mêmes : Vector3, Matrix, MathHelper, etc. Mais quand on arrive dans le monde des Windows Store App il est difficile de retrouver ses APIs. 

Afin de vous éviter de devoir décompiler ses classes, je vous propose aujourd'hui de télécharger le code source de celle-ci, compatible avec les Windows Strore App. C'est gratuit, c'est que du bonheur :)

Pour le téléchargement c'est ici : Microsoft.Xna.Framework.rar (33,84 kb)

 

Astuce : Inclinomètre (Windows 8.1)

by Nicolas Calvi 4. septembre 2013 07:30

Dans cette astuce nous allons découvrir l'inclinomètre, qui permet de connaitre comme son nom l'indique, le degré d'inclinaison d'un périphérique sur ses trois axes. 

Contrairement à d'autre senseur, l'inclinomètre n'a pas besoin d'une déclaration spéciale dans le manifeste de l'application.

La classe qui gère ce senseur est la classe statique "Inclinometer", qui regroupe ce qu'il faut pour gérer votre senseur. Contrairement au "Geolocator" ce senseur est toujours actif et travail en tâche de fond. Pour récupérer l'instance de l'inclinomètre, il faut passer par la fonction "GetDefault()" qui vous retourne l'instance courante du senseur. Si vous ne possédez pas de senseur, cette fonction vous retournera NULL, vérifiez donc bien l'instance avant de faire quoi que ce soit. Une fois l'instance retournée, voici les propriétés à connaitre :

  • MinimumReportInterval : Cela retourne l'intervalle minimum supporté par l'inclinomètre pour la mise à jour des positions. C'est une propriété en lecture, elle est a titre informative, elle est exprimée en milliseconde.
  • ReportInterval : C'est ici que l'on spécifie l'intervalle désiré (en milliseconde) entre deux notifications de changement d'inclinaison. Quand une tablette bouge, les notifications sont très rapide, cela permet de temporiser ces notifications si vous exécutez un traitement lourd entre chaque. Par contre, saisir un intervalle inférieur au "MinimumReportInterval" sera ignoré par l'API et se positionnera sur son minimum.

Voici ce que cela donne pour l'initialisation :

// Récupération de l'instance
inclinometer = Inclinometer.GetDefault();

// On test si l'inclinomètre existe
if ( inclinometer == null)
{
  throw(new Exception("Inclinometer not aviable."));
}
else
{
  // Spécification de l'intervalle
  double interval = 50;

  inclinometer.ReportInterval = interval < inclinometer.MinimumReportInterval ? inclinometer.MinimumReportInterval : interval;
}

Pour récupérer les changements d'inclinaisons il y a deux solutions, soit on attend que la classe nous l'indique (ce sera donc avec un abonnement à un événement) ou manuellement quand vous le souhaitez (donc avec une fonction).

Méthode automatique (Event) :

C'est la façon la plus simple d'être informé d'un changement d'inclinaison, en s'abonnant à l'événement "ReadingChanged" vous êtes notifié du changement :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
  // Récupération de la lecture du senseur
  InclinometerReading read = args.Reading;

  // Données les plus courantes
  float pitch = read.PitchDegrees;
  float roll = read.RollDegrees;
  float yaw = read.YawDegrees; 

  // Faire ici le traitement que vous voulez
}

Attention toutefois, cet événement ne s'exécute pas dans le ThreadUI, si vous devez affecter ces valeurs dans l'interface, n'oubliez pas de le faire dans le ThreadUI :

// On se branche sur l'événement
inclinometer.ReadingChanged += OnInclinometerReadingChanged;

// Définition de la fonction pour l'événement
private void OnInclinometerReadingChanged(Inclinometer sender, InclinometerReadingChangedEventArgs args)
{
  // On fait le traitement dans le ThreadUI
  await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
  {
    // Faire ici le traitement que vous voulez
  }
}

Voilà pour la méthode automatique.

Méthode manuelle (fonction) :

Dans ce cas précis, c'est nous qui allons demander à un moment que nous déterminons, les dernières valeurs captées par le senseur. Pour se faire on fait appel à la fonction "GetCurrentReading()" :

// Récupération des données
InclinometerReading read = inclinometer.GetCurrentReading();

// Données les plus courantes
float pitch = read.PitchDegrees;
float roll = read.RollDegrees;
float yaw = read.YawDegrees;

C'est une autre façon qui peut avoir beaucoup d'avantage (c'est un peu en fonction de l'utilisation que vous aurez du senseur). 

Voilà donc ce qu'il faut savoir pour bien commencer avec le senseur d'inclinaison.