OVH Cloud OVH Cloud

Les fichiers de conf en xml, quel intérêt ?

144 réponses
Avatar
olive
Bonjour,

Pour installer un petit serveur Jabber (Prosody), j'ai eu à tripoter un
fichier de conf en xml. Je n'y connais pas grand chose, mais je me
demandais quel est l'intérêt d'utiliser ce format plutôt qu'un bête
fichier texte à éditer ? C'est une vraie question.

Par ailleurs, chaque fois que je cherche de la doc quand je veux faire
un truc un peu moins basique que d'habitude, je tombe sur le wiki
d'Ubuntu qui m'a bien aidé plus d'une fois. Je le trouve en fait assez
remarquable.


--
Olivier -- "On est comme tous les artistes, on croit à notre produit."
-+-groupe Début de Soirée-+-

10 réponses

Avatar
JKB
Le 19 Oct 2010 10:19:16 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
La plupart du temps, les données
elles-mêmes sont ASCII



Et voilà, tu vois encore les choses par le petit bout de la lorgnette : tu
envisages uniquement le cas de tes logiciels de calcul intensif. Un fichier
de configuration, ça peut aussi contenir des valeurs qui sont du texte dans
une langue naturelle.



Est-ce que tu sais ce que veut dire _la plupart du temps_ ?

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
JKB , dans le message , a
écrit :
Soit tu as des caractères qui te permettent de discriminer, soit le
problème ne se pose pas.



Totalement faux. Je reprends l'exemple d'ISO-8859-1 vs. ISO-8859-15 : l'un a
1/2 là où l'autre a oe, qui sont des caractères qui ont des fonctions
totalement différentes, et que n'importe quel processus vaguement
linguistique (découpage de lignes en paragraphes, typiquement) doit traiter
différemment.

Évidemment, si ton petit monde se limite à distinguer EBCDIC d'ASCII et
d'ignorer les commentaires, c'est plus facile.

Et des cas ambigus, en pratique, il y en a très peu.



Faux.

En fait, en quinze ans d'utilisation de mes propres parsers, je n'en
ai encore jamais vu.



Peut-être sont-ils trop spécialisés pour que tu aies rencontré le problème.
Ça ne veut pas dire que le problème ne se pose pas.

Dans ce cas, je te déconseille fortement de te lancer dans
l'écriture d'un tel truc.



J'en ai déjà écrits, ils marchent très bien.

Ça y est, le revoilà. Je ne sais pas si tu arrives à imaginer
combien me faire traiter de médiocre par un type comme toi
m'indiffère.



Apprends à lire, ceux que j'ai traités de médiocres, ce sont tes
condisciples, pas toi.

Et dans ce cas, elle est inutile.



Non, puisque la détection automatique de l'encodage n'est pas possible.

Et c'est bien notre cas. Si tu ne détectes pas l'encodage, tu
utilises l'information en tête du fichier. Si tu vas jusqu'à la
déclarer invalide, c'est que tu as détecté par une autre technique
cet encodage



Non, c'est faux. Exemple : si tu rencontres la séquence d'octets 0x74 0xE9
0x20 dans un fichier qui était censé être de l'UTF-8, tu peux affirmer avec
certitude que ce n'en est pas, mais tu ne peux pas en déduire plus.

Tu te retrouves avec un fichier
de conf d'un bon millier de lignes avec dedans une information
'encodage=UTF-8' et un encodage réel qui n'a _rien_ à voir avec
l'UTF-8. Avec ta technique, tu as juste réussi à faire exploser la
lecture alors que ton fichier est cohérent à un autre encodage que
tu as _déjà_ décodé au moins partiellement puisque tu sais que ce n'est
pas de l'UTF-8.



Je ne vois pas le problème : la lecture échoue avec un message d'erreur
explicite, l'utilisateur vient réparer, et en profite pour vérifier qu'il
n'y a pas eu d'autres erreurs introduites au passage.

Réfléchis un peu pour voir combien ton exemple tarte à la crème est
idiot dans ce contexte.



Le contexte, c'était contredire ton affirmation ultra-générique sur les
informations redondantes.

On s'en fout. Soit en en connaît assez pour le lire, soit on a une
ambiguïté



Dans ton petit monde peut-être. Dès qu'on a du texte à traiter comme tel
dans les données du fichier, c'est faux.

Non, en pratique, il y a très peu d'ambiguité.



