mardi 28 juillet 2009

Comment copier les colonnes d’entête de la grille de résultat d’une requête SQL ?

Voici une petite astuce bien pratique pour récupérer, lors d’un couper/coller, les colonnes de l’entête quand on est en mode grille dans Microsoft SQL Server Management 2005 :

Allez dans Outils/Options../Résultat des requêtes/SQL Serveur/Mode texte

et cocher l’option  Inclure l’entête de colonne dans la copie de la grille résultat.

Attention : Il faut malheureusement fermer complètement SQL Server Manager et le ré-ouvrir. N’oublier pas de sauvegarder votre requête avant.

jeudi 23 juillet 2009

RTM Windows 7 is available

C’est fait, Microsoft c’est décidé, la version officiel de Windows 7 est disponible.

Pour plus d’information, voir le post (en anglais) de cette annonce sur le blog de Microsoft ici.

Il semblerait que pour les gens qui possèdent un compte MSDN, la version téléchargeable ne soit pas disponible avant le 6 aout en version anglaise:(.

Cette version date du 13 juillet compilé à 12h55 et a comme numéro de build : 7600.16385.090713-1255

Vivement la version Française.

vendredi 17 juillet 2009

Publier du code avec SyntaxHighlighter sur Blogger


L’installation se fait en 4 étapes :

  1. On télécharge la version que l’on veut ici (v1.5.1) ou ici (v2.0.nnn)
  2. On extrait le contenu pour héberger les fichiers sur un site ou en utilisant l’un des liens suivant :
  3. On se connecte sur son bloque et l’on vas dans (Tableau de bord / Mise en page / Modifier le code HTML) pour modifier le modèle du blogue en ajoutant quelques lignes en fonction de la version. On ne se casse pas la tête, il faut aller à la fin du modèle et juste après la ligne suivante “<!-- end outer-wrapper -- >” on insère le code suivant :
  • Version 1.5.1
<link href='http://alexgorbatchev.com/pub/sh/1.5.1/styles/SyntaxHighlighter.css' rel='stylesheet' type='text/css'/>

<script language='javascript' src='http://alexgorbatchev.com/pub/sh/1.5.1/scripts/shCore.js'/>
<script language='javascript' src='http://alexgorbatchev.com/pub/sh/1.5.1/scripts/shBrushJScript.js'/>
<script language='javascript' src='http://alexgorbatchev.com/pub/sh/1.5.1/scripts/shBrushCSharp.js'/>

<script language='javascript'>
dp.SyntaxHighlighter.BloggerMode();
dp.SyntaxHighlighter.HighlightAll('code');
</script>
  • Version 2.0.nnn
<link href='http://alexgorbatchev.com/pub/sh/2.0.320/styles/shCore.css' rel='stylesheet' type='text/css'/> 
<link href='http://alexgorbatchev.com/pub/sh/2.0.320/styles/shThemeDefault.css' rel='stylesheet' type='text/css'/>

<script src='http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shCore.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushCSharp.js' type='text/javascript'></script>
<script src='http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushJScript.js' type='text/javascript'></script>

<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = true
SyntaxHighlighter.all();
</script>

Après plusieurs heures de recherche et d’essai (merci au post de Burca Victor Ciprian). Le truc, pour faire fonctionner SyntaxHighlighter correctement avec Blogger, c’est la ligne suivante qui doit être ajouter dans modèle du blogue (Ligne déjà présente dans les scripts précédents) :

  • Pour la version 1.5.1 :  dp.SyntaxHighlighter.BloggerMode();
  • Pour la version 2.0.nnn :   SyntaxHighlighter.config.bloggerMode = true

Les gens qui ne sont pas avec Blogger, doivent retirer cette ligne.

Si on ne met pas ces lignes, on obtient le cas suivant avec un code incompréhensible et plein de balise <BR />. Exemple :

  4.  Dernière phase, il ne reste plus qu’à formater le code que l’on veux publier avec les balises suivantes :

  • Pour la v1.5.1 :
    <pre name="code" class="[non du langage]">
    [ici votre code]
    </pre>
  • Pour la v2.0.nnn :
    <pre class="brush: [nom du langage];"
    [ici votre code]
    </pre>
Il faut remplacer [nom du langage] par le nom du langage (exemple : CSharp, js, etc…) et [ici votre code] par le morceau de code que vous voulez présenter. N’oublier pas d’ajouter le lien du langage que vous voulez afficher dans le modèle de votre blogue.

Voila, bon blogue à vous :).

Comment trier un objet hashtable sur les valeurs ?

D'accord on est mal parti avec ce titre, car par définition, un objet hashtable n'est pas triable sur les valeurs.

Ce type d'objet est toujours triè sur les clés que l'on insère. À chaque foi que l'on ajoute une entrée, la clé est haché http://fr.wikipedia.org/wiki/Table_de_hachage pour définir sa position dans la table et non pas ajouter l'une derrière l'autre comme dans un tableau ordinaire.

De plus, si on écrit du nouveau code, certainement qu'un objet hashtable n'est pas la bonne manière de faire. Surtout avec les génériques : List<>.

Alors, comment on en arrive là ? En générale, ce cas arrive sur du code existant pour lequel on ne veut pas tout réécrire, à l'origine le besoin était plus simple, question de temps, etc...

Pour les personnes pressées, voici le code de la solution :

using System;
using System.Collections.Generic;
using System.Text;

using System.Collections;

namespace SortHashtable
{
    class Program
    {
        static void Main(string[] args)
        {

            //...
            Hashtable hashtable = new Hashtable();
            hashtable.Add("keyV", 55);
            hashtable.Add("keyG", 99);
            hashtable.Add("keyB", 25);
            hashtable.Add("keyD", 13);
            hashtable.Add("keyL", 77);

            //On affiche les éléments avant le tri.
            System.Console.WriteLine("Avant le tri dans l'objet Hashtable:");
            foreach (DictionaryEntry dicEntry in hashtable)
            {
                System.Console.WriteLine("Key={0} Value={1}", dicEntry.Key, dicEntry.Value);
            }


            IComparer dicEntryComparer = new ComparerDictionnaryEntryOnDoubleValue();

            //On déclare un arraylist.
            ArrayList al = new ArrayList();

            //On ajoute la hashtable dans un arraylist.
            al.AddRange(hashtable);

            //On tri la liste.
            al.Sort(dicEntryComparer);

            //On affiche les éléments de l'arraylist trié.
            System.Console.WriteLine("\nAprès le sort sur les valeurs dans l'objet ArrayList (ordre croissant):");
            foreach (DictionaryEntry dicEntry in al)
            {
                System.Console.WriteLine("Key={0} Value={1}", dicEntry.Key, dicEntry.Value);
            }

            //On fait une pose pour voir le résultat.
            System.Console.ReadKey();

        }
    }

    public class ComparerDictionnaryEntryOnDoubleValue : IComparer
    {
        int IComparer.Compare(object right, object left)
        {
            // Conversion en double des valeurs.
            double l = Convert.ToDouble(((DictionaryEntry)left).Value);
            double r = Convert.ToDouble(((DictionaryEntry)right).Value);

            // On compare l'élément de gauche avec celui de droite.
            // Le boolean qui en résulte informe si l'élément de gauche
            // est plus grand que celui de droite.
            //return (Comparer<double>.Default.Compare(l, r)); // Tri en ordre décroissant.
            return (Comparer<double>.Default.Compare(r, l)); // Tri en ordre croissant.
        }
    }

}
Voici le résutat que vous devez avoir :

Membres