KrISS feed 7 - A simple and smart (or stupid) feed reader. By Tontof
  • Sunday 11 June 2023 - 13:06
    from Tontof
    Nous voilà à la moitié des présentations des codes (06/11 coïncidence je ne crois pas) et si j'ai réussi à garder à peu près le rythme depuis mon retour en ligne, je sens qu'avec l'été qui arrive, cela va être plus compliqué et je ne pense pas que je pourrais garder ce rythme. Il me reste 1 ou 2 projets à peu près présentables mais il y a encore un peu de boulot pour les derniers. Donc, pas d'inquiétude si je suis plus discret les prochaines semaines !

    Je vous ai déjà parlé avec KrISS tuto d'un petit cours sur la compression de données où je présente les algorithmes classiques de compression sans perte (Huffman, Huffman adaptatif, le codage arithmétique, rle, lz77, lz78, lzw).

    Pour la partie pratique, j'ai eu du mal à trouver des algorithmes qui fonctionnaient bien et qui permettaient d'illustrer ce que je montrais en cours. J'ai utilisé un temps https://sourceforge.net/projects/compressions/ mais la compilation n'était pas toujours simple et j'ai donc cherché des versions python que j'ai regroupé dans KrIIS lldc. C'est vraiment à but pédagogique et je ne vous invite pas à utiliser ce code pour compresser de vrais fichiers ! Personnellement je ne le ferai pas.

    J'ai uniformisé l'usage des algorithmes et ajouté un petit bout de code pour le codage binaire du résultat. Les ordinateurs stockent l'information avec des octets (8 bits) mais quand on a besoin de stocker un nombre de bits précis qui n'est pas multiple de 8 c'est un peu compliqué, il faut trouver une méthode pour arriver à relire le résultat. J'imagine qu'il y a une solution existante mais je n'ai pas vraiment cherché et je me suis dit qu'il suffisait d'utiliser les 3 derniers bits d'un octet pour savoir combien de bits sont à supprimer.

    "0": "00000100"
    "1": "10000100",
    "01": "01000011",
    "010": "01000010",
    "0110": "01100001",
    "01110": "01110000",
    "011110": "0111100000000111",
    "0111110": "0111110000000110",
    "01111110": "0111111000000101",
    "011111110": "0111111100000100"

    Il suffit de prendre les 3 derniers bits par exemple pour "0111110000000110" on a "110" ce qui donne 6 en décimal. On supprime donc les 3+6 derniers bits et on retrouve "0111110" qu'on voulait stocker à l'origine.
  • 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
  • Friday 19 May 2023 - 15:00
    from Tontof
    La semaine passée était bien chargée et je n'ai pas eu le temps de partager un peu de code. Cette semaine, c'est un début de présentation d'un projet encore en cours. À l'image de KrISS MVVM qui est une sorte de projet générique pour développer rapidement des petites applications en utlisant la programmation orientée objet, KrISS aaaa a le même but mais avec l'esprit programmation fonctionnelle. À l'heure où j'écris ces lignes KrISS aaaa n'est pas vraiment opérationnel mais j'ai déjà quelques briques que je vais présenter petit à petit après avoir mis en place quelques tests pour présenter comment tout cela fonctionne.

    La programmation fonctionnelle n'a plus vraiment le vent en poupe mais je pense qu'elle peut être intéressante car plus facile à comprendre que la programmation orientée objet et j'espère donc trouvé du temps pour concrétiser tout ça. J'ai même pensé mettre à jour KrISS feed en utilisant ce principe, un jour peut-être...

    Voici donc une première présentation de middleware qui correspond au principe de la couche d'oignon illustré dans cet article : http://esbenp.github.io/2015/07/31/implementing-before-after-middleware/ mais en programmation fonctionnelle :

    <?php include('src/helpers/middleware/middleware.php');

    function 
    before($object$next) {
        
    $object[] = 'before';
        return 
    $next($object);
    }

    function 
    after($object$next) {
        
    $object $next($object);
        
    $object[] = 'after';
        return 
    $object;
    }

    function 
    core($object) {
        
    $object[] = 'core';
        return 
    $object;
    }

    $middleware middleware(['after''before''after''before'], 'core');

    var_dump($middleware());
     
    ?>

    Le résultat est le suivant

    array(5) {
    [0] =>
    string(6) "before"
    [1] =>
    string(6) "before"
    [2] =>
    string(4) "core"
    [3] =>
    string(5) "after"
    [4] =>
    string(5) "after"
    }

    J'imagine utilisé ce principe de middleware pour gérer des plugins dans KrISS aaaa. Plus d'exemples dans le fichier de tests : https://github.com/KrISS/aaaa/blob/main/tests/MiddlewareTest.php
  • Friday 05 May 2023 - 16:00
    from Tontof
    Une petite mise à jour pour garder le rythme d'un message par semaine !

    Comme je suis un grand fan du duo OrgMode et RevealJs grâce à Org Reveal, j'ai voulu voir si je pouvais intégrer un cours de base de données.

    Mission réussie grâce à SQL.js. Comme en plus j'ai besoin d'avoir certaines commandes basées sur MySQL/MariaDB, j'ai apporté quelques modifications pour gérer par exemple les dates, AUTO_INCREMENT, etc : https://github.com/tontof/kriss_tuto/blob/master/common/lib/sqlite/sqlite.js

    Il n'a actuellement pas de contenu pour le cours mais des exemples qui montrent comment intégrer du SQL pour présenter un cours de base de données :
    - Exécuter du SQL directement : https://tontof.net/tuto/bdd/#/slide-requetes-simples
    - Charger un fichier SQLite : https://tontof.net/tuto/bdd/#/slide-fichier-sql
    - Afficher une table à partir d'un fichier : https://tontof.net/tuto/bdd/#/slide-sql-integre

    Pour le code source Org correspondant : https://github.com/tontof/kriss_tuto/blob/master/bdd/index.org
  • Sunday 12 February 2023 - 19:23
    from FDC 25
      ...
  • Monday 06 February 2023 - 15:32
    Le cinquième congrès international sur les aires marines protégées (IMPAC5) se tient du 3 au 9 février à Vancouver, au Canada. Cet événement rassemble les gestionnaires de la conservation marine, professionnels et décideurs du monde entier pour échanger des connaissances, des expériences et des bonnes pratiques afin de renforcer la conservation de la biodiversité marine et de protéger le patrimoine naturel et culturel de l’océan. Dans la suite de la COP15 biodiversité qui a abouti en décembre dernier à l’adoption d’un cadre mondial visant à protéger la biodiversité, ce congrès est l’occasion de définir une feuille de route pour atteindre les objectifs de conservation visant à protéger au moins 30 % des océans de la planète d’ici 2030.
  • Monday 06 February 2023 - 15:32
    Le cinquième congrès international sur les aires marines protégées (IMPAC5) se tient du 3 au 9 février à Vancouver, au Canada. Cet événement rassemble les gestionnaires de la conservation marine, professionnels et décideurs du monde entier pour échanger des connaissances, des expériences et des bonnes pratiques afin de renforcer la conservation de la biodiversité marine et de protéger le patrimoine naturel et culturel de l’océan. Dans la suite de la COP15 biodiversité qui a abouti en décembre dernier à l’adoption d’un cadre mondial visant à protéger la biodiversité, ce congrès est l’occasion de définir une feuille de route pour atteindre les objectifs de conservation visant à protéger au moins 30 % des océans de la planète d’ici 2030.
  • Monday 06 February 2023 - 15:12
    Lancé en mars 2022 par les ministères chargés de la Transition écologique, de l’Agriculture et de l’Éducation nationale, l’Agence du Service Civique et de nombreux opérateurs de l’État (ONF, OFB, agences de l’eau, conservatoire du littoral, parcs nationaux, VNF, ANCT et ANRU), le programme de service civique Jeunes et Nature permet aux jeunes de se mobiliser sur des missions en faveur de la biodiversité. Sa convention prévoit notamment l’accueil de 1000 jeunes en service civique pour des missions en faveur de la nature en 2022-2023. Le programme est désormais en place, et de nombreux jeunes sont d’ores et déjà engagés.
  • Monday 06 February 2023 - 15:12
    Lancé en mars 2022 par les ministères chargés de la Transition écologique, de l’Agriculture et de l’Éducation nationale, l’Agence du Service Civique et de nombreux opérateurs de l’État (ONF, OFB, agences de l’eau, conservatoire du littoral, parcs nationaux, VNF, ANCT et ANRU), le programme de service civique Jeunes et Nature permet aux jeunes de se mobiliser sur des missions en faveur de la biodiversité. Sa convention prévoit notamment l’accueil de 1000 jeunes en service civique pour des missions en faveur de la nature en 2022-2023. Le programme est désormais en place, et de nombreux jeunes sont d’ores et déjà engagés.
  • Thursday 02 February 2023 - 12:20
    L’édition 2023 de la Journée mondiale des zones humides a lieu ce jeudi 2 février, autour du thème « Il est urgent de restaurer les zones humides ! ». À cette occasion, Bérangère Couillard, secrétaire d’État chargée de l’Écologie, a notamment annoncé le lancement d'un nouveau plan national d'action, d'une durée de 10 ans, en faveur d’espèces présentes en zones humides : les poissons Harttiella et les amphibiens Anomaloglossus de Guyane.