Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

RTM pour Windows Phone 7 tools

Après l'annonce de la RTM de l'OS Windows Phone 7, voilà la RTM du SDK pour developper des applications Windows Phone 7. L'installation inclut :

  • Visual Studio 2010 Express for Windows Phone
  • Windows Phone Emulator
  • Expression Blend 4 for Windows Phone
  • XNA Game Studio 4.0

Vous pouvez télécharger les outils ici: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=04704acf-a63a-4f97-952c-8b51b34b00ce.

Si vous comptez publier des applications sur le marketplace, n'oubliez pas de télécharger le réglement du marketplace : http://go.microsoft.com/?linkid=9730558.

XNA 4.0 pour créer des jeux 3D sous Windows Phone 7 Series

On savait déjà que le développement d'applications pour Windows Phone 7 Series se ferait par l'intermediaire de Silverlight et XNA. Les détails, et outils de développement (selon cetaines rumeurs) sont attendus pour le MIX10 la semaine prochaine à Las Vegas.

Cette semaine se déroule la Game Developers Conference 2010 à San Francisco. Microsoft en profite pour dévoiler quelques détails à propos du développement de jeux pour Windows Phone 7 Series. Une nouvelle version de XNA Game Studio, la version 4.0 va voir le jour, et supportera 3 plateformes : Windows, XBox et Windows Phone 7 Series. Elle s'appuie sur Visual Studio 2010, et permettra de développer des jeux en 3D avec accélération matérielle. Des rumeurs sur Windows Phone 7 Series indiquent que le GPU fait partie des caractéristiques minimales requises pour qu'un téléphone puisse être vendu avec l'OS, il est donc logique que XNA 4.0 propose une API unique pour utiliser le GPU.

Windows Phone 7 Series and XNA 4.0

Au niveau des nouveautés, XNA 4.0 donne accès au microphone (sous les 3 plateformes), et au flux audio. Les profils hardware ont été simplifiés avec seulement deux catégories : HiDef et Reach. Microsoft.Xna.Framework.dll a été séparé en plusieurs assemblies.

XNA 4.0 fournit également une APIs pour permettre aux jeux d'utiliser XBox Live avec son téléphone. Il sera notament possible de récupérer l'avatar du joueur, de débloquer des succès, ou encore d'utiliser un système de notifications asynchrone pour créer des jeux tour par tour.

Il est également à noter que les API graphiques pour les 3 plateformes ont été améliorées, apportant des breaking changes, mais une meilleure portabilité.

Reactive Extensions Partie 3 : Implémenter un IScheduler

J'ai expliqué dans mon précédant article le concept de IScheduler dans Rx (Reactive Extensions). Je rappelle que dans sa version actuelle, Rx dispose de deux schedulers : Now et Later. Now a l'avantage de programmer des unités de travail sur le thread en cours, ce qui fait que la synchronisation n'est pas un problème. D'un autre coté, Later est asynchrone, donc ne bloque pas le thread en cours, mais peut executer les unités de travail sur différents threads, ce qui nécessite donc une synchronisation des données partagées.

Je me suis amusé a écrire un scheduler qui est un croisement de Now et Later. Il s'agit d'un scheduler asynchrone (comme Scheduler.Later) qui programme toutes ses unités de travail sur un seul thread, il n'y a donc pas à se soucier de la synchronisation (comme Scheduler.Now).

Voici le code :

public class SingleThreadSchduler : IScheduler, IDisposable
{
    private readonly BlockingCollection<Tuple<Action, BooleanDisposable>> queue;
    private readonly CancellationTokenSource cancellation;
    private readonly Thread thread;

    public SingleThreadSchduler(Action initialize)
    {
        queue =
new BlockingCollection<Tuple<Action, BooleanDisposable>>();
        cancellation =
new CancellationTokenSource();
        initialize();
        thread =
new Thread(Run);
        thread.IsBackground =
true;
        thread.Start();
    }

    public SingleThreadSchduler()
        :
this(() => { })
    { }

