...un projet tente de palier à ce manque : H3Viewer
Il n'est certes pas encore parfait, mais il a le mérite d'exister.
Dans mon cas il a 2 défaut (en utilisation sur la version RC, donc à revalider avec des versions ultérieures) :
- Je suis incapable de switcher vers le langage C# pour les exemples de code
Je suis coincé avec les exemples VB, sauf si j'ouvre la page normalement dans un navigateur (utiliser MAJ+Click, y compris dans les listes). - La génération de l'index est un peu violente quand on a installé l'intégralité des packages disponibles.
Elle est effectuée à chaque exécution de l'outil, pas à chaque utilisation de l'onglet.
Bref, ça peut être intéressant à suivre.
Et au sujet de l'absence d'index dans le système principal, vous pouvez voter et/ou donner votre avis sur cette entrée Connect (il vous faut juste un compte LiveId pour vous connecter) : Help is missing an index
La différence ? 0,18€ TTC
Comment profiter de ce service *** ?
- Trouvez un truc ressemblant fortement à un bug dans une des rubriques sur le site de service client.
Par exemple, un accès impossible à la page de gestion de la téléphonie qui affirme que vous ne disposez pas du service alors que vous en disposez (et qu'il fonctionne). - Utilisez le système d'assistance par mail (via un formulaire disponible sur le site).
- Attendez la réponse vous disant qu'il faut contacter le service client par téléphone, pour une analyse du problème.
- Appelez le service client au numéro habituel, en utilisant leur service de téléphonie illimitée.
Commettez l'erreur de le faire vers 19H50, pour faire durer le plaisir plus longtemps (ça sent le switch de call center, mais je suis sans doute parano). - Expliquez votre (leur) problème.
- Attendez la résolution finale du problème, un peu moins d'un mois plus tard (bon, on va dire que c'était une correction avec de gros effets de bord).
- Attendez votre prochaine facture pour récolter le fruit de vos efforts.
J'adore le principe de me prendre un coût de 0,18€ pour leur signaler un bug sur leurs systèmes, depuis leur service de téléphonie illimitée : l'appel au service client n'entre donc pas dans la liste des choses non facturée, même si votre appel était pour un réel problème chez eux (et pas un gamin jouant avec le téléphone).
Remarquez, c'est sans doute ma faute : ça doit bien être dit quelquepart que ça va être facturé un petit montant. Il y a peut être même un numéro spécial a utiliser quand on appelle depuis leur service.
Et puis de quoi je me plains, c'est toujours moins cher que de téléphoner depuis son mobile Orange quand le service Orange Internet (vous la sentez bien l'ironie ici ?) est hors service.
La leçon apprise ? : ne jamais leur signaler un problème non critique pour moi.
Ca n'en vaut pas la peine : c'est couteux en temps ET en argent.
*** : il s'agit bien entendu d'une remarque tout à fait ironique, ce n'est pas réellement un service fourni par l'entreprise.
Ceux qui ont installé Windows Live Messenger 2009* sur Windows 7 ont probablement remarqué qu'il n'était plus possible de complètement le masquer (hormis une icône dans le systray, ou zone de notification) à la fermeture de la fenêtre principale, contrairement à ce qui se pratiquait sous les versions précédentes de Windows.
Ce weekend j'ai eu la désagréable surprise de m'apercevoir que Skype adoptait lui aussi ce fonctionnement dans sa version 4.2*.
J'ai donc bien peur que cette maladie du changement se répande, donc voici mon avis là dessus :
Aaaaaaaaaaarrrrrrrrggggggg ! Sur ce type d'outil, c'est mal !
Et là le problème ne vient pas de Windows 7 mais bel et bien des logiciels.
Soyons clair : les logiciels de messagerie instantanée ne font pas vraiment partie de mes outils principaux, tant dans ma vie professionnelle que personnelle.
Les voir en continu dans ma barre des tâches alors que tout ce qu'ils ont à faire est attendre une communication entrante est tout simplement une nuisance.
Les fenêtres de ce type de logiciel ne doivent être visible que si j'ai une discussion en cours, auquel cas c'est la fenêtre de discussion qui doit être accessible en barre des tâches.
Si je veux un accès direct à la liste de contacts depuis la barre des tâche je ferais comme avant : j'utiliserais la fonction réduction de la fenêtre, pas la fonction fermeture. Ou je laisserais l'icône dans la partie visible de la zone de notification.
Le reste du temps il n'y a absolument aucun intérêt à les voir dans la barre des tâches, la liste de bascule entre fenêtres (Alt+Tab) ou le "caroussel" de fenêtres (Windows+Tab).
C'est purement et simplement une polution de mon espace de travail, et conduira donc inéluctablement à une coupure de l'outil (c'est quand même dommage pour un outil de communication instantanée) voire carrément un remplacement si une alternative qui me plaise existe.
Attention : je ne dis pas qu'il faut que le comportement que je désire soit celui par défaut.
Je peux comprendre que la cible de ce type d'outil est extrèmement large, et que dans ce cas il vaut même mieux que par défaut l'icône du logiciel apparaisse tout le temps dans la barre des tâches.
Je dis juste qu'il faut permettre aux utilisateurs avancés d'activer ce comportement de réduction dans la zone de notification au moyen d'une option.
C'est, je pense, un point important à prendre en compte lors de la conception d'un outil qui peut être secondaire pour certains utilisateurs ou passe son temps à être en attente de quelque chose (pour un logiciel comme Visual Studio ça a en revanche très peu d'intérêt).
Pour l'instant pour pallier au problème il suffit d'executer ces 2 logiciels en mode de compatibilité "Windows Vista Service Pack 2" pour rétablir le comportement précédent (je n'ai pas trouver d'option dans les paramètres des logiciels permettant de demander ce comportement), mais c'est tout de même dommage de devoir passer par là, surtout que ça risque de désactiver quelques autres fonctionnalités.
* : cette remarque concerne les versions 14.0.8089.726 de Windows Live Messenger 2009 et 4.2.0.152 de Skype, ne pas prendre cette remarque au pied de la lettre pour les versions ultérieures, il se peut que l'option intéressante soit apparue.
L'affichage de 2 vues d'un fichier en side-by-side vertical, c'est très pratique par moment.
Vous savez déjà tous qu'on peut afficher plusieurs documents côte à côte grace aux groupes d'onglets : nous pouvons créer plusieurs groupes d'onglet verticaux ou horizontaux depuis le menu contextuel d'un onglet qu'on veut envoyer dans un nouveau groupe (ou depuis le menu "Window") :
Vous savez aussi que la vue d'un document peut être divisée en 2 parties horizontales au moyen du splitter qu'on trouve au dessus de la barre de défilement verticale (ou via l'item "Split" du menu "Window") :
Mais en général on s'en lasse vite, surtout si on a la chance de travailler sur écran large.
La solution passe donc par une fonctionnalité d'affichage de plusieurs vues d'un fichier en côte-à-côte.
Hors dernièrement je me suis aperçu que certaines personnes pensent que cette fonctionnalité n'est pas disponible sous Visual Studio, alors qu'elle l'est en quelque sorte depuis Visual Studio 2008 au minimum *.
Et je pense qu'on ne peut pas vraiment leur en vouloir vu le nom de l'item de menu permettant d'y accéder : "Window" => "New Window" ("Fenêtres" => "Nouvelle fenêtre" sur une version française si je ne m'abuse).
Ce n'est pas disponible sur le menu contextuel de l'onglet et c'est plutôt générique comme terme : en général pour ce genre de fonctionnalité on chercherait plutôt un item "New View" dans le menu contextuel d'un onglet.
Bref, retenez le "raccourci" clavier Alt+W, N si vous devez vous servir de cette fonctionnalité régulièrement.
Nous obtenons notre seconde vue sous la forme d'un nouvel onglet (numéroté) :
Combinée à un nouveau groupe vertical, nous avons nos 2 vues en côte-à-côté :
A noter que la fonctionnalité "New Window" n'est pas limitée à 2 vues : vous en créez autant que vous voulez (je n'ai pas connaissance d'une limite humainement atteignable).
Visual Studio 2010 conserve cette fonctionnalité et ajoute celle de document flottant, que les possesseurs de configuration multi-écran apprécieront sans doute.
* : je suis presque certains qu'elle l'était sous Visual Studio 2005, pour Visual Studio .NET 2003 et 2002 je suis un peu moins sûr : avis à ceux qui ont encore ces configurations sous la main :-)
Microsoft lance un programme de mise en avant des briques de sa plateforme Web et pour cela met à disposition, jusqu'au 30 juin 2010, 5000 serveurs virtuels à base de Windows Server 2008 R2.
La configuration matérielle du serveur et les logiciels installés de base dépendent d'un choix parmis plusieurs scénarios de test (dont un pour TFS 2010 qui n'est cependant pas disponible dans l'immédiat). Ce choix est effectué à l'inscription et ne pourra pas être changé ensuite.
Une fois le serveur disponible (vous y aurez accès en Remote Desktop), vous pourrez installer ce qu'il vous faut pour vos tests, notamment au travers du Web Platform Installer (Web PI) que vous connaissez probablement déjà.
Concernant ce qui se passa après le 30/06/2010, le site précise ceci :
Après le 30 juin, vous pourrez :
-
soit récupérer votre serveur virtuel pour le déployer sur un serveur physique chez vous : pas à pas disponible prochainement,
-
soit opter pour une solution de transfert chez un hébergeur en quelques clics : offres commerciales disponibles prochainement.
Plus d'informations (conditions etc) sur le site du programme : Ma plateforme web
PS : évitez d'éteindre la machine (vous disposez du privilège) car la procédure de remise en route n'est pas encore disponible dans la console d'administration, à l'heure où je tape ces lignes.
Je vous avais parlé il y a quelques temps (fin novembre 2008) d'un éventuel changement brisant sur certains méthodes de la classe String et de la structure Char : .NET 4.0 / Silverlight 2 : changements brisants sur les types String et Char
Aujourd'hui au détour d'un commentaire sur un rapport de bug sur Connect (plutôt intéressant d'ailleurs, notamment l'explication donnée par Josh Free le 17/02/2010), je me suis aperçu qu'il y avait longtemps que je n'avais pas entendu parler de ce fameux changement. C'est normal :
Ces changements ne sont absolument plus d'actualité.
Cette information a été donnée dans le post original sur le blog du team BCL dont le paragraphe "String Security Changes" a visiblement été édité après mon dernier passage. Il comporte maintenant cette note :
UPDATE for .NET 4 Beta 1 In order to maintain high compatibility between .NET 4 and previous releases, we have decided to revert this change. The behavior of String's default partial matching overloads and String and Char's ToUpper and ToLower methods now behave the same as they did in .NET 2.0/3.0/3.5. The change back to the original behavior is present in .NET 4 Beta 1. We apologize for any interim confusion this may cause. We continue to recommend being explicit about the string comparison behavior you want, by always specifying a StringComparison value for the methods on String that accept it.
Voilà, plus de panique sur ce point lors d'une migration.
Mais ce n'est pas une raison pour ne pas apporter la correction rendant le comportement explicite dès que possible, notamment pour éviter les problèmes de migration.
Si vous avez un jour cherché un éditeur de texte pouvant enregistrer en utilisant un encoding UTF-32, vous serez peut être intéressé par le freeware (ou "gratuiciel" dans la langue de Molière) sur lequel je suis tombé aujourd'hui : BabelPad.
Il gère une bonne liste de formats d'encodage en entrée, et supporte en sortie la "gamme UTF" qui va bien, avec ou sans BOM (Byte Order Mark) :
- UTF-8
- UTF-16 Little Endian ou Big Endian
- UTF-32 Little Endian ou Big Endian
Plus quelques autres encoding (?) ne me parlant absolument pas, je cite :
- GB18030 (with or without a Byte Order Mark)
- ASCII with Hexadecimal Numeric Character Reference (NCR) substitution of non Basic Latin characters
- ASCII with Decimal Numeric Character Reference (NCR) substitution of non Basic Latin characters
- ASCII with Universal Character Name (UCN) substitution of non Basic Latin characters
- ASCII with HTML Entity substitution of non Basic Latin characters
Bon, au vu du site BabelStone de l'auteur (Andrew West) et des informations trouvées sur lui, limiter la description de l'outil à sa capacité d'export semble assez réductrice :p
A titre d'exemple je vais me contenter (ne voyant pas comment faire mieux) de reproduire ici la capture disponible sur le site, qui illustre plutôt bien ce que sait faire ce sympathique outil :
Pour plus d'informations je vous invite à visiter la page de l'outil ou le post qui lui est consacré sur le blog de l'auteur.
Au passage vous pouvez aussi jeter un oeil à BabelMap.
La fonction Character Map en elle même est aussi disponible directement dans BabelPad.
Si vous ne lui voyez pas d'intérêt, essayez de placer le caractère "Line Separator" (U+2028) dans votre presse-papier en utilisant la table de caractères (charmap.exe) livrée de base avec Windows ;-)

Découvert à l'instant via John Robbins.
Je pense que toute personne ayant un jour tapée la commande "!gcroot" appréciera la vidéo et l'outil disponibles sur ce post de Chris Lovett : Visualizing Runtime Object Graphs
Je ne l'ai pas encore encore testé en situation réelle (et j'ai heureusement très peu d'occasions d'utiliser gcroot) mais je m'en voudrais d'avoir perdu le lien à ce moment là !
Bon ok, pour DGML il faut Visual Studio 2010. Mais du coup en partant de cette idée là il doit être possible de produire des graphes avec Graphviz (directement ou via QuickGraph par exemple) ou autre solution de rendu de graphes.
Je viens de le découvrir par l'intermédiaire de Patrick : le projet Panopticlick de l'Electronic Frontier Foundation (EFF) est plutôt intéressant.
Il met en avant le fait que même en laissant de côté les cookies, notre navigateur peut tout de même permettre de nous identifier plus ou moins précisément d'une visite à l'autre.
Ou du moins permettre de nous classer dans un groupe particulier de personnes ayant un profil similaire via une combinaison d'éléments tels que le contenu de la chaine UserAgent, la liste des fonts, la liste des plugins du navigateur, etc
Ce genre d'information de profil type peut se révéler plutôt intéressant pour la présentation de publicités ciblées par exemple.
Côté sécurité la divulgation de numéros de versions peut aussi donner une idée du niveau de maintenance de la machine, et permettre de rendre plus efficace une attaque en ciblant les failles présentes dans des versions spécifiques au lieu de taper au hasard.
Je ne sais pas à quel point le test est fiable mais si vous voulez voir de quoi il retourne, et que la collecte de ces informations par le système de test ne vous dérange pas, vous pouvez vous rendre sur cette page pour lancer le test avec votre configuration : Panopticlick
Il y a des fois où on fait des trucs bizarres (Dans Excel : Data => From Other Sources => From Data Connection Wizard => ODBC DSN => Excel Files ou MS Access Database) et on tombe sur des trucs encore plus bizarres :
Je plains les gens qui ont besoin de se servir de ça.
Au moins ça me remontera le moral quand je maudirai la boite de dialogue de preview de refactoring de VS2010, qui sauf miracle depuis la beta 2 devrait être comme celle de VS2008 : sans splitter...
Je suis tombé sur un article de Pierre CARON (CERT-LEXSI) : Pourquoi Facebook a crucifié la sécurité (en français).
Cet article est plutôt facile à lire et l'auteur y donne son point de vue sur les raisons de certaines lacunes dans le fonctionnement de la plateforme, et les raisons pour lesquelles il pense que ces lacunes ne seront probablement jamais comblées.
Sujets abordés :
- contrôle d'identité : on n'est jamais réellement certains que sous un profil se cache réellement la personne à qui il est censé appartenir, sauf si on en a la confirmation directe par celle-ci.
- authentification forte : la plateforme est gratuite et devrait le rester si elle veut conserver son public, alors mettre en oeuvre un moyen d'authentification engendrant des coûts supplémentaires...
- absence de modération : je n'ose imaginer les moyens à mettre en oeuvre pour réellement filtrer les contenus publiés sur Facebook.
- l'utilisation de Facebook sur le lieu de travail : le blocage n'empêchera pas la fuite d'information si elle devait avoir lieu, au mieux il améliorera la productivité.
Vous aviez probablement déjà conscience de la plupart de ces points et ne partagez peut être pas l'avis de l'auteur sur tous, mais il est toujours bon d'avoir un autre point de vue.
Au moins pour tenter de convaincre ses relations que l'utilisation de ce genre de plateforme grand public (ou pas) n'est pas sans risque, juste après les avoir convaincus qu'il faut qu'ils utilisent l'outil en se disant que toute information qu'ils déposent dessus pourrait bien un jour échapper à leur contrôle.
Ceci dit, cela ne veut pas dire que les équipes techniques/sécurité de Facebook font du mauvais travail.
Ils ont quand même l'air de bien gérer les fléaux qui ciblent ce genre de plateforme énorme et grand public, je pense notamment au spam (du moins de mon point de vue, mais c'est peut être dû aux profils des gens avec qui je suis en relation).
Et je profite de ce premier post de 2010 pour vous souhaiter à tous une bonne année !
Etonnant de voir passer un titre en français dans les flux Channel 9 et de découvrir une vidéo dans la même langue au bout du lien, ça mérite d'être signalé !
Il s'agit d'une petite présentation de Code Contracts et Pex par Manuel Fähndrich et Peli de Halleux :
Manuel Fahndrich et Peli de Halleux - Code Contracts et Pex pour .NET
Voilà, ceux qui préfèrent la langue de Molière à celle de Shakespeare peuvent aussi aller sur Channel 9 maintenant !
A quand des vidéos sur le Garbage Collector en français par Patrick Dussud ? :p
Il s'agit d'une petite chose qu'il vaut mieux garder en tête quand on développe sur/pour SQL Server, et probablement d'autres SGBD si j'en crois la raison avancée que nous verrons plus bas.
C'est particulièrement surprennant pour quelqu'un ayant l'habitude de travailler avec d'autres langages, comme C#, qui n'ont pas ce genre de comportement.
Les chaînes (typées varchar, nvarchar) contenant des espaces en fin de chaîne sont considérées égales à leurs équivalents ne les possédant pas, et ce sur pratiquement pour toutes les opérations reposant sur ou utilisant une comparaison à l'exception de la partie droite d'une clause LIKE.
Ainsi ce script affichera 'true' :
declare @Str nvarchar(256);
declare @StrLW nvarchar(256);
set @Str = N'test';
set @StrLW = N'test ';
select case when @Str = @StrLW
then N'true'
else N'false'
end
Celui-ci ne sortira qu'une entrée dans le jeu de résultats, et ce sera probablement la valeur de @Str :
create table test (txt nvarchar(256));
insert into test (txt) values (@Str);
insert into test (txt) values (@StrLW);
select distinct txt from test;
Celui-ci (identique au précédent si ce n'est l'inversion des ordres INSERT) sortira probablement la valeur de @StrLW :
create table test (txt nvarchar(256));
insert into test (txt) values (@StrLW);
insert into test (txt) values (@Str);
select distinct txt from test;
(Avec une vraie table et une requête plus poussée la valeur extraite dépendra probablement des indexes mis en oeuvre.)
La raison invoquée pour expliquer ce comportement pour le moins étrange est une compatibilité avec la norme SQL-92 : INF: How SQL Server Compares Strings with Trailing Spaces
SQL Server follows the ANSI/ISO SQL-92 specification (Section 8.2, <Comparison Predicate>, General rules #3) on how to compare strings with spaces. The ANSI standard requires padding for the character strings used in comparisons so that their lengths match before comparing them. The padding directly affects the semantics of WHERE and HAVING clause predicates and other Transact-SQL string comparisons. For example, Transact-SQL considers the strings 'abc' and 'abc ' to be equivalent for most comparison operations.
Source : INF: How SQL Server Compares Strings with Trailing Spaces
Concernant LIKE, je vous laisse exécuter les 2 scripts ci-dessous (les différences entre les 2 résident dans les types utilisés pour les variables et les chaînes littérales) et observer less résultats :
declare @Str nvarchar(256);
declare @StrLW nvarchar(256);
set @Str = N'test';
set @StrLW = N'test ';
select N'true' where @StrLW like @Str;
select N'true' where @Str like @StrLW;
select N'true' where @StrLW like N'test';
select N'true' where @Str like N'test ';
declare @Str varchar(256);
declare @StrLW varchar(256);
set @Str = 'test';
set @StrLW = 'test ';
select N'true' where @StrLW like @Str;
select N'true' where @Str like @StrLW;
select N'true' where @StrLW like 'test';
select N'true' where @Str like 'test ';
Ca peut ouvrir la voie à des casses-têtes plus ou moins graves...
Autant ce comportement ne me choque pas, et je dirais même que je m'y attendais, pour un type à largeur fixe (char, nchar) autant pour un type à longueur variable (varchar, nvarchar) je ne m'y attendais vraiment pas.
Donc essayons de retenir cette spécificité pour éviter de la redécouvrir dans la douleur la prochaine fois !
Pour ceux qui se posent des questions à propos du nouveau système d'aide (déjà utilisable dans les versions beta de VS2010), une interview de Ryan Linton vous donnera peut être quelques réponses.
Cette vidéo (10 minutes, en anglais) est disponible est disponible sur Channel9 : Microsoft Help Viewer - New Help System in Visual Studio 2010
J'ai cru entendre parler de mon ami l'index en fin d'interview.
Dans la série des astuces dont on n'a pas besoin tous les jours, et qu'on ne retrouve pas le jour J : attacher un debugger au démarrage d'un processus.
Vous en avez sans doute déjà entendu parlé au travers de l'outil Global Flags installé avec les Debugging Tools for Windows :
Ou alors vous avez entendu parlé de la clé de registre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options (que Global Flags modifie).
Ca peut servir, surtout pour tout ce qui doit être analysé dès le démarrage mais ne peut être lancé directement depuis le debugger comme les services Windows.
"You should name a variable using the same care with which you name a first-born child."
- James O. Coplien, Denmark (foreword to Clean Code)
Je suis tombé sur cette citation via ce post : Name a variable like you name your first-born
C'est sans doute volontairement exagéré, mais justement ça souligne bien l'importance de nommer correctement une variable, ce qui n'est pas forcément une tâche aisée.
Il faut réussir à exprimer avec quelques mots la raison d'exister de la variable, tout en restant le plus concis possible afin de ne pas atteindre des longueurs trop importantes.
Au moment de la frappe initiale du code, utiliser une variable "i", "x", "y", "instance" (...) peut paraitre anodin, mais souvenez vous de la dernière fois que vous avez maintenu du code utilisant ce type de nommage...
Nommez vos variables en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.
Je suis tombé aujourd'hui, via un post sur le blog ASKPERF, sur une série de 3 posts de Rick Vicik (Architect, Windows Server Performance Team et une des personnes derrière SQL Server).
Pas de .NET là dessous : on parle plus de manière générale et pour de la documentation liée aux exemples donnés vous pouvez directement aller dans la section Platform SDK de la MSDN ou dans la documentation du WDK.
Je n'ai pas forcément tout saisi mais de ma première lecture je sens que certaines informations exposées dans ces posts pourront me servir à terme, et certaines logiques en elles mêmes devraient être applicables côté .NET.
Voici les liens vers les posts en question, datant de 2008 :
Bref, avis aux motivés :-)
C'est relativement volumineux à lire, mais vous avez sans doute déjà connu plus massif (mais bien quand même) !
Et au passage ça me fait un petit pense-bête pour le jour J.
Vous avez une chance de donner votre avis (en anglais) sur la documentation technique MSDN : A Chance to Influence the MSDN Visual Studio Documentation (Help System)
C'est chez Jeff Moser : A Stick Figure Guide to the Advanced Encryption Standard (AES)
J'ai trouvé la façon de le présenter plutôt originale et sympathique !
2 extraits pour donner un aperçu :


