2730

Oui, si j'ai posté ça dans ce topic c'est pour montrer comment il utilise de la reconnaissance vocale pour coder, pas pour la reconnaissance vocale en elle-même.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2731

J'ai bloqué un moment avant de comprendre ce bug PHP. En faisant un substr (substring), en partant de la position 0 du string et demandant 25 caractères de long, je n'avais jamais le bon résultat.
En testant avec un strlen (string lenght), le texte demandé contient en fait 26 caractères.
Tout ça parce qu'il y a un "é".
Même un strtoupper (string to upper) ne peut mettre correctement les accents en majuscules.

Je n'y avais jamais fait attention avant : ces fonctions basiques de PHP ont été créées avant que PHP ne fonctionne à l'Unicode, donc le "é" en UTF-8 compte pour deux caractères.
Heureusement ces fonctions peuvent être précédées par le préfixe "mb_" (multiple bytes) pour fonctionner correctement avec l'unicode.
Mais quand même, des années à utiliser PHP et je n'avais encore jamais eu conscience de ça. Je dois sans doute trainer un ou deux petits bugs ponctuels dans des projets passés à cause de ça.

Je me demande si d'autres langages, avec l'unicode, ont adapté leurs fonctions. J'imagine que PHP est resté sur son approche habituelle : "si c'est cassé, ne pas réparer mais faire une nouvelle fonction, la rétrocompatibilité avant tout".
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2732

Ouais, il faut absolument utiliser mb_* pour tout ce qui est chaînes, sinon c'est la valse des bugs de folie (même si rarement vraiment problématiques, ça peut vite le devenir)...
Le souci est d'y penser...