    public bool IsDisposed
    {
        get { return cancellation.IsCancellationRequested; }
    }

    public IDisposable Schedule(Action action, TimeSpan dueTime)
    {
        if (cancellation.IsCancellationRequested)
            throw new ObjectDisposedException("SingleThreadSchduler");

        BooleanDisposable disposable = new BooleanDisposable();
        IDisposable schedulerDisposable = Scheduler.Later.Schedule(() => queue.Add(Tuple.Create(action, disposable)), dueTime);
        return new GroupDisposable(disposable, schedulerDisposable);
    }

    public IDisposable Schedule(Action action)
    {
        if (cancellation.IsCancellationRequested)
            throw new ObjectDisposedException("SingleThreadSchduler");

        BooleanDisposable disposable = new BooleanDisposable();
        queue.Add(
Tuple.Create(action, disposable));
        return disposable;
    }

    public void Dispose()
    {
        cancellation.Cancel();
    }

    private void Run()
    {
        Tuple<Action, BooleanDisposable> item;
        try
        {
            while (queue.TryTake(out item, -1, cancellation.Token))
            {
                if (!item.Item2.IsDisposed)
                    item.Item1();
            }
        }
        catch (OperationCanceledException ex)
        {
            if (ex.CancellationToken != cancellation.Token)
                throw;
        }
    }
}

Ce scheduler utilise une queue pour stocker les unités de travail à executer. Si une unité de travail se trouve programmée alors qu'une autre est toujours en cours d'execution, la nouvelle unité de travail sera placée dans la queue en attendant que le thread soit libéré. Si la queue est vide, la BlockingCollection fera en sorte à ce que le thread soit mis en sommeil jusqu'à ce du travail soit programmé.

Il faut cependant faire attention à n'utiliser ce scheduler que lorsque sa durée de vie sera suffisement longue puisque la création de nouveaux threads est une opération relativement lente.

Reactive Extensions Partie 2 : IScheduler

En décembre dernier, un nouveau concept a été introduit dans les Reactive Extensions. Ce concept est représenté par la nouvelle interface IScheduler.

Une des problématiques récurrentes avec la programmation asynchrone est le fait que certain code ne puisse s'executer que sur certains threads. Par exemple, avec WinForms ou Silverlight, seul le thread de l'UI peut mettre à jour l'UI. Si vous essayez de changer la couleur d'un Label depuis un thread du thread pool, vous obtiendrez une exception.

Dans un premier temps, les Reactive Extensions on résolues ce problème en utilisant un context global, représenté par une variable statique. Lorsque vous utilisiez une méthode du type Interval, les callbacks (appels a OnNext, OnError et OnCompleted) étaient appelés en utilisant un thread lié au context global. Cette approche n'est cependant pas très élégante, souvent peu pratique, et surtout peu composable.

Une des caractèristiques clés de Rx étant la composabilité, les créateurs de Rx ont complètement replacé cette approche dans une des dernières releases de la librairie.

La création de concurrence passe maintenant par des schedulers, implémentant l'interface IScheduler. Voici a quoi elle ressemble :

public interface IScheduler
{
    IDisposable Schedule(Action action);
    IDisposable Schedule(Action action, TimeSpan dueTime);
}

IScheduler represente un mechanisme pouvant executer du code. Il est possible de plannifier l'execution de code après un certain délai (méthode prenant un argument TimeSpan), ou bien de plannifier l'execution de code "dès que possible" (sans garantie qu'il s'execute immédiatement).

