Catégorie : Technique

  • Date dans les API : Préci­ser l’heure et le déca­lage horaire

    Date dans les API : Préci­ser l’heure et le déca­lage horaire

    – Cette méthode donne la date et l’heure de publi­ca­tion
    – L’heure dans quel réfé­ren­tiel ? c’est l’heure UTC ?
    – Non, nous avons des conte­nus français, c’est l’heure française
    – OK, je suppose qu’on parle de la métro­pole et de l’heure de Paris donc. Comment gérez-vous les chan­ge­ments d’heure légale ? Si je prends comme réfé­rence 2h30 du matin le 26 octobre 2014, je risque d’opé­rer certains trai­te­ments deux fois, ou dans le désordre.
    – Pas de problème, nous livrons en réalité à des heures program­mées et il n’y a norma­le­ment pas de livrai­son entre 1h et 3h du matin, donc le cas n’ar­ri­vera pas.

    Je brode un peu mais la conver­sa­tion a déjà eu lieu, plus d’une fois dans ma vie profes­sion­nelle. Je passe sur ceux qui ne compre­naient pas qu’une date devait être soumise aux fuseaux horaires, parce que c’est en réalité toujours une heure (minuit précises) et que le 26 octobre n’est pas le 26 octobre partout en même temps.

    Règle simple :
    Toujours préci­ser l’heure et le fuseau horaire quand on donne une date dans un échange infor­ma­tique.

    On peut argu­men­ter que trans­mettre toutes les heures en UTC pour­rait suffire, et que le fuseau horaire est super­flu. En pratique ce serait oublier une autre règle essen­tielle : « tout ce qui peut être mal inter­prété le sera ». Un jour, quelqu’un pren­dra votre date et l’uti­li­sera comme une date locale et pas une date UTC. Promis, garanti. OK, ça ne sera pas de votre faute, mais si vous voulez que ça fonc­tionne et pas simple­ment renvoyer les respon­sa­bi­li­tés, il va falloir préci­ser.

    Seule solu­tion : Préci­ser le fuseau horaire ou le déca­lage horaire. J’irai même plus loin : Le préci­ser direc­te­ment dans la date elle-même, pour qu’il ne puisse pas être ignoré à la lecture et qu’il ne puisse pas être un simple para­mètre par défaut à l’en­voi qu’on reco­pie sans y penser. La conven­tion de base sur les échanges Inter­net c’est la section 5.6 de la RFC 3339.

    Exemples simples :
    2014–10–26T02:30:59+01:00 et 2014–10–26T01:30:59Z

    L’avan­tage de cette syntaxe est qu’il existe des solu­tions pour la lire dans tous les langages de program­ma­tion, et que toutes ou presque sauront gérer le déca­lage horaire correc­te­ment. Il faut être sacré­ment tordu pour tenter de l’ana­ly­ser soi-même et donc risquer d’igno­rer la partie liée au déca­lage horaire.

    Même à l’écri­ture, préci­ser expli­ci­te­ment le déca­lage horaire va gran­de­ment limi­ter les erreurs d’inat­ten­tion ou d’in­com­pré­hen­sion liées aux ques­tions de fuseaux horaires.

    De toutes façons il faut utili­ser UTC

    Rien ne vous impose pour autant d’ac­cep­ter des heures avec n’im­porte quel déca­lage horaire. L’idée est unique­ment d’avoir une syntaxe expli­cite sur le réfé­ren­tiel utilisé.

    Si vous souhai­tez impo­ser des heures UTC, faites-le. Tout ce que je vous demande c’est d’uti­li­ser une syntaxe expli­cite à ce niveau, et de reje­ter en entrée les dates qui ne seraient pas elles aussi expli­cite quant au déca­lage horaire.

    Photo d’en­tête sous licence CC BY-NC-SA par John Britt

  • Usure mentale de la non-qualité

    Usure mentale de la non-qualité

    Vous pouvez argu­men­ter à propos du retour sur inves­tis­se­ment de haus­ser un peu le niveau de qualité – je l’ai fait aussi – mais il faut avouer que sauf à connaitre le futur, ces chiffres auront la même fiabi­lité et la même préci­sion que l’ho­ro­scope de l’an­née dernière.

    Tout au plus peut-on tracer une ligne en dessous de laquelle le manque de qualité rend vrai­ment le travail diffi­cile, mais en réalité nous cher­chons tous à mettre la barre bien plus haut.

    Le coût de non-qualité est en fait bien plus basique. Il se cache dans la fatigue mentale, l’épui­se­ment, mais aussi la baisse d’en­vie, de moti­va­tion, de résis­tance à la frus­tra­tion ou de celle aux petits accrocs trop fréquents du quoti­diens…

    Le terme anglais est burn-out, et c’est bien plus une ques­tion de qualité et de bien-être que de temps de travail ou de pres­sion.

    C’est Nico­las qui le forma­lise le mieux :

    Ces petites erreurs aux grandes consé­quences font de plus en plus mal. Autant sur les personnes (le moral, l’es­time de soi, la frus­tra­tion) que sur le busi­ness (image, etc.). […] Je crois que ces galères de coûts de non-qualité et l’usure sur nos corps et nos esprits sont trop souvent sous-esti­mées.

    La ques­tion est : Où avez-vous envie de travailler ? Où vos colla­bo­ra­teurs ont-ils envie de travailler ? Combien de temps tien­dront-ils avant d’être usés et rési­gnés, sans moti­va­tion ni initia­tive ? Qui voulez-vous atti­rer ?

    Cet aspect est trop souvent oublié dans la logique produc­ti­viste du retour sur inves­tis­se­ment, pour­tant ce sont les ques­tions essen­tielles : À côté de l’im­por­tance du dyna­misme de l’équipe, tout gain de produc­ti­vité lié à une baisse des exigences revient à travailler à la bougie pour écono­mi­ser l’élec­tri­cité.

    Photo d’en­tête sous licence CC BY par Intan­gi­bleArts

  • Archi­ver le web

    Archi­ver le web

    J’adore le prin­cipe de la wayback machine de l’ini­tia­tive Inter­net Archive. Ils indexent le web et gardent une archive des versions rencon­trées. On peut revoir les conte­nus qui ont disparu du web, ou consul­ter des anciennes versions de conte­nus qui ont changé entre temps.

    Et si on réuti­li­sait l’ini­tia­tive à titre person­nel ? Pouvoir retrou­ver les conte­nus déjà visi­tés, même s’ils ont été reti­rés ou ont été amen­dés. Avec un peu de bidouille on pour­rait même recher­cher à travers nos archives.

    C’est ce que propose l’IIPC avec le projet open­way­back. Pour ceux qui ne veulent pas utili­ser pywb.

    Je pense de plus en plus à me consti­tuer mon archive : Au moins avec les pages que je mets en favori, celles que je lie à partir de mon blog, les liens que j’en­re­gistre dans Pocket, que je lis dans mon flux Twit­ter ou que j’y pose moi-même. Peut-être même que ça vaudrait le coup d’en­re­gis­trer tout ce qui passe dans mon histo­rique de navi­ga­tion.

    Pour l’ins­tant je n’ai jamais sauté le pas, mais est-ce si complexe ? pas certain. Il suffi­rait d’un peu de temps, d’un peu de code et de stockage en assez grande quan­tité. Rien d’in­fai­sable.

    Entre temps, d’autres se mettent en tête d’ar­chi­ver le web, tout le web. Rien que ça. L’In­ter­net Archive n’est qu’une compo­sante parmi d’autres reliées grâce à Memento. L’Archive Team fait un travail paral­lèle : Eux réus­sisent à archi­ver les conte­nus de quelques services en vue avant qu’ils ferment, les conte­nus des redi­rec­teurs d’URL, et même les conte­nus FTP.

    Le web gros­sit à une vitesse formi­dable mais les possi­bi­li­tés de stockage restent suffi­sam­ment impor­tantes pour qu’ar­chi­ver le web soit du domaine du possible.

    Photo d’en­tête sous licence CC BY-NC-ND par Pietro­mas­simo Pasqui

  • We’ve streng­the­ned our passs­word complexity requi­re­ments

    1. We’ve streng­the­ned our passs­word complexity requi­re­ments. We’ve noti­ced that the recur­ring pass­word expi­ra­tion often results in the use a poor or weak pass­words. The new pass­word requi­re­ments are:

    • Mini­mum length for 16 charac­ters
    • Mini­mum of 4 words when using a pass­phrase (a sequence of unre­la­ted words)
    • Maxi­mum length of 100 charac­ters
    • No pass­words that reuse the same words too many times, contain a birth­date suffix/prefix, etc.

    We stron­gly encou­rage the use of pass­phrases, instead of a tradi­tio­nal pass­word with multiple charac­ter classes. Example pass­phrases are displayed on the pass­word reset site.

    2. We’re remo­ving pass­word expi­ra­tion enti­rely. After chan­ging your LDAP pass­word one last time, it will no longer expire. The only reason you will need to change your change your LDAP pass­word in the future is if it has been acci­den­tally leaked, or if one of your compu­ters/mobile device were lost, stolen, or compro­mi­sed.

    Je ne saurais trop remer­cier Mozilla d’avoir sauté ce pas, quand bien même je ne suis pas concerné. Les poli­tiques de mots de passe n’ont géné­ra­le­ment ni queue ni tête, et l’obli­ga­tion de chan­ger régu­liè­re­ment de mot de passe est proba­ble­ment la superbe mauvaise idée du siècle en termes de sécu­rité.

    Je râle encore contre tous ces sites qui ont une procé­dure de réini­tia­li­sa­tion mais qui t’em­pêchent de saisir de nouveau un mot de passe que tu avais oublié préa­la­ble­ment.

    Juste un point pour Mozilla : Pour les appa­reils perdus ou volés, la solu­tion est plus la possi­bi­lité d’avoir des mots de passe unique dédiés. Le mot de passe géné­rique n’est utile que là où il est tapé régu­liè­re­ment.

    Partout où le mot de passe est à demeure (par exemple la confi­gu­ra­tion du client email), le système devrait permettre d’uti­li­ser un mot de passe unique, dédié. Si l’ap­pa­reil est compro­mis on ne change pas le mot de passe géné­rique, on se contente de « griller » le mot de passe dédié dans la liste des auto­ri­sa­tions.

    Google le fait très bien pour ceux qui ont activé l’au­then­ti­fi­ca­tion en deux étapes.

  • Tomber en marche

    Celle ci je ne peux me rete­nir de la copier car elle est magni­fique :

    $override = null;
    if ($notify_admin and $conf['browser_language'])
    {
      if (!get_browser_language($override['language']))
      {
        $override=null;
      }
    }

    À première vue, le code ne fait rien. À la seconde lecture non plus, je vous rassure.

    Après expli­ca­tion, la méthode get_browser_language utilise un passage par réfé­rence (oui, avec ce nom là…), c’est à dire que la variable qui est passée en argu­ment pourra voir sa valeur modi­fiée.

    Eureka! En sortie de code on pour­rait bien avoir une variable $override qui contient quelque chose. On a au passage fait une créa­tion de tableau impli­cite en utili­sant la syntaxe avec crochets sur une valeur nulle (conseil : ne jamais faire ça si vous souhai­tez rester lisible).

    La seconde affec­ta­tion $override=null sert si jamais get_browser_language a bien modi­fié $override['language'] mais a renvoyé une valeur évaluée à false.

    Mais pourquoi cette seconde affec­ta­tion à null ? Et bien il se trouve que la fonc­tion get_browser_language renvoie false si elle ne modi­fie pas la variable passée par réfé­rence. Dans ce cas le code d’ap­pel aurait quand même créé un tableau dans $override à cause de override['language'], il faut donc reve­nir en arrière et écra­ser ce tableau créé impli­ci­te­ment.

    À rete­nir :

    1. Ne jamais créer de tableau implic­te­ment avec l’opé­ra­teur crochet sur une valeur null.
    2. Ne jamais attendre un retour par réfé­rence sur une fonc­tion qui s’ap­pelle « get_* »
    3. Globa­le­ment, ne quasi­ment jamais utili­ser le passage par réfé­rence pour récu­pé­rer une simple valeur.

    Ici en plus vu qu’on utilise déjà l’éva­lua­tion à true ou false du retour de get_browser_language, autant lui faire retour­ner direc­te­ment la langue, ou null si aucune n’est trou­vée.

  • Dead­line

    Dead­line

    La plupart du temps la dead­line est une manif d’une fausse urgence créée par une absence de déci­sion
    Raphaël

    Je ne saurais mieux dire. Esti­mer puis mesu­rer le niveau d’ef­fort est impor­tant pour pilo­ter la déci­sion. Parfois la date de livrai­son est un élément néces­saire, mais le plus souvent il ne s’agit que d’un élément arti­fi­ciel qui se veut moti­vant et qui ne vient que d’une inca­pa­cité à pilo­ter l’ef­fort en continu, à s’adap­ter aux situa­tions qui se présentent.

    Qu’im­porte quelle était l’es­ti­ma­tion précé­dente, la date qu’on a pu maladroi­te­ment en déduire. L’im­por­tant est quelle est la déci­sion la plus perti­nente à prendre aujourd’­hui, en fonc­tion de la valeur produite, et du niveau d’ef­fort encore à four­nir pour ce qu’on envi­sage.

    Le reste est simple­ment hors sujet, y compris savoir si on est « en avance »,  « en retard » ou même « parfai­te­ment dans le plan­ning » par rapport à la date prévue en direc­tion. Le pilo­tage par la date est juste une inca­pa­cité à prendre ce recul et à s’adap­ter au présent plutôt qu’aux plans passés. Tout envi­sa­ger en un bloc et sous forme de retard ou d’avance est juste telle­ment plus rassu­rant, plus simple… Ça n’ap­porte malheu­reu­se­ment aucune valeur.

    Photo d’en­tête sous licence CC BY-NC-SA par João Almeida

  • Termi­nai­son d’ap­pel et débit asymé­trique

    Termi­nai­son d’ap­pel et débit asymé­trique

    Je ne sais pas où ça a commencé mais il y en a un qui mérite des baffes. Fiction.

    Hier le rapport de force a pris un tour­nant inat­tendu. Youtube a coupé l’ac­cès aux abon­nés SFR, ou plutôt a telle­ment ralenti les débits qu’il est impos­sible de regar­der une vidéo.

    Le distri­bu­teur de vidéo se plaint d’un nombre gran­dis­sant de requêtes venant de SFR, nombre qui dépas­se­rait le raison­nable. La tension est montée à un niveau insou­te­nable il y a plusieurs mois, date à laquelle les abon­nés fibre SFR ont pu télé­char­ger à 1 Gb/s.

    Décryp­tage : Quand vous regar­dez une vidéo sur Youtube, SFR demande la vidéo à Google et la trans­met direc­te­ment à l’abonné – actuel­le­ment sans rien payer pour l’ac­cès à la vidéo.

    Non seule­ment le nombre de requêtes augmente mais en plus avec la fibre ce sont des vidéos très haute qualité qui sont deman­dées, très goinfres en bande passante. Le cas des mobiles avec une connexion inter­mit­tente et de faible qualité pose aussi problème.

    Youtube rappelle qu’il gère un service gratuit, déjà défi­ci­taire, avec « un réseau que SFR conti­nue à surchar­ger sans y contri­buer finan­ciè­re­ment ».

    L’abon­ne­ment inter­net SFR clas­sique coûte 29,90 € par mois et monte jusqu’à 45 € par an. Aucun rever­se­ment n’est fait aux diffé­rents four­nis­seurs de services et conte­nus qui enri­chissent la plate­forme, lais­sant ces derniers finan­cer seuls rede­vables des coûts d’in­fra­struc­ture et de bande passante néces­saires.

    Rien que pour Youtube – prin­ci­pal appor­teur de contenu des FAI – on a estimé le coût de bande passante à 400 millions en 2010. Ce coût a augmenté expo­nen­tiel­le­ment depuis.

    Faut-il impo­ser aux FAI une contri­bu­tion aux gros four­nis­seurs de services pour payer la bande passante et les conte­nus ? Le modèle de la contri­bu­tion des chaînes de télé­vi­sion aux studios de cinéma a déjà été évoqué.

    Les FAI qui veulent faire payer les gros four­nis­seurs de contenu à cause du trafic injecté dans leur réseau se tirent une balle dans le pied. Ils oublient que le rapport de force n’est pas forcé­ment à leur avan­tage sur le long terme, et que la situa­tion peut tout à fait s’in­ver­ser à l’ave­nir.

    En fait ça commence déjà : Les ayants-droits cherchent déjà à impo­ser une contri­bu­tion obli­ga­toire aux FAI pour « parti­ci­per à la créa­tion des conte­nus qui enri­chissent leurs offres »

    Ne pas oublier que quand Youtube « injecte » du trafic dans le réseau du FAI, c’est en fait qu’il répond à une requête du réseau du FAI. S’il y en a un des deux de respon­sa­ble…

    Photo d’en­tête sous licence CC BY-NC-SA par Hendrik Terbeck

  • Hygiène de sécu­rité

    Hygiène de sécu­rité

    Aujourd’­hui on véri­fie la sécu­rité.

    Les services en ligne « sensibles »

    Même en ne gardant que le prin­ci­pal, il faut penser à :

    • votre boite email (qui sert à la récu­pé­ra­tion des mots de passe de tous les autres comptes),
    • votre service de nom de domaine,
    • celle de secours (qui sert à la récu­pé­ra­tion du mot de passe de la boite prin­ci­pale),
    • votre service de backup,
    • vos services de stockage ou synchro­ni­sa­tion en ligne,
    • votre héber­geur de serveur en ligne si vous en avez.

    [ ] La première étape c’est s’as­su­rer d’avoir des mots de passe « sûrs ». Ça veut dire suffi­sam­ment longs et complexes.

    Suivant les préfé­rences c’est au moins huit carac­tères aléa­toires entre chiffres lettres et symboles, au moins 12 carac­tères avec des lettres rela­ti­ve­ment aléa­toires, ou au moins 15 carac­tères mini­mum si vous avez des suites de mots communs.

    Le l34t sp33k, l’in­ver­sion des carac­tères, l’ajout d’une année, et globa­le­ment la plupart des varia­tions auxquelles vous pour­riez penser sont testables en moins de quelques minutes donc n’ajoutent pas de complexité signi­fi­ca­tive.

    [ ] Seconde étape, s’as­su­rer que ces mots de passe sont uniques et vrai­ment diffé­rents (pas de simples varia­tions du même).

    Au grand mini­mum, s’as­su­rer d’avoir un mot de passe pour les services très sensibles diffé­rent du mot de passe que vous tapez tous les jours pour les services moins impor­tants. Ce mot de passe sensible ne devra être tapé que dans des espaces correc­te­ment sécu­ri­sés.

    [ ] Quand vous le pouvez, acti­vez l’ »authen­ti­fi­ca­tion en deux étapes ». C’est possible au moins pour Google, Gandi, Drop­box, iCloud. C’est fran­che­ment peu gênant vu la sécu­rité que ça apporte, ne pas le faire est limite une faute.

    [ ] Les « ques­tions secrètes » pour récu­pé­rer des comptes dont vous avez oublié les mots de passe sont de vraies plaies pour la sécu­rité. En géné­ral il est très facile d’en trou­ver la réponse.

    À vous de voir si vous préfé­rez tricher et mettre de fausses réponses (au risque de ne pas vous en souve­nir) ou si vous avez une grosse faille à cet endroit là. C’est le moyen d’ac­cès de la plupart des usur­pa­tions courantes.

    L’ac­cès depuis vos postes

    Tablette, télé­phone (même les « pas smart »), micro-ordi­na­teur, NAS de la maison…

    [ ] Tous doivent avoir un mot de passe à l’al­lu­mage et à la sortie de veille. Tous, pas d’ex­cep­tion.

    Sur les smart­phones et tablettes vous avez parfois la possi­bi­lité de mettre un « schema ». Ça fonc­tionne assez bien et c’est plutôt simple à déver­rouiller. Si vous n’avez pas d’autre choix, utili­sez le code PIN.

    Pour les autres les mots de passe doivent respec­ter les mêmes règles que pour les services en ligne.

    [ ] Tous ceux qui le peuvent doivent avoir un disque chif­fré. Micro-ordi­na­teurs, tablettes et smart­phones le permettent quasi­ment tous.

    Le coût en perfor­mance ou en batte­rie est quasi­ment nul sur les proces­seurs des 5 dernières années qui ont des circuits dédiés pour ces calculs.

    Sans ça n’im­porte qui avec très peu de connais­sances infor­ma­tiques peut passer outre votre mot de passe.

    Parfois il existe une procé­dure de récu­pé­ra­tion si jamais vous oubliez vos mots de passe, de façon à déver­rouiller le disque. Sur Apple par exemple ça utilise le compte iCloud. Dans ces cas, le compte utilisé pour la procé­dure de récu­pé­ra­tion doit être consi­déré comme sensible avec les mêmes règles que plus haut.

    [ ] Les mises à jour sont confi­gu­rées pour être télé­char­gées auto­ma­tique­ment, et instal­lées dès qu’elles sont dispo­nibles.

    [ ] Si vous enre­gis­trez vos mots de passe dans votre navi­ga­teur pour ne pas les ressai­sir à chaque fois, ce dernier doit avoir un « mot de passe maître ».

    Si en plus ces données sont synchro­ni­sées en ligne, le mot de passe qui gère le compte de synchro­ni­sa­tion doit être consi­déré comme sensible avec les mêmes règles que plus haut.

    [ ] Vous avez une poli­tique de backup auto­ma­tisé et testé pour toutes vos données impor­tantes. Bien entendu le compte qui permet d’ac­cé­der aux données de backup est à consi­dé­rer comme sensible.

    La machine qui reçoit les backup doit avoir un disque chif­fré et si vous faites appel à un service tiers le chif­fre­ment des données doit se faire côté client pour que le pres­ta­taire ne puisse pas déco­der les données.


    Tout ça est un mini­mum, main­te­nant imagi­nez quelqu’un qui connait la réponse à la ques­tion secrète de votre opéra­teur télé­pho­nique. À partir de ça il peut réini­tia­li­ser le mot de passe pour accé­der à votre compte. Là il a une inter­face pour lire et écrire des SMS. Il demande alors la réini­tia­li­sa­tion du mot de passe de votre boite email prin­ci­pale, qui se fait via SMS. À partir de là il réini­tia­lise le mot de passe de votre service de stockage en ligne, de backup, et de votre banque. Le voilà avec de quoi récu­pé­rer vos photos, même si vous les avez effacé, et peut être même de quoi faire des vire­ments. Situa­tion fictive mais on a vu des attaques bien plus inven­tives.

    Si vous avez lu jusqu’au bout (sérieu­se­ment ?) je suis curieux de savoir quelle propor­tion de ces bonnes pratiques vous vali­dez, ou si vous respec­tez tout en détail pour l’in­té­gra­lité de vos maté­riels et comptes sensibles.

    Photo d’en­tête sous licence CC BY-NC-SA par Steve Crane

  • Justice folle sur le numé­rique

    Notre justice est folle. Bon, celle des US, mais ça aurait pu se passer ici.

    No-ip est un service qui permet à des inter­nautes de donner un nom public à leurs machines person­nelles pour pouvoir y accé­der faci­le­ment depuis Inter­net. On parle de millions d’uti­li­sa­teurs.

    Ce service a été anec­do­tique­ment utilisé par des logi­ciels malveillants pour infec­ter des machines sous Micro­soft Windows.

    Réac­tion : Micro­soft s’adresse à la justice pour faire cesser le problème (plus exac­te­ment ici : filtrer les accès malveillants et réus­sir à en tracer l’ori­gine). La justice lui délègue tota­le­ment la gestion des noms de domaine No-ip corres­pon­dants.

    Bien entendu Micro­soft n’a pas eu l’in­fra­struc­ture suffi­sante pour gérer le trafic et le service No-ip s’est partiel­le­ment écroulé, lais­sant les utili­sa­teurs dans le noir.

    À vrai dire tout se serait bien passé que le scan­dale serait quand même là. La justice vient de donner à Micro­soft, qui n’est pas ciblé par les attaques infor­ma­tiques mais unique­ment concerné indi­rec­te­ment parce que ça exploite des failles de son OS, l’ac­cès aux noms de domaine d’une société tierce à qui on ne reproche rien.

    Avec ça Micro­soft contrôle (et ici a fait s’écrou­ler) le busi­ness d’un tiers, peut en tracer le volume, les clients, les services utili­sés, etc. Sans compen­sa­tion aucune.

    Tout ça sans même avoir contac­ter No-ip pour tenter de résoudre le problème en colla­bo­ra­tion initia­le­ment.

    Vous avez un .com ? prenez peur.

     

  • Auto­pre­fixer

    Je note ici autant pour ceux qui ne connaissent pas que pour mon moi de plus tard : Auto­pre­fixer, qui prend une CSS clas­sique et qui ajoute les versions préfixées utiles pour les diffé­rents navi­ga­teurs.

    Ça ne le fait pas bête­ment, genre pour flex­box ça sait gérer les diffé­rences de syntaxes. Bref : utile.