HTTP et images sous Windows Phone

Je continue avec l’affichage des Images et je vous propose cette fois de voir les implémentations possibles pour récupérer des images depuis le Web avec le protocole http.

L’implémentation classique :

public static void GethttpImage1(string urlImage, Action<BitmapImage> action)  
{
  var request = (HttpWebRequest)WebRequest.Create(urlImage);
  request.BeginGetResponse(result =>
  {
    using (var sr = request.EndGetResponse(result))
    {
        Deployment.Current.Dispatcher.BeginInvoke(() =>
            {
                var image = new BitmapImage();
                image.SetSource(sr.GetResponseStream());
                if (action != null)
                    action(image);
                sr.Close();
            });
    }
  }
}

urlImage contient l’url de l’image sous forme d’une châine de caractère : exemple : http://dev.bratched.fr/download/testimage1.png

La méthode utilise un WebRequest et lit la réponse de la requête sous forme d’un stream avec le request.EndGetResponse.

La partie

Deployment.Current.Dispatcher.BeginInvoke(() =>

est très importante car elle va permettre d’utiliser le BitmapImage dans le Thread Principal même lorsque la méthode est appelée dans un Thread tournant en tâche de fond.

Poursuivre la lecture

Utilisation des Images resources avec Windows Phone

Je vous propose un petit retour d’expérience sur l’utilisation des ressources dans le développement Windows Phone dans un modèle M-V-VM.

Différentes façon de coder

L’image que l’on souhaite afficher provient des ressources et devrait pouvoir s’afficher à travers une propriété Image de type BitmapImage dans un ViewModel. A noter que le dans l’exemple ci dessous, UIThreadPool permet d’afficher cette image même lorsque celle-ci est alimentée depuis un Thread qui tourne en tâche de fond.

SynchronizationContext UIThread = SynchronizationContext.Current;

public BitmapImage Image
       {
           get { return _image; }
           set
           {
               UIThread.Post(_ =>
                   {
                       _image = value;
                       RaisePropertyChanged("Image");
                   }, null);
           }
       }

Comment afficher une image incluse dans les ressources de l’application ?

Attention les 2 premières méthodes décrites sont à proscrire et à ne surtout pas reproduire. Allez jusqu’à la fin de l’article pour voir comment implémenter correctement l’affichage d’une image ressource. Poursuivre la lecture

Mutualisation du code source dans les projets Windows et Windows Phone

La Portable Class Library (PCL)

La portable Class library (PCL) va nous permettre de mutualiser une grande partie du code à travers projets.

Il est possible depuis quelques années de partager du code PCL entre différents projets (Sliverlight, WPF, Windows Phone, Windows 8,…).
Plus les projets sont différents, plus le nombre de classes mutualisées diminue.

Il est important de voir que cette Library ne pourra être utilisée que pour des projets compatibles avec les options choisies.

A noter également que les versions Express de visual studio ne permettent pas de créer une PCL, mais accepte en revanche leur utilisation dans un projet.

Cette Library ne pourra pas non plus utiliser une library qui n’aurait pas à minima les mêmes options sélectionnées.

PCL_WindowsMenu

Exemple d’un projet Windows 8 et windows Phone.

Pour simplifier notre problématique nous allons parler uniquement des 2 plateformes Windows 8 et Windows Phone. Dans cet exemple nous souhaitons mutualiser le code entre ces multiples plateformes (Windows Phone 7, 8, 8.1, Windows 8,…).

Poursuivre la lecture

Requêtes HTTP lentes dans .NET

Dans un contexte d’une étude sur les performances d’une application web, j’ai remarqué des retards constants d’environ 200ms sur certains appels HTTP qui utilisaient une API externe.

L’application web et l’API étaient sur le même segment de réseau et donc la latence du réseau était hors de question.
De plus la cible API a précédemment fait l’objet de tests de charge jMeter et éprouvée pour gérer 1500req/s.

Ce qui était encore plus étrange dans cette situation, c’est que seules les requêtes POST présentaient ce retard de 200ms. Les requêtes GET étaient rapides comme prévu.

Poursuivre la lecture

Quelles versions de Visual Studio pour vos APPs Windows Phone ?

Windows Phone 7.x, 8.0 et 8.1

Depuis avril 2014, Il existe 3 versions majeures de Windows Phone : 7.x, 8 et 8.1.

La version 8.1 permet de créer des applications Windows Phone 8.1 « classique » renommées 8.1-Silverlight (SL) et également les nouvelles applications « Universal Apps » qui pourront être partagées entre Windows 8.1 et Windows Phone 8.1.

La mutualisation du code était déjà partiellement possible avec les PCL (Portable Class Librairies). L’assemblie compilée est directement utilisable à la fois dans un projet Windows phone 7.x, Wp8 et Windows 8 par exemple.

Les « Universal Apps » permettent en plus de mutualiser une grande partie du code visuel.

Visual Studio 2013 permet donc à la fois de créer des PCL compatibles WP8, W8, WP8.1, W8.1 et utilisables à la fois dans des applications Windows Phone classiques, Windows 8.x dans des projets Universal Apps.

Mais là où ça se complique c’est que Visual Studio 2013 ne permet plus la compatibilité WP7.x.

Windows Phone 7.x représente encore en avril 2014 19% des utilisateurs de Windows Phone (cliquez sur l’image pour l’enquête complète de adduplex).

clip_image003_thumb

Il va falloir faire un choix.

Si vous voulez pouvoir créer une application pour Windows Phone 7.x, Visual Studio 2012 vous sera encore très utile pour créer la PCL compatible WP7 et WP8 ainsi que l’application en Windows Phone 7.x.

Synthèse

Le schéma ci dessous vous présente une synthèse des possibilités en fonction de la version de Visual Studio choisie.

De même en fonction des choix pris pour la construction des PCL, votre code pourra ou non être mutualisé entre un projet Windows phone 7 et un projet Windows phone 8.1.

Poursuivre la lecture

Comment gérer les sites multilingues avec WordPress ?

Voici un retour d’expérience sur la construction d’un site multilingue avec WordPress.

Les avantages de la solution proposée permet de gérer plusieurs langues pour un même site.

Les avantages :

  • Grande liberté de traduction et de présentation des articles dans les différentes langues
  • Thème différent en fonction des Pays
  • Bon référencement des pages dans les différents pays

Etape 1 : Création d’un Mutli-Site WordPress

Il suffit d’ajouter la ligne suivante à votre fichier wp-config.php.

/* Multisite */
define( 'WP_ALLOW_MULTISITE', true );

 

En retournant ensuite sur le tableau de bord, une option Activer le réseau apparaît dans le menu Outil.

Il n’y a plus qu’à suivre les indications.

Choisissez l’option par défaut des répertoires afin d’avoir des url du type www.monsite.com/fr/mapage.html

2 actions vous seront demandées :

  • Copier/Coller du code dans le fichier wp-config.php
  • Copier/Coller du code dans le fichier .htaccess

Poursuivre la lecture