Journal Du xml dans vos outils CLI

Posté par  . Licence CC By‑SA.
15
7
nov.
2014

Le GCU-Squad viens de publier un petit billet parfait pour bien commencer un vendredi :)

On y découvre l'existence d'une bibliothèque nommée libxo dont l'objectif est de générer du contenu sous différents formats (texte, XML, JSON, et HTML). Cette bibliothèque est distribuée sous licence Juniper. C'est une licence libre utilisée par Juniper qui si j'ai bien compris est une entreprise qui bosse dans la virtualisation (mais je peux être totalement à coté de la plaque).

Mais pourquoi je vous parle de ça ?

Tout simplement parce que cette bibliothèque fait rentrer le mal dans vos outils unix préféré. Non, pas de systemd. Ici il s’agit de demander aux outils (binutils) classiques de générer du XML, du JSON ou du HTML. À vous les :

% wc --libxo html,pretty,warn /etc/motd
<div class="line">
    <div class="text"> </div>
    <div class="data" data-tag="lines">     25</div>
    <div class="text"> </div>
    <div class="data" data-tag="words">    165</div>
    <div class="text"> </div>
    <div class="data" data-tag="characters">   1140</div>
    <div class="text"> </div>
    <div class="data" data-tag="filename">/etc/motd</div>
</div>

Personnellement je trouve que c'est vraiment une bonne chose qui pourrais permettre d'utiliser facilement les sorties de ces outils hors du shell (on peut imaginer des scripts CGI qui deviennent triviaux par exemple).

