Catégorie : Technique

  • Donnée acces­sible dans l’es­pace public

    Une donnée acces­sible dans l’es­pace public n’est pas une donnée libre d’uti­li­sa­tion

    Il y a le droit d’au­teur, le droit des bases de données, les règles d’uti­li­sa­tion des données person­nelles, le cas spéci­fique des infor­ma­tions appar­te­nant à l’État, et proba­ble­ment bien d’autres choses.

    La licéité de l’in­for­ma­tion ou de certains usages de l’in­for­ma­tion n’en­traine pas celle d’un autre usage de cette même infor­ma­tion

    C’est parti­cu­liè­re­ment vrai pour tout ce qui est données person­nelles, où chaque trai­te­ment et chaque fina­lité est indé­pen­dante des autres.

    C’est vrai aussi de manière géné­rale : Que la donnée soit utili­sable dans certains cas n’im­plique pas que tout ce que vous en ferez sera forcé­ment légi­time, ni mora­le­ment ni léga­le­ment.

  • Promise Maps

    J’aime beau­coup Simon Willi­son depuis des années. Il tient un carnet de notes en guise de blog, comme j’au­rais long­temps voulu avoir le courage de faire.

    Il relaie là un commen­taire ycom­bi­na­tor :

    When caching the result of an expen­sive compu­ta­tion or a network call, don’t actually cache the result, but cache the promise that awaits the result.

    This way, if a new, unca­ched key gets reques­ted twice in rapid succes­sion, ie faster than the compu­ta­tion takes, you avoid compu­ting/fetching the same value twice. […] In other words, the promise acts as a mutex around the compu­ta­tion, and the resul­ting code is unders­tan­dable even by people unfa­mi­liar with mutexes, locks and so on.

  • Le plus compliqué en dev, c’est de faire des choses simple

    Hier j’ai corrigé un test tech­nique d’un candi­dat ayant 55 ans. Un des plus beaux tests que j’ai pu voir.

    – BORING code, clair, concis, effi­cace, très compré­hen­sible

    – pas d’over archi, pas de démons­tra­tion tech­nique, straight to the point

    – tous les use case testés, le bon algo sélec­tionné et implé­menté

    Et … rien de plus à dire ! Et c’est LE point ! Le plus compliqué en dev, c’est de faire des choses simples.

    Là, c’est un gros ✅

    Sur un groupe de CTO, 17 juin 2022

    Je ne saurais confir­mer trop fort ce message. Comprendre les motifs habi­tuels d’ar­chi­tec­ture c’est impor­tant mais c’est un outil dans la trousse, pas l’objec­tif.

  • Dis tonton, c’est quoi le chif­fre­ment au repos, en tran­sit, et de bout en bout ?

    Ben oui, c’est bien joli de dire que les données sont sécu­ri­sées parce que chif­frées, mais ça veut tout et rien dire.

    Petite analo­gie avec des bijoux et un coffre-fort qu’on va consi­dé­rer invio­lable pour l’exer­cice.

    Chif­fre­ment au repos

    La banque vous offre un coffre-fort person­nel pour vos bijoux à la banque. Ils sont super sécu­ri­sés, personne ne peut forcer le coffre.

    Bon, par contre c’est le person­nel de la banque qui a la clef de tous les coffres, le votre aussi. Ce sont eux qui vont cher­cher vos bijoux, accé­der à la salle des coffres, ouvrir le coffre, et vous les rame­ner au guichet à chaque vous que vous voulez y accé­der.

    La banque sait exac­te­ment ce que vous stockez et comment vous y accé­der. En fait c’est même elle qui stocke et qui accède. Elle peut voler ou copier le contenu. Un sala­rié de la banque peut accé­der à ce même contenu ou le voler s’il arrive à mettre la main en interne sur la clef du coffre. Un voleur tiers pour­rait réus­sir à profi­ter d’une faille dans les procé­dures de la banque et faire un braquage qui lui permet d’ac­cé­der à la fois aux clefs et aux coffres, et voler ou copier vos bijoux. Enfin, peut-être que la banque ou un de ses pres­ta­taire seront négli­gents, et lais­se­ront traî­ner n’im­porte où la clef, ou un double de celle-ci, ou même vos bijoux avant de vous les remettre.

    Bref, c’est mieux que rien (il y a un coffre), mais tout repose dans la confiance en la banque, en sa sécu­rité, en ses employés.

    Chif­fre­ment en tran­sit

    Quand la banque vous donne accès aux bijoux, elle vous les livre chez vous. Pour ça elle utilise un petit coffre-fort dont vous avez échangé les clefs à l’avance. La banque en a une copie, la seconde est entre vos mains. Personne d’autre ne peut ouvrir le coffre en l’état actuel des tech­no­lo­gies pour peu que ni vous ni la banque ne laisse traî­ner les clefs.

    Vos bijoux restent acces­sibles à la banque. La banque sait ce qu’elle vous envoie. Elle peut les exami­ner à loisir, voire les voler ou les copier à ce moment là. Plusieurs employés de la banque peuvent faire de même, pour plein de raisons légi­times diffé­rentes. Certains pour­raient profi­ter de failles dans les proces­sus internes pour y accé­der de façon illé­gi­time. Un braqueur pour­rait toujours avoir accès à vos bijoux s’il braque la banque.

    Enfin, peut-être que la banque ou un de ses pres­ta­taire seront négli­gents, et lais­se­ront traî­ner n’im­porte où la clef, ou un double de celle-ci, ou même vos bijoux avant de vous les remettre. Peut-être que vous-même aurez laissé votre exem­plaire de votre clef dans votre appar­te­ment privé non sécu­risé et que quelqu’un pourra y accé­der.

    Bref, c’est indis­pen­sable (on ne va pas vous envoyer vos bijoux dans un carton stan­dard par La Poste) mais ça ne « sécu­rise » pas tota­le­ment vos bijoux pour autant.

    Chif­fre­ment au repos et en tran­sit

    Bien évidem­ment votre banque est sérieuse, elle s’oc­cupe donc du stockage et du tran­sit.

    Sauf qu’au final c’est quand même la banque qui va accé­der et ouvrir votre coffre à la banque, prendre les bijoux, puis les stocker dans le coffre qui sert à l’en­voi. Au passage elle les mani­pule direc­te­ment sans protec­tion, par exemple pour les nettoyer.

    La banque a toujours total accès à vos bijoux, pour savoir lesquels est-ce, les copier, les dégra­der ou les voler si elle n’est pas de bonne foi. Plusieurs employés de la banque ont accès direc­te­ment ou indi­rec­te­ment à ces bijoux, pour des raisons légi­times. Certains pour­raient être de mauvaise foi. D’autres employés pour­raient abuser certaines faiblesses dans les procé­dures de sécu­rité pour y accé­der mali­cieu­se­ment aussi. Un braqueur pour­rait accé­der à la banque et récu­pé­rer les bijoux ou les clefs, ou les deux à la fois. Des pres­ta­taires pour­raient avoir une copie des clefs, ou les lais­ser trai­ner. Des employés pour­raient être négli­gents.

    Bref, on protège avec des coffres mais le prin­ci­pal reste : Il faut faire confiance à la banque, à ses employés, à ses pres­ta­taires, à la robus­tesse des procé­dures de sécu­rité.

    Chif­fre­ment de bout en bout

    Vous avez un coffre, que vous avez acheté dans une boutique de confiance ou construit de vos propres mains. La boutique de confiance peut être votre banque mais pour­rait aussi être un tiers, ou une banque concur­rente.

    Seul vous en avez les clefs. Vous stockez vos bijoux dedans, donnez le coffre fermé au trans­por­teur. La banque stocke votre coffre tel quel, sans pouvoir l’ou­vrir, en inspec­ter le contenu, le copier ou le voler. Quand vous voulez accé­der à vos bijoux, on vous rend votre coffre et c’est à vous de l’ou­vrir. Personne n’a pu voir vos bijoux, ou même savoir si ce sont vrai­ment des bijoux.

    La banque n’a plus accès à rien. Vous n’avez pas besoin de lui faire confiance. Tout au plus elle peut perdre votre coffre mais personne ne pourra accé­der au contenu tant que vous n’en perdez pas les clefs (*). C’est par contre à vous de vous assu­rer de garder les clefs dans un endroit sûr, et d’ache­ter le coffre à un tiers de confiance qui n’en garde pas les doubles.

    Pour accé­der à vos bijoux il faudra cepen­dant vous braquer vous (ou que le vendeur du coffre ait été fautif au point de garder un double des clefs et qu’il se fasse braquer lui) et ensuite aller braquer la banque pour accé­der au coffre. C’est possible mais ça commence à être bien plus limité.

    Bien évidem­ment, vous êtes toujours sujet à un braquage chez vous, une fois le coffre ouvert, mais ça la banque n’y pourra jamais rien.

    (*) Point sensible : Si le coffre est invio­lable et que vous perdez vos clefs, plus personne ne pourra vous aider à récu­pé­rer vos bijoux. Ils seront perdus à jamais pour tout le monde. La sécu­rité complète c’est à double tran­chant. Il y a des solu­tion à ce problème, des bonnes et des mauvaises, mais c’est un sujet à part entière.

  • Today I lear­ned : font-variant-nume­ric

    Conseil CSS : utili­sez `font-variant-nume­ric: tabu­lar-nums;` pour aligner soigneu­se­ment les nombres dans un tableau, des comp­teurs de progres­sion, etc.

    https://twit­ter.com/javan/status/1486059026064584711
  • Avec des lettres de A à Z

    Le truc que j’ai du faire avec quasi­ment tous les langages mais pour lequel j’ai rare­ment trouvé une solu­tion satis­fai­sante : trans­for­mer un texte en reti­rant tous les accents et conver­tis­sant les lettres pour ne garder que les a à z.

    Tant que je me limite au français, italien et espa­gnol, j’ai une suite de recher­cher-rempla­cer qui me suffit :

    const ascii_replacements = [
      ['áàâä', 'a'],
      ['éèêë', 'e'],
      ['íìîï', 'i'],
      ['óòôö', 'o'],
      ['úùûü', 'u'],
      ['ñ', 'n'],
      ['æ', 'ae'],
      ['œ', 'oe'],
    ].map(([search, replace]) => [
      [new RegExp(search, 'gu'), replace],
      [new RegExp(search.toUpperCase(), 'gu'), replace.toUpperCase()],
    ]).flat()
    
    function ascii(text) {
      return ascii_replacements.reduce(
       (text, [search, replace]) => text.replace(search, replace),
       text
      )
    }

    Le gros problème c’est qu’il faut tout lister et que dès que je m’aven­ture hors du français, je risque d’en oublier.

    Via Le Hollan­dais Volant, une solu­tion qui utilise normalize :

    text.normalize("NFD").replace(/\p{Diacritic}/gu, "");

    C’est plus court, presque magique, mais en géné­ral j’ai aussi besoin de conver­tir æ et œ, qui seront oubliés ici. Il faut donc ajou­ter ces deux cas et leur version en majus­cule. Du coup c’est mieux mais pas encore ça.

    On peut se dire qu’en échange ça fonc­tionne pour toutes les langues, pas que le français, mais c’est passer à côté des spéci­fi­ci­tés locales. Si en français ö peut être dégradé en o, en alle­mand c’est l’équi­valent de oe.

    Reti­rer les signes diacri­tiques ne suffit pas pour obte­nir une version accep­table. La conver­sion dépend de la langue. L’al­le­mand est loin d’être la seule langue avec ce type de spéci­fi­ci­tés. Il faudra aussi ajou­ter les lettres propres à chaque langues, comme ß qui donne­rait ss.

    Par le passé j’ai utilisé iconv en PHP. Je me souviens que ce n’était pas parfait mais ça faisait ce type de job.

     iconv('UTF-8', 'ASCII//TRANSLIT', $text)

    Il faut juste penser à bien défi­nir la bonne locale avant. Ce n’est pas un défaut, c’est une fonc­tion­na­lité : Le résul­tat sera diffé­rent pour diffé­rentes locales.

  • GPS illus­tré

    Global Posi­tio­ning System is, without a doubt, one of the most useful inven­tions of the late 20th century. It made it signi­fi­cantly easier for ships, airplanes, cars, and hikers to figure out where they are with high degree of accu­racy.

    https://ciecha­now.ski/gps/

    Cet article est juste excep­tion­nel. On explique tout le GPS, depuis la trian­gu­la­tion dans un espace à trois dimen­sion jusqu’au déco­dage radio, en passant par les ques­tions de trajet élip­tique et dérives de temps dues à la rela­ti­vité.

    Il faut tout ça et ça reste tota­le­ment acces­sible, à base d’illus­tra­tions qui se mani­pulent dans la page. Incroyable.

    À lire jusqu’au bout (via Nim)

  • Vidéos de We Love Speed

    Les vidéos de We Love Speed 2021 sont sorties sur Youtube.

    J’ai la tris­tesse de ne pas avoir pu y assis­ter. Je suis preneur de vos recom­man­da­tions sur quelles présen­ta­tions regar­der.

  • Peri­text : A CRDT for Rich-Text Colla­bo­ra­tion

    Je me rappelle avoir fouillé Prose­mir­ror et les OT pour implé­men­ter l’édi­tion colla­bo­ra­tive de Cozy Notes.

    C’était une implé­men­ta­tion simpliste faite pour quelques auteurs simul­ta­nés sur un même docu­ment. Le vrai enjeu était de pouvoir gérer à la fois le colla­bo­ra­tif en ligne et la capa­cité de modi­fier un docu­ment hors ligne sur un temps long.

    C’est ce que tente Peri­text et c’est un problème bien plus complexe.

    In this article we present Peri­text, an algo­rithm for rich-text colla­bo­ra­tion that provides grea­ter flexi­bi­lity: it allows users to edit inde­pendent copies of a docu­ment, and it provides a mecha­nism for auto­ma­ti­cally merging those versions back toge­ther in a way that preserves the users’ intent as much as possible. Once the versions are merged, the algo­rithm guaran­tees that all users converge towards the same merged result.

    https://www.inkand­switch.com/peritext/

  • D’où vient cette &é’çà& de requête ?

    Astuce vue ce matin, je ne sais plus où :

    Ajou­ter un commen­taire dans chaque requête de base de données pour y mention­ner la loca­li­sa­tion de cette requête dans le code source (fichier, ligne).

    Objec­tif : Dans les jour­naux du SGBD, pouvoir tracer d’où vient la requête lente ou problé­ma­tique qu’on a en face de nous.

    Sur certains langages et cadres de travail ça peut même s’au­to­ma­ti­ser pour que ce soit fait auto­ma­tique­ment. En SQL c’est tout ce qui est après ‘-- ‘. En Mongo c’est dans $comment.