Accessility: Billets , Photos , Afer , Sections et Articles , Recherche (ALT + R)
Yan Morin, ing. jr, in my head
Métier: Programmeur Analyste, Enseignant, Consultant, Ingénieur junior.
Qualificatif: Lacto végétarien, anti-consommateur, célibataire.
Lieu d'action: Mont-Laurier
Disponibilité: en contrat depuis le 18 mars 2008...
Entreprise: ProgYSM
Billets
Encore une histoire d'encodage - twitter
2008-05-03 11:11:43:
Vincent se demandait hier pourquoi il avait écrit 138 caractères dans son espace twitter et que l'application twitter lui avait dit qu'il avait plus de 140 caractères après son "post". L'informatique, c'est une question de chiffres, de 0 et de 1, de conventions, de manque de visions des besoins et de paresses.
Explication: un caractère est représenté par un graphique qui est associé à un nombre. Il existe différentes tables qui associe les lettres à différent nombre. Par exemple, la lettre "A" majuscule est associé au nombre décimal "65" selon la table ASCII. Lors de la programmation des premières tables de caractères, l'anglais était utilisé et il existait 128 caractères. Les programmeurs, des anglophones, ont spécifié qu'un caractère, un "char / character" était représenté par 8 bits, un octet. Aux 128 caractères de base, on pouvait ajouter 128 caractères supplémentaires dans une table étendue. On a eu une multitude de tables étendues qui spécifiait des caractères supplémentaires sur 8 bits / 1 octets. On pouvait spécifier des lignes, des symboles, des accents, des pictogrammes.
Lors de la conception des bases de données relationnelles, les programmeurs, encore une fois, ont décidé d'utiliser les "char"s comme unité de mesure pour les champs de type "chaîne de caractères". Une chaîne de caractères est un bout de phrase, de texte. Ils ont encore spécifié qu'un "char" équivalait à 1 octet, 8 bits. Lorsque les tables avaient seulement 256 symboles, un "char" était encodé en 1 octet/8 bits.
Les développeurs de langages de programmation ont développé des fonctions pour calculer la longueur des chaînes de caractères. Or, ils ont développés des fonctions qui calculent le nombre d'octets des chaînes de caractères et non le nombre de caractères.
Un jour, des développeurs ont voulu réunir et unifier toutes les tables de caractères. Au lieu d'avoir ASCII, ISO-8859-1, windows-1252, ISO-8859-15, etc, ils voulaient avoir une seule table. Une table qui associe 1 caractère à 1 nombre. Or, ils y avaient tellement de caractères différents (penser seulement au pictogrammes des Chinois) qu'un octet (256 possibilités) ne pouvait être suffisant. Ils ont développés, en autre, une table qui se nomme UTF-8 (Universal character set Transformation Format 8 bits). Cette table a une particularité, les caractères sont représentés par des nombres à taille variable. Les 128 premiers caractères sont encodé sur 8 bits, ensuite 2048 sur 16 bits, 65536 sur 24 bits et 2091752 sur 32 bits. Or c'est là que les fonctions des programmeurs ne retourne plus des résultats cohérents. Les fonctions qui étaient sensées retourner le nombre de caractères, retourne en fait le nombre d'octets utilisés par l'encodage. Anciennement, tout était 1 caractère = 1 octet. Avec UTF-8, c'est variable, 1 caractère = 1, 2, 3 ou 4 octets.
En PHP5 par exemple, un langage qui utilise beaucoup les noms de fonction du langage C, la fonction strlen() retourne le nombre d'octets encodés et non le nombre de caractères. PHP5 possède une fonction mb_strlen() qui compte le nombre de caractères. Si un "é" est encodé en 2 octets en PHP5, alors strlen() retourne 2 et mb_strlen() retourne 1. Le PHP5 a été codé en utilisant l'encodage US-ASCII par défaut. Les fonctions multi-bytes (mb_) ont été ajouté par la suite.
Pour le Javascript, il a été développé avec l'Unicode en tête. Par défaut, les chaînes de caractères sont en Unicode et la propriété "length" retourne le nombre de caractères, pas le nombre d'octets encodé.
Bien que les nouvelles bases de données supportent les encodages à taille variable, généralement les types de base utilisent toujours le concept de 1 char = 1 octet. Donc, si un administrateur de base de données spécifie une taille de champ à 140 chars, le champ est limité à 140 octets et non pas 140 caractères.
Une des forces de l'informatique est de développer des technologies distinctes qui répondent à des besoins spécifiques. Une des faiblesses de l'informatique est l'interopérabilité des technologies distinctes (faire parler plusieurs technologies ensemble). Un site Web qui effectue des transactions utilisent plusieurs technologies (par exemple): HTTP, URI, HTML, Javascript, PHP, système de fichiers du serveur, SQL, base de données.
| Technologie | Par défaut | Supporte aussi |
|---|---|---|
| HTTP | US-ASCII | |
| URI/DNS | US-ASCII | |
| HTML | ISO-8859-1 | UTF-8, ... |
| Javascript | Unicode||
| PHP | US-ASCII | Fonctions spécifiques aux encodages |
| SQL | US-ASCII | Autre encodage... |
Dans le cas de Twitter, le compteur leur page est en Javascript (Unicode) et compte le nombre de caractères et non pas le nombre d'octets utilisés. Lors de la vérification sur leur serveur, ils utilisent une fonction qui compte le nombre d'octets. Puisqu'on peut quand même afficher des chaînes de 280 octets, je dirais que leur base de données supporte plus de 140 octets et qu'ils n'utilisent pas la bonne fonction de calcul sur leur serveur.
Section: Normes et standards
Seul
2008-05-01 22:31:09:
Je me sens seul devant mon clavier ce soir. J'ai pas le goût de lire ou écrire. Je vais me coucher. Déjà le 1er mai. 5 mois après mon départ de Montréal.
Section: Quoi de neuf
Structure de mes journées
2008-04-29 23:02:14:
Me lever, déjeuner, travailler, dîner, travailler, m'occuper de mes nièces, souper, m'occuper encore de mes nièces, essayer de me relaxer, discuter avec ma soeur et mon beau-frère, jouer un peu de guitare, regarder un peu les nouvelles d'informatiques, me coucher.
Je crois qu'il n'y a pas d'activités ou je peux couper présentement... Mais c'est quand même mieux que ma vie à Montréal, je crois, qui se résumait à: se lever, déjeuner, préparer dîner, transport (métro/marche), travailler, dîner, travailler, transport (métro/marche), souper, regarder les nouvelles d'informatiques, travailler, me coucher.
Bon, maintenant, qu'est-ce que j'aimerais vraiment faire? J'aimerais être capable de travailler au moins 8 heures. Prendre une marche d'au moins 30 minutes. Faire une activité sportive au moins 2 fois par semaines. Développer mon site Web au moins 30 minutes par jour. Étudier une matière au moins 30 minutes (langue, biologie, politique, géographie, physique, mathématique, ...). Classer mes affaires au moins 30 minutes. Est-ce que c'est possible. Je ne le sais pas, mais il faut que je me lève plus tôt, ça c'est sûr. Noter que je n'ai même pas le temps de rencontrer des gens parmi tout ça... (à part pour l'activité sportive et peut-être la marche).
Donc, je me lève tôt demain... Vraiment?
Section: Quoi de neuf
Type de personnes
2008-04-23 22:40:18:
C'est très drôle de rencontrer des personnes et de reconnaître un type (style, genre) de personnes. Surtout avoir des courriels d'une personne qui a le même "genre" qu'au moins moins 2 ou 3 de ses connaissances. Le monde est très petit. On aime lorsqu'il est petit, c'est plus simple à gérer. Les gens semblables se croisent et se reconnaissent. Toujours la même danse des contacts.
Toutefois, il ne faut pas préjugé car malgré tout ce qu'on peut laisser paraître, on n'est jamais réellement à notre image. Le paraître, c'est de la frime. Ce qu'on exprime, ce n'est pas réellement ce qu'on veut à moins d'être un véritable sage qui a assez longtemps apprivoisé son "moi" intérieur. Il ne faut pas croire non plus que personne est sage. Rien de plus frustrant que de s'exprimer véritablement sur un sujet et de ne pas être compris parce que l'autre estime qu'on ne dit pas ce qu'on pense. C'est ce faire dire "tu frimes encore, tu ne te connais pas". En d'autres mots, certaines personnes sont vraiment honnêtes lorsqu'elle s'exprime sur certains sujets. Oui ça existe. Mais peut-être pas pour tous les sujets.
Finalement, ça me fait rire. Je suis là, fatigué, en attente sur ma chaise. J'essaie de trouver quelques choses à faire. Je sais que mon esprit ne peut plus innover aujourd'hui - il ne fonctionne plus pour la création et pour trouver des solutions. Il a seulement besoin de repos. Et demain, je n'aurai plus cet état d'esprit du soir qui me fait philosopher ou dire des niaiseries. C'est quand même merveilleux des idées et la fatigue.
Section: Quoi de neuf
2008-04-23 22:08:35:
Don't ask what your $var can do for you but what you can do for your $var.
Section: Pensées du jour
Faux diagnostic, enfin je l'espère
2008-04-11 08:13:48:
Je pensais que j'étais déprimé hier et avant-hier parce que je n'étais plus capable de travailler ni de me concentrer. Mais en fait, depuis hier ce soir, j'ai mal à la gorge, elle brûle, alors ça doit être une grippe. Présentement mon nez est bloqué et les autres symptômes devront apparaître bientôt.
Section: Quoi de neuf
Encore le même problème...
2008-03-24 00:11:49:
Je me retrouve encore avec le même problème que lorsque j'étais au Cégep: j'ai beaucoup trop de projets et de travail à accomplir pour pouvoir me contenter. Ça bouillonne dans ma tête. Je travaille pour les autres et pour moi. J'aime pousser les technologies à leur maximum et je n'ai pas assez d'heures de concentration pour tout faire. Mais que faire? J'ai le goût de bâtir des outils qui pourraient répondre à mon besoin de classifier les informations et les concepts qui se retrouve un peu partout. Je crois que le mieux pour moi est de séparer et de planifier mon temps entre le travail et mes projets: 75%/25%. Je trouve effrayant d'avoir la possibilité de toucher à peu près n'importe quelles applications et langages orienté objet ou procédurale et de pouvoir les comprendre, analyser et modifier.
Section: Quoi de neuf
Afer afer
Faire le backup, Transférer yansanmo.iquebec.com sur mont-laurier.no-ip.org, Angliciser libafer.php et placer dans un répertoire, Ajouter parser d'adresse à contact/, avoir une pensée claire
Fait aujourd'hui
Standard | JCB | Vert | à la Robin | à la Sylvain | icez | Sans CSS

