Vérifier si le Wi-Fi est connecté

Posted by & filed under Dev', Tips.

Un petit piège à éviter concernant la détection du Wi-Fi :
Le tutoriel proposé par la MSDN conseille d’utiliser DeviceNetworkInformation.IsWiFiEnabled pour détecter si le Wi-Fi est activé.

Attention, ce flag possède l’avantage d’être rapide à lire mais indique comme son nom l’indique si le Wi-Fi est activé dans les paramètres du téléphone, et en aucun cas si le Wi-Fi est actuellement connecté (l’utilisateur peut très bien n’être connecté à aucun réseau Wi-Fi, IsWiFiEnabled vous retournera true quand même).

Pour tester si le Wi-Fi est réellement connecté, il faut adjoindre un test (plus coûteux) pour connaître l’interface réseau utilisée par le runtime :

if (DeviceNetworkInformation.IsWiFiEnabled
	&& NetworkInterface.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
{
	// Le Wi-Fi est connecté
}

Ce snippet évite de faire l’appel coûteux vers NetworkInterfaceType si le Wi-Fi n’est pas du tout activé.

SharpKML Sample app for WP

SharpKML

Posted by & filed under Dev', Sources.

SharpKML Sample app for WP

I have just released on Github a port of the KML parsing library SharpKML for Windows Phone.
It contains a port of the full SharpKML lib 1.06 with a partial port of it’s dependency DotNetZip library, and lastly a sample with helpers showing how to parse a KML file use it to draw a polygon on a Nokia map control.

The source is available here : https://github.com/pleasereset/sharpkml-wp

Tirer partie des écrans HD depuis une application Windows Phone 7.1

Posted by & filed under Dev', Sources.

Depuis la sortie de Windows Phone 8, les terminaux peuvent avoir différentes résolutions d’écran, contrairement à l’obligatoire 800×480 sous Windows Phone 7.
Ces hautes résolutions sont encore pour l’instant réservées aux modèles haut de gamme (HTC 8X, Nokia Lumia 920), et l’on pourrait être tenté de garder nos habitudes de tester nos applis principalement en 800×480… mais ce serait dommage de priver les possesseurs d’écrans HD de l’extra-crisp pour lequel ils généralement allongé 100 ou 200€ de plus ;)

Source : MSDN

La MSDN propose un guide pour supporter les multiples résolutions ici : http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206974(v=vs.105).aspx

Je vais ajouter quelques tips pour vous permettre de tirer au mieux parti des écrans HD depuis vos applications existantes (WP7.1).
Premièrement, pour ce qui est des nouvelles tuiles (S/M/L pour WP7.8 et 8), la librairie Mangopollo de l’incontournable Rudy Huyn (disponible via NuGet) vous fera gagner un temps précieux.

Gardez à l’esprit que la taille tous les assets à changé (oui, c’est pénible mais c’est pour la bonne cause) :
- L’icône de votre application est désormais en 100×100 pixels
- La tuile taille Medium est désormais en 336×336 pixels (au lieu de 173×173). (Voir le guide concernant les http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206971(v=vs.105).aspx)

Source : MSDN

- La résolution des boutons de l’ApplicationBar augmente aussi et passe de 48×48 à 76×76. Nul besoin de garder les anciennes résolutions (si vous faites l’analogie avec les @2x des écrans rétina), l’OS fera la conversion vers les résolutions inférieures de lui même. Vous trouverez toutes les icônes classiques du système en haute résolution dans le dossier du SDK Windows Phone 8 : C:\Program Files (x86)\Microsoft SDKs\Windows Phone\v8.0\Icons.

Enfin, temps de parler de ce qui fait vraiment votre application : vos images !
Deux approches sont possibles :
- se baser sur la plus grande résolution possible et laisser le téléphone downsizer l’image. C’est totalement viable pour les assets de votre application embarqués dans le XAP (cela évite de dupliquer les images et par la même d’augmenter la taille de votre XAP).
- choisir dynamiquement l’image en fonction de la résolution de l’écran : c’est la meilleure approche pour les images téléchargées depuis le web, ceux qui ont un écran classique ne gâchent pas leur forfait data pour des pixels qu’ils ne verront pas tout en laissant les possesseurs d’écrans HD jouir de tous leurs pixels. Si tant est bien entendu que vous avez en face un webservice qui vous permet de télécharger vos assets dans différentes résolutions, mais ça c’est une autre histoire.