Mais pour le moment c'est surtout FreeBSD qui bénéficie de se travail.

  • # Licence

    Posté par  (site web personnel) . Évalué à 7. Dernière modification le 07 novembre 2014 à 10:56.

    Cette bibliothèque est distribuée sous licence Juniper.

    Non.

    "Copyright (c) 2014, Juniper Networks"

    Ca veut dire que le code appartient à Juniper.
    Cette bibliothèque est distribuée sous une classique licence BSD-2 Clause.

    PS : http://www.downforeveryoneorjustme.com/www.gcu-squad.org
    "It's not just you! http://www.gcu-squad.org looks down from here."

    • [^] # Re: Licence

      Posté par  . Évalué à 3.

      Cette bibliothèque est distribuée sous une classique licence BSD-2 Clause.

      C'est chiant les licences qui ne disent pas leur nom. J'ai parcouru la licence vite fait et je ne m'intéresse pas assez au sujet pour reconnaitre la licence qui va bien à son contenu.

      PS : http://www.downforeveryoneorjustme.com/www.gcu-squad.org
      "It's not just you! http://www.gcu-squad.org looks down from here."

      chezmoiçamarche et chez moi downforeveryoneorjustme est d'accord avec moi.

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: Licence

        Posté par  (site web personnel) . Évalué à 2.

        C'est la licence BSD sous laquelle est distribué FreeBSD. (BSD 2 clauses).

        • [^] # Re: Licence

          Posté par  . Évalué à 4.

          Je sais ce que je dis c'est que c'est dommage de devoir deviner à partir du texte que c'est une BSD 2 clause. Là où la licence GPL commence en indiquant son nom histoire de savoir rapidement de quoi on parle (et non ce n'est pas que les licences à rallonges qui font ça).

          Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

          • [^] # Re: Licence

            Posté par  (site web personnel) . Évalué à 2.

            Je sais ce que je dis c'est que c'est dommage de devoir deviner à partir du texte que c'est une BSD 2 clause.

            Ah oui, pardon j'ai survolé le fil un peu trop rapidement. C'est vrai qu'afficher clairement le nom de la licence serait plus pratique!

    • [^] # Re: Licence

      Posté par  . Évalué à 7. Dernière modification le 07 novembre 2014 à 14:18.

      www.gcu-squad.org n'est pas down. Mais j'ai déjà entendu des gens s'en plaindre.

      Je dirais que ça vient de :

      $ host www.gcu-squad.org
      www.gcu-squad.org is an alias for zonex.gcu-squad.org.
      zonex.gcu-squad.org has address 194.213.125.0
      

      Et que certains FAI n'ont pas compris que des adresses IP qui se terminent par .0, ce n'était pas forcément un réseau…

      • [^] # Re: Licence

        Posté par  . Évalué à 4.

        Bordel !
        Je comprenais pas pourquoi le gcu squad ne marchait pas chez moi mais marchait partout ailleurs !

        Conclusion, Orange sont vraiment des merdes.

        (Disclaimer : j'ai pas choisi Orange, coloc, fibre, toussa)

      • [^] # Re: Licence

        Posté par  . Évalué à 2.

        des adresses IP qui se terminent par .0, ce n'était pas forcément un réseau…

        C'est pas contraire aux RFC ?

        • [^] # Re: Licence

          Posté par  . Évalué à 0.

          Nope, cela dépend du masque du réseau.
          La règle est :
          IP réseau & masque du réseau doit être égal à l'IP réseau

          • [^] # Re: Licence

            Posté par  . Évalué à 1.

            Ya pas une exception pour les /31 ?

        • [^] # Re: Licence

          Posté par  . Évalué à 5.

          C'est pas contraire aux RFC ?

          Il n'est pas possible d'avoir la partie locale de l'adresse avec uniquement des 1 (ça c'est certain, c'est l'adresse de diffusion) ou des 0 (je ne suis pas 100% certain). Donc cela dépend du masque de sous-réseau.

          194.213.125.0/23 est valide (la partie locale est 1 0000 0000 en binaire)
          194.213.125.0/24 n'est pas une adresse d'hôte valide (la partie locale est 0000 0000 en binaire)
          194.213.125.0/25 n'est pas valide (la partie locale est 000 0000 en binaire)

          Dans tous les cas, une adresse qui se termine par un octet à zéro est forcément valide depuis/vers l'extérieur puisque le masque de sous-réseau n'a qu'une définition locale. En gros le PC de la famille Michu ne sait pas si le masque du sous-réseau sur lequel est le serveur de gcu-squad est de 24 bits ou pas. Et Orange non plus (sauf si c'est hébergé chez eux, mais dans ce cas ils fournissent l'adresse).

          La seule exception à laquelle je pense est le cas ou le routeur entre la salle des machines et internet constate que l'adresse contient uniquement des 0 par rapport au masque qu'il connaît (et donc en interne, quel que soit la segmentation réseau, ce sera uniquement des 0 aussi).

        • [^] # Re: Licence

          Posté par  . Évalué à 1.

          C'est pas contraire aux RFC ?

          Je veux pas trop m'aventurer mais il me semble que non.
          Quoi qu'il en soit, une addresse qui ce termine par 255, n'est pas forcement une addresse de broadcast, de même que par zero ce n'est pas forcement une adresse rezo.
          J'ai plus d'exemple en tête, suffie d'étudier l'adressage ipv4 pour l'apprendre.

          Allez tous vous faire spéculer.

          • [^] # Re: Licence

            Posté par  . Évalué à 3.

            Quoi qu'il en soit, une addresse qui ce termine par 255, n'est pas forcement une addresse de broadcast, de même que par zero ce n'est pas forcement une adresse rezo.
            J'ai plus d'exemple en tête, suffie d'étudier l'adressage ipv4 pour l'apprendre.

            Soit 172.16.0.0/16, les adresses 172.16.0.255 et 172.16.1.0 sont valides.

            « Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche

          • [^] # Re: Licence

            Posté par  . Évalué à 2.

            Sauf erreur, pour le broadcast, tu gardes le réseau et tu complètes avec des 1 en binaire.
            Donc si ton réseau est 123.123.123.0/25, l'adresse de broadcast est 123.123.123.127.

            • [^] # Re: Licence

              Posté par  (site web personnel) . Évalué à 0.

              En très résumé :

              Partie réseau de l'adresse = @IP xor Mask
              Adresse réseau du subnet = Partie réseau de l'adresse complété avec des 0
              Adresse de broadcast du subnet = Partie réseau de l'adresse complété avec des 1

              Le tout en binaire évidement.
              (tips : ipcalc est votre ami)/

              Pour en revenir a GCU, ils ont fait exprès de choisir une @IP valide en .0 pour faire "chier" les implémentations pourries dont certaines box de couleur orangé…

  • # Le Genièvre, c'est surtout dans le Gin.

    Posté par  . Évalué à 10.

    C'est une licence libre utilisée par Juniper qui si j'ai bien compris est une entreprise qui bosse dans la virtualisation

    À moins qu’ils n’aient changé d’activité, non. C’est un fabricant d’équipement réseau (switchs, routeurs, etc). L’OS qui tourne dans le matos est basé sur FreeBSD.

    Depending on the time of day, the French go either way.

  • # Le libre se diffuse

    Posté par  . Évalué à 3. Dernière modification le 07 novembre 2014 à 11:17.

    Mais pour le moment c'est surtout FreeBSD qui bénéficie de se ce travail.

    (pour l’instant uniquement df(1), w(1) et wc(1))

    Mouais, 3 outils, wah! Ceci étant, je vois pas pourquoi les binutils améliorés ne finiront pas dans nos distributions?

    ⚓ À g'Auch TOUTE! http://afdgauch.online.fr

    • [^] # Re: Le libre se diffuse

      Posté par  . Évalué à 3. Dernière modification le 07 novembre 2014 à 11:25.

      D'où le "pour le moment". Et oui c'est assez récent, il y a 3 outils mais rien empêche grep et autre d'en bénéficier sous peu.

      (et merci pour la correction)

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Le libre se diffuse

      Posté par  (site web personnel) . Évalué à 3.

      je vois pas pourquoi les binutils améliorés ne finiront pas dans nos distributions?

      La plupart des distributions Linux utilisent certainement une version GNU des programmes classiques tels que wc alors que FreeBSD utilise souvent des implémentations spécifiques (à l'exception notoire de grep(1)).

  • # Juniper

    Posté par  . Évalué à 9.

    xkcd386

    Juniper est un concurrent de Cisco. Il fournissent du matériel et autres solutions réseau.

  • # binutils ?

    Posté par  (site web personnel) . Évalué à 6.

    Ici il s’agit de demander aux outils (binutils) classiques

    Je ne sais pas pour FreeBSD, mais sous GNU/Linux binutils fait référence aux outils qui permettent de manipuler les fichiers objets et les exécutables binaires (des programmes comme strip, as, readelf, ar, objdump, etc.). Les outils Unix « classiques » comme df, w ou wc n’en font pas partie.

    • [^] # Re: binutils ?

      Posté par  . Évalué à 6.

      En effet, je voulais dire coreutils.

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

  • # Titre

    Posté par  . Évalué à 6.

    Franchement, tu aurais pu parler de JSON à la place de XML, c’est quand même bien plus sexe :P

    • [^] # Re: Titre

      Posté par  . Évalué à 8.

      Si on était pas vendredi oui :)

      Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

    • [^] # Re: Titre

      Posté par  (site web personnel) . Évalué à 4.

      Franchement, tu aurais pu parler de JSON à la place de XML, c’est quand même bien plus sexe :P

      Bien plus sexe ? Je ne veux pas d'exhibitionnisme sur mon ordinateur !

      • [^] # Re: Titre

        Posté par  . Évalué à 9.

        L'exhibitionnisme n'existe que parce que les habits existent. C'est donc l'absence d'habit (au moins partielle) qui défini l'exhibitionnisme, pas le sexe.

        • [^] # Re: Titre

          Posté par  . Évalué à -3.

          Si je comprends bien, si je porte un pantalon et que je sors ma zigounette, je ne suis pas un exhibitionniste vu que j'ai un pantalon ?

          Bref, sinon quelqu'un peut nous expliquer pourquoi xml existe ? Ça, ça m'intéresserait…

          • [^] # Re: Titre

            Posté par  (site web personnel) . Évalué à 3.

            Le XML n'est pas seulement un format permettant la sérialisation mais aussi — et surtout? — un format permettant la validation des documents. Il y a trois stratégies pour la sérialisation de données, qu'on peut comparer ainsi:

            • Un format comme SGML ou XML permet en outre de valider le document lu par un “validateur XML ou SGML” i.e. un composant logiciel standard, en principe bien testé.

            • Un format comme JSON ou les ProperyList n'offre pas de méthode de validation standard: soit on valide à la main, soit on utilise un outil générique mais ce dernier cas de figure revient à utiliser une forme bridée et non normalisée du SGML.

            • Un format comme les S-expressions, n'offre pas de méthode de validation et on ne peut pas vraiment imaginer éditer des S-expressions à la main.

            • [^] # Re: Titre

              Posté par  . Évalué à 2.

              et on ne peut pas vraiment imaginer éditer des S-expressions à la main.

              Quoi ??

              • [^] # Re: Titre

                Posté par  (site web personnel) . Évalué à 2.

                Localiser et modifier la partie adéquate d'une S-expression dans un gros fichier est difficile sinon impossible. Pour continuer la comparaison, faire la même chose avec XML est plus facile car un document XML expose beaucoup plus de contexte que ne le fait une S-expression.

                • [^] # Re: Titre

                  Posté par  . Évalué à 2.

                  Plus de redondance ne fait pas plus de contexte… C'est même plus de bruit, les machines n'en font qu'une bouchée mais pour les humains c'est chiant.

                  Please do not feed the trolls

                  • [^] # Re: Titre

                    Posté par  (site web personnel) . Évalué à 2.

                    Plus de redondance ne fait pas plus de contexte…

                    Un document XML peut être comparé à une DTD ce qui permet à des éditeurs spécialisés de donner une information du type “vous êtes en train d'éditer la propriété auteur du document bidule dans la bibliothèque xy et vous pouvez ajouter à cet endroit un élément homepage”. C'est le contexte dont je parle et ce type d'information n'est pas disponible pour les formats qui ne précisent pas la structure du document.

                    • [^] # Re: Titre

                      Posté par  . Évalué à 1.

                      Un document XML peut être comparé à une DTD

                      Malheureusement, pas toujours… Le premier document avec lequel j'ai eu à travailler contenait des balises du type … Même si ça reste un fichier xml valide, il n'existe pourtant pas de DTD ou de Schema pour le valider.

                      • [^] # Re: Titre

                        Posté par  . Évalué à 1.

                        du type <c1/> <c2/> <c3/> …

                  • [^] # Re: Titre

                    Posté par  (site web personnel) . Évalué à 2. Dernière modification le 11 novembre 2014 à 21:58.

                    Pour ce qui est de la redondance (qui n'a rien à voir avec le contexte dont parle Michaël), un possible avantage qui me vient c'est que, s'il y a une erreur de syntaxe, elle soit plus facilement localisable : avec des S-expressions, vu qu'on ferme toujours avec le même symbole, s'il manque une parenthèse fermante, on peut plus difficilement deviner quelle parenthèse on a oubliée de fermer.

                • [^] # Re: Titre

                  Posté par  . Évalué à 3.

                  faire la même chose avec XML est plus facile car un document XML expose beaucoup plus de contexte que ne le fait une S-expression.

                  je dirai explose beaucoup plus le mémoire ;) Je bosse en ce moment à réduire le gouffre qu'xml présente pour la deserialisation / serialisation (déjà passer de DOM à SAX est indispensable), travailler sur les flux en GZip aide pas mal, mais ça reste un volume de donnée assez conséquent et une grosse partie de la place est prise par les balises…

                  Bref de mon point de vue l'XML est un mauvais choix, il multiplie facilement le volume de donnée généré par 2, alors pour wc, ça va (quoique là c'est plus qu'un *2) ; puis ça va être ls, puis grep, puis…

                  Il ne faut pas décorner les boeufs avant d'avoir semé le vent

                  • [^] # Re: Titre

                    Posté par  . Évalué à 3.

                    Je ne comprends pas très bien, il y a des cas où xml pose des problèmes de volumes évident, mais pour l'utilisation mémoire lors d'un parsing en SAX, je ne comprends pas très bien. L'intérêt de SAX c'est de travailler sur un flux de données et plus sur un contexte donc tu travaille systématiquement sur un volume de données réduit (et tu va toujours dans le même sens). Enfin l'API de parsing SAX est sans état et te fourni uniquement des évènements (ouverture de balise, fermeture de balise, etc). C'est donc à ton parseur de prendre en charge l'état et pour ça il n'a pas besoin de garder les balises en mémoire (il stocke la structure du XML dans une structure de son langage).

                    Du coup je ne vois pas en quoi les balises peuvent avoir un impact en consommation mémoire lors d'un parsing SAX. Je présume que je passe à coté de quelque chose ?

                    Bref de mon point de vue l'XML est un mauvais choix, il multiplie facilement le volume de donnée généré par 2, alors pour wc, ça va (quoique là c'est plus qu'un *2) ; puis ça va être ls, puis grep, puis…

                    Ce serait super si ça se rependait ! Ce qui est top c'est que tu as le choix (si tu ne sais pas que ça existe ça ne changera rien à ta vie) et que tu as plus que du XML tu as aussi du json et du HTML (comme dis dans la liste de diffusion "à quand du YAML ?").

                    Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

                    • [^] # Re: Titre

                      Posté par  . Évalué à 2.

                      ça ça passe très bien dans le cas d'appli simple; chez nous on a

                      (Client => requête serveur d'application => requête serveur métier => modèle de calcul => serveur métier => serveur d'application => client).

                      Le tout étant en réseau sur un cluster; le problème étant qu'avec les mécanisme qu'on a à notre disposition on a pas le flux modèle de calcul => client; donc fatalement on a, à un moment où à un autre, la totalité du flux en mémoire, même GZippé on se chope des truc > 720Mo, pour juste un processus de calcul, sachant qu'on a plusieurs utilisateurs sur le cluster.

                      Ajoutes à cela que les calculs n'étant pas instantanés, on a un système de cache coté serveur d'application.

                      Le problème est que quand ils ont pensé le truc ils ont mal anticipé l'augmentation du volume de données. Le passage à Sax fut indispensable car DOM nous pétait la ram, mais il est, pour le moment, inconcevable d'ouvrir les modèles de calculs directement aux client.

                      De plus certaines constructions nécessitent d'avoir la totalité des données XML pour être finalisée dans leur ensemble…

                      Il ne faut pas décorner les boeufs avant d'avoir semé le vent

          • [^] # Re: Titre

            Posté par  (site web personnel, Mastodon) . Évalué à 5.

            Bref, sinon quelqu'un peut nous expliquer pourquoi xml existe ?

            Pour contre-balancer le poids de la violence.

  • # Juniper

    Posté par  (site web personnel) . Évalué à 2.

    Juniper est une marque célèbre de routeur/switchs/firewalls (un des concurrents les plus crédibles à Cisco). C'est une société qui utilise et contribue à l'opensource.
    Par exemple Junos, l'OS qui fait tourner la majorité de leur produit est basé sur FreeBSD.
    Juniper a pas mal contribué en retour.
    Cet outil est assez logique venant de juniper car tout la configuration/dialogue dans leurs OS se fait en XML (heureusement c'est masqué).

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.