Dans Rx, on peut distinguer deux types d'opérateurs :

  • Ceux qui relaient un callback, comme Select et Where. Ils observent la source, et lorsqu'une notification arrive, ils en produisent une autre sur le même thread. De la même façcon, Merge ou ForkJoin utilisent le thread d'une des sources pour produire une notification.
    FromEvent est dans la même catégorie parcequ'il utilise le thread sur lequel l'évènement est levé pour produire la notification. Ce thread peut venir de l'UI dans le cas de Button.Click, ou du thread pool dans le cas de WebClient.DownloadStringCompleted, ou d'autres sources encore selon l'implémentation. L'opérateur FromEvent réutilise ce thread et n'en crée pas d'autre.
    Ces opérateurs ne créent donc pas de concurrence, ils réutilisent les threads qui leur envoie la notification.
  • D'autres opérateurs créent de la concurrence : Timer et Interval en sont des exemples. Return en est aussi un, même si la notification est censée arriver instantanément.

Tous les opérateurs créant de la concurrence prennent un IScheduler en paramètre, indiquant comment cette concurrence doit être créée.

Dans sa version actuelle, Rx fournit trois schedulers par défaut : Scheduler.Now, Scheduler.Later, et Scheduler.Dispatcher.

  • Scheduler.Later crée de la concurrence en prenant un thread dans le thread pool. Dans .NET 4.0, il est implémenté en utilisant la TPL. La méthode Schedule(Action, TimeSpan) est implémentée en utilisant System.Threading.Timer.
  • Scheduler.Now est particulier car il utilise le thread courant. La méthode Schedule(Action, TimeSpan) est donc implémentée en utilisant Thread.Sleep.
  • Scheduler.Dispatcher permet de garantir que les threads utilisés sont compatibles avec le dispatcher en cours. Cela permet de mettre à jour l'UI depuis le thread produisant la notification.

Scheduler.Default pointe sur Scheduler.Later, sauf sur Silverlight ou il pointe sur Scheduler.Dispatcher.

Pour bien comprendre le fonctionnement des schedulers, il faut étudier quelques exemples. Utilisons Interval avec Scheduler.Later :

IScheduler scheduler = Scheduler.Later;

IObservable<long> interval = Observable.Interval(scheduler, TimeSpan.FromSeconds(1));
Console.WriteLine("Start Subscribe");
interval.Subscribe(
Console.WriteLine);
Console.WriteLine("End Subscribe");

Le resultat sur la console est le suivant :

Start Subscribe
End Subscribe
0
1
2
...

Par contre, si on utilise Scheduler.Now a la place, on obtient :

Start Subscribe
0
1
2
...

Donc dans le cas de Scheduler.Later, l'appel a Subscribe plannifie les notifications en utilisant le thread pool, Subscribe n'est donc pas bloquant.

Au contraire, avec Scheduler.Now, les notifications sont plannifiées sur le thread en cours. Le thread est en someil pendant une seconde entre chaque notification. Subscribe est donc bloquant dans ce cas, et "End Subscribe" n'est jamais atteint.

Nous verrons dans une prochaine partie comment implémenter un opérateur en utilisant un scheduler.

Reactive Extensions Partie 1 : Introduction

Me revoila après quelques mois sans poster sur ce blog. Vous l'avez probablement remarqué, la programmation parallèle est en plein essor. Le nombre de coeurs dans nos processeurs ne cesse d'augmenter, et les jours sont maintenant comptés avant qu'on ait des processeurs quadricores jusqu'à dans nos téléphones. Il est donc nécessaire pour les développeurs d'adapter la façon même de concevoir et écrire des logiciels.

Microsoft n'est pas insensible à cette problématique et a déjà fait un grand pas avec le Parallel FX, qui sera partie intégrante du .NET Framework 4.0. La TPL en particulier permet d'écrire des programmes parallèles beaucoup plus confortablement que ça n'était le cas avec .NET 3.5. Mais même si il s'agit d'une avancée serieuse, il manquait toujours quelque chose pour unifier tous les differents modèles de programmation asynchrone, et surtout pour les orchestrer et les coordinner.

C'est pour cette raison que les Reactive Extensions (aussi appelées RX) ont vu le jour. Il s'agit d'une librairie sortie de DevLabs. Elle fonctionne avec .NET 3.5, .NET 4.0 et Silverlight 3. Cette librairie est construite autour de deux interfaces clés : IObservable<T> et IObserver<T>. Ces deux interfaces seront intégrées dans .NET 4.0.

