Claude SIMON a écrit 511 commentaires

  • # Modification site

    Posté par  (site web personnel) . En réponse au journal Atlas toolkit - sur la route du Libre. Évalué à 1.

    Le site à été un peu modifié, surtout la homepage, pour fournir un meilleur aperçu, dés la première page, de ce en quoi consiste le projet. Il peut être nécessaire de recharger la page (CTRL-F5) pour voir les modifications…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Si, si !

    Posté par  (site web personnel) . En réponse au journal Atlas toolkit - sur la route du Libre. Évalué à 2.

    Salut,

    Salut !

    Tu as toute mon oreille, mais pour commencer, il n'y a pas de code sur la doc (allé jusqu'à la section 4). Un exemple ? Comment ça s'articule ? Regarder un long main.js n'aide pas, et voir des fichiers .xls n'ai pas encourageant.

    Le code des exemples se trouvent dans les repository dont on trouve les liens sur la homepage. Cependant, ayant fait peu de Java/JavaScript/PHP, et c'était il y a longtemps, il y a probablement moyen de rendre le code des exemples plus compréhensible. C'est typiquement le genre de retour que j'aimerais avoir de la part de personnes développant dans l'un de ces langages.

    J'ai ajouté unes petite section sur la structure d'une application basée sur le toolkit Atlas. Et c'est des fichiers .xsl, pas .xls :-), mais j'y reviendrais plus tard.

    Ces infos importantes que je cherchais apparaissent tard (section 2): c'est pour écrire des SPA, il y a un binaire C++, on doit qd même avoir node.js (aïe, mais voyons), l'interface est en fait Électron (…mmh. Autant dire qu'on peut envoyer sur Électron facilement), il y a un client et un serveur.

    Je ne voulais pas être trop technique dés la première page ; ceci dit, j'y parle déjà de SPA. Quant au fait qu'il y ai un binaire C++ (en fait, il y en a même plusieurs), c'est juste pour justifier certains choix en terme de packaging, dont l'utilisation de Node.js. En outre, le serveur web est actuellement basé sur Node.js.

    Le problème, c'est que je ne connais actuellement pas suffisamment les outils entourant PHP ou Java pour, d'une part, packager le toolkit, surtout les binaires, juste en utilisant les outils propres à chaque langage, et, d'autre part, mettre en place un serveur web sans procédure d'installation compliquée. C'est pour cela que j'utilise Node.js pour le serveur web, et le package manager de Node.js, à savoir NPM, pour packager le toolkit. Mais, à terme, Node.js ne sera plus nécessaire pour les bindings Java et PHP (et les autres langages qui seront pris en charge à l'avenir). Évidemment, pour le binding Node.js, Node.js sera toujours requis, puisque c'est la finalité de ce binding

    Avant d'utiliser Electron, je m'appuyais sur CEF (et même avant cela, pour ce qui n'était encore que les prémisses de ce qui allait devenir le toolkit Atlas, XULRunner), mais Electron est beaucoup plus facile à déployer que CEF, et plus populaire. J'aurais aussi pu utiliser les composants dédiés à l'affichage de contenus web de bibliothèques comme GTK(+)/Qt/wxWidget/…, mais le déploiement aurait aussi posé problème. À terme, Electron sera mis en œuvre de façon à ce que le développeur ne remarquera même pas que c'est ça qui est utilisé. Déjà maintenant, le développeur n'interagit pas directement avec Electron

    Quant à l'architecture client/serveur, c'est ce qu'il y a de plus simple pour faire communiquer Electron ou le serveur web, qui est basé sur Node.js, avec un logiciel Java ou PHP. Bien qu'il soit intéressant de pouvoir garder cette configuration, la communication se fera peut-être, à terme, également via d'autres canaux…

    Je n'ai pas compris si on édite les fichiers xls. Perso, e n'ai jamais approché xlst, je t'invite à expliquer un peu plus dans ta doc.

    Comme dit, c'est XSL(T), pas XLS(T); rien à voir donc avec le format Microsoft :-).

    En fait, j'aurais pu utiliser un autre moteur de template, comme ceux utilisés dans certains framework JavaScript, mais l'avantage avec XSL, c'est que c'est implémenté dans la plupart (totalité?) des navigateurs web graphique (et dans Electron), donc la transformation est réalisée coté client, en n'ayant rien à installer, tout en pouvant être réalisée coté serveur si nécessaire.

    Le principe est de créer un arbre (ce qui est facilité avec l'objet Tree du toolkit Atlas) contenant les données à afficher, et de générer le HTML à afficher dans le navigateur/Electron en appliquant une feuille de style XSL sur l'arbre en question. La structure de l'arbre est totalement libre ; on organise les données absolument comme l'on veut. Si les données sont issues d'une base de données, la structure de l'arbre reflète généralement celle de la base de données. Maintenant, bien que XSL ne soit pas très populaire, la documentation sur le sujet ne manque pas, écrites par des personnes bien plus compétentes sur le sujet que moi. Cependant, s'il y a des points précis qui ne sont pas clairs dans les fichiers XSL fournis avec les exemples, je les expliciterais bien volontiers.

    Pas clair pour moi: est-ce que le site a été écrit avec ? Y a-t-il une sorte de routeur (pour avoir de belles urls) ? Dans la démo le filtre est "statique", on doit appuyer sur entrée, est-il possible d'en avoir un dynamique ? (type select2, ajax-based)

    Le site est basé sur un CMS qui se contente de servir des pages écrites en markdown.

    Il n'y a pas de routeur. D'après ce que j'en ai compris, cette notion de routeur est surtout associée à l'architecture MVC, mais comme je n'ai pas approfondi le sujet, ma compréhension de la chose est très parcellaire. En tout cas, je n'en ai pas vu l'utilité, donc cela n'est pas implémenté, tout en n'excluant pas la possibilité d'une implémentation future, le jour ou j'en aurais compris tout les tenants et aboutissants.

    Honnêtement, j'ai fait au plus simple, mais avoir un filtre dynamique devrait déjà être possible. Cependant, je réfléchis à une solution ou le filtre ne se déclencherait pas en cours de saisie, mais un court délai après que l'utilisateur ai saisi le dernier caractère.

    Dans la démo j'ai cliqué sur Create, j'aurais bien eu un bouton retour (pas d'intégration avec le navigateur ?), j'ai mis du tps à voir Cancel, tout en bas. Dans un TodoMVC généralement on peut marquer une tâche comme faite, pas vu ici.

    Je n'ai pas trop compris l'histoire de l'intégration au navigateur. Je suis d'accord que la démo n'est pas très ergonomique, mais mes compétences en HTML et CSS ne me permettent de faire guère mieux (contributeu(rs/ses) bienvenu(e)s…). Mais attention, la démo en ligne n'est pas celle du TodoMVC. À l'époque où j'ai commençais à écrire une démo, je ne connaissais pas le projet TodoMVC. J'en ai donc écris une en m'inspirant vaguement d'un truc que j'ai trouvé sur le web. Je n'ai écrit les versions de l'application TodoMVC que plus tard, pour que les gens puissent avoir un élément de comparaison (ce qui est le but du projet TodoMVC), mais je ne voyais pas l'intérêt de la mettre en ligne, vu qu'elle fait exactement ce que font les version présentes sur le site du projet TodoMVC et dont on peut facilement voir une démonstration en ligne…

    Je vais regarder et viens donner des nouvelles dans un moment :)

    Merci déjà de ce premier retour, et je suis bien sûr preneur de tout autre à venir…

    ps: ah mais oui, le "hide descriptions" est dynamique lui ! J'aurais bien vu un filtre dynamique, de suite ça claque plus.

    J'ai spécialement mis cette case à cocher pour que justement on comprenne que la page n'est pas régénérée à chaque action. C'était plus simple à mettre en œuvre que le filtre dynamique, mais je vais réfléchir à l'implémentation de ce dernier.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: "letter-spacing: normal;"

    Posté par  (site web personnel) . En réponse au message css. Évalué à 3.

    Dans ton message, la première ligne de ton code c'est :

    <ul>

    Il faut simplement la remplacer par :

    <ul style="letter-spacing: normal;">

    (l'attribut avant le > fermant, pas après…).

    C'est le plus simple. Dans ce cas de figure, passer par une classe n'apporte vraiment pas grand chose…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # "letter-spacing: normal;"

    Posté par  (site web personnel) . En réponse au message css. Évalué à 3.

    Le problème, c'est que le code ci-dessus est imbriqué dans un div sur lequel est appliquée une classe CSS nommée pure-g-r. Or, cette classe, définie dans https://cdnjs.cloudflare.com/ajax/libs/pure/0.3.0/pure-min.css, fixe letter-spacing à -.31em, d'où l'apparence du texte. Une solution serait de placer un attribut style="letter-spacing: normal;" directement dans le code ci-dessus, par exemple dans l'élément ul, ou alors de définir dans un fichier CSS une classe définissant cette même propriété et de l'appliquer à ce même élément ul. Je suis plutôt un béotien en matière de CSS, donc je ne garantis pas que ce soit la bonne façon de procéder pour résoudre ce genre de problème…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: <spoiler> Solution </spoiler>

    Posté par  (site web personnel) . En réponse au journal [Énigme] La mouche Zobzob. Évalué à 4.

    M'est avis que Zobzob a quand même de de bonnes chances de se réveiller à temps, parce que l'araignée, aussi maligne soit-elle, n'a absolument aucun repère pour pouvoir suivre précisément la bonne trajectoire. Sauf pour le dernier, elle doit parcourir chaque segment, soit en visant un point situé à une certaine distance de son coin le plus proche, soit en suivant un angle déterminé. Je n'ai pas fait le calcul, mais, l'un comme l'autre ont l'air d'avoir des valeurs difficiles à suivre au jugée. Pas sûr qu'elle parvienne à suivre la trajectoire en restant dans la marge d'erreur lui permettant d'arriver à temps. Ceci dit, si elle est équipée d'un télémètre laser, par exemple, c'est tout à fait jouable…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: C'est quoi encore cette histoire de contenu et de mise en forme ?

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à 2. Dernière modification le 26 février 2018 à 14:41.

    Bien sûr que si, sauf que ce savoir, je l'ai acquis et je m'en sers en-dehors du cadre de Marp (comme, par exemple, la rédaction de contenus pour ce site), alors que le savoir que j'aurais à acquérir pour me servir d'Impress ne me servira que pour Impress, ou, au mieux, pour d'autres logiciels du même type (PowerPoint ?)…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: better Marp

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à 2.

    En ce qui la coloration syntaxique, ça a fonctionné out of the box chez moi. Il devine même le langage la plupart du temps.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: C'est quoi encore cette histoire de contenu et de mise en forme ?

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à 0.

    En fait, Impress a une transition qui permet de faire apparaître les éléments d'une liste l'un après l'autre, mais j'ai dû chercher sur le Web, et même avec cette explication, en partie parce qu'elle portait sur la version anglaise de Impress alors que j'ai la version française, j'ai du m'y reprendre à plusieurs fois avant de réussir. Ça m'a presque pris plus de temps que de programmer mppq.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: C'est quoi encore cette histoire de contenu et de mise en forme ?

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à -2.

    Entre un logiciel que, je cite, «on a besoin d'apprendre à utiliser», et un logiciel qui m'a permis d'aboutir au résultat désiré sans avoir rien à apprendre (markdown, je connaissais déjà, et HTML/CSS, sans le pratiquer énormément, j'en connaissais suffisamment pour obtenir le résultat désiré), appelle ça un problème entre la chaise et le clavier si tu veux, mais moi je préfère le logiciel qui me permet d'obtenir le résultat désiré sans avoir rien apprendre.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Pull Request

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à 3.

    Je projette de créer une startup pour supplanter Google, donc je m'entraîne au traçage.

    Plus sérieusement, c'est juste parce que http://q37.info/s/w/marp, c'est plus facile à retenir que http://yhatt.github.io/marp/ (sachant que http://q37.info/ est un site dont je maîtrise le contenu).

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Implémenter les pauses dans Marp directement ?

    Posté par  (site web personnel) . En réponse au journal 'Markdown presentation processor' (ou de l'intérêt des fichiers texte).. Évalué à 1.

    J'étais d'abord parti sur un script bash, à coups de awk, sed et consorts, donc quelque chose qui se lance de la ligne de commande. N'ayant rien trouvé (je n'ai pas non plus cherché durant des plombes), quitte à devoir programmer quelque chose, autant le faire dans le langage avec lequel je suis le plus efficace, à savoir le C++. Personnellement, ça ne me dérange pas de lancer un utilitaire en ligne de commande, d'autant que, pour mppq, c'est à ne faire qu'une seule fois, juste avant de générer le PDF. Et j'ai juste mis mppq à disposition au cas où il y en aurait qui serait dans la même situation que moi.

    Ceci dit, c'est clair que ce serait plus élégant si on pouvait lancer la fonctionnalité directement à partir de Marp. Techniquement, ça ne serait pas trop difficile à mettre en place, et je m'en occuperais volontiers, mais cela compliquerait énormément l'installation du logiciel, et donc son packaging. C'est pour cela que je ne le propose même pas, ayant la quasi-certitude que le responsable de Marp refuserait, et à raison, d'autant plus qu'il ne doit pas être compliqué de développer l'équivalent de mppq en JavaScript, ou en un langage qui ne complexifierait pas l'installation du logiciel.

    Quant à réaliser ce développement moi-même, non merci. J'ai mppq qui me satisfait, donc cela ne m'apporterait rien et, ayant déjà eu à réaliser des développement dans divers langages, dont encore récemment Java, JavaScript et PHP, j'évite autant que faire se peut de renouveler l'expérience, hors C++ évidemment…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # VSCode -> Electron -> Node.js

    Posté par  (site web personnel) . En réponse au journal un éditeur de code portable par Microsoft?. Évalué à 10.

    Comme indiqué plus haut, c'est en effet une application Electron, qui est émanation de l'éditeur Atom (Electron s'appelait d'ailleurs Atom Shell avant d'être rebaptisé), de la même manière que XULRunner était une émanation de Firefox (oui, ça date…). VSCode, c'est comme si Microsoft avait développé Edge en s'appuyant sur XULRunner (abstraction faite de la licence…).

    En fait, Electron est une application Node.js ; vous trouverez le fameux répertoire node_modules, propre à npm, le gestionnaire de paquet de Node.js, dans le répertoire dans lequel est installé Electron. On peut d'ailleurs utiliser n'importe quel paquet npm avec Electron. Il suffit, après installation desdits paquets, de lancer un electron-rebuild fournit par le paquet du même nom.

    Après avoir utilisé Chromium Embedded Framework, j'utilise maintenant Electron pour développer les interfaces desktop de mes applications. Parce que Electron est plus complet et les application basées dessus beaucoup plus simples à installer, surtout sur macOS. C'est dû à la manière, identique pour toute les plateformes, de lancer une application Electron. Il suffit d'un fichier JavaScript et d'un package.json référençant ce fichier (avec quelques petites choses en plus). On lance alors Electron en passant en paramètre le répertoire contenant le package.json en question, ou alors on lance Electron sans paramètre, et on drag&drop sur la fenêtre qui s'ouvre le dossier correspondant au dit répertoire.

    Comme c'est du Node.js, c'est donc du JavaScript au départ, mais on peut parfaitement écrire tout le code en C++ (on ne se refait pas…) grâce au mécanisme des addons de Node.js. Du coup, je l'utilise autant pour les logiciels propriétaires de mes clients, que pour les Logiciels Libres que je développe. Et tout ça, dans un cas comme dans l'autre, dans le strict respect des licences, puisque Electron est diffusé sous licence MIT

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Avant, l'affaire des "annu"

    Posté par  (site web personnel) . En réponse au journal Free-electrons se fait attaquer en justice par Free, et change de nom. Évalué à 2. Dernière modification le 03 février 2018 à 18:13.

    Concernant Windows, wxWindows a été renommé en wxWidgets suite à une demande (légitime ?) de Microsoft

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Risque ?

    Posté par  (site web personnel) . En réponse au journal Noyau vulnérable ou pas ?. Évalué à 1.

    Ça dépend des bits considérés. Je me référais à ceux au plus proche du matériel, ceux que l'on peut déduire du signal électrique qui transite par le câble reliant le modem à l'appareil émetteur/récepteur des données. Le débit de ces bits devrait être pour le moins égal aux bauds, évidemment seulement lors des périodes durant lesquelles il y a émission/réception de données.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Risque ?

    Posté par  (site web personnel) . En réponse au journal Noyau vulnérable ou pas ?. Évalué à 3.

    Du temps où j'utilisais un modem analogique, je m'étais intéressé à ce rapport entre bauds et bit/s. Voilà ce que j'en ai retenu et qui, pour ce que j'en ai compris, ne semble par être contradictoire avec ce qu'on trouve sur Wikipedia.

    Le baud est l'unité de mesure du nombre de variations par seconde d'un signal. Si la variation consiste en deux valeurs différentes d'une seule grandeur physique, alors on a un nombre de bit/s transmis équivalent aux bauds. Si la grandeur physique variait sur plus de deux valeurs, alors chaque variation du signal permet d'encoder plus d'un seul bit, et le nombre de bit/s est alors supérieur aux bauds (mais au prix d'une plus grande sensibilité du signal aux parasites). On pouvait également faire varier plus d'une grandeur physique du signal à la fois, toujours dans le but d'encoder plus d'un bit par variation du signal.

    Le signal transmis par les modems analogiques (et ça vaut, je pense, aussi pour l'xDSL et la fibre) est caractérisé par trois grandeurs physiques : la fréquence, l'amplitude, et la phase. Rien qu'en faisant varier (moduler est le terme consacré, d'où la désignation de mo(dulateur)dem(odulateur), mais là, je ne vous apprend rien…) en même temps ces trois grandeurs sur seulement deux valeurs, on multipliait le débit du signal en bit/s par trois par rapport aux bauds (chaque grandeur physique pouvant encoder un bit). Débit que l'on pouvait encore accroître, comme écrit préalablement, en augmentant le nombre de valeurs autorisées par grandeur physique. Donc, normalement, le nombre de bits par secondes ne peut être inférieur aux bauds.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # v0.1.1

    Posté par  (site web personnel) . En réponse au journal 'UnJSq' v0.1.0. Évalué à 1.

    Pour ceux pour qui l'installation sous macOS échouait, j'ai publié une version 0.1.1 qui devrait corriger le problème…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Javascript, everyday ...

    Posté par  (site web personnel) . En réponse au journal 'UnJSq' v0.1.0. Évalué à 2.

    En fait, avec UnJSq, certaines opérations auraient plutôt un rendu coté client (même si rien ne s'oppose à ce que ce soit coté serveur), et, pour certaines autres, le rendu serait plutôt hybride. On ne va donc pas choisir UnJSq en fonction de ce critère. D'ailleurs, pour moi, cette histoire de rendu, c'est de la cuisine interne, dont le développeur devrait ne pas avoir à se préoccuper, sauf cas particuliers.

    Pour en revenir aux frameworks JavaScript, je ne les ai évidemment pas tous étudiés. Ils sont bien trop nombreux. Mais, de ce que j'en ai vu, ils ont tous leur logique propre, même s'ils ont certains concepts en commun, qu'il est nécessaire d'assimiler. En outre, comme c'est des frameworks, cela signifie qu'ils prennent le contrôle de l'application.

    UnJSq n'est pas un framework, c'est une bibliothèque, qui s'utilise comme n'importe quelle autre quelle autre bibliothèque Node.js et, du coup, le développeur garde le contrôle de l'application. Le principe de base de UnJSq, c'est que, pour chaque évènement pour lequel une action est déclarée, le développeur indique simplement les modifications à opérer sur le DOM. On voit que l'on reste là sur des concepts simples et intuitifs pour peu que l'on comprenne un tant soit peu le fonctionnement des navigateurs web…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Javascript, everyday ...

    Posté par  (site web personnel) . En réponse au journal 'UnJSq' v0.1.0. Évalué à 2.

    Moi-même, je suis développeur C++, donc, à priori, pas vraiment porté sur le web. Mais des clients m'ont demandé d'ajouter une interface web à certains logiciels que je leur avais développé. Comme je n'avais pas envie de me coltiner JavaScript ou consorts, ni les frameworks afférents, j'ai écrit un ensemble de bibliothèques pour pouvoir faire du développement web uniquement en C++, mais pas à la sauce CGI, comme cela existait déjà. UnJSq n'est qu'un wrapper faisant le lien entre Node.js et ces bibliothèques C++

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Javascript, everyday ...

    Posté par  (site web personnel) . En réponse au journal 'UnJSq' v0.1.0. Évalué à 1.

    C'est clair que UnJSq n'est pas fait pour le développeur frontend. Le gars qui utilise VueJS ou consort, il ne va pas utiliser UnJSq, et donc se mettre à node, pour faire du frontend s'il n'est pas déjà sous node par ailleurs.

    UnJSq est fait pour le développeur backend sous node qui veut faire du frontend tout en restant sous node. Le but de UnJSq est d'offrir à ce genre de développeur la possibilité de faire du frontend sans avoir à recourir à un framework JavaScript

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Javascript, everyday ...

    Posté par  (site web personnel) . En réponse au journal 'UnJSq' v0.1.0. Évalué à 3.

    Je vais m'appuyer sur un exemple concret, à savoir http://vuejs.org/v2/guide/#Handling-User-Input.

    Avec UnJSq, pour avoir l'équivalent, on va créer un fichier XSL, appelons-le Main.xsl, avec le contenu suivant :

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" 
      xmlns="http://www.w3.org/1999/xhtml" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output method="html" encoding="UTF-8"/>
      <xsl:template match="/">
        <div>
          <input type="textbox" id="Message" value="Hello UnJSq!"/>
          <button data-xdh-onevent="Reverse">Reverse Message</button>
        </div>
      </xsl:template>
    </xsl:stylesheet>

    On va ensuite créer un fichier Javascript, appelons-le main.js, avec le contenu suivant :

    const unjsq = require('unjsq');
    
    function newSession() {
        return new unjsq.DOM();
    }
    
    function acConnect(dom, id) {
        dom.setLayout("", new unjsq.Tree(), "Main.xsl");
    }
    
    function acReverse(dom, id) {
        dom.getContent("Message",
            (result) => dom.setContent("Message", result.split('').reverse().join(''))
        );
    }
    
    function main() {
        unjsq.register([
            ["Connect", acConnect], // À l'action 'Connect' on va affecter la fonction 'acConnect(...)'.
            ["Reverse", acReverse], // À l'action 'Reverse' on va affecter la fonction 'acReverse(...)'.
        ]);
    
        /* Ici, on lance le serveur, en déclarant 'NewSession'
        comme la fonction à lancer à chaque nouvelle session,
        'reverse', le répertoire dans lequel sont stockés
        tous les fichiers relatifs à cette 'application',
        et 'Connect', l'action à lancer suite à la connexion
        de l'utilisateur (qui va afficher la première page). */
        unjsq.launch(newSession, "reverse", "Connect");
    
    }
    
    main();

    On place ces deux fichiers dans un répertoire nommé reverse, on lance le tout avec node reverse/main.js, après avoir installé UnJSq, et on observe le résultat en ouvrant un navigateur web à l'adresse http://localhost:8080/.

    La grosse différence, c'est que le code Javascript qui va effectuer l'action associée au bouton est, non pas exécuté par le navigateur comme c'est le cas avec Vue.js, mais par node. Bon, pour un truc aussi simple, on aura aussi vite fait de mettre un onclick="..." sur le bouton (ça vaut aussi pour Vue.js), mais, l'avantage avec UnJSq, c'est que le développeur node n'est pas obligé de jongler entre node pour le backend, et un de ces framework Javascript pour le frontend : il peut tout faire avec node.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # Odroid-C2

    Posté par  (site web personnel) . En réponse au message Équivalent libre raspberry pi. Évalué à 1.

    À titre d'information, comme personne ne l'a cité, il y a aussi l'Odroid-C2.
    Je l'avais pris à l'époque parce qu'on pouvait y installer une Debian 64 bits, alors que, pour le Raspberry Pi 3, bien qu'il soit également 64 bits, seule une Debian 32 bits était disponible (ça a peut-être changé depuis).
    Le fichier /etc/apt/sources.list pointe uniquement sur ftp.debian.org, mais il y a des fichiers secondaires qui pointent sur http://oph.mdrjr.net/meveric.
    Je l'utilise en headless pour tester les logiciels que je développe sur de l'ARM 64 bits, et ça fonctionne vraiment bien (autant l'Odroid que mes logiciels).

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: O Fortuna !

    Posté par  (site web personnel) . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 1.

    Il n'existait pas beaucoup de parsers XML à l'époque. J'avais utilisé expat un temps, avant de l'abandonner pour je ne sais plus quelle raison.

    Ceci dit, d'avoir codé mon propre parser XML m'a simplifié le développement de mon préprocesseur XML, car j'ai pu facilement rajouter des fonctionnalités au parser . Si j'avais conservé expat comme parser, cela n'aurait pas été aussi simple…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • # O Fortuna !

    Posté par  (site web personnel) . En réponse au journal Tous les parsers JSON sont mauvais. Évalué à 5.

    En lisant ce journal, je me suis dit que j'ai bien de la chance.

    Il y a pas mal d'année de cela, j'ai codé, en C++, un parser que j'utilise encore intensivement. Bon, c'est un parser XML, pas JSON, mais la problématique est la même.

    J'ai d'abord mis en place un système de callbacks. Le parsage était assuré par une fonction à laquelle je passais en paramètre, en plus du flux contenant les données à parser, une classe abstraite, dont une des méthodes virtuelles était appelée par le parser à chaque fois qu'il rencontrait un token, la méthode appelée dépendant de la nature du token rencontré.

    Ce parser me servait essentiellement à désérialiser des structures de données, et, à l'usage, le système de callbacks ne s’avérait guère pratique. Il fallait en effet systématiquement mettre en place un automate pour garder trace du contexte pour pouvoir traiter correctement chaque token rencontré.

    J'ai alors modifié le parser de manière à ce qu'il me rende la main à chaque token rencontré, et je le relançais autant de fois que nécessaire jusqu'à ce que l'ensemble des données soient traitées. Du coup, plus besoin de callbacks. Son utilisation consistait, à chaque balise rencontrée, à lancer un fonction dédiée au traitement du contenu de cette balise, et qui retournait à la fonction appelante une fois ce contenu traité. Donc, plus besoin d'automate ; la fonction en cours d'exécution lors du traitement d'un token me renseignait sur le contexte.

    Quand j'ai lu ce journal, je me suis dit : "je dois avoir le même problème avec mon parser XML". Mais, après examen du code de mon parser et de la manière dont je l'utilisais, il s'est avéré que non. Pourtant, j'ai écrit ce parser de manière vraiment naïve, sans souci d'optimisation d'aucune sorte. Et je m'en sers notamment, en plus de la désérialisation, pour remplir ce que j'appelle une registry, grosso-modo un arbre auquel on peut affecter des attributs à chaque nœud, arbre qui, entre autres, me sert à stocker les paramètres de configuration de mes logiciels.

    Du coup, je ne vois pas trop comment les parser JSON puissent soit-disant être aussi mauvais, compte tenu que, d’après l'expérience que j'ai des parser, la manière dont le parsage est réalisé dépend de la structure des données représentées par le fichier JSON (ou XML) parsé !

    Ou alors, comme dit, j'ai simplement de la chance…

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Singulier, pluriel, faut savoir !

    Posté par  (site web personnel) . En réponse au journal [Jeu] Parser de l'écriture inclusive.. Évalué à 2.

    Ne serait-ce pas plutôt «the latter» (avec deux t) ?

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !

  • [^] # Re: Mais je t'en prie...

    Posté par  (site web personnel) . En réponse au journal Code natif et Node.js - parser et préprocesseur XML. Évalué à 3.

    Comme indiqué plus haut, je factorise mon code à outrance, ce qui fait qu'une grosse partie est commune à toutes les applications que je développe. Lors du développement de ce code, dont le cœur l'a été il y a plus de dix ans, j'avais à l'esprit les problématiques de sécurité, et j'ai fait mon maximum pour éviter les failles. Ce qui, je le concède volontiers, ne garantit en rien qu'il n'y en ai pas. Toujours est-il que ce code est déployé chez de nombreux clients, dans certains cas dans le cadre d'applications client/serveur accessibles au grand public et avec une fréquentation élevée.

    Jusqu'à présent, aucun client ne m'a remonté de problèmes de sécurité. Cela peut arriver demain, auquel cas, après correction de la faille, je développerais une batterie de tests pour tester la correction, et pour tenter de détecter d'autres failles similaires. Mais, à ce jour, je ne vais perdre de temps à développer des tests pour tenter de déceler des failles dont on n'a jamais détecté la moindre trace…

    Quand au code que je mets à disposition sous licence Libre, comme celui faisant l'objet de ce journal, j'attire l'attention sur la section 15 et la section 16 du fichier LICENCE fournit avec les sources. Partant de là, libre à l'utilisateur de, au choix,

    • auditer mon code (tâche ardue, mais pas impossible ; c'est de l'Open Source après tout),
    • le soumettre à une batterie de tests,
    • me demander de développer une batterie de tests.

    Pour la dernière option, cela sera bien entendu réalisé contre rémunération, sauf s'il parvient à me fournir un test case mettant en évidence une faille qui justifie le développement de cette batterie de tests.

    Encore une fois, même si moi-même je ne le fais pas, je conseille fortement tout un chacun de soumettre son code à un maximum de tests. Mais, concernant mon code, avec l'historique qu'il a, le gain que m'apporterait ces tests par rapport au temps que je passerais à les développer n'est pas rentable, à aucun point de vue, en particulier, mais pas seulement, du point de vue financier. D'autant plus que, et ton commentaire va également dans ce sens, aucune batterie de test ne peut garantir l'absence de failles.

    Pour résumer, compte tenu de l'historique de mon code, de la manière dont il se comporte chez moi (j'utilise quotidiennement plusieurs logiciels que j'ai développés et qui contiennent donc ce code) et chez mes clients, je considère qu'il n'est pas plus vulnérable que la majorité des codes réalisés avec un minimum de sérieux et, de ce fait, probablement soumis à une batterie de tests. Mais je suis tout à fait disposé à réviser mon jugement, pour peu que l'on me soumette un test case prouvant mon erreur, et non pas seulement des considérations théoriques.

    Quoi qu'il en soit, je te remercie pour tes remarques qui m'ont données l'occasion de m'expliquer davantage sur le sujet.

    Cyberdépendance, cyberharcèlement, pédocriminalité… : Zelbinium, pour que les smartphones soient la solution, pas le problème !