Faux.
Avatar
Nicolas George
JKB , dans le message , a
écrit :
Est-ce que tu sais ce que veut dire _la plupart du temps_ ?



Oui. Et c'est très différent de « dans le monde du calcul intensif en RPN ».
Avatar
Vivien MOREAU
On 2010-10-19, Michel Talon wrote:

Ca serait trop demander qu'un fichier de *configuration* soit en ASCII 7
bits pur et dur? Les diptères de votre salle de sciences doivent avoir
particulièrement mal au fondement.



En plus d'interdire plus de dix connexions simultanées sur Internet, tu
souhaiterais supprimer les accents et autres caractères non-ASCII dans
toutes les langues ?

Programme formidable. :-)

--
Vivien MOREAU
Avatar
JKB
Le 19 Oct 2010 10:30:50 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
Soit tu as des caractères qui te permettent de discriminer, soit le
problème ne se pose pas.



Totalement faux. Je reprends l'exemple d'ISO-8859-1 vs. ISO-8859-15 : l'un a
1/2 là où l'autre a oe, qui sont des caractères qui ont des fonctions
totalement différentes, et que n'importe quel processus vaguement
linguistique (découpage de lignes en paragraphes, typiquement) doit traiter
différemment.

Évidemment, si ton petit monde se limite à distinguer EBCDIC d'ASCII et
d'ignorer les commentaires, c'est plus facile.



Je l'attendais celle-ci. C'est fou comme tu aimes donner les bâtons
pour te faire battre ! Ce problème n'en est généralement pas un parce
que tu ne peux pas prétendre avoir un 1/2 dans un nom ou une phrase
normale. Par ailleurs, si tu es en ISO8859-1 ou 15, il y a des
informations autour de ce caractère. C'est pourquoi je te prie
d'aller voir ce qu'est un récepteur optimal et une métrique.

Pour faire simple, le récepteur optimal te calcule une probabilité
que le fichier soit dans tel ou tel encodage. À toi de prendre
l'encodage de probabilité maximale et de vérifier qu'en l'utilisant,
il n'y a aucune erreur résiduelle. Maintenant, tu trouveras toujours
des exemples bricolés pour que ça merdoie, mais sur un fichier
normal, tu n'auras vraiment pas de chance pour que ça arrive. Même
si tu prends un mot comme 'oeuf' et que d'un côté eu a 1/2uf et de
l'autre un truc avec une ligature oe, avec la bonne métrique, ton
outil doit te ressortir oeuf avec la ligature parce qu'il y a très
peu de chance que 1/2uf soit valide. Plus le texte est long et moins
ta métrique fera d'erreur.

Et des cas ambigus, en pratique, il y en a très peu.



Faux.