IObservable est en fait très similaire à IEnumerable, elle représente une collection. Mais là où IEnumerable représente une collection synchrone ("Pull"), où le consommateur choisit quand il veut la prochaine valeur (MoveNext / Current), IObservable représente une collection asynchrone. L'IObservable décide quand une nouvelle valeur est disponible, et la fournit au consommateur ("Push").

IObservable et IObserver

public interface IObservable<T>
{
    IDisposable Subscribe(IObserver<T> observer);
}

public interface IObserver<in T>
{
    void OnCompleted();
    void OnError(Exception error);
    void OnNext(T value);
}

IObservable fonctionne de la manière suivante :

  • Le consommateur dispose d'une instance d'un objet qui implémente IObservable (collection asynchrone)
  • Le consommateur appelle la méthode Subscribe en passant un IObserver (qui peut être assimilé à un "super-callback")
  • Lorsque la collection décide qu'une nouvelle valeur est disponible, elle appelle la méthode OnNext de l'IObserver en passant la valeur en paramètre (ceci se produit pour chaque valeur dans la collection)
  • Lorsque la collection a été complètement énumerée avec succès, elle appelle la méthode OnComplete de l'IObserver, ou, si une erreur s'est produite, elle appelle la méthode OnError de l'IObserver en passant les détails de l'exception

Cela semble surement très abstrait, voici donc un exemple :

Commençons par implémenter un IObserver :

public class ConsoleObserver : IObserver<string>
{
    public void OnCompleted()
    {
        Console.WriteLine("OnCompleted");
    }

    public void OnError(Exception error)
    {
        Console.WriteLine("OnError");
    }

    public void OnNext(string value)
    {
        Console.WriteLine("OnNext: " + value);
    }
}

Cet observeur affiche les valeurs qu'il reçoit dans la console.

Créons maintenant un IObservable. Il y a des centaines de façons différentes de créer des IObservables en utilisant RX. Voici l'une d'elles :

IObservable<string> observable = Observable.Return("Hello");

Cette ligne crée un observable qui génère instantanément la valeur "Hello", puis termine (OnCompleted).

Souscrivons maintenant à cet observable en utilisant notre ConsoleObserver:

IObserver<string> observer = new ConsoleObserver();
observable.Subscribe(observer);

Voici ce qui s'affiche sur la console :

OnNext: Hello
OnCompleted

Les auteurs de RX ont fait en sorte que toute opération possible sur un IEnumerable existe aussi pour IObservable (si elle a du sens), voici donc un exemple de ce qu'il est possible de faire:

IObservable<string> observable = from value in Observable.Range(0, 100)
                                 select "Hello " + value.ToString();

Cet observable va générer instantanément 100 valeurs puis termine. Il n'y a cependant rien de terriblement asynchrone dans les deux exemples ci-dessus.

IObservable<string> observable = from value in Observable.Interval(TimeSpan.FromSeconds(1))
                                
select "Hello " + value.ToString();

Celui-ci par contre, génère une valeur toutes les secondes, et ne termine jamais.

J'entrerai plus dans les détails sur IObservable et les Reactive Extensions dans mes prochains articles.

Télécharger RX : http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx

Posté le par RaptorXP | 2 commentaire(s)

Chromium : "Some guys head"

Voici un intéressant rapport de bug pour Chromium (qui est la version open source de Chrome) sur lequel je suis tombé recemment: http://code.google.com/p/chromium/issues/detail?id=18385.

Voici un extrait pour le moins intriguant:

What steps will reproduce the problem?
1. Look at what the X button is supposed to be

What is the expected result?
an X button

What happens instead?
Some guys head

Si vous n'êtes pas sur de comprendre, ouvez la capture attachée au bug ci-dessous, elle parle d'elle même :

Bug Chromium

Posté le par RaptorXP | 2 commentaire(s)
Classé sous : , ,

