Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

YouTube DJ: 7 learnings from my first app on the Windows Store

I have just published yesterday my first Windows Store app called YouTube DJ. It gets your YouTube playlists and allows you to play them on your Windows 8/RT device, including when the application is in the background. This is an app I can genuinely say I will use (a lot!). I use YouTube to listen to music, and leave it open in autoplay so I can listen to music while I use my computer.

There are a couple of reasons why I decided to make this app. First, if I want to play music from YouTube playlists on my Surface tablet, I don't like to have to do it through the desktop browser because I don't like to use the desktop from my Surface. The second reason is to be able to control playback using the media keys on my keyboard (play, pause, next track...). I never really bothered with those keys before Windows 8, but now that Windows 8 has a pretty cool volume control popup that shows you info about the current track, and pause/next track buttons, I became quite a fan of those media keys, since you know exactly what happens when you press them (the volume control popup gives you a visual feedback). Obviously, the browser version of YouTube doesn’t support those keys.

YouTube DJ Windows 8 and RT Store App

So, if like me, you use YouTube for listening to music, make sure to download my app. It is completely free!

The development of that app took a few weeks, but I only worked on it during my spare time. I learned a few valuable lessons while developing it, and I'm going to list the important ones in that post.

The learning curve

I used XAML and C# to develop YouTube DJ. I actually have some prior experience with Silverlight and WPF. What I can say about the learning curve from the point of view of someone already familiar with Silverlight, is that there is none. All you know about Silverlight (or WPF) applies to Windows Store Apps development. Of course, the full list of controls is a little bit different (like the new ProgressRing), default templates are different, since they are adapted to the new design principles (you can find all the default styles and templates from this list I published on my MSDN blog), some things can also behave differently than with Silverlight or WPF, but overall, 95% of your Silverlight skills will be reused.

From my experience developing YouTube DJ, XAML with Windows Store Apps is actually much better than XAML with Silverlight, bindings all work as you expect them to (Silverlight had some weird restrictions), custom dependency properties work exactly the same as non-custom dependency properties (again that wasn't the case with Silverlight). I can say that the developer experience was much better than with Silverlight.

Follow metro guidelines

I’m not really a design genius, but I am very conscious that the user experience of an application can make or break it, so I always try to put some effort into design, with varying success. Working on Windows Store apps was really pleasant from that standpoint, because the guidelines, default styles, etc… give you a good base to build upon. Of course, some apps have great success making very custom user interfaces, but many have mixed results too. MSDN provides a huge number of articles about guidelines for Windows Store app, and I highly recommend them. I myself published a blog post about spacing and typography.

Don’t hide important features of your app

This may sound like this contradicts my previous advice, but it doesn’t. If search is important in your app, provide a button on the main screen for opening the search charm (you will notice that's what YouTube DJ does). Unfortunately, if you simply provide search through the charm, a large proportion of your users will not discover it. Windows 8/RT paradigms are still being learned by people, and it will take time before people immediately know where to find search. Do implement it as a charm though (for people who know where to find it), but have a button in your interface that opens the search pane. This is the same for important commands, they can be placed on the page, rather than in the app bar. Many people don’t think immediately about the app bar, though it will become more natural over time.

Embrace asynchronous programming

I have been working for a while with the Async CTP for the new await/async C# language feature, however this is the first project I can do end to end using the RTM version of that new language feature. After having worked with callbacks a lot, this was really pleasant to use. This is something you don’t get if you develop your app with Javascript. I have three tips regarding that:

  • Always return a Task (not void) if your function is async, to avoid losing the possibility to know when the operation completed. The only exception to that is if you implement an event handler which needs to return void.
  • When you call a method that returns a task, try to always await it at one point, unless this is really a fire and forget operation, of which you don’t even care if it fails. You will get a compiler warning if you fail to use a task you obtain by calling another function.
  • If you get cross thread exceptions, use the dispatcher to run the code on the UI thread. This will turn synchronous code async though, as there might be a queue of items waiting to be run on the UI thread.

Short loading times

If you get your data from a web service, and your app cannot be used before that data is loaded, then cache it for next time the user launches your app, so that it launches faster next times. Apps are very similar to websites in that regard, users have little patience, and if an app spends its time loading data, users will stop using it. As a rule of thumb, compare it to a website. It you think you would find your app too slow if it was a website running in your browser, then you need to somehow make it faster (caching can be an option).

Be prepared for certification

There are two important thing to do before submitting your app: first make sure the Windows App Cert Kit passes, and second, make sure you have a privacy policy (unless your app doesn’t connect to internet at all, but I guess this is rare). I’m not sure if I was lucky, but certification end to end took less than 24 hours for YouTube DJ, it was incredibly fast. If this is the new trend, this allows you to iterate fast on your apps!

Make sure telemetry is turned on in your Windows Store developer account

This will give you very useful information about the usage of your app: how often people use it, and for how long, does it crash, and how, etc… Microsoft collects the data for you, if the user opts in. The data is anonymized during collection.

That's it, I hope you will found those advices useful, and don’t forget to try my free app YouTube DJ!

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)
Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Après Montréal, ce sera Barcelone, rendez-vous à la European SharePoint Conference 2014 ! par Le blog de Patrick [MVP SharePoint] le il y a 2 heures et 18 minutes

- Emportez votre sélection de la MSDN dans la poche ? par Blog de Jérémy Jeanson le 04-17-2014, 22:24

- [ #Office365 ] Pb de connexion du flux Yammer ajouté à un site SharePoint par Le blog de Patrick [MVP SharePoint] le 04-17-2014, 17:03

- NFluent & Data Annotations : coder ses propres assertions par Fathi Bellahcene le 04-17-2014, 16:54

- Installer un site ASP.net 32bits sur un serveur exécutant SharePoint 2013 par Blog de Jérémy Jeanson le 04-17-2014, 06:34

- [ SharePoint Summit 2014 ] Tests de montée en charge SharePoint par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 20:44

- [ SharePoint Summit 2014 ] Bâtir un site web public avec Office 365 par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 18:30

- Kinect + Speech Recognition + Eedomus = Dommy par Aurélien GALTIER le 04-16-2014, 17:17

- [ SharePoint Summit 2014 ] Une méthodologie simple pour concevoir vos applications OOTB SharePoint de A à Z par Le blog de Patrick [MVP SharePoint] le 04-16-2014, 16:51

- //Lean/ - Apprendre à faire des Apps Windows universelles par Blog de Jérémy Jeanson le 04-16-2014, 12:57