Calcule-moi la probabilité de fausse détection (mauvaise décision
sur l'encodage) sur un fichier en fonction de sa longueur.
Hypothèse, utilisation d'un lexique et des caractères français. Je
l'ai fait et c'est pourquoi je prétends qu'il y a très peu de cas
ambigus sauf à avoir des fichiers pathologiques et très courts.

En fait, en quinze ans d'utilisation de mes propres parsers, je n'en
ai encore jamais vu.



Peut-être sont-ils trop spécialisés pour que tu aies rencontré le problème.
Ça ne veut pas dire que le problème ne se pose pas.



Tu ne peux pas savoir ce que les utilisateurs collent comme
commentaires dans les fichiers de conf. Sauf qu'un fichier de conf,
c'est un truc qui doit rester lisible par un être humain. La
répartition des caractères n'est pas n'importe quoi.

Dans ce cas, je te déconseille fortement de te lancer dans
l'écriture d'un tel truc.



J'en ai déjà écrits, ils marchent très bien.

Ça y est, le revoilà. Je ne sais pas si tu arrives à imaginer
combien me faire traiter de médiocre par un type comme toi
m'indiffère.



Apprends à lire, ceux que j'ai traités de médiocres, ce sont tes
condisciples, pas toi.



Tu m'as déjà assez souvent traité d'imbécile ici, ce qui ne me fait
que sourire.

Et dans ce cas, elle est inutile.



Non, puisque la détection automatique de l'encodage n'est pas possible.



Si. Et les probabilités de se tromper se calculent même.

Et c'est bien notre cas. Si tu ne détectes pas l'encodage, tu
utilises l'information en tête du fichier. Si tu vas jusqu'à la
déclarer invalide, c'est que tu as détecté par une autre technique
cet encodage



Non, c'est faux. Exemple : si tu rencontres la séquence d'octets 0x74 0xE9
0x20 dans un fichier qui était censé être de l'UTF-8, tu peux affirmer avec
certitude que ce n'en est pas, mais tu ne peux pas en déduire plus.



Mais dans quelle langue faut-il le dire. Je me contrefiche de savoir
que la séquence est valable ou non. Le but est de calculer une
métrique sur l'_ensemble_ du fichier et de choisir après l'encodage
qui a le plus de chance d'être le bon avant de vérifier que tous les
caractères passent. La métrique d'ailleurs est assez proche d'une
métrique de Viterbi (donc avec une fenêtre glissante).

Tu te retrouves avec un fichier
de conf d'un bon millier de lignes avec dedans une information
'encodage=UTF-8' et un encodage réel qui n'a _rien_ à voir avec
l'UTF-8. Avec ta technique, tu as juste réussi à faire exploser la
lecture alors que ton fichier est cohérent à un autre encodage que
tu as _déjà_ décodé au moins partiellement puisque tu sais que ce n'est
pas de l'UTF-8.



Je ne vois pas le problème : la lecture échoue avec un message d'erreur
explicite, l'utilisateur vient réparer, et en profite pour vérifier qu'il
n'y a pas eu d'autres erreurs introduites au passage.



Si tu ne vois pas le problème, je ne puis rien pour toi.

Réfléchis un peu pour voir combien ton exemple tarte à la crème est
idiot dans ce contexte.



Le contexte, c'était contredire ton affirmation ultra-générique sur les
informations redondantes.



Mon affirmation n'est pas ultragénérique. Est-ce que tu peux au
moins reconnaître que tu as dit une grosse connerie ? Non, c'est
vrai, c'est impossible.

On s'en fout. Soit en en connaît assez pour le lire, soit on a une
ambiguïté



Dans ton petit monde peut-être. Dès qu'on a du texte à traiter comme tel
dans les données du fichier, c'est faux.



Non.

Non, en pratique, il y a très peu d'ambiguité.



Faux.



Calcule les probabilités de fausse détection en fonction de la
longueur du fichier analysé et donne-nous la ici pour un fichier de,
disons, 4 Ko (ce qui avec un peu de commentaires ne fait pas bien
lourd).

J'ai fait le calcul. Tant que tu ne l'as pas fait, je refuse de
discuter plus avant avec toi.

<EOT>

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
JKB , dans le message , a
écrit :
Je l'attendais celle-ci. C'est fou comme tu aimes donner les bâtons
pour te faire battre ! Ce problème n'en est généralement pas un parce
que tu ne peux pas prétendre avoir un 1/2 dans un nom ou une phrase
normale.



Ah, tu n'as jamais vu quelqu'un écrire « 1/2 heure », par exemple ?

Pour faire simple, le récepteur optimal te calcule une probabilité
que le fichier soit dans tel ou tel encodage.



En d'autres termes, tu prônes un code complexe, qui nécessite des données
volumineuses, et qui donne un résultat juste de manière seulement probable,
tout ça pour éviter de lire une déclaration d'encodage.

Plus le texte est long et moins
ta métrique fera d'erreur.



Et donc sur un texte court, ce qui est le cas typique d'un fichier de
configuration, elle risque d'en faire facilement.

Tiens, un exemple : il existe des encodages qui ne diffèrent entre eux que
par un symbole monétaire à la place de l'autre. Ta métrique, elle est
capable de deviner, d'après le contexte, si on parle de dollars de Hong-Kong
ou de yuans ?

Mais dans quelle langue faut-il le dire. Je me contrefiche de savoir
que la séquence est valable ou non.



Ah, bon ? On se demande bien de quoi tu parles, alors.

Mon affirmation n'est pas ultragénérique.



Si. Relis-toi.
Avatar
JKB
Le 19 Oct 2010 11:41:10 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
Je l'attendais celle-ci. C'est fou comme tu aimes donner les bâtons
pour te faire battre ! Ce problème n'en est généralement pas un parce
que tu ne peux pas prétendre avoir un 1/2 dans un nom ou une phrase
normale.



Ah, tu n'as jamais vu quelqu'un écrire « 1/2 heure », par exemple ?



Si, "1/2 heure", très rarement "1/2heure". Et il y a un contexte à
ne pas oublier. C'est fou comme tu oublies vite ce mot. Tu dois
avoir un problème avec le contexte des choses...

Pour faire simple, le récepteur optimal te calcule une probabilité
que le fichier soit dans tel ou tel encodage.



En d'autres termes, tu prônes un code complexe, qui nécessite des données
volumineuses, et qui donne un résultat juste de manière seulement probable,
tout ça pour éviter de lire une déclaration d'encodage.



Non, je te demande de calculer cette probabilité. Pour ta gouverne,
une simple adresse rend cette probabilité epsilonesque.

Plus le texte est long et moins
ta métrique fera d'erreur.



Et donc sur un texte court, ce qui est le cas typique d'un fichier de
configuration, elle risque d'en faire facilement.



Non. Calcule cette probabilité plutôt que de rester bêtement sur tes
certitudes.

Tiens, un exemple : il existe des encodages qui ne diffèrent entre eux que
par un symbole monétaire à la place de l'autre. Ta métrique, elle est
capable de deviner, d'après le contexte, si on parle de dollars de Hong-Kong
ou de yuans ?



Tu veux montrer quoi ? Que tu as raison parce qu'il existe des
exemples pathologiques. Je n'ai jamais prétendu le contraire. La
probabilité en question est non nulle et tu trouveras toujours un
cas marginal où il y aura une erreur. Et alors ? Dans l'immense
majorité des cas, la détection est meilleure parce qu'elle
s'affranchit de ton information initiale qui peut directement
envoyer le parser en erreur (et que tu ne maîtrises pas cette
modification globale d'encodage). Et rien que ça, c'est mieux.

Mais dans quelle langue faut-il le dire. Je me contrefiche de savoir
que la séquence est valable ou non.



Ah, bon ? On se demande bien de quoi tu parles, alors.



De l'_ensemble_ des données et pas d'une séquence particulière tirée
de ces données, d'autant plus que la lecture de cette séquence
dépend de l'analyse des précédentes. Je te conseille vivement de
regarder un truc qui s'appelle l'algorithme de Viterbi. Le Viterbi
est un décodeur à sortie _souple_ et c'est justement ce qui est
intéressant ici, la difficulté étant d'associer un treillis à la
suite de caractères. En regardant localement une séquence, tu fais juste
abstraction du contexte, ce qui est le meilleur moyen pour se tirer
une balle dans le pied, mais je ne t'empêcherais surtout pas de le
faire.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
JKB , dans le message , a
écrit :
Si, "1/2 heure", très rarement "1/2heure".



Tu as bien de la chance d'avoir des correspondants aussi soigneux.

Non, je te demande de calculer cette probabilité. Pour ta gouverne,
une simple adresse rend cette probabilité epsilonesque.



Même epsilonesque, ça fait un code complexe qui risque de se tromper. Belle
recommandation.
Avatar
JKB
Le 19 Oct 2010 12:03:51 GMT,
Nicolas George <nicolas$ écrivait :
JKB , dans le message , a
écrit :
Si, "1/2 heure", très rarement "1/2heure".



Tu as bien de la chance d'avoir des correspondants aussi soigneux.



Les miens, ils utilisent du Vietnamien, de l'Arabe sous diverses
formes et des trucs encore plus tordus. Et il faut les voir écrire
un truc comme 'Ichtratzheim' ! Alors en terme de correspondants
soigneux, tu repasseras !

Non, je te demande de calculer cette probabilité. Pour ta gouverne,
une simple adresse rend cette probabilité epsilonesque.



Même epsilonesque, ça fait un code complexe qui risque de se tromper. Belle
recommandation.



Le code n'est _pas_ complexe et a été développé une fois pour toute.
Pour ton information, l'outil de détection fait 450 Ko de sources,
je viens de vérifier, et ce qui prend le plus de place là-dedans, ce
sont les tables des différents encodages. Même la métrique est
simpliste. Le code en lui-même ne prend que quelques dizaines de Ko
tous mouillés.

JKB

--
Si votre demande me parvient sur carte perforée, je titiouaillerai très
volontiers une réponse...
=> http://grincheux.de-charybde-en-scylla.fr
Avatar
Nicolas George
JKB , dans le message , a
écrit :
Pour ton information, l'outil de détection fait 450 Ko de sources,



... Mais à part ça, Madame la Marquise...