(Je crois que Python 3 ajoute la gestion de l'Unicode... ils ont fait le choix de tout casser)
avatar

2733

Non Python2 supporte aussi mais pas par defaut c'est la le probleme
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2734

Meowcate : je ne comprends pas, comment tu as pu faire du PHP depuis tant d'années sans jamais tomber sur une seule chaîne Unicode, ou même simplement avec des accents ? confus
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2735

Il n'a peut-être simplement jamais été dans une situation où c'était problématique smile
avatar

2736

Zerosquare (./2734) :
Meowcate : je ne comprends pas, comment tu as pu faire du PHP depuis tant d'années sans jamais tomber sur une seule chaîne Unicode, ou même simplement avec des accents ? confus
en pas unicode, t'as pas de problème de comptage de caractères avec accent...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

2737

D'une part oui. Cela ne fait pas si longtemps que l'unicode s'est imposé comme "le" standard. J'ai encore de nombreux vieux projets sur lesquels je travaille qui sont en latin-1.

D'autre part, l'essentiel des manipulations de string que j'effectuais portaient sur des chaînes ASCII, les string servant d'éléments de contrôle (et généralement en anglais). Les rares cas où je manipulais les textes étaient par ex d'utiliser substr pour prendre les 250 premiers caractères pour un "Lire la suite" : en présence d'accents, tu ne fais pas très attention à ce que ton texte final fasse 250 ou 230 caractères. S'il est suffisamment court, c'est l'essentiel.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2738

Ca ne fait pas si longtemps? au moins 10 ans dans le cadre du web grin

mb_strlen est dans php depuis PHP 4.0.6:

Released: 23 June 2001

Ce n'est pas vraiment nouveau :P
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2739

Meowcate (./2737) :
les string servant d'éléments de contrôle
fear

2740

Oh, je t'en prie. On a par ex une variable "role" où l'on vérifie si la valeur est "admin", "user", "redactor", etc. Quand je procède ainsi dans toutes mes applis, je sais que je n'ai pas besoin de passer par des constantes que j'utilise pour d'autres cas.

Pour être précis, les mb_ sont sortis peu après les fonctions en question. Mais en encodage, jusqu'à l'arrivée (et popularité) du HTML5, c'est surtout le ISO-8859-1 qui a dominé les pages web francophones.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2741

Non, python 2 gérait « très » bien l'Unicode également, et fait la différence (tout comme Python3) entre byte string (a priori pas du texte, juste de la donnée) et text string (également appelé unicode string).

Simplement, en Python 2 : "toto" est une byte string et u"toto" est une unicode string. Du coup, plein de gens oubliaient le préfixe u"" et donc utilisaient des byte string à la place.
En Python 3, b"toto" est une byte string et "toto" est une unicode string. Par défaut, les gens utilisent donc la bonne version.

De plus, Python 2 permettait de faire "toto".lower() (ce qui n'a pas franchement de sens) ou "to" + u"to", ce qui fonctionnait… parfois :
>>> 'é' + 'é'
'\xc3\xa9\xc3\xa9'
>>> 'e' + u'é'
u'e\xe9'
>>> 'é' + u'é'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
En Python 3, impossible de mélanger les deux :
>>> b'e' + 'e'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can't concat bytes to str
>>> 'e' + b'e'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'bytes' object to str implicitly
Automagiquement, 90% des bugs des programmes Python 2 disparaissent, du coup.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2742

Meowcate (./2740) :
On a par ex une variable "role" où l'on vérifie si la valeur est "admin", "user", "redactor", etc
Oui mais personne n'a une liste exhaustive, et il y un risque de faute de frappe, etc.
Peut-être que parfois tu n'a pas le choix, mais tu n'arriveras pas à me convaincre que c'est sain tongue grin

2743

#devweb#
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

2744

(en plus c'est inefficace, c'est long de comparer des String)

2745

Et puis bon comme disent les anglais c'est un "pain in the ass" a maintenir
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2746

(inb4 Nil)

2747

Pen^2 (./2744) :
(en plus c'est inefficace, c'est long de comparer des String)
Ça a des avantages quand tu récupères une base de données et que tu dois deviner ce qu'elle contient (et que le code source est moins clair que la structure de la base).

(sinon, quand ça m'arrive de faire ce genre de choses, j'ai en général un double garde-fou : j'utilise des constantes et mon ORM ou les formulaires râlent quand on entre une valeur non prévue)
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2748

Meowcate (./2731) :
J'ai bloqué un moment avant de comprendre ce bug PHP. En faisant un substr (substring), en partant de la position 0 du string et demandant 25 caractères de long, je n'avais jamais le bon résultat.
En testant avec un strlen (string lenght), le texte demandé contient en fait 26 caractères.
Tout ça parce qu'il y a un "é".
Ce n'est pas un bogue, c'est exactement le comportement attendu des fonctions de chaînes de caractères style C (c'est la même chose en C), ça compte les octets, pas les codepoints Unicode et encore moins les caractères logiques (U+0065 LATIN SMALL LETTER E + U+0301 COMBINING ACUTE ACCENT = 2 codepoints, mais un seul caractère logique, équivalent à U+00E9 LATIN SMALL LETTER E WITH ACUTE). C'est exactement la même chose en C.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

2749

Pen^2 (./2746) :
(inb4 Nil)
(Je suis déjà dedans embarrassed )
avatar

2750

Pen^2 (./2742) :
Oui mais personne n'a une liste exhaustive, et il y un risque de faute de frappe, etc.
Peut-être que parfois tu n'a pas le choix, mais tu n'arriveras pas à me convaincre que c'est sain tongue grin
C'est effectivement immonde, pas sûr et et tout ce que tu veux, mais malheureusement il n'y a pas 36 solutions en PHP puisque c'est un langage dynamique sad

Pour yN j'utilise essentiellement des constantes numériques pour résoudre le même genre de problème, et c'est tout aussi peu fiable puisqu'il n'y a aucune façon de garantir que je ne vais pas faire une typo dans le nom de la constante qui va tout au plus me générer un warning à l'exécution, ou que je ne vais pas carrément assigner à ma variable une valeur qui est d'un type totalement différent (ou du bon type mais en-dehors du range de ce qui devrait être acceptable, ce qui revient au même).

Bon sinon effectivement pour faire du PHP de façon professionnelle et ne jamais être tombé sur des problèmes improbables faute d'utiliser mb_* il faut être sacrément chanceux grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2751

Zeph (./2750) :
une typo dans le nom de la constante
Normalement l'éditeur repère ce genre d'erreurs, non ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2752

Même si mon IDE repérait ce genre d'erreurs, s'il n'y a qu'elle qui peut le faire avant que ce soit trop tard ça reste un problème de langage smile (et en l'occurrence j'utilise seulement un éditeur de texte donc non, aucune détection :/)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2753

Je code en fait de la façon que je trouve la plus souple possible tout en restant aussi rigide que je peux (un peu contradictoire).
L'exemple du rôle dont je parle s'effectue une unique fois à chaque moment qu'un utilisateur consulte une page. Le "bug" dont j'ai parlé concerne de la comparaison de texte parce que je n'ai pas vraiment le choix quand il s'agit d'importer des données Excel pour les insérer dans du SQL.

Il y a une vraie frontière entre "ce qui doit être parfaitement fait" et "ce qui est idéal dans une situation donnée". Pourquoi par exemple foreach existe, alors que les boucles for et while sont bien plus rapides ? c'est que foreach rend le code plus lisible, et je l'utilise chaque fois que je le peux tant que la boucle parcourue n'est pas trop importante.

Zeph (./2750) :
Bon sinon effectivement pour faire du PHP de façon professionnelle et ne jamais être tombé sur des problèmes improbables faute d'utiliser mb_* il faut être sacrément chanceux
Je fais encore de la résistance concernant les commentaires de mon code, mais pour le reste (fonctions, variables, valeurs de contrôle, etc) tout est en anglais. Ceci explique peut-être cela.
Enfin, surtout "valeurs de contrôle". Quel cinglé utiliserait des accents dans un nom de fonction ?
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2754

Meowcate (./2753) :
Je fais encore de la résistance concernant les commentaires de mon code, mais pour le reste (fonctions, variables, valeurs de contrôle, etc) tout est en anglais. Ceci explique peut-être cela.
Heu je suis pas sûr de comprendre, ces fonctions servent à traiter des inputs utilisateur, données récupérées dans une BDD, etc. mais en quoi la langue dans laquelle tu codes joue sur quoi que ce soit ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2755

Quand on est habitué à utiliser le français partout mais devoir rester sur l'ASCII pour tout ce qui est hors-affichage, avoir une variable $facturé donnerait $facture, ce qui casse l'idée. Je ne confondrais pas $facture et $factured.
C'est davantage une idée de bonne pratique à suivre à mon sens, même si la langue anglaise a aussi des cas particuliers (sur les pluriels en particuliers) qui posent des conflits de nommage.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

2756

Pour ca suffit d'utiliser un language qui supporte le fullset UTF-8 pour le nom de variable tongue
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2757

./2755 : heu oui, mais je ne vois toujours pas le lien avec les fonctions mb_* dont tu parlais plus haut ? (mais peut-être qu'il n'y en a aucun ?)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2758

De ce que j'ai compris, il crée des variables dynamiquement depuis des données issues de bases ?
avatar

2759

Oh non ? Bon je crois que je vais me retirer de cette discussion alors, j'en ai déjà trop entendu grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

2760

grin
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant