KrISS feed 7 - A simple and smart (or stupid) feed reader. By Tontof
  • Friday 26 May 2023 - 14:00
    from Tontof
    Je vous ai dit que j'avais exploré la programmation fonctionnelle avec KrISS aaaa : middleware et il y a quelques années j'ai voulu testé cette même approche pour l'utilisation de schémas json https://json-schema.org

    Le résultat final est plutôt chouette :

    tests suite: nb tests nb files
    draft3: 520/520 35/35
    draft4: 735/735 38/38
    draft6: 995/995 48/48
    draft7: 1286/1286 57/57
    draft2019-09: 1571/1651 59/68
    draft2020-12: 1579/1677 58/68
    draft-next: 1623/1724 58/68

    C'était il y a quelques temps et j'ai dû faire 2/3 modifications pour valider les mises à jours des tests fournis par https://github.com/json-schema-org/JSON-Schema-Test-Suite pour continuer à valider les premiers drafts comme à l'époque où j'avais codé ça.

    S'il n'y a qu'un seul fichier à regarder c'est la validation des URI/IRI à partir de la RFC
    https://github.com/tontof/kriss_json/blob/main/schema/core/inc/rfc.php

    Les validations proposées par PHP ne fonctionnaient pas pour tous les tests, j'ai donc dû lire un peu les RFC pour arriver à la validation de tous les tests. C'est à faire au moins une fois dans sa vie...

    Pour valider un schéma json, il suffit d'inclure le fichier "json.php" et d'appeler la fonction "json_schema"

    <?php 
    include_once(__DIR__ '/schema/json.php');

    $json 'https://json-schema.org/learn/examples/address.schema.json';
    $address file_get_contents($json);

    $data '
    {
      "locality":"locality",
      "region":"region"
    }
    '
    ;
    var_dump(json_schema(json_decode($address), json_decode($data)));

    $data '
    {
      "locality":"locality",
      "region":"region",
      "country-name":"country-name"
    }
    '
    ;
    var_dump(json_schema(json_decode($address), json_decode($data)));

    $data '
    {
      "locality":"locality",
      "region":"region",
      "country-name":"country-name",
      "post-office-box":"post-office-box"
    }
    '
    ;
    var_dump(json_schema(json_decode($address), json_decode($data)));

    $data '
    {
      "locality":"locality",
      "region":"region",
      "country-name":"country-name",
      "post-office-box":"post-office-box",
      "street-address":"street-address"
    }
    '
    ;
    var_dump(json_schema(json_decode($address), json_decode($data)));
     
    ?>

    Ce qui donne comme attendu :

    bool(false)
    bool(true)
    bool(false)
    bool(true)

    En pratique, je vous invite à utiliser une approche plus classique https://json-schema.org/implementations.html#validator-php mais KrISS json reste intéressant de par son approche fonctionnelle
  • Wednesday 10 April 2024 - 10:04
    from Tontof
    Avant dernier bout de code avant le 11e prévu mardi prochain \o/

    execCommand combiné à contenteditable est super pratique pour éditer une page html même s'il génère un code HTML un peu nul (par exemple les balises <i> ou <b> pour l'italique et le gras). Maintenant le problème ne se pose plus car l'usage de execCommand est devenu obsolète.

    À ma connaissance il n'y a aucune alternative à execCommand et s'il existe des éditeurs HTML sympathiques, j'aimais bien ContentTools qui semble abandonné, j'avais envie d'étudier comment fonctionnaient les sélections en javascript et j'ai donc commencé KrISS ecmd.

    C'est encore loin d'être complet, mais j'ai réussi à gérer plusieurs problèmes qui se posaient sur les sélections qui ne correspondaient pas toujours à ce que j'imaginais (quand on sélectionne du texte qui est dans une balise html, ça peut sélectionner le texte à l'intérieur dans les balises mais aussi le texte avec les balises) ainsi que sur la qualité du code HTML généré avec entre autres la fusion de même balises pour éviter la duplication de code (quand on veut mettre en gras du texte à côté de texte en gras, ça fusionne les 2 balises de gras).

    L'objectif final de ce code serait de l'utiliser dans un projet de création de pages HTML statiques dans l'esprit de mobirise mais en plus simple, un KrISS edit ? En attendant le code est disponible sur Github.
  • Tuesday 16 April 2024 - 16:04
    from Tontof
    11e et dernier bout de code de la série que j'avais promis pratiquement l'année passée pour les 11 ans de tontof.net. C'est promis je ne ferai plus de promesse que je ne pourrais pas tenir... Euh... Ça commence mal ? En tout cas, j'avoue que je n'avais pas imaginé que cela m'aurait pris autant de temps pour publier tous ces bouts de code.

    Pour terminer la série voici donc KrISS paol un petit outil qui permet d'exploiter le système PAO pour retenir des suites de chiffres. PAO c'est pour Personne, Action et Objet et PAOL c'est avec un Lieu en plus. Des explications sont données sur la page consacrée au projet, je ne vais donc pas m'étendre sur le projet mais plutôt sur les données qui avec votre aide pourrait grandement s'améliorer.

    Dans l'idée si vous devez retenir les décimales de π : 3.141592653, au lieu de les retenir directement vous apprenez la phrase : Dorothée loue une péniche à Limoux et avec la traduction du code chiffres - sons vous retrouvez les décimales ! Ça permet aussi de retenir des numéros de téléphone ou des codes pour certains accès (je m'en suis servi pour le code d'une imprimante que j'utilisais ponctuellement et après presque un an sans l'avoir utilisé, j'avais oublié le code mais pas la phrase qui m'a permis de le retrouver facilement !).

    Actuellement, c'est déjà fonctionnel mais j'aimerais pouvoir améliorer les données pour avoir encore plus de choix dans les phrases proposées. Ce qu'il faut savoir c'est que la partie la plus délicate est la traduction d'un mot en phonétique pour ensuite le traduire en chiffres. Pour limiter certaines erreurs j'ai supprimé les mots qui avaient 2 prononciations différentes dans le wiktionary. Il y a donc des mots qui sont supprimés, comme par exemple le prénom Jean qui correspond à 6 mais qui peut aussi se prononcer DJean pour le vêtement et qui dans ce cas correspondrait à 16. Pour "Jean/jean", on pourrait faire la différence s'il s'agit d'une personne ou d'un objet mais à partir des données que j'ai pu extraire je n'ai pas vraiment pu gérer ce genre d'exception et "Jean/jean" ne sont donc pas proposés.

    Pour la liste des personnes, j'ai utilisé les données de l'INSEE pour utiliser les prénoms français donnés entre 1900 et 2021 (les propositions sont ordonnées par fréquence d'apparition). Pour améliorer cette liste, une liste de personnalités/personnages seraient un plus, mais je n'ai pas trouvé de listes suffisamment fournie et intéressante pour pouvoir l'intégrer.
    Plus de détails : https://github.com/tontof/kriss_paol/blob/main/data/person/script.bash

    Pour les actions, j'ai trouvé une liste de verbes conjugués et je n'ai gardé que les temps présent et futur qui ont une prononciation différente. (Certains systèmes PAO utilisent seulement la traduction du verbe à l'infinitif, j'ai préféré prendre le son du verbe dans la phrase finale).
    Plus de détails : https://github.com/tontof/kriss_paol/blob/main/data/action/script.bash

    Pour les objets, c'est une donnée assez difficile à trouver et je suis donc parti d'une liste de noms assez générique. Le résultat n'est pas trop mal mais peut sûrement être amélioré.
    Plus de détails : https://github.com/tontof/kriss_paol/blob/main/data/object/script.bash

    Enfin pour les lieux, c'est encore sur l'INSEE que j'ai récupéré les communes de France. Mais là encore, il serait intéressant de pouvoir ajouter d'autres localités comme les villes assez connues d'autres pays (Londres, etc.), des noms de pays (Italie, etc.), des lieux précis (la tour Eiffel, etc.).
    Plus de détails : https://github.com/tontof/kriss_paol/blob/main/data/location/script.bash

    Tout est sur Github pour les infos un peu plus techniques mais si vous avez des pistes d'améliorations je suis preneur !