Windows 7 à 49 euros : C'est fini

Windows 7J'ai publié hier un message sur l'offre de Windows 7 à 49 euros. L'offre était sensée s'étendre jusqu'au 4 août, cependant, après un peu plus d'une journée de ventes, tout à été vendu, et il n'est maintenant plus possible de bénéficier de cette offre en ligne, que ce soit sur le Microsoft Store ou sur les sites partenaires. Je rappelle que l'offre était en effet limitée à 76 000 unités.

Il reste cependant une option, selon ZDNet, il reste encore des stocks dans quelques magasins physiques.

Pour les chanceux qui ont pu mettre la main sur une boite, il faudra maintenant attendre le 22 octobre pour la recevoir.

Je rappelle qu'une offre de lancement sera également disponible du 22 octobre au 31 décembre 2009, avec Windows 7 Home Premium à 119 euros, et Windows 7 Professional à 285 euros.

Posté le par RaptorXP | 4 commentaire(s)
Classé sous : ,

Windows 7 : Début des précommandes à 49 euros

Windows 7C'est aujourd'hui que débute l'offre spéciale de précommande de Windows 7, qui s'étendra jusqu'au 4 août prochain. Windows 7 sortira officiellement le 22 octobre prochain, et ceux qui auront précommandés une boite la recevront à partir de cette date.

Je rappelle les tarifs pour cette offre de précommande :

  • Windows 7 Home Premium complète (Boite) : 49,99 euros
  • Windows 7 Professional complète (Boite) : 109,99 euros

A partir du 22 octobre, vous pourrez acheter Windows 7 directement en magasin, mais aux prix de 119,99 euros pour l'édition Home Premium et 285 euros pour l'édition Professional.

A noter également que cette offre de précommande est limitée à 3 unités par foyer et 76 000 unités au total.

Voici quelques sites où vous pouvez passer la précommande :

Ces site ont vite été pris d'assaut ce matin, et certains d'entre eux affichaient déjà rupture de stocks. Seul le Microsoft Store, qui était inaccessible depuis ce matin à cause du nombre trop important de commandes, mais qui semble maintenant de nouveau accessible, et la FNAC, qui a ouvert les précommandes après ses concurrents, semblent ne pas être en rupture de stocks.

Posté le par RaptorXP | 0 commentaire(s)
Classé sous : ,

Windows Azure : Prix, SLA et date de disponibilité commerciale

Windows AzureMicrosoft a annoncé au WPC cet après-midi les tarifs qui s'appliqueront à Windows Azure. Beaucoup attendaient cette annonce avant de commencer à développer pour Windows Azure.

Voici les tarifs:

  • Calcul : $0,12 par heure
  • Stockage : $0,15 par Go (par mois)
  • Calcul pour le système de stockage : $0,01 pour 10 000 transactions
  • Bande passante : $0,10 par Go pour les données entrantes, $0,15 par Go pour les données sortantes. Ce tarif s'applique pour tout les services de Windows Azure.

