ASCII, UTF8, UTF16 : l’encodage de chaîne en général

Récemment sur 2 projets différents à quelques jours d’intervalle, j’ai eu à me replonger dans l’encodage de chaînes de caractères que je pensais maîtriser …

Voyons si vous serez plus à l’aise que moi et prenez quelques instants pour “deviner” ce qu’affiche le code suivant :

.

.

.

.

.

.

.

.

.

La réponse est :

Si vous avez répondu 11 & 11, vous avez besoin d’un petit rappel sur les différents codage possibles :

  • ASCII : Codage définissant 128 caractères numérotés de 0 à 127 (et donc codables sur 7 bits). Ex : A = 65
  • Unicode : C’est un standard informatique qui permet d’échanger du texte au niveau mondial. De manière simplifiée, tout caractère est défini par une page de code (1252 étant par exemple l’alphabet latin) et un point de code (définissant un caractère à l’intérieur de cette page de code)

ASCII définit aussi bien la valeur d’un caractère (65 pour le “A” que son codage en binaire 1000001) alors que Unicode n’est qu’une définition d’un caractère. Son codage peut se faire ensuite selon plusieurs formats tels que UTF-8, UTF-16, UTF-32. (UTF signifiant “Universal Character Set Transformation Format”)

Le chiffre à la suite d’UTF ne signifie pas, contrairement à ce que j’avais en tête, le nombre de bits nécessaire au codage d’un caractère mais le nombre de bits minimal nécessaire au codage d’un caractère.

Ainsi, un codage en UTF-8 signifie que le caractère sera codé sur au moins 8 bits mais potentiellement plus. Une des spécificités d’UTF-8 est que ses 127 premiers caractères sont codés de la même manière qu’en ASCII, ce qui explique pourquoi UTF-8 est l’encodage de base utilisé pour la plupart des sites Web)

Pour en revenir au bout de code présenté, la première ligne de code présentée  effectuant une double conversion d’entiers inférieurs à 127 (donc “compatibles” ASCII), on reste sur une bijection 1 octet => 1 octet. Par contre, dans la deuxième, on effectue une conversion d’entiers supérieurs à 127 et donc 1 octet peut donner plus qu’un 1 octet.

Utilisation de Xml en C#

Aujourd’hui, voici quelques liens relatifs à l’utilisation de Xml en C#

Correspondance des instructions XPath vers Linq To Xml

Vous trouverez ici : http://msdn.microsoft.com/fr-fr/library/bb675178.aspx une correspondance relativement exhaustive de la correspondance entre XPath & Linq To Xml.

Quelques exemples (où po est un XDocument)

Instruction XPath Equivalent Linq To Xml
//Name po.Root.Descendants(« Name »);
//Address[@Type=’Shipping’] from el in po.Descendants(« Address ») where (string)el.Attribute(« Type ») == « Shipping » select el

Comment apprendre Linq To Xml :

Le plus simple reste d’installer LinqPad 4. C’est un outil gratuit (tant que vous n’avez pas besoin de la complétion automatique) fourni avec un grand nombre d’exemples pour Linq To Objects et Linq To Xml.

Sa simplicité en fait aussi un outil idéal pour tester rapidement des petits bouts de code sans avoir besoin de lancer Visual Studio.

Ma référence pour les instructions XPath :

Linq to Xml c’est bien mais parfois on n’a pas le choix et on doit faire du XPath. Voici le site que j’utilise pour trouver les requêtes à utiliser : http://zvon.org/comp/r/tut-XPath_1.html

Rechercher / remplacer avec des expressions régulières dans Visual Studio

Dans le cadre d’un de mes projets, j’ai récemment eu à remplacer dans tout un projet décompilé (généré par ILSpy sur du Compact Framework 3.5 …) le type de code suivant :

[sourcecode language= »csharp » padlinenumbers= »true » htmlscript= »false » toolbar= »true »]
int i = 17;
List<string> l = new List<string>();
l.get_Item(12) = "une chaine";
l.get_Item(i) = "une autre chaine";
[/sourcecode]

par celui-ci :

[sourcecode language= »csharp »]
int i = 17;
List<string> l = new List<string>();
l[12] = "une chaine";
l[i] = "une autre chaine";
[/sourcecode]