Et là problème : comment déterminer la taille d’image adéquate dans une application construite avec le SDK 7.1 ?
La reflection vient à la rescousse pour nous permettre d’accéder aux nouvelles propriétés du SDK 8.0 si tant est que l’application tourne sous Windows Phone 8. Voici une classe vous permettant de transformer des pixels logiques (800×480) en pixels réels :

	/// <remarks>
	/// This source is subject to the Microsoft Public License (Ms-PL).
	/// By Pierre Belin, @pleasereset - www.ree7.fr/blog
	/// </remarks>
	public class PhoneSDKUtils
	{
		private static readonly Version _targetedVersion8 = new Version(8, 0);
		private static readonly Version _targetedVersion78 = new Version(7, 10, 8858);

		private static int ScaleFactor = 100;

		static PhoneSDKUtils()
		{
			if (Environment.OSVersion.Version >= _targetedVersion8)
			{
				Type hostContentType = App.Current.Host.Content.GetType();
				object scaleFactorValue = hostContentType.GetProperty("ScaleFactor").GetValue(App.Current.Host.Content, null);
				ScaleFactor = (int)scaleFactorValue;
			}
		}

		/// <summary>
		/// Converts a logical pixels screen (800x480) size to real screen pixels size
		/// according to the current device's ScaleFactor
		/// </summary>
		public static int GetScreenPixelSize(int logicalSize)
		{
			return (logicalSize * ScaleFactor) / 100;
		}

		/// <summary>
		/// Converts a logical pixels screen (800x480) size to real screen pixels size
		/// according to the current device's ScaleFactor
		/// </summary>
		public static double GetScreenPixelSize(double logicalSize)
		{
			return (logicalSize * ScaleFactor) / 100.0;
		}
	}

SublimeText2

Posted by & filed under Dev'.

D’abord une note perso, je ne l’avais pas encore abordé sur ce blog, mais depuis le début de l’année, j’ai changé de job et suis sorti du monde full Microsoft dans lequel je baignais jusqu’ici. Bien que continuant à chouchouter Windows Phone et les technos MS, surtout à titre perso, je passe maintenant la majeure partie de mes journées sur d’autres technos, dont Node.js, OPA et Appcelerator Titanium.

Je continue à faire le principal de mon boulot sous Windows (hormis développement iOS), et s’est rapidement posé la question de l’éditeur qui va bien. Etant quasiment imberbe, j’ai vite exclu option des barbus à savoir Vi (grâce a Bash et Console2, voir le post précédent) – ceci dit pour c’est une option très valable.

Et pour le moment, je n’ai pas vu mieux que Sublime Text 2.
Il est léger, son interface est simple, claire, et sa touche perso c’est la vue ultra dézoomée qui permet de situer en un clin d’oeil où on se situe dans le fichier.
On peut splitter l’écran horizontalement ou verticalement, lancer des builds (sous réserve d’avoir la configuration ad-hoc), et surtout il propose une coloration syntaxique extensible très fournie (compatible avec TextMate).

Télécharger Sublime Text 2 (ah oui, aussi la version complète est disponible gratuitement en mode nagware – toutes les X sauvegardes, une popup vous invite à vous offrir une licence – 59$)

En cadeau, d’autres liens utiles pour profiter pleinement des fonctionnalités de cet éditeur bien sympathique :

Console2, ou comment travailler avec Bash/Git sereinement sous Windows

Posted by & filed under Tips.

Console2, ou comment travailler avec Bash/Git sereinement sous Windows

Car oui… même avec notre magnifique Visual Studio 12 qui intègre la majorité des outils du quotidien, on a toujours besoin à un moment de se connecter en SSH à une machine, ou de faire une opération qui sorte de l’ordinaire sous GIT.

Et là, on envie aux collègues sous MacOS et à fortiori Linux leurs consoles qui vont bien. GIT for Windows est bien livré avec un Bash complet, mais celui-ci tourne dans la console originale du système qui n’a pas vu d’évolution en terme d’UI depuis bien longtemps.

C’est là qu’entre en jeu Console2. C’est un projet open-source qui n’est plus actuellement en grande activité, mais cela ne l’empèche pas d’être fonctionnel.
Il va nous fournir une console redimensionnable verticalement ET horizontalement, les tabs, la translucidité (objectivement inutile, mais indispensable pour une console selon moi), et le support de plusieurs shells.

On pourra l’utiliser entre autre avec :
- La console MS-DOS classique
- Powershell
- Bash

Pour ajouter le support de Bash (fourni avec Portable GIT / GIT for Windows), il faudra simplement lui indiquer quel exécutable utiliser comme shell (on peut en configurer plusieurs « de front »), dans le cas d’une installation classique de GIT sur un Windows 64-bits, ce sera : C:\Program Files (x86)\Git\bin\sh.exe –login –i

Enfin, un dernier truc, voici le screenshot de mes settings afin d’avoir le copier/coller dans ma console bash, qui ne fonctionnait pas « out of the box ». Le bouton central pour coller fonctionne maintenant, ainsi que le mode de séléction, même dans Vi :-)
EDIT : Une dernière chose car apparemment vous êtes nombreux à demander à Google comment copier dans Console2/Bash : pour séléctionner, il faut maintenir SHIFT pendant que vous sélectionnez à l’aide de la souris (clic gauche).

