• Un an et demi avec Vista

    Bon, eh bien cela fait un an et demi que j'ai installé vista... Le temps est venu de faire le constat sur ce qui s'est bien passé, ce qui me plaît et ce qui m'enerve sur cet OS... Bon, bien évidemment, comme tout le monde sait que je suis (presque) un fanboy de Microsoft,vous ferez ce que vous voulez de mon opinion :)

    Les bons côtés

    1. La recherche intégrée au menu démarrer. On l'avait vu en 2003, au PDC (enfin disons plutôt qu'on l'avait vu sur les vidéo APRES le PDC), avant SpotLight et Google Desktop Search, mais ne plus avoir à aller dans ce très énervant écran de recherche pour se servir de l'indexation des fichiers c'est quand même l'extase. Surtout qu'au passage, le moteur d'indexation - déjà présent dans XP, et je me demande même si il ne l'était pas dans Windows 2000 - est plus intelligent : il indexe aussi le menu démarrer, les e-mails etc.
    2. Le volet de prévisualisation. On se croirait un peu revenu au temps de Windows 95 - ou de 98, je ne sais plus lequel contenait quickview - avec cette fonctionnalité, même si elle est mieux intégrée. Pour la plupart des fichiers "standards" (images, videos, texte, et bien d'autres en ajoutant de nouveaux filtres), vous n'avez plus besoin d'ouvrir l'application associée pour visualiser le contenu : il s'affiche directement dans l'explorateur
    3. .net 3.0 intégré au système. Pas besoin d'en dire plus : .net rocks !
    4. UAC. Je dois bien être le seul utilisateur qui trouve qu'UAC  est une véritable merveille, mais bon : ne plus avoir à utiliser des scripts du type MakeMeAdmin.bat pour effectuer des changements "administratifs" ça n'a pas de prix. En effet, si vous n'aviez pas la mauvaise habitude de travailler en administrateur sur vos machines, vous verriez qu'UAC est vraiment sympa en retirant tous ces passages compliqués du compte "normal" au compte "admin".
    5. Media Center intégré.
    6. Superfetch. On mets pas mal de temps à en voir l'interêt mais en fait, c'est pas mal du tout : superfetch se charge de "pré-charger" une partie de vos applications habituelles en mémoire... impressionant comment cela améliore le premier démarrage des grosses applications, du type Office.

     

    Les trucs énervants

    1. C'est quand même super gourmand. Si vous voulez vraiment profiter de vista, exit les vieux PCs, ce n'est même pas la peine d'y songer. Pour que vista soit à son aise, prévoyez un strict minimum de 2go de mémoire et un bon processeur (heureusement que le double core se retrouve presque partout). Bon d'un autre coté, cela fait plus d'un an que (mis à part peut-être la mémoire, mais à 20€ le Go/25€ pour les portables, ce n'est pas hors de prix...) ce type de configuration se retrouve partout.
    2. Les redémarrages de Windows Update ne peuvent pas être annulés (enfin pas par les utilisateurs "non-administrateurs"). Ca c'est vraiment pénible sur mes PCs hors domaine - ceux faisant partie du domaine (et donc servant au boulot) ont une stratégie d'application des patchs spécifiques - et a fait que j'ai repassé mes utilisateurs en administrateur, ce qui est un peu dommage, surtout qu'il aurait suffit d'un prompt UAC...
    3. L'aspect Glass : la c'est purement affaire de gout, mais je n'aime pas les nouvelles bordures et barre de titre des fenetres, je trouve cela disgracieux - pas autant que l'effet alu brossé de MacOS, mais quand même très moche. J'aimais beaucoup l'aspect playskool de Windows XP
    4. nVidia. Oui, bon, c'est facile de toujours taper sur eux, mais ils l'ont cherché... 8 mois avant de sortir un driver potable, c'est long !
    5. En parlant drivers, d'ailleurs, l'impossibilité d'utiliser les drivers XP pour certains composants/périphériques (imprimantes, son, etc) est assez pénible, surtout quand la société qui a fait votre carte son 7.1 est inscrite aux abonnés absents...

  • WPF : laisser le designer libre de faire ce qu'il veut !

    Dans un billet précédent, je vous faisait part d'une grande découverte que nous avions fait lors du développement de nos applis WPF : Vos développeurs vont devoir oublier une bonne partie de ce qu'ils savent sur l'écriture d'une application ! Eh bien, pour que cela soit un peu plus parlant, voici un exemple.

    NB : tous les codes fournis dans cet article ne sont pas à utiliser dans l'état, et présentent juste une façon naïve et simplifiée à outrance des concepts que je souhaite démontrer. A vous de compléter  tout cela par les habituelles optimisations, gestion d'erreurs etc.

    Imaginons que vous ayez à afficher dans un écran une liste de clients, en Windows Forms, cela devrait ressembler plus ou moins à cela :

    // ...
    public void Search(/* ... */)
    {
        List<Client> clients = MonObjetMetier.Search(/* ... */);
        listView1.Items.Clear();
        foreach (Client c in clients)
        {
            ListViewItem it = listView1.Items.Add(c.Nom);
            it.SubItems.Add(c.CodePostal);
            it.Tag = c;
        }
    }
    // ...
    

    Une méthode Search(), qui raffraichit une liste- bon, évidemment, dans la vraie vie vous auriez fait quelque chose de plus complexe pour utiliser le multi-threading ainsi que pour éviter le listview1.Items.Clear() - et cela roule. Maintenant, imaginez que vous ayez la même chose à faire en WPF... bien sûr, la même technique est parfaitement utilisable, mais vous n'allez pas vous faire aimer de votre designer : il aura besoin de vous ne serait-ce que pour échanger l'ordre des colonnes !

    La première chose à faire, c'est de ne plus réflechir en terme de "texte affiché" mais en terme "d'objet affiché" : ce n'est pas à vous, en tant que développeur, de décider ni où, ni comment seront affichés (si ils le sont) les codes postaux ! Contentez-vous de vous dire que l'écran affiche des clients, et laissez quelqu'un d'autre se charger de la présentation.

    // ...
    public void Search(/* ... */)
    {
        List<Client> clients = MonObjetMetier.Search(/* ... */);
        listView1.Items.Clear();
        foreach (Client c in clients)
        {
            listView1.Items.Add(c);
        }
    }
    // ...
    

    Si vous utilisez cette méthode, le designer pourra assez facilement modifier la façon dont seront affichées chacune des lignes de la liste (avec un DataTemplate) et/ou l'apparence globale de celle-ci (par un ControlTemplate ou un ItemsPanelTemplate). En vous arrêtant là, vous aurez déjà fait un gros progrès par rapport à WinForms, mais il est possible d'aller beaucoup plus loin : dans l'extrait de code ci-dessus, c'est encore le developpeur qui decide de mettre les données dans la listview. Et si le designer voulait utiliser autre chose qu'une listview ? ?

    La deuxieme partie de l'équation est  donc d'arrêter, aussi, de réaliser des écrans qui affichent quelque chose : encore une fois "ce n'est pas à vous, en tant que développeur, de décider ni où, ni comment seront affiché[e]s (si [elles] le sont)" les données. Contentez vous de fournir des données (sous la forme de collections, par exemple, à vous d'optimiser la façon dont ses données sont chargées/mise à disposition).

    // ...
    public ObservableCollection<Client> LesClients = ...
    public void Search(/* ... */)
    {
        List<Client> clients = MonObjetMetier.Search(/* ... */);
        LesClients.Clear();
        foreach (Client c in clients)
        {
            LesClients.Add(c);
        }
    }
    // ...
    

    En écrivant vos programmes de cette manière, vous devriez voir  une grande simplification du workflow développeur<>designer, chacun pouvant alors s'occuper de ce qu'il connait le mieux : la gestion des règles métiers et de l'aspect technique ou la représentation des informations et leur manipulation.