Pour ce qui est de SQL Data Services, il y a deux "packages" possibles :

  • Edition Web (une base de données jusqu'à 1 Go) : $9,99 par mois
  • Edition Business (une base de données jusqu'à 10 Go) : $99,99 par mois

Je rappelle que SQL Data Services fournit une plateforme de base de données relationnelles hébergé dans le cloud. La plupart des fonctionnalités de base de SQL Server devraient être supportées (Vues, Indexes secondaires, Triggers, Contraintes...), et si votre application écrite pour SQL Server n'utilise que ces fonctionnalités de base, vous devriez pouvoir l'adapter pour SQL Services simplement en changeant la connection string.

Pour ce qui est de la SLA de Windows Azure, Microsoft garantit 99,95% si vous déployez au moins deux instances d'un rôle dans des fault domains et upgrade domains différents. Pour ce qui est d'Azure Storage, Microsoft garantit 99,9% de succès pour les transactions.

La date de lancement commerciale sera PDC09 (Novembre).

Le blog officiel, c'est par ici : http://blogs.msdn.com/windowsazure/archive/2009/07/14/confirming-commercial-availability-and-announcing-business-model.aspx.

Posté le par RaptorXP | 0 commentaire(s)

Microsoft Security Essentials en bêta dès demain

Microsoft a récemment mis fin à la commercialisation de Windows Live One Care. Pour remplacer celui-ci, Microsoft devrait prochainement sortir son nouvel antivirus Security Essentials.

La version bêta publique de ce logiciel sera rendue disponible demain.

Security Essentials Security Essentials

Celui-ci sera gratuit, et très léger, il devra en effet fonctionner sur des netbooks. Comme vous le voyez sur les captures ci-dessus, l'interface est très épurée. Il dispose d'un mode protection temps réel, ainsi qu'un scan à la demande, avec différents modes (rapide, complet, personnalisé). Il est également possible de programmer des scans à l'avance. Il protège des virus, spywares, et autres malwares. Security Essentials est compatible Windows XP, Vista et 7.

Pour ceux comme moi qui rechignent à utiliser un antivirus parceque ceux-ci ont tendence à alourdir le PC, cet antivirus est la bienvenue.

Posté le par RaptorXP | 3 commentaire(s)

Une date de sortie officielle pour Windows 7

Windows 7La date de sortie officielle de Windows 7 a été annoncée hier au Computex. Conformément aux rumeurs, la date de disponibilité publique sera bien le 22 octobre 2009. Contrairement à Vista, Windows 7 arrivera bien à temps pour le sapin. La RTM devrait être finalisée pour fin juillet, laissant à peu près 3 mois aux constructeurs pour intégrer Windows 7 à leurs machines.

Rappelons que si vous souhaitez acheter un PC avant octobre, un programme de mise à niveau gratuite sera disponible pour ceux qui achèterons un PC neuf avec Windows Vista avant octobre. Aucune date officielle n'a été donnée pour le début de ce programme, mais des rumeurs évoquent fin Juin.

Source

Posté le par RaptorXP | 0 commentaire(s)
Classé sous : ,

Bing, le nouveau moteur de recherche de Microsoft

C'est aujourd'hui devenu officiel, le nouveau moteur de recherche de Microsoft s'appelle Bing.

Il n'est malheureusement pas encore possible de l'utiliser pour le grand public, cependant, le nom de domaine est devenu actif, et une page est apparue. Bing ne se veut pas un simple moteur de recherche, mais plutôt un moteur de décision. Il possède en effet de nombreuses fonctionnalités qui peuvent vous aider à choisir lorsque vous faites votre shopping en ligne, achetez un billet d'avion, ou encore lorsque vous cherchez un restaurant ou autre.

Pour utiliser Bing (ou plutôt Kumo, son nom de code) depuis plusieurs mois déjà en dogfood, je trouve que celui-ci n'a plus grand chose à voir avec son ancêtre Live.com. Les résultats sont désormais quasiment aussi précis que la concurrence (on trouve même parfois plus rapidement avec Bing qu'avec Google). Autre point très important, surtout pour nous, français, le moteur a été grandement amélioré pour les marchés autres qu'américain. Live.com était en effet utilisable pour rechercher des sites américains, mais assez peu efficace lorsqu'on recherchait des résultats français par exemple.

Enfin, le petit quelque chose qui fait aussi la différence par rapport à Google, même si ça ne sert à rien au final, la page d'accueil de Bing est agréable à regarder :).

Posté le par RaptorXP | 4 commentaire(s)
Classé sous : , , , ,

Windows Vista SP2 et Windows Server 2008 SP2 disponibles

Windowse Server 2008 SP2Conformément à ce qui a été annoncé la semaine dernière, Microsoft vient de mettre en ligne Windows Vista SP2 et Windows Server 2008 SP2. Vous pouvez les télécharger ici :

  • L'ISO (toutes versions) : ici
  • L'executable pour x86 : ici
  • L'executable pour x64 : ici
  • L'executable pour IA-64 (Windows Server 2008) : ici

Le SP2 devrait être proposé par Windows Update le 30 Juin prochain.

Fun : Scottgu présente Web Platform Installer

Microsoft Web Platform Installer est un petit programme qui permet de déployer des applications sur votre serveur web en quelques clicks : Add-ins pour IIS, SQL Server Express, même certaines applications ASP.NET et PHP.

Ceux qui sont familiers avec les keynotes de Scott Guthrie ont probablement remarqué sa vocation cachée d'acteur. En voici un nouvel exemple dans une vidéo, première de la série, pour la promotion de Web Platform Installer :

Posté le par RaptorXP | 2 commentaire(s)
Classé sous : ,

Une session au MIX par Microsoft Ireland

Mix09Si vous êtes intéressés par le développement pour plateformes mobiles, je ne saurais que vous conseiller d'assister au webcast (ou encore mieux, en direct, si vous êtes à Las Vegas) de la session "Improving Mobile Experiences with the Microsoft Mobile Device Browser File" (MIX09-T85M) au MIX ce soir (13h50 PDT). Le speaker, Chris Woods, qui n'est autre que le Program Manager travaillant dans le bureau en face du mien, présentera un projet sur lequel Microsoft Ireland travaille depuis un bon moment déjà.

Il s'agit de détecter l'appareil effectuant la requête à un site web ASP.NET, et de modifier le rendu de la page en fonction des caractéristiques de l'appareil. Un certain nombre de propriétés Microsoft utilisent déjà ce système, et celui-ci est maintenant rendu disponible pour tous les développeurs via CodePlex.

Pour ceux qui sont intéressés, voici la page en question : http://mdbf.codeplex.com/.

Posté le par RaptorXP | 0 commentaire(s)

ASP.NET MVC : Un filtre pour contrôler la compression de la réponse

Une des grandes forces de ASP.NET MVC est son extensibilité. Les action filters sont un de ces points d'extension. Kazi Manzur Rashid a publié un article sur son blog expliquant comment écrire deux ActionFilters qui contrôlent le cache et la compression de la réponse.

Le cache est maintenant supporté d'origine par ASP.NET MVC, mais le filtre pour contôler la compression peut être utile. Le voici :

public class CompressFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        HttpRequestBase request = filterContext.HttpContext.Request;
        string acceptEncoding = request.Headers["Accept-Encoding"];
        if (string.IsNullOrEmpty(acceptEncoding)) return;
        acceptEncoding = acceptEncoding.ToUpperInvariant();
        HttpResponseBase response = filterContext.HttpContext.Response;
        if (acceptEncoding.Contains("GZIP"))
        {
            response.AppendHeader("Content-encoding", "gzip");
            response.Filter = new GZipStream(response.Filter, CompressionMode.Compress);
        }
        else if (acceptEncoding.Contains("DEFLATE"))
        {
            response.AppendHeader("Content-encoding", "deflate");
            response.Filter = new DeflateStream(response.Filter, CompressionMode.Compress);
        }
    }
}

