• Un script powershell pour créer une base de dev à partir de la prod

    Il y maintenant quelques années, alors que je travaillais pour mon premier client : Promod, l'équipe de développement était dotée d'une chose merveilleuse : chaque lundi, notre base de développement était mise à jour à partir des données de la production. Depuis ce jour, j'ai essayé de mettre en place cette astuce sur chacun des projets sur lesquels j'ai eu l'occasion de travailler.

    Je ne vais pas vous dire que c'était fait de façon élégante, ce n'était pas le cas ! Tous les lundi, une restauration de la base de production avait lieu dans l'environnement de dev. Toutes les modifications que nous faisions sur la base étant sauvegardées sous forme de script sql, il était assez facile de rejouer (automatiquement) ces scripts pour obtenir une base de données de developpement opérationnelle.

    Cette semaine, en voulant instaurer ce principe sur un nouveau projet, la procédure vbscript que j'avais déjà utilisé à maintes reprises n'as pas voulu fonctionner pour une raison indeterminée. J'en ai donc profité pour la ré-écrire en Powershell...

    Le script se découpe en plusieurs phases :

    • Dans un premier temps, il faut s'assurer que personne ne bloque la base. La je dois avouer que, comme j'ai plusieurs bases sur lesquelles appliquer ce même principe, j'ai utilisé une méthode un peu bourrin : je redemarre le service Sql Server, en n'oubliant pas de démarrer aussi les services dépedants :
     $depserv = (get-service mssqlserver).DependentServices 
                  | ?{$_.Status -eq 'Started'}
     restart-service mssqlserver -force
     $depserv | start-service
    • un script sql, lancé par osql, s'occupe de la restauration proprement dite
    copy \\backupsrv\live\newproject.bak d:\dev\newproject.bak
    osql -E -Q "RESTORE DATABASE NewProject from disk=
          'd:\dev\newproject.bak' with replace"
    del d:\dev\newproject.bak
    • il suffit ensuite de récupérer tous les scripts de mise à jour depuis Team Foundation Server
    &($env:tfpath) get newproject\datascripts /r
    
    • et de les appliquer un par un sur la base
     dir ($env:scriptdir)+"\*.sql" 
         |% {osql -E -d NewProject -i $_.FullName}

    En (grosso-modo) 10 lignes - en prenant en compte la définition des variables d'environnement pointant vers les dossiers importants et un peu de gestion d'erreur-, le script powershell remplace sa version vbscript de pas loin de 150 lignes. Impressionnant non ?

  • Administrer ses serveurs depuis son canapé (1)

    Il est dit que l'on est pas un bon informaticien si l'on est pas fainéant. Eh bien, fort de cet adage, je me suis "amusé" à réaliser un petit plug-in pour Vista Media Center pour me permettre de suivre, à distance et devant ma télé, l'état de mes serveurs.

    Avant que de ne commencer, précisons quand même qu'il s'agissait juste, avec deux ou trois rustines et un peu de colle, d'utiliser des composants qui sont déjà installés sur les-dits serveurs (et qui sont utilisés dans des outils plus sérieux de type MOM) pour faire du monitoring.

    Le but du jeu est, comme vous pouvez le voir sur le screenshot ci-dessus, d'avoir une notification lors de problèmes graves sur l'un de mes serveurs puis de pouvoir visualiser le détail du(des) problème(s).

    Ce petit projet, va nous permettre de regarder un peu l'architecture d'extensibilité de Vista Media Center. Pour ne pas trop le complexifier (et parce que je ne suis pas encore un pro en MCML), la visualisation du détail prendra la forme d'une application XBAP (et donc .net 3.0).La notification, elle, sera réalisé au travers d'un projet d'extensibilité Media Center tout simple.

    L'affichage du détail

    Je reviendrai certainenement en détail sur cette application mais pour l'instant disons qu'elle existe et contentons nous d'une simple visu de celle-ci et de savoir qu'elle est réalisée en WPF. (Oui, je sais c'est pas super-joli, j'essaierai de l'améliorer avant de la décortiquer).

    Un certain nombre de considérations sont tout de même à prendre en compte lorsque l'on réalise ce type d'application :

    • ne surtout pas oublier que l'on sera à un strict minimum de 2m lors de l'utilisation : donc pas de texte écrit en tout petit.
    • travailler avec une résolution définitive d'utilisation inconnue, y compris le format (une bonne partie des installations MCE sont en 16x9eme, mais cela ne veut pas dire toutes...)
    • rendre la navigation aisée à la télécommande et oublier l'idée d'une saisie au clavier
    • laisser les emplacement nécéssaires aux commandes MCE

    L'add-in de notification

    Le second projet correspond à l'add-in affichant la barre de notification. Le template de projet Windows Media Center Presentation Layer Application (quand je vous disais que Microsoft avait un dont certain pour les noms...), fourni avec le SDK permet d'obtenir tout ce qui est nécessaire (et même beaucoup de superflu) pour cettte mini-appli :

    • une classe d'add-in
    • un fichier d'enregistrement
    • tout le reste qui ne servira à rien pour le cas présent.

    Le projet se compose en fait d'un add-in tournant en tâche de fond. Les fichiers d'interface graphique ne nous servent pas à grand chose et tout se résume à la classe suivante :

        public class MonAddin : IAddInModule, IAddInEntryPoint
        {
            public void Initialize(Dictionary<string, object> appInfo,
    Dictionary<string, object> entryPointInfo) { } public void Uninitialize() { } public void Launch(AddInHost host) {
    ... } }

    et même plus précisément à la méthode Launch, dans lequel tout le traitement sera effectué.

            public void Launch(AddInHost host)
            {
                if (!VerifieSingleton())
                    return;




    _host = host; while (true) {
    NotifierSiErreur(); Thread.Sleep(30000); } }

    En plus de vérifier si l'application n'est pas déjà en cours d'exécution - si vous faîtes quelque chose de similaire (et comme moi utilisez un mutex) n'oubliez pas d'utiliser un mutex local, sinon cela pourrait poser des problèmes avec un extender qui agit comme une seconde session -, l'add-in entre dans une boucle infinie de notification et d'attente. On pourrait imaginer, à tort, que les add-ins "tournent" pendant toute la durée de la session Media Center. Ce n'est pas du tout le cas, et, mis à part les appels à Initialize et Uninitialize, le processus ne vit que pendant la durée de la méthode Launch. (Je n'ai pas encore pleinement regardé ce que je pouvais faire pour rendre un peu plus propre ce code : un while(true) sans aucun break me chiffonne un peu)

    La méthode NotifierSiErreur n'est pas très compliquée elle-non plus :

            public void NotifierSiErreur()
            {
                int i = GetUnhandledEventCount();
                if ((i > 0 && (DateTime.Now - _dtLastEvent).TotalHours > 1) 
    || i > _lastCount) { _lastCount = i; _dtLastEvent = DateTime.Now; string imagePath = Path.GetTempPath()
    + Guid.NewGuid().ToString("N") + ".png"; Bitmap b = new Bitmap(1, 1); b.Save(imagePath, ImageFormat.Png); _host.MediaCenterEnvironment.DialogNotification(
    string.Format("{0} Evenements à traiter", lastCount), new object[] { "Afficher le detail" }, 30, imagePath, new DialogClosedCallback(LaunchDialog)); } }

    Je vous passe le détail de GetUnhandledEventCount, qui contacte le serveur de maintenance pour obtenir le nombre d'évenements non traités. Si il y a plus d'événements qu'à l'appel précédent ou qu'il y a plus d'une heure depuis le dernier afficahge, l'add-in lanceune notification. Pour cela, une image doit absolument lui être passé d'où, ici,  la génération une image vide).
    Le second paramètre de la méthode DialogNotification permet de définir les boutons qui seront affichés et le dernier, de spécifier une méthode callback à appeler si l'utilisateur clique sur l'un de ceux-ci.

            private void LaunchDialog(DialogResult dr)
            {
               // voir plus loin pour le code permettant de
               // lancer le xbap
            }

    Voila, avant d'expliquer comment lancer le xbap, il est nécessaire de préparer le fichier d'enregistrement de l'application.

    Ce fichier contient une déclaration d'application et deux points d'entrée :

    • l'un pour l'add-in ci-dessus enregistré dans la catégorie Background
    • l'autre pour le xbap, placé dans la partie "tâches" de la librairie de programmes
    <application 
      title="MonAddin" 
      id="{EA231D54-38FE-4f8e-969F-077167EDB442}">
      <entrypoint 
         id="{78eb8987-7454-40fe-b7cb-bcc338d13587}" 
         addin="MonAddinPrj.MonAddIn, MonAddinPrj"
                  title="..."
                  description="..."
                  ImageUrl=".\AppIcon.png">
        <category category="Background"/>
      </entrypoint>
    
      <entrypoint 
      id="{4E6CDC30-7F35-4b48-AE4C-82F0234ECC24}"
      url="http://maintenance/admindeploy/admin.xbap"
      title="Suivi d'anomalies"
      imageUrl="http://maintenance/admindeploy/admin.png">
        <category category="Settings\Tasks" />
      </entrypoint>
    </application>
    

    Ce petit tour par le fichier de config était nécessaire pour connaitre les deux paramètres nécessaires à la navigation vers le xbap : le guid de l'application et celui du point d'entrée.

            private void LaunchDialog(DialogResult dr)
            {
                if (dr != DialogResult.Cancel)
                {
                    _host.MediaCenterEnvironment.LaunchEntryPoint(
                        new Guid("{EA231D54-38FE-4f8e-969F-077167EDB442}"),
                        new Guid("{4E6CDC30-7F35-4b48-AE4C-82F0234ECC24}"));
                }
            }

    Mettre en place

    Voila, le mini-projet est terminé (même si vous n'en avez pas vu le détail exact), il ne reste plus qu'à déployer. En ce qui concerne le XBAP, et à cause de limitations de sécurité de ce type de projets - à savoir l'impossibilité de se connecter à un autre serveur que celui d'origine -, l'emplacement d'installation est tout trouvé : sur le serveur de maintenance. L'add-in, lui, peut être déployé dans deux endroits : soit dans le GAC, soit directement dans \windows\ehome. J'ai une préférence pour le second cas, mais si vous utilisez un projet MSI pour déployer vos add-ins, le GAC est peut-être plus simple d'accès.

  • oh la la, la galère... [Mis à jour le 22/02/2007]

    Première galère avec Windows Vista, enfin galère tout est relatif, mais bon...Je viens de passer une machine AMD sous Vista, eh bien le moins que je puisse dire c'est "bon, où ai-je mis les CDs de XP ?".

    La machine en question n'est clairement pas un foudre de guerre : un Sempron 3200+, 1Go RAM, Carte video GEForce 5500, c'est de la machine de base ça - voire de la machine de base d'il y a deux ans... Tout c'est très bien passé : mis à part la carte son (une carte 7.1) qui a demandé un Windows Update pour être reconnue, l'installation s'est déroulée à merveille. Les premières minutes d'utilisations se sont révélées à peu près aussi pénibles que ce que j'imaginais : l'interface est un peu poussive mais ce n'était guère mieux sous XP. Vient ensuite la phase d'essais un peu plus poussés, et là, force est de constater que sans HyperThreading, avec un seul core et avec la téchnologie "de base" du sempron, ca RAAAAAMMMMMEEEE. Le CPU a du mal a descendre en dessous de 60%, même quand je ne fais quasiment rien, le disque swappe pas mal pour une raison assez difficile à determiner, certainement pour être solidaire du processeur et ne pas le laisser bosser comme un dingue tout seul.

    Résultat : Vista 1 - AMD Sempron 0. Et ré-installation de XP dès demain sur cette machine.

    PS : je tiens à preciser quand même que j'ai aussi passé un Pentium 4 2.4Ghz d'age vénérable (enfin il date des tous premiers P4 HyperThreading [Update] il date d'Octobre 2003) sous Vista, et que celui-ci fonctionne comme un charme : mis à part un upgrade de carte graphique - si j'en trouve encore une qui fonctionne en AGP 8x... - je ne vois vraiment pas ce que je pourrais ajouter pour améliorer l'expérience.

    [Update] : bon, je viens de brancher une clef usb pour utiliser le fameux ReadyBoost de Vista. Eh bien, c'est plutôt efficace ! Je ne dis pas que cette machine est devenue d'un seul coup un vrai bolide, mais je ne vois (presque : l'affichage 3D est assez moyen merci nVidia) plus de différence avec le comportement sous XP. C'est réactif pour l'utilisation "normale" et ca ramouille un max lorsque l'on fait trop de chose en même temps : rien de bien exceptionnel pour du Sempron.

  • Media Center (Plugins) - les technologies

    L'un des plus gros intérêts de Vista MC, c'est qu'il introduit un nouveau modèle pour le développement de plugins. Là où la version pour Windows XP vous demandait de mélanger HTML, ActiveX et bidouilles en tous genres pour réaliser un module qui fonctionne, Vista Media Center propose une plateforme de développement (relativement) simple et (vraiment) complète.

    Vous pouvez maintenant développer de composants sous différentes technologies :

    • en "Hosted HTML" - comme pour les versions précédentes -, même si cette solution fait un peu has-been cela reste très pratique si vous souhaitez juste proposer une version MCE d'un site web.
    • en applications full (cela aussi était possible avec MCE2005), à vous dans ce cas de bien gérer les problématiques d'interface "full-screen" et "10 feet". Les jeux intégrés à Vista utilisent par exemple ce mode. ATTENTION, le mode "Media Center Only" pose de nombreux soucis si vous choisissez ce mode
    • en MCPL (Media Center Presentation Layer) - nouveau pour Vista -, vous permet de bénéficier des mêmes fonctionnalités que les modules intégrés (ou presque). C'est clairement la meilleure solution pour réaliser un plug-in et cela semblre même quasi-obligatoire pour certains types.
    • en XBAP (Application de type WPF/.net 3.0 prévue pour tourner dans un browser). Je n'ai pas encore eu l'occasion d'essayer, mais ca ne va pas tarder, je vous en reparlerai bientôt.

    Toutes ces solutions vous permettent d'ajouter des fonctionnalités un peu partout dans l'application :

    • de nouveaux modules complets (par exemple un lecteur RSS)
    • des options supplémentaires pour les éléments multimédia
    • des modules invisibles ou n'affichant que des notifications (tiens, idée pour qui le souhaite : un petit plug-in qui vous dit quand votre cuisine est en feu serait sympa - oui c'est une private joke, et alors ?)

    Le kit de développement de Vista Media Center est dispo ici, téléchargez-le donc pour vous y essayer.

  • J'ai retrouvé quelques articles sur asp.net

    Pour ceux qui ne le savent pas, j'ai un peu gaffé sur les sauvegardes des données de mon blog et j'ai perdu un certain nombre d'articles et malheureusement - comme de bien entendu - ce sont les plus intéressant que je n'arrive pas a retrouver.

    Coup de bol, j'ai retrouvé des morceaux de certains de mes posts sur asp.net :

    Dès que j'arrive à refaire les posts en entier, je les remets à dispo !

  • Media Center (Plugins) - BigScreen Headlines

    Avant de parcourir la partie TV de Media Center, je tiens à vous présenter l'un de mes plugins préférés : Big Screen Headlines par mobilewares.

    Rangé - comme tout plug-in qui se respecte - dans la partie logithèque (il est en effet très impoli de s'enregistrer sur la page d'accueil de Media Center sans y avoir été invité), Big Screen Headlines est l'archétype du module complémentaire simple et élégants.

    Il vous permettra de visualiser facilement vos Feeds RSS, qu'il s'agisse de ceux enregistrés dans IE7 ou importés depuis un fichier OPML (Je n'ai pas encore essayé cette fonction, mais ça ne devrait pas tarder). La navigation est très simple et totalement réalisable depuis votre fauteuil.

    Le choix des flux est simplissime, même si l'on regrette de ne pas avoir une fonctionnalité permettant de visualiser tous les articles nouveaux d'une catégories d'un seul coup. Peut-etre pour une prochaine version (à moins que ce soit une option que je n'ai pas vue) ?

    Le plug-in gère plutôt bien les flux, avec la possibilité de parcourir les entetes des articles et d'enregistrer un flux dans une liste de favoris.

    Comme vous pouvez l'apercevoir, la lecture d'un post est très aisée. Malgré ce qu'en dit le site web, je n'ai pas encore réussi à obtenir les images/pièces jointes depuis un flux, mais c'est certainement en grande partie dû à l'état de "béta" du produit.

    En resumé, ce petit module est très prometteur, et comme un bonheur n'arrive jamais seul, il y a un certain nombre d'autres produits en préparation/en beta :

    • Big Screen Contacts vous permet de visualiser les cartes de visites que vous avez enregistré dans Vista
    • Big Screen Business, bien que moins réussi graphiquement (enfin c'est mon avis : c'est assez bien fait, mais ça ne me plait pas graphiquement parlant), permets de suivre divers indice financier mondiaux
    • Big Screen Weather : pas très utile pour nous, puisqu'il s'agit des prévisions météo australiennes
    • Big Screen Photo : sur lequel je reviendrai peut-etre, intègre Flickr à MediaCenter (c'est bizarre, il n'y a plus de nouvelles versions)
    • Big Screen TV Series est LE plug-in le plus attendu pour Media Center (bon, d'accord l'un des plus attendus, il y en a d'autres comme par exemple Orbit). Celui devrait permettre de gérer les épisodes de séries qui encombre nos disques durs

  • Snobbinard va !

    Mince, je suis entouré de Mac Switcher en ce moment. Non pas que je trouve ca génant : MacOS X est le seul autre OS que je trouve pratique (enfin sort-of : je n'ai jamais pu encaisser le dock, j'y étais déjà allergique lorsque j'ai eu l'occasion de m'en servir sur NeXT, alors...), mais ce qui me sidère chez les Mac-eux, c'est leur mauvaise foi.

    Je m'explique...

    Conversation de ce soir :

    moi : pfu, je viens de finir la migration de mon media center de RC2 vers la release de Vista, là il est en train de me passer un Windows Update

    mon correspondant : c'est bien du Microsoft ça, même pas sorti d'une semaine qu'il y a déjà des patchs à passer

    La où c'est TRES comique, c'est lorsque l'on connait un peu l'histoire de MacOS X, pour ceux qui ne la connaissent pas, voici la liste des révisions de la version 10.0 :

    • MacOS X v10.0 release le 24/03/2001
    • MacOS X v10.0.1 release le 14/04/2001
    • MacOS X v10.0.2 release le 01/05/2001
    • MacOS X v10.0.3 release le 09/05/2001
    • MacOS X v10.0.4 release le 21/06/2001

    Effectivement, 5 patchs en 3 mois (oui, je rapelle que Vista est RTM depuis novembre), c'est grave et c'est vraiment inadmissible de la part de Microsoft...

    PS : et si vous voulez, on fait pareil avec la version 10.4... 5 release en 6 mois...

  • Média Center - Films

    Deuxième partie de la découverte (rapide) de Vista Media Center, avec la vidéothèque. C'est ici que vous retrouverez vos rips DivX, vos films montés depuis votre camescope, etc. etc.

    Il faut bien l'avouer, l'interface de la partie "vidéo" est légère, TRES LEGERE même... C'est assez malheureux à dire, mais cette partie ressemble un peu au parent pauvre de MediaCenter. Eh pourtant, malgré tout, elle fait ce qu'on demande d'elle. (Spoiler : la véritable touche de génie dans MediaCenter, c'est la partie TV et programmes enregistrés, mais ce sera pour un prochain post...)

    Avant de détailler ses faiblesses, occupont nous d'abord de son interface, jolie, plutôt pratique si l'on a pas des dizaines de fichiers ou si on est bien organisé, et surtout super simple à utiliser (même ma mère, pourtant prof de langues et jusqu'à il y a peu complétement hermétique à l'informatique, sait s'en servir, c'est vous dire !). On y accède, plutôt peu logiquement par l'option "Images et vidéo" (on se serait attendu à avoir ce choix dans "Télévision et Films", mais bon, ce n'est pas super grave...)

     L'interface est ensuite très standard pour du Vista MediaCenter : on retrouve la présentation horizontale, très agréable sur un écran 16/9 mais un tout petit peu fouilli dans l'absolu.

    Les fichiers vidéo (du moins les avi, les plus standards) manquant cruellement d'un équivalent des tags ID3 - oui, il existe bien quelques métadonnées mais leur nombre est ridicule et de plus jamais renseignées -, les options de navigation sont beaucoup plus limités que pour la musique. On se trouve dans une optique classique de dossiers/sous dossiers, avec malgré tout des imagettes assez sympa pour naviguer. Dommage qu'elles ne soit pas doublées du titre du film, c'est parfois assez difficile de s'y retrouver...

    Comme vous pouvez le constater sur ce screenshot, seul le titre de l'élément sélectionné est visible, c'est joli, mais pas toujours très pratique (quoiqu'on s'y habitue assez facilement, et qu'une fois cette habitude prise, on a une tendance à trier beaucoup plus ses fichiers, ce qui n'est pas un mal !).

    Pour la lecture, c'est du grand classique : les contrôles OSD sont simples, et d'ailleurs servent très peu, vu que tout se fait à la télécommande. On y retrouve les fonctions classiques - bien que l'avance rapide fonctionne bizarrement avec certains type de fichiers - y compris un certain nombre de "zoom" permettant de corriger l'aspect ratio de vos vidéo - en forçant par exemple du letterbox ou du pan scan sur une source qui ne correspond pas à votre type d'écran.

    Si MediaCenter pêche quelque part sur la partie vidéo, ce n'est pas vraiment sur les fonctionnalités qui y existent, mais plutôt sur toutes celles qui manquent. On aimerait y trouver :

    • la possibilité de protéger des dossiers par un mot de passe : pour y ranger vos films de vacances, ou votre collection Marc Dorcel mais surtout pour pouvoir laisser les enfants se servir de MediaCenter sans pouvoir tomber sur 8mm, Orange Mécanique ou Massacre à la Tronconneuse
    • un système de control parental, ce qui serait presque aussi efficace.
    • la possibilité d'associer des méta données sur les vidéo, voire de les récupérer depuis internet
    • et pourquoi pas un systeme de recherche sur ces méta données, même si là, c'est pousser le bouchon un petit peu loin
    • quelques preset de zoom supplémentaires
    • une fonction "go-to time" et/ou la possibilité d'utiliser des bookmarks
    • une gestion un peu plus complete des emplacements vidéo

    Voila, de nouveau le tour était très succint, mais devrait vous donner un vague aperçu de la partie vidéo de MediaCenter - du moins si vous avez déjà manipulé un produit de ce type. Prochain arret : les fonctions complémentaires (je garde le meilleur, la partie TV pour la fin)

  Next >