Console2 sur SourceForge : http://sourceforge.net/projects/console/

[WP7] Tout savoir sur la gestion des images

Posted by & filed under Dev', Tips.

Un très rapide post pour partager le lien vers un excellent article de Stefan Wick sur l’optimisation et la gestion des images sur Windows Phone 7 : http://blogs.msdn.com/b/swick/archive/2011/04/07/image-tips-for-windows-phone-7.aspx

En particulier il nous présente, bien entendu les classiques BitmapCreateOptions de la classe BitmapImage pour choisir un chargement/décodage à la demande ou immédiat.

Mais aussi le PictureDecoder, qui permet de décoder une image dans la résolution voulue, et donc de gagner en vitesse et empreinte mémoire ! Malheureusement, celui ci ne sait décoder que les JPG, et pas les PNG…

Une dernière chose, à laquelle je me suis heurté lors du développement du Tile Toolkit : le décodage d’image ne peut se faire QUE sur le thread UI et c’est fort dommage…

Logo Tile Toolkit

Tile Toolkit for Windows Phone 7

Posted by & filed under Dev', Sources.

English readers, you’ll find the link to Codeplex (where everything about the projet is written in English), at the end of this post.

Envie d’avoir une belle tuile avec un compteur comme celles du systèmes ?
De générer un contenu de tuile dynamiquement depuis C# avec un peu de composition graphique ? Idéalement le tout décrit en XAML ?
Ou encore d’utiliser des tuiles dans l’UI de votre appli ?

Je viens de publier sur Codeplex une petite (20Ko) librairie Open source (MS-PL) qui permet tout ça !
Le but du jeu était à la base de permettre à mes copains développeurs WP7 d’avoir des tuiles identiques au pixel-près à celles des mails/SMS, mais j’ai un petit peu dévié dans le scope et la lib permet de générer une tuile avec le contenu de votre choix, le tout décrit en XAML.

Elle est livrée avec un template de Tile identique aux tuiles mails/SMS. Je suis ouvert aux feature-request et rapports de bugs, bien évidemment.

Codeplex
En espérant vous rendre service ;-) , vous trouverez le binaire et le sample (dans le code source) sur CodePlex.

Links

Session Barcamp Windows Phone 7 sur Lyon

Posted by & filed under Tips.

Flyer Barcamp

Amis développeurs du Sud-Est (et d’ailleurs, on n’est pas sectaires !), un évènement autour de Windows Phone 7 va avoir lieu dans notre belle ville de Lyon (comme quoi à Lyon, il n’y a pas que le JUG ;-) ).

Venez nous retrouver le 22 Mars (après-midi) pour discuter de Windows Phone 7 dans une ambiance détendue (Barcamp = technologie + apérologie). Les sujets abordés seront en fonction de l’audience, cependant dans les grandes lignes :

  • Fabien Decret (MVP technologies embarquées) vous parlera de développement sous WP7 (le sdk, le web, les spécificités de Windows Phone 7, …)
  • Moi-même (MCP Windows Mobile) vous parlerai de développement et de design (orienté UI/UX, Expression Blend, …)
  • Vincent Gaviot (marketing Adeneo Embedded) vous parlera des aspects marketplace et monétisation
  • Et enfin un intervenant Microsoft viendra nous épauler sur tous ces sujets :)

C’est une première sur Lyon et c’est gratuit. Par contre, les places sont limitées.
Pour vous inscrire ou avoir plus d’infos, contactez-nous : training.emea[at]adeneo-embedded.com

Samsung Omnia7 et iPod Nano

Adopt a WP7 : iPod to Zune how-to

Posted by & filed under Tips.

Samsung Omnia7 et iPod Nano
Une fois n’est pas coutume je ne vais pas parler développement, mais donner quelques tips pour que votre adoption d’un Windows Phone 7 se passe bien.

Vous avez tout juste sorti votre nouveau téléphone de son coffret et jusque ici vous utilisiez un iPod/iPhone pour emmener votre musique avec vous ? Bien sur, avec le temps, le contenu de votre device siglé de la pomme est devenu une séléction du meilleur de votre collection musicale qui prendrait des lustres à refaire, hors de question de repartir de zéro !

La manipulation n’est pas si simple que cela, mais suivez le guide et vous pourrez retrouver votre bibliothèque sur votre Windows Phone ! (et réjouissez-vous, vous pourrez raffiner bien plus facilement votre collection musicale a l’avenir, contrairement à un iPod, WP7 sait SUPPRIMER un morceau de musique).

Note for my english-speaking readers, there’s no english version of this post so far (lack of time), but if you need one leave a comment and I’ll make one.

Read more »