Vous connaissez tous ce fameux encodage dit "Base64", consistant à représenter des données binaires en utilisant un jeu de 64 caractères, en général définis comme étant composé de :
- la plage de 'A' à 'Z' (26 caractères)
- la plage de 'a' à 'z' (26 caractères)
- la plage de '0' à '9' (10 caractères)
- les symboles '+' et '/'
Un 65ème caractère, ne représentant pas une donnée, sert au padding en fin de chaîne : '='.
Les développeurs .NET l'utilisent souvent au travers de la méthode Convert.ToBase64String.
Du coup comme à chaque fois que des symboles sont utilisés en supplément de traditionnels caractères alphanumériques, c'est à dire des caractères susceptibles d'être interdit dans un système de fichier etc, une question se pose : tout le monde est censé utiliser ce jeu de caractères et seulement celui-là ?
Dans le cas de Base64 la réponse est non.
Il existe de manière "officielle" au moins 2 alphabets :
Base32 n'est guère mieux : Base 32 Encoding with Extended Hex Alphabet.
Pour les cas où la donnée d'origine doit être retrouvée ou ceux où la même chaîne doit être générée pour une entrée donnée, ça peut être problématique.
On peut citer comme exemple la synchronisation interprocessus de l'accès à une ressource (du genre système de fichier) au moyen d'un mutex : nous sommes limités en longueur de nom (MAX_PATH, voir CreateMutex) donc hors de question d'utiliser le chemin d'accès (un bon vieux hash SHA-2 du chemin fera donc l'affaire) et nous aurons besoin d'être certains que les 2 processus génèreront exactement la même chaîne pour un chemin d'accès donné.
Si nous choisissons Base64 pour encoder le hash nous aurons donc au minimum besoin de nous assurer que le même alphabet soit utilisé des 2 côtés, et ce de manière durable.
Peu de risque que l'implémentation de Convert.ToBase64String change mais je n'ai pas vu de garantie non plus.
Sinon, vu que dans le cas du mutex le besoin de compacter au maximum la longueur n'est pas forcément nécessaire (tant que nous ne dépassons pas les 260 caractères au total), un bon vieux Base16 (hex) ira très bien : SHA-512 = 64 bytes = 128 caractères (au lieu des 88 caractères obtenus avec Base64).
Les 10 derniers blogs postés
-
Nouveau système d'aide pour Visual Studio 2010 : pour ceux qui n'apprécient pas trop l'absence d'index... par
CoqBlog le il y a 9 heures et 31 minutes
-
L'interface naturelle de Windows Phone 7 Series par
Perspective le il y a 10 heures et 48 minutes
-
Comment mapper une vue SQL sur une collection de complex type? par
Matthieu MEZIL le 03-19-2010, 21:05
-
SQL Server : Query Notification ou comment être notifié de modifications de données côté application (SqlDependency) par
SQL Server vu par Christian Robert le 03-19-2010, 15:06
-
[WF4] Un Binding Activity/ActivityDesigner qui passe mal? par
Blog de Jérémy Jeanson le 03-19-2010, 13:42
-
MyTIC – SharePoint 2010 : déjà un mythe Microsoft ? par
Le Blog (Vert) d'Arnaud JUND le 03-19-2010, 08:54
-
TechDays 2010 Genève : Retrouvez-moi pour une session sur la Haute disponibilité et le ScaleOut avec SQL Server par
SQL Server vu par Christian Robert le 03-18-2010, 15:45
-
[MIX10] Keynote deuxième journée – Internet Explorer 9, Html5, Visual Studio 2010, OData par
Atteint de JavaScriptite Aiguë [Cyril Durand] le 03-17-2010, 19:40
-
Certifications beta .NET 4 par
Kévin Gosse le 03-17-2010, 19:33
-
[Mix 2010] – Microsoft Translator Technology Preview V2 par
RedoBlog - The .NET Gentleman !!! le 03-17-2010, 18:53