Il suffit ensuite de décorer une action ou un controlleur avec cet attribut, et la réponse sera automatiquement compressée si le client supporte la compression (tous les navigateurs le supportent de nos jours).

Panne mondiale de Gmail

Le succès des produits Google vient en partie d'une grande souplesse dans certains de leurs processes. Cette souplesse leur permet notamment de mettre en production de nouveaux services ou mettre en ligne des mises à jour de services existants très rapidement.

Le revers de la médaille est que cela se fait au détriment de la qualité. Cela n'avait jamais trop porté préjudice a Google auparavant, jusqu'à ces dernières semaines. La première panne, relayée par tous les journaux de la planète, s'est produite sur Google Search il y a quelques semaines. Tous les liens des pages de résultats de Google Search étaient répertoriés comme dangereux, et Google empêchait les utilisateurs de visiter le site en question. Durant 40 minutes, presque tous les sites webs de la planète ont enregistrés des baisses de trafic relativement importantes. La panne était dû apparemment à une erreur humaine, puisqu'un employé a entré l'adresse "/" dans la liste des sites dangereux. L'idée que le site rapportant la grande majorité des revenus à Google soit mis à jour vraisemblablement sans environnement de "stagging" fait froid dans le dos.

Plus récemment (la semaine dernière), j'ai également noté une erreur, beaucoup plus discrète, mais cependant amusante. Chaque recherche effectuée sur Google Search comprenant le mot "ASP" était détectée comme requête automatique pouvant provenir d'un virus ou d'un spyware :

