• Non, vraiment, analyser du HTML avec des expressions rationnelles, c’est le mal absolu :

    html - RegEx match open tags except XHTML self-contained tags - Stack Overflow
    http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags#1732454
    You can’t parse [X]HTML with regex. [...] Every time you attempt to parse HTML with regular expressions, the unholy child weeps the blood of virgins, and Russian hackers pwn your webapp. Parsing HTML with regex summons tainted souls into the realm of the living. HTML and regex go together like love, marriage, and ritual infanticide.

    Plus sérieusement, c’est une vraie plaie, que cette approche. Je veux dire : pour y arriver, il faut carrément y aller, d’autant que la plupart des implémentations d’expressions rationnelles ne gèrent pas les références arrières, ou encore les « lookbehind » de longueur indéfinie. Sans oublier que relire une telle expression rationnelle et tente de la comprendre, c’est frôler un AVC.

    Personnellement, je me suis rabattu sur XPath pour analyser le HTML, mais d’autres lui préfèrent le CSS. Les expressions XPath sont plus intéressantes d’un point de vue de leurs possibilités, mais réclament un apprentissage plus long. Le CSS est déjà connu des développeurs web, et largement popularisé, y compris en JavaScript avec des frameworks tels que jQuery. En outre, l’implémentation du CSS paraît plus optimisée dans les navigateurs :

    Why CSS Locators are the way to go vs XPath
    http://saucelabs.com/blog/index.php/2011/05/why-css-locators-are-the-way-to-go-vs-xpath
    The first batch of clicks uses CSS Locators and completes in under 30 seconds. The second batch, the XPath one, continues on for another eight minutes. Eight minutes!

    Bref, ce ne sont pas des remplaçants efficaces qui manquent aux expressions rationnelles.

    #informatique-développement-expressions_rationnelles #informatique-développement-css #informatique-développement-xpath #informatique-développement-html #informatique-humour

    • Intéressant. Tu as des indications sur la tolérance des différents systèmes au XHTML non conforme ? (Parce que le recours au regexp, souvent, c’est pour pas se faire planter la moulinette au milieu de 5000 imports parce qu’on tombe sur un seul caractère pas reconnu dans le charset, ou un ampersand pas échappé.)

    • En PHP, depuis peu, et avec un relatif succès, j’expérimente :

      http://www.php.net/manual/fr/domdocument.loadhtml.php

      et plus particulièrement ses méthodes :

      http://www.php.net/manual/fr/domdocument.loadhtml.php
      http://www.php.net/manual/fr/domdocument.loadhtmlfile.php

      qui, toutes deux, indiquent bien que :

      Contrairement au XML, le HTML n’a pas besoin d’être bien formé pour être chargé.

      Ensuite, soit le parcours se fait via les méthodes DOM associées — mais alors il faut vraiment que ce soit évident à parcourir, sinon, autant revenir aux expressions rationnelles —, soit via :

      http://www.php.net/manual/fr/class.domxpath.php

      Cette classe ne semble pas supporter exhaustivement toutes les possibilités du XPath en matière de syntaxe (j’ai rencontré des soucis avec les vérifications de valeurs de champs, genre « depuis ce tableau <table>, donne-moi la liste des titres de livres dont le prix est supérieur à 10 € »), mais je n’ai pas été spécialement gêné jusqu’ici par rapport à mes besoins.

      Pour ce qui est de l’élaboration des expressions XPath, j’utilise Firefox et Firebug auxquels j’ajoute les extensions FirePath et XPather. Au niveau de la syntaxe de base, cette introduction est tout à fait intéressante :

      http://www.w3schools.com/xpath

      On y trouve même quelques exemples plus avancés, permettant l’élaboration de recherches tout à fait sympathiques sans prise de tête. Et voici d’autres exemples de XPath représentatifs de quelques cas d’utilisation fréquents résolus facilement :

      http://www.exampledepot.com/egs/org.w3c.dom/xpath_GetElemByText.html

      Enfin, pour nettoyer du HTML, j’avais récemment regardé HTML Purifier :

      http://htmlpurifier.org

      sans toutefois être convaincu de son intérêt pour mes besoins. Mais ça peut éventuellement te dépanner si tu as à faire à du HTML.

    • Hello, pour nettoyer le xhtml, de manière légère, je conseille ma propre lib qui s’appelle justement garbage2xhtml : http://svn.kd2.org/svn/misc/libs/garbage2xhtml/lib.garbage2xhtml.php

      Ça n’est pas dis que ça fera des miracles sur du html 2.0 mais normalement ça devrait plutôt bien : virer toutes tentatives de XSS, ne pas donner du HTML pourri avec des tags non fermés, et filtrer et ne garder que les tags qu’on autorise.

      Vous y verrez que ça utilise des regexps et qu’on peut donc tout à fait bien et même très bien parser du xhtml avec des regexps, MAIS pas à coup de preg_match ou de preg_replace (en PHP), car ça ne donnera jamais un arbre DOM exhaustif, mais avec preg_split et un traitement récursif.

      Cette lib comprends aussi une fonctionnalité qui permet de transformer un texte brut (comme entré dans ce textarea) en quelque chose de fonctionnel et sémantique en xHTML, exemple :

      « Coucou

      Ça va
      Bien ? »

      (bon Seenthis fait aussi de la magie donc on vois pas qu’entre "Ça va" et bien il y a un saut de ligne simple, et entre "Coucou" et "Ça va" il est double)

      Deviendra :

      « <p>Coucou</p>
      <p>Ça va<br />
      Bien ?</p> »

      Ce qui est très utile quand on veux un traitement un peu plus évolué que nl2br. Enfin, cette lib est actuellement utilisée sur plusieurs sites afin de permettre aux utilisateurs d’entrer directement du xhtml dans les formulaires, sans se préoccuper d’avoir peur pour les injections ni qu’un tag mal fermé se retrouve à péter le layout du site.

      Une page de démo : http://dev.kd2.org/garbage2xhtml/demo.php


  • En effet, ça a de quoi faire peur à pas mal de monde :

    Why Microsoft has made developers horrified about coding for Windows 8
    http://news.hitb.org/content/why-microsoft-has-made-developers-horrified-about-coding-windows-8

    Key to the new Windows 8 look and feel, and instrumental to Microsoft’s bid to make Windows a viable tablet operating system, are new-style full-screen “immersive” applications. Windows 8 will include new APIs for developing these applications, and here is where the problem lies. [...] Microsoft Vice President Julie Larson-Green, in charge of the Windows Experience, briefly describes a new immersive application—a weather application—and says, specifically, that the application uses “our new developer platform, which is, uhh, it’s based on HTML5 and JavaScript.”

    Sous OS X et iOS, Apple a opté pour Objective C. Sous Android, Google a adapté Java à sa sauce. Et là, Microsoft s’oriente vers HTML5 et Javascript. Ça promet !

    Comme tout informaticien ou presque, je dois connaître une bonne vingtaine de langages informatiques. Pour autant, en aucun cas, je ne les maîtrise tous comme ma poche, loin s’en faut ! Qui peut se prétendre expert dans autant de langages informatiques ?

    Remarquez, ce n’est pas spécifique à l’informatique. Je parle aussi plus ou moins bien trois langues : français, anglais et polonais. Pour autant, bien que ce ne soit pas ma langue maternelle, c’est le français que je maîtrise le mieux. Pour autant, en plus d’y faire des fautes, mon accent laisse à désirer, et certaines de mes tournures sonnent faux, malgré plus de 25 ans de pratique quotidienne en situation réelle.

    Voyons les choses du bon côté : les développeurs des widgets Opera seront à l’aise avec Windows 8, d’autant qu’ils peuvent d’ores et déjà faire des applications multiplateformes. Qui plus est, ordinateurs de bureau, portables, netbooks, tablettes et smartphones sont capables de faire de l’HTML5 et du JavaScript, et depuis l’arrivée de Google Chrome, puis d’Internet Explorer 9, notamment, d’importants progrès ont été faits pour améliorer les performances ou l’autonomie.

    Bref, la tendance serait-elle de tendre vers les standards ? Encore que... j’ai un doute quant à leur application stricte, d’autant que les frameworks proposés risquent d’être peu compatibles les uns avec les autres, surtout si, à l’instar d’Apple, on devait de nouveau interdire l’usage de technologies middleware dont certaines assurent une certaine cohérence dans le développement d’applications multi-plateformes...

    Ceci dit, à force de changer de langage de programmation comme de chemise, on est en train de réduire drastiquement le niveau de compétence des développeurs...

    #informatique-développement-langage #informatique-os-windows_8


  • Discussion sur un cahier des charges de personnages virtuels datant d’octobre 2010 et montrant une nouvelle et sérieuse tendance dans la gestion de l’e-réputation autant passive qu’agressive, y compris dans un but de manipuler l’opinion publique à grande échelle :

    Persona Development - Echelon 2
    http://wiki.echelon2.org/wiki/Character_Development

    On October 15th, 2010, Aaron Barr emailed Robert Frisbie about considering Palantir for help “..on some of the integration for link analysis and data correlation. We will likely be able to get into some of the persona management logic..” Barr then attached a PDF titled “Social Media Persona Development”.

    #informatique-développement #informatique-persona_management #internet-eréputation #intelligence-espionnage #intelligence-propagande #informatique-automatisation #intelligence-fuite-hbgary


  • La programmation pour les nuls :

    SI( dateAchat + periodeGarantie + periodeAleatoire > dateAujourdHui ET modeleCourant < modeleActuel ) ALORS autoDestruction() ;

    Je soupçonne le contrôleur disque de mon MacMini de 16 mois d’agoniser sur la base des symptômes suivants : freezes intempestifs aléatoires, mais en rapport avec les accès disques (et non expliqués par les processus vus sur le « Moniteur d’activité »), accès disque aléatoirement anormalement longs, démarrage long (jusqu’à plusieurs dizaines de minutes pour relancer la machine), refus de lire divers DVD de réinstallation (lisibles sur une autre machine). Aucune erreur disque constatée via l’« Utilitaire disque ».

    #économie-obsolescence_programmée #informatique-développement #informatique-programmation #informatique-pseudo_code #informatique-algorithme #économie-conspiration #informatique-code_is_law #ironie #informatique-panne #informatique-apple-macmini

    • Oui, c’est clair, j’ai pas de bol, mon pitoyable cours de programmation était ironique. J’avoue avoir laissé ma frustration s’exprimer...

      Pour autant, à l’époque des modes pour l’informatique verte, Apple en est à contre-courant. Je fais notamment référence aux iPod, iPhone et autres iPad dont on ne peut, ou alors très difficilement, changer la batterie. C’est pourtant un composant qui s’use tout à fait normalement, dans des conditions d’utilisation normales, ce qui pousse les constructeurs, habituellement, à permettre son remplacement aisé.

      Par ailleurs, j’ai noté que lors de l’apparition d’une nouvelle version d’un programme informatique, les précédentes rencontrent des crash anormalement élevés. La cause semble être liée à la répartition des équipes de développement. Dès qu’un logiciel est livré et que les éventuels premiers bugs sont corrigés (il n’existe pour ainsi dire pas de logiciels exempts de bugs, il faut donc admettre que cela soit devenu « loi » informatique), les équipes sont basculées sur la prochaine version du produit. Le potentiel commercial de la précédente version disparaissant avec l’annonce de la prochaine, toutes les équipes passent sur celle-ci, l’ancienne cumulant les bugs...

      Bref, je regrette que, de fait, les utilisateurs se voient imposée une informatique de plus en plus jetable. Avec le « cloud », on va jusqu’à déposséder les utilisateurs de leurs objets, voire même de leurs droits...