Aparté : J’en suis arrivé à ce code, car Il semble qu’ILSpy ne gère pas très bien le code compilé pour le Compact Framework, d’où la récupération de ces get_Item au lieu de l’indexeur classique. J’ai eu le même problème avec les propriétés qui étaient toutes de la forme .get_NomPropriete() ou .set_NomPropriete().

Je me suis naturellement tourné vers le remplacement dans Visual Studio par des expressions régulières (Je n’aborderai pas ici leur utilisation, pour plus d’informations je vous invite à consulter le site du zéro : http://fr.openclassrooms.com/informatique/cours/concevez-votre-site-web-avec-php-et-mysql/les-expressions-regulieres-partie-1-2 ou ce site (en anglais) http://www.regular-expressions.info/)

Il se trouve en fait que le comportement des expressions régulières a changé dans Visual Studio 2012 comme décrit succinctement dans la MSDN :

Pour plus d’informations sur les expressions régulières utilisées dans les modèles de remplacement, consultez Substitutions dans les expressions régulières.  Pour utiliser un groupe de captures numérotées, la syntaxe est $1 pour spécifier le groupe numéroté et (x) pour spécifier le groupe en question. Par exemple, l’expression régulière groupée (d)([a-z]) recherche quatre correspondances dans la chaîne suivante : 1a 2b 3c 4d. La chaîne de remplacement z$1 convertit cette chaîne en z1 z2 z3 z4> La syntaxe équivalente dans Visual Studio 2010 est {:z}([a-z]) pour l’expression régulière groupée et z1 pour la chaîne de remplacement.

L’expression régulière “officielle” pour effectuer une rechercher est la suivante : .get_Item((w+))((w+) représente le groupe à conserver et à réinsérer.

 Sous Visual Studio 2012 et supérieur, le remplacement se fait de la manière suivante :

VS2012regexp

  • $1 correspond au 1er groupe de l’expression régulière (dans notre exemple : “12” puis “i”)
  • image représentant la recherche par expressions régulières

Sous Visual Studio 2008 ou 2010, le mécanisme est légèrement différent :

image

  • L’expression régulière utilisée est : .get_Item({:a+})
    • “:a” correspondà un caractère alphanumérique
    • “{}” la définition d’un groupe
  • La récupération du groupe se fait par la syntaxe 1

OneNote 2013

Bonne nouvelle pour tous les fans de OneNote (et aussi pour tout ceux qui aiment la saisie pratique de notes depuis un ordinateur, tablette ou téléphone), la version 2013 est maintenant gratuite et disponible chez Microsoft : http://www.onenote.com/.

Après une installation un peu longue mais très simple, il vous suffit d’entrer vos identifiants OneDrive.

Et oui, cette version présente quelques limitations mais qui me semblent bien mineures :

  • Celle-ci s’utilise obligatoirement en liaison avec un compte OneDrive (Gratuit jusqu’à 7 Go de stockage …)
  • Il n’est pas possible d’insérer des fichiers dans une note

Vu l’attrait de cet outil, je vous conseille de sauter le pas :)

 

La touche F4 dans Excel (Répéter la dernière action)

La touche F4, bien que peu connue, est particulièrement utile dans Excel (toutes les versions à ma connaissance). Celle-ci sert à répéter la dernière action unitaire effectuée par l’utilisateur, ce qui correspond soit à un clic sur une fonction du ruban, soit au passage par un écran permettant de positionner plusieurs attributs.

Ainsi il est possible de répéter une mise en gras, la définition d’une couleur de remplissage, l’ensemble des propriétés de format d’une cellule ou même l’insertion ou la suppression de lignes.

Passons à quelques exemples pour illustrer son utilité :

Exemple 1 : Répéter un formatage de cellule

Je souhaite ici colorier rapidement en rose, entourer de bordure et mettre en gras l’ensemble des cellules qui sont barrées.

La méthode habituelle consisterait à effectuer une multi-sélection (Control+clic) de toutes les cellules qui nous intéressent puis de faire les modifications souhaitées. L’inconvénient de cette méthode est que l’on risque fort d’oublier une cellule et d’avoir à repositionner les propriétés une par une.

La méthode astucieuse consiste à sélectionner une seule cellule (B15) par exemple, de faire « bouton droit » – « Format de cellule » et de définir l’ensemble des propriétés souhaitées. Une fois cela effectué, il ne reste plus qu’à se positionner sur les cellules une par une (ou en multi-sélection) et de taper F4 pour que la dernière action soit répétée.

Voici le résultat :

Exemple de touche F4 dans Excel

 Exemple 2 : répéter la suppression de lignes

J’aime aussi beaucoup utiliser cette fonction dans des tableaux ou je souhaite supprimer des lignes complètes un peu partout.

Dans ce cas, il suffit de sélectionner une ligne, de la supprimer (Bouton Droit, Supprimer). Tant qu’aucune autre action n’est effectuée, la sélection d’une ou plusieurs lignes et l’appui sur F4 supprimera directement ces lignes, ce qui est autrement plus rapide qu’un autre raccourci clavier ou qu’un clic droit puis Supprimer

 Voici le résultat :

La touche F4 lors de la suppression de lignes

Et pour finir, il faut noter que cette touche F4 est aussi disponible dans Word avec évidemment le même usage.

 

Rebuild 2013

Bonjour à toutes et tous,

Vous n’avez pas pu vous rendre au Microsoft TechDays cette année ?
Les annonces de la Microsoft Build vous intéressent ?
Vous avez des projets avec les technologies Microsoft ?
 
Cet événement est fait pour vous !
 
L’association Les Communautés Microsoft organisent le 3 Octobre à Nantes un salon Informatique nommé « Rebuild 2013 ».

ReBuild 2013, c’est donc :
un espace de 800 M²
7  Conférences plénières
32 sessions techniques

15 MVP/MSP
28 Speakers
30 stands partenaires​

En résumé :
Découvrez les nouveautés des produits Microsoft et partenaires ainsi que les activités de l’association et les programmes d’aides.​
Concours Microsoft/NOKIA avec Rudy HUYN et Samuel BLANCHARD MVP Windows Phone : des Lumia 920 et 620 à gagner ! Consultez le programme ​pour assister à la session !

Pour vous inscrire et en savoir plus : http://www.rebuild.fr
Rebuild 2013 
Le 3 octobre à Nantes
Assistez à la Conférence Rebuild !
Manufacture des tabacs
10 boulevard de Stalingrad
44000 Nantes
http://www.rebuild.fr

Les Run du Sillon 2013

Voilà, le raid des Run du Sillon est (bien) terminé avec 98 kilomètres effectués selon mes calculs (90 au relevé GPS) pour 1136 m de dénivelé positif : l’objectif des 80 kilomètres est donc, n’ayons pas peur des mots, pulvérisé.

 

Ce week-end avait pourtant commencé sous de bien mauvaises auspices : lors de la préparation du VTT la veille au soir juste après avoir huilé la chaine et vérifié que tout était prêt, je me suis retrouvé avec cette même chaine coincée dans les rayons, le dérailleur qui fait un tour complet et la pièce (qui avait déjà cassé) à moitié tordue. Vu mes talents innés de bricoleur, il n’était même pas envisageable de réparer cela 12 heures avant le départ.

Heureusement, Renan est arrivé et a très gentiment accepté de me prêter son Rockrider 8.1 en parfait état de marche et, cerise sur le gâteau, de belles pédales automatiques qui s’adaptent parfaitement à mes chaussures (gros avantage par rapport à mon VTT : le petit plateau passe au petit poil, ce qui ne sera pas inutile par la suite)

Après une nuit très agréable et un réveil plutôt matinal pour un dimanche (6h du matin), nous nous retrouvons (Gaël, Vincent, Gilles & moi) pour le départ à 7h30 à Malville sous un joli soleil mais un froid d’hiver (+3 °C au compteur de l’Espace …) :

Le départ
De gauche à droite, Gilles, Vincent & Moi. Gaël prend la photo

Après une bonne heure pour se réchauffer malgré le superbe soleil qui ne nous quittera pas de la journée et quelques embouteillages sur les premiers passages techniques (c’est quoi cette rando où tous les gens partent à la même heure 😉 ), nous commençons à savourer le circuit qui n’est quasiment pas gras, très bien tracé et alterne agréablement les passages techniques dans les sous bois avec des pistes plus roulantes pour la récupération.

Après une rapide pause au ravitaillement des 20 kilomètres à la sortie de Malville, nous repartons direction Savenay et le GR3 avec probablement un peu plus de dénivelé.

1er ravito à 20 Km
De gauche à droite, Gilles, Vincent & Gaël

Rien de particulier à signaler sur cette deuxième partie : le parcours reste très agréable (et toujours aussi bien fléché) avec un single track d’1,5 km le long de la 4 voies, un passage plus technique avant le contour du lac de Savenay et c’est déjà le ravito des 40 km avec un changement dans les denrées proposées :

Fromage au 2ème ravito
Fromage au 2ème ravito
Et un moral toujours au beau fixe :
2ème ravitaillement (40 Km)
2ème ravitaillement (40 Km)

Les 20 kilomètres suivants se passent toujours dans la bonne humeur malgré quelques tentatives de déstabilisation de Vincent sur ma prétendue guigne récurrente avec mon VTT et, de son point de vue, un risque fort de ne pas finir pour cause de casse … Après une petite accélération de ma part, tous ces petits problèmes internes sont réglés. Côté circuit, nous continuons à alterner les boucles techniques classiques des randos de Malville & Savenay (avec un moment rigolo où nous croisons nous faisons doubler par des coureurs à pied …) et des passages plus roulants. Un petit pour par les marais pour engranger 4 ou 5 kilomètres qui ne coutent pas cher et nous arrivons au dernier ravitaillement avec une surprise de taille (et Matmatah en boucle à fond) :

Les grillades du 60ème kilomètre
Les grillades du 60ème kilomètre

Jusque là, on a été gâté avec un temps impeccable, un circuit parfaitement tracé, pas trop de monde sur le chemin mais là c’est le clou du spectacle : pour le repas du midi, nous avons droit à des saucisses & du jambon grillé au barbecue. Y a pas à dire, l’organisation est au top.

La planification initiale (rester ensemble jusqu’au kilomètre 60) ayant été respectée, je décide de tenter le 100 Km (En fait, c’est plus le fait d’avoir des bonnes sensations dans les jambes et d’avoir failli passer à côté de cette belle journée qui me décidera). Cette décision implique donc de faire les 40 derniers kilomètres tout seul … Et bien soit, en route.

Après un peu de stress pendant les 5 premiers kilomètres (Dans quel état vais-je finir ? Comment je vais pouvoir rentrer et dans quel état je vais rendre son VTT à Renan ?) atténué par une petite coupe dans le programme (une boucle « inutile » de 2,8 kilomètres), je prends finalement mon petit rythme. Comme depuis le matin, le circuit alterne des passages assez techniques (les jambes commencent à faire mal et certains montées se font malheureusement à pied) avec des passages de « remise en état ». Encore une bonne nouvelle, une fois ces 17 kilomètres enquillés, c’est retour à la case Barbecue.

Il ne reste alors plus que 20 kilomètres à faire pour rentrer. Le circuit passe par la montée infernale (1/4 fait à vélo, le reste à pied …), la remontée de l’interminable Vallée du Goust (avec un peu d’entraînement ca passe quand même mieux) et quelques surprises : la rando de Malville nous fait rentrer directement une fois les difficultés passées, là il faudra redescendre 2 fois dans le sillon avant d’apercevoir la 4 voies avec Malville derrière. Quelques mètres en plus avec la traversée de la ZA de la zone blanche et c’est enfin l’arrivée. Pendant ces 20 derniers kilomètres, j’ai doublé (parfois) et me suis fait doublé (souvent) par des personnes qui présentaient toutes des marques de fatigue mais aussi une bonne humeur et un réel plaisir d’arriver au bout.

Au final, ce raid n’aura été que du bonheur avec un temps superbe, une organisation au top (fléchage, ravito, …) et des compagnons d’échappée très agréable. A refaire (mais pas tout de suite …)
Et pour finir, quelques chiffres sur ce raid :

  • 615 inscrits dont 14 femmes
  • 98 kilomètres effectuées (90 au GPS)
  • 8h50 sur le VTT dont 1h10 de pause soit 12,56 Km/h de moyenne
  • 3,5 litres d’eau citronnées bues dans la journée
  • 15 pâtes de fruits, 3 tranches de pain d’épice, 25 fraises Tagada, 12 abricots secs, 4 bananes (en morceaux), 2 saucisses & 1 sandwich maison Jambon, Beurre, Vache qui rit ingérés dans la journée
  • et une bière corse chez Gilles pour finir

Les traces du circuit :