Google censure ASP

Enfin, aujourd'hui, depuis quelques heures, Gmail, un des plus gros services de Google, souffre d'une panne mondiale. Les responsables de Google ne savent pas encore d'où vient la panne, mais ont déclaré que leurs ingénieurs travaillaient dessus.

Gmail panne mondiale

Posté le par RaptorXP | 6 commentaire(s)
Classé sous : ,

Microsoft ouvre ses boutiques

Microsoft StoreAprès la boutique en ligne, Microsoft a annoncé hier ouvrir des boutiques physiques. Microsoft a pour cela recruté David Porter de chez Wal-Mart, qui s'occupera dans un premier temps de sélectionner les emplacements des boutiques, et d'en définir le design.

Les boutiques proposeront de nombreux produits : des logiciels aux jeux de Xbox, en passant par les serveurs domestiques Windows Home Server et les périphériques comme les souris et claviers. Les boutiques proposeront probablement également des PC de différents constructeurs.

Microsoft commencera surement par un petit nombre de boutiques, il n'est donc pas sûr qu'il y en ait en France, même si la France fait partie des quelques pays pouvant accéder à la boutique en ligne.

Cette initiative devrait permettre à Microsoft de se rapprocher de sa clientèle.

Source

Posté le par RaptorXP | 0 commentaire(s)
Classé sous : ,

L'investiture de Barack Obama avec Silverlight

SilverlightLa cérémonie d'investiture de Barack Obama ce soir sera diffusée par le Presidential Inaugural Commitee en utilisant Silverlight. L'évènement sera également abondamment retransmis par les chaînes de télévision, ainsi que sur Youtube, Twitter et Flickr.

La cérémonie a lieu ce soir à 17h45, heure de Paris.

Silverlight poursuit donc la lente course aux parts de marché. Je rappelle que Scott Guthrie avait annoncé en Novembre dernier qu'un ordinateur sur 4 sur internet était déjà équipé de Silverlight.

Posté le par RaptorXP | 0 commentaire(s)

Fun : Le nouveau MacBook Wheel

Voici une petite vidéo assez marrante produite par le site theonion.com. Steve Jobs (qui a d'ailleurs décidé hier de quitter temporairement Apple pour raisons médicales), annonce le nouveau produit branché d'Apple : le MacBook Wheel.


Apple Introduces Revolutionary New Laptop With No Keyboard

Posté le par RaptorXP | 8 commentaire(s)
Classé sous :
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le il y a 25 minutes

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le il y a 2 heures et 57 minutes

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le il y a 5 heures et 7 minutes

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le il y a 6 heures et 16 minutes

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le il y a 6 heures et 35 minutes

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le il y a 22 heures et 40 minutes

- Perspective 3.0 pour Silverlight 5.0 par Perspective le 02-07-2012, 22:39

- Techdays paris 2012 : mythes et réalités virtualisation et cloud privé par Blog Technique de Romelard Fabrice le 02-07-2012, 17:30

- TechDays Paris 2012 : Top 10 des Best Practices pour SQL Server par Blog Technique de Romelard Fabrice le 02-07-2012, 17:02

- TechDays Paris 2012 : Kinect + Office 365 un bon geste pour votre SI par Blog Technique de Romelard Fabrice le 02-07-2012, 16:39