Auteur/autrice : Éric

  • Rempla­cer du texte par une image en CSS

    Dans les années 2007 à 2009 on avait une collec­tion d’hor­ribles bidouilles CSS pour insé­rer des images à la place de certains textes via CSS. L’idée c’est que certaines images ne sont pas du contenu mais bien de la présen­ta­tion, poten­tiel­le­ment dépen­dantes du contexte.

    Le besoin était tel que c’était un des sujets les plus en vue en CSS pendant des années avec « comment centrer un contenu verti­ca­le­ment ».

    h3.nir {
       height: 75px;
       width: 300px;
       overflow: hidden;
       margin: 0;
       padding: 0;
     }
     h3.nir:before {
       content: url(http://…/test.png);
       display: inline-block;
       font-size: 0;
       line-height: 0;
     }

    Fran­che­ment c’était de la bidouille de haut vol, avec plein de défauts. On rêvait d’un truc plus simple, qui fonc­tionne correc­te­ment quand l’image ne se charge pas et sur les lecteurs d’écran, sans flash de contenu non stylé. Je me demande même ce qui suit n’a fonc­tionné sur certains navi­ga­teurs, mais on n’y est visi­ble­ment pas encore :

    h3 { content: url(http://…/test.png); }

    CSS a beau­coup évolué, les navi­ga­teurs aussi. J’es­pé­rais qu’on avait enfin résolu ce problème ultra bateau. Visi­ble­ment non. La seule solu­tion passe par des polices de carac­tères d’icônes et des recon­nais­sances de liga­ture. Le reste n’a que peu changé en 10 ans, on a juste enlevé les besoins de compa­ti­bi­lité sur les vieux navi­ga­teurs.

    J’avoue que je ne comprends pas. On ajoute des fonc­tion­na­li­tés de folie et on ne gère toujours pas la base qui a généré des milliers de pages en bidouilles de contour­ne­ment. Qu’on m’ex­plique…

  • Déla­tion ou dénon­cia­tion

    Dénon­cia­tion :
    2. Droit pénal. Action de dénon­cer à la justice une infrac­tion dont on n’est pas lésé

    Notre culture est bien moche à ce niveau.

    Nous appre­nons à taire les faits ou l’iden­tité du coupable, comme dans une culture mafieuse. Celui qui parle est un traitre à son groupe. Quand c’est vis-a-vis d’un tiers on parle de déla­tion, avec une compa­rai­son immé­diate à la colla­bo­ra­tion sous l’oc­cu­pa­tion nazie.

    Dès la petite enfance on apprend à ne pas rappor­ter. Même ceux qui sont censés faire respec­ter les règles, parents et insti­tu­teurs, sont parfois les premiers à quali­fier de rappor­teur ceux qui brisent le silence sans qu’on ne leur demande. C’est dire à quel point nous sommes schi­zo­phrènes.

    Il y frater­nité sur notre devise, mais il semble qu’elle doive s’exer­cer avec celui qui brise les règles de la collec­ti­vité, pas avec les victimes ou avec la collec­ti­vité elle-même. Toute autre compor­te­ment serait vite jugé immo­ral ou inté­griste. Allez compren­dre…

    Pas très éton­nant que bien peu réagissent face à une agres­sion dont ils sont témoin. Le « pas mon problème » est telle­ment bien ancré que quand s’y ajoute la peur de se mettre à risque soi-même, bouger devient mission impos­sible.

    Je ne comprends défi­ni­ti­ve­ment pas. La posi­tion morale, de frater­nité et d’al­truisme, serait pour­tant de soute­nir les victimes et la collec­ti­vité dans son ensemble.

    Confondre dénon­cia­tion et déla­tion, c’est un peu perdre notre frater­nité quelque part.

    Déla­tion :
    Dénon­cia­tion, géné­ra­le­ment secrète, dictée par des motifs vils et mépri­sables

    Je ne demande pas à chacun d’al­ler dénon­cer son voisin, mais au moins de ne pas parler de déla­tion pour ceux qui sortent de l’égoïsme facile et son « je ne suis pas concerné ».

    Le seul critère est l’in­ten­tion. Celui qui alerte et dénonce, cherche-t-il à faire le bien ou à faire le mal ? Nous devrions soute­nir et proté­ger les premiers, à défaut d’en faire partie nous-même.

  • La check­list du nouveau déve­lop­peur

    Il se passe quoi quand le nouveau arrive ? Son poste sera-t-il là à temps ? Il va faire quoi ? Il s’as­soie où d’ailleurs ? euh, et il arrive à quelle date exac­te­ment déjà ?

    Je suis certain qu’on a tous vécu ça au moins une fois. Seule solu­tion à ma connais­sance : la liste de tâches à cocher au fur et à mesure et parta­ger avec tous les acteurs concer­nés.

    Parti de zéro, ici j’ai fait une bête grille dans un tableur pour lister les actions à mener. La première colonne est un bête marqueur todo/wip/done coloré. Le reste indique ce qu’il y a à faire et qui en est respon­sable. Allez voir, je vous partage la grille quasi­ment telle quelle.

    checklistJ’ar­rive avec une quaran­taine de lignes géné­riques à n’im­porte quel employé, et une ving­taine spéci­fiques aux profils de déve­lop­peurs. Ça va de « s’as­su­rer qu’il ait une chaise devant son bureau » à « créer son compte email ». Les dernières lignes sont à cocher par le nouveau venu lui-même. C’est par exemple aller faire sa première pull-request.

    Il n’y a pas que de l’ad­mi­nis­tra­tif : Le but c’est d’em­barquer le nouveau dans la vie des équipes. Dans les lignes il y a aussi « aller sur le terrain voir comment ça s’y passe » ou « parti­ci­per à l’éla­bo­ra­tion d’un repas le midi ».

    L’idée c’est de ne pas forcé­ment mettre un process mais de s’as­su­rer qu’on n’ou­blie rien d’utile, et qu’on ne refasse pas deux fois les mêmes erreurs. À ce titre j’aime beau­coup la ligne « ajou­ter un item qui manque à la liste pour les prochains ».

    La grille sur un tableau c’est l’ou­til du pauvre. Main­te­nant qu’on a un gestion­naire de ticket correct qui sait faire une copie d’un ticket géné­rique avec ses dépen­dances, il est probable que je recréé tout ça là bas un jour.

    Et vous, vous avez quoi ? Vous parta­gez ?

  • De ces entailles publiques à nos textes fonda­teurs

    Avec le ministre de l’In­té­rieur, nous avons voulu relan­cer la construc­tion d’un Islam de France, apaisé, indé­pen­dant des influences étran­gères. Bernard Caze­neuve fera des propo­si­tions ce lundi.
    L’Etat est là pour réaf­fir­mer ce qui fait, depuis plus d’un siècle, la condi­tion de notre vie en société : la laïcité
    — Manuel Valls

    Depuis le début, le concept de laïcité à la française est une vaste blague. Deux visions pas fran­che­ment conci­liables s’op­posent et chacun parle de choses diffé­rentes.

    D’une part la vision modé­rée, qui s’im­pose à l’État. L’État est neutre, ne peut promou­voir ni finan­cer aucun culte. À l’in­verse, le citoyen est libre de conscience mais aussi de exer­cer et mani­fes­ter sa reli­gion, y compris dans l’es­pace public. Mieux : C’est le rôle de l’État que d’as­su­rer ces liber­tés.

    D’autre part la vision radi­cale. Elle ne s’im­pose plus à l’État mais au citoyen. Là il s’agit de reti­rer la reli­gion de l’es­pace public pour la renvoyer à l’in­time et au privé. Les mani­fes­ta­tions publiques des reli­gions ne sont que des aména­ge­ments histo­riques propres à dispa­raitre ou être limi­tés à l’in­si­gni­fiant tel une croix sous une chemise.

    Malgré ce qu’on pour­rait penser en écou­tant nos élus aujourd’­hui, c’est la vision modé­rée d’Aris­tide Brian qui est portée par notre droit, via la loi de 1905.

    Il faut dire que la vision radi­cale serait contraire aux conven­tions inter­na­tio­nales des droits de l’Homme. Oui, rien que ça.

    * * *

    Seul ce qui porte atteinte à la sécu­rité, à la santé, à l’ordre public ou aux droits des autres peut être inter­dit. Même là, l’im­por­tance pour l’État d’as­su­rer la liberté de culte a amené à faire des compro­mis, par exemple sur l’abat­tage rituel des animaux à des fins reli­gieuses. Ces prin­cipes ont été rappe­lés récem­ment par le Conseil d’État. Oui, rien que ça.

    Qu’un premier ministre ose dire quel habille­ment est ou n’est pas légi­time dans une reli­gion, qu’il prétendre construire et orien­ter les choix d’une reli­gion, est en viola­tion directe avec la vision de notre droit.

    Il n’est pas le seul, c’est quasi­ment toute notre classe poli­tique qui est plus ou moins direc­te­ment en dehors des clous, au point qu’il serait plus simple de lister ceux qui défendent nos lois et notre consti­tu­tion.

    Avec un peu de recul, entre une vision qui restreint l’État à une situa­tion neutre en donnant la liberté au citoyen et une vision qui restreint le citoyen en permet­tant à l’État d’en assu­rer le contrô­le… est-ce vrai­ment éton­nant que nos élus cherche à avan­cer sur la seconde ?

    Ce qui est éton­nant c’est qu’on les laisse faire. Ça me dépasse encore. Dans d’autres pays il y aurait eu démis­sion et opprobre publique pour bien moins que ça.

    * * *

    La laïcité n’est qu’un exemple. N’al­lez pas argu­men­ter sur le Burkini dans les commen­taires. Il en va de même quand on parle de respec­ter la consti­tu­tion dans le proces­sus légis­la­tif.

    Là aussi, ce qui m’inquiète c’est qu’on laisse faire. Chaque renon­ce­ment, chaque accep­ta­tion de ces entailles publiques à nos textes fonda­teurs nous rapproche chaque jour de la fin de ces derniers.

    La plus grande menace est inté­rieure. Elle ne vient pas de l’Is­lam. Elle vient de notre laissé faire, de la caste des gouver­nants qui s’af­fran­chit du cadre donné par la consti­tu­tion et par les citoyens. C’est pour­tant ce qui distingue un État de droit d’une dicta­ture.

    La France a déci­dé­ment bien du mal à aban­don­ner sa monar­chie. L’élire tous les quatre à cinq ans ne la fait pas dispa­raitre.

  • Non le chômage n’est pas le problème à résoudre

    Le prochain qui me dit que le chômage est le problème prin­ci­pal en France, je lui sers son contrat de travail pour dîner.

    Les gens n’ont le plus souvent pas besoin d’un emploi. Ils trou­ve­ront très bien à s’oc­cu­per tout seul, y compris en travaillant. S’ils ne le font pas c’est juste­ment qu’ils ont un besoin bien plus impor­tant : Trou­ver comment vivre plus décem­ment.

    Quand on évite de confondre le moyen et l’objec­tif on peut s’au­to­ri­ser prendre un peu de recul. La France, pays riche, a surtout un problème de répar­ti­tion des richesses.

    Oui le revenu d’exis­tence ne répon­dra pas à tout. Par contre il trans­for­mera le foutu « j’ai besoin d’un emploi » en « j’ai envie d’un emploi ». Je ne sais pas pour vous, mais pour moi on ne parlera plus du tout de la même chose.

    Là on pourra réflé­chir à comment créer de la valeur pour tous (le sacro-saint PIB). Quand tout le monde vivra correc­te­ment, ça devien­dra une pétouille à résoudre, ensemble.

  • L’amour du risque

    J’ai bien conscience que cette nouvelle orien­ta­tion profes­sion­nelle pour­rait se conci­lier avec une posi­tion de dispo­ni­bi­lité, qui m’as­su­re­rait, au moins pendant huit ans, de pouvoir retrou­ver mes fonc­tions à la Cour des comptes à tout moment.

    Mais j’aborde mes acti­vi­tés à venir dans un état d’es­prit marqué par un enga­ge­ment total, comme cela a d’ailleurs toujours été le cas dans les précé­dentes étapes de ma carrière admi­nis­tra­tive et poli­tique, et la force de cet enga­ge­ment me semble incom­pa­tible avec le choix du confort, de la précau­tion et de la mini­mi­sa­tion du risque dont un main­tien en dispo­ni­bi­lité serait, à mes yeux, syno­nyme.

    Fleur Pelle­rin

    C’est son choix, et parce qu’il ne m’im­pacte en rien – rete­nez-le bien, c’est le point prin­ci­pal du billet – je n’ai rien à y redire.

    Ce d’au­tant moins qu’a­près avoir été ministre, plutôt bien appré­ciée par le milieu entre­pre­neu­rial, elle n’a pas besoin de la sécu­rité de la mise en dispo­ni­bi­lité pour pantou­fler si d’aven­ture elle le souhai­tait, que ce soit dans du semi-public ou dans du privé.

    La prise de risque est toute rela­tive. Si elle voulait un avenir poli­tique, elle a même peut-être pris le chemin le moins risqué.

    *

    Ce choix est le sien. Je n’ai rien à lui repro­cher.

    Non, ce qui me gêne ce sont ceux qui s’en féli­citent, que ce soit à cause de la fable entre­pre­neu­riale de la prise de risque ou à cause du climat de défiance vis à vis des poli­tiques et de la haute fonc­tion publique.

    * * *

    La fable entre­pre­neu­riale c’est celle qui valo­rise la prise de risque et l’in­con­fort extrême de l’en­tre­pre­neur, comme un cheva­lier qui va combattre un dragon pour l’hon­neur et la gloire.

    On raconte de belles histoires en y recréant une noblesse, celle qui a pris des risques et vécu l’in­con­fort pour créer la valeur de demain, les emplois, la prochaine révo­lu­tion. Il y a eux et les autres, dans ces derniers les pires étant les sala­riés, les syndi­ca­listes et les fonc­tion­naires.

    La belle romance permet de valo­ri­ser soi et ceux de son rang, puis de barrer la route à toute critique sur les travers néga­tifs des acti­vi­tés.

    La fable s’en­tre­tient et certains finissent par y croire, par voir de la valeur dans la prise de risque et l’in­con­fort, comme une médaille et un abou­tis­se­ment.

    *

    Foutaises que tout cela. Savoir prendre des risques est impor­tant. Les prendre effec­ti­ve­ment est souvent néces­saire. Savoir les éviter est la plus grande qualité.

    Si on peut obte­nir les mêmes effets posi­tifs sans passer par la prise de risque, le faire quand même est juste du maso­chisme. À la limite chacun ses plai­sirs, mais c’est aussi jouer à la roulette avec les finances des inves­tis­seurs, avec les vies de famille des colla­bo­ra­teurs, avec l’équi­libre des socié­tés pres­ta­taires et parte­naires.

    Ces risques, cet incon­fort, ne sont que des outils, des leviers, et plutôt de ceux à manier avec précau­tion. Quand certains les voient comme l’objet même de l’ac­ti­vité entre­pre­neu­riale, je ne peux me rete­nir de repen­ser à la maxime « quand le sage pointe la lune, l’im­bé­cile regarde le doigt ».

    *

    Si un jour l’aven­ture de Fleur Pelle­rin la pose dans une situa­tion réel­le­ment diffi­cile pour son avenir, qu’il lui faut faire des choix, quelle est donc la situa­tion qui lui permet­tra de conti­nuer à s’in­ves­tir à fond plutôt que de commen­cer à réflé­chir à la voie de secours ? Est-ce de savoir qu’elle a un filet de sécu­rité quoi qu’il se passe ? ou est-ce de savoir que si elle ne fait rien et que ça se passe mal elle va vrai­ment avoir de graves problèmes ?

    Un jour les gens compren­dront que le confort et la sécu­rité permettent de travailler avec les gens à leur plein poten­tiel. Le stress et le risque ne sont là qu’à défaut de savoir ou de pouvoir le faire. Ça revient à travailler contre les gens qu’on met dans une telle situa­tion. Quand c’est de soi-même dont on parle et que c’est volon­taire, il faut consul­ter.

    * * *

    Ce sont ceux qui se réjouissent par défiance qui me gênent le plus. Ils fêtent ça comme une victoire, comme une justice reprise sur les élus et les fonc­tion­naires, comme un besoin pour remettre élus et hauts fonc­tion­naires dans la réalité, voire comme ça de moins à payer en tant que contri­buable.

    C’est très simple. Que son aven­ture réus­sisse ou non, soit Fleur Pelle­rin reste dans le privé, soit elle revient à son poste dans le public. La dernière alter­na­tive n’est possible qu’a­vec la mise en dispo­ni­bi­lité à laquelle elle vient de renon­cer.

    Si elle reste dans le privé, à part le plai­sir sadique de la savoir dans la panade si elle se plante, il n’y a stric­te­ment rien à gagner à cette démis­sion. Rien. Pas un kopeck. Et je ne prends person­nel­le­ment jamais de plai­sir à contem­pler le malheur des autres.

    Si elle reve­nait dans le public on aurait par contre une haute fonc­tion­naire avec une expé­rience signi­fi­ca­tive récente dans le privé, à l’heure où on fustige la décon­nexion des élites publiques avec ce qui s’y passe.

    Est-ce donc cette dernière éven­tua­lité qui serait si grave ? Il faudrait un peu de cohé­rence dans le discours. D’au­tant qu’à défaut c’est quelqu’un sans cette expé­rience dans le privé qui offi­ciera à sa place.

    Même finan­ciè­re­ment, une reprise de dispo­ni­bi­lité se fait à l’an­cienne rému­né­ra­tion, sans augmen­ta­tion due à l’ex­pé­rience et l’an­cien­neté passées dans le privé. Bref, tout à y gagner.

    *

    On peut discou­rir autant qu’on veut sur l’injus­tice de la mise à dispo­ni­bi­lité des fonc­tion­naires, mais il n’y a rien à se réjouir du cas indi­vi­duel.

    Même collec­ti­ve­ment, ce système est clai­re­ment à l’avan­tage des contri­buables. Il permet d’en­cou­ra­ger les fonc­tion­naires à explo­rer et se faire d’autres expé­riences. Il permet ensuite poten­tiel­le­ment à la fonc­tion publique d’en profi­ter, sans rien débour­ser.

    Le pire c’est de voir que ceux qui discré­ditent ce système sont les mêmes qui critiquent la décon­nexion entre privé et public. Il va falloir choi­sir…

    Non, ce qui serait intel­li­gent serait d’au contraire encou­ra­ger tous les grands groupes à mettre en place un système simi­laire. C’est impos­sible à tenir pour des petites struc­tures mais, dès qu’on parle de milliers ou dizaines de milliers d’em­ployés, la société a la masse pour assu­mer ces départs et retours sans mettre en péril l’ac­ti­vité.

    Il y a certes les congés sabba­tiques mais il faut annon­cer une durée fixe à l’avance, et cette durée est forcé­ment infé­rieure à l’an­née. C’est vrai­ment adapté à des congés. Diffi­cile d’al­ler se lancer dans une réelle aven­ture profes­sion­nelle avec ce cadre.

  • Chan­ger de télé­phone

    L’écran de mon smart­phone est fendu, la dalle tactile ne fonc­tionne plus sur un bon quart de l’écran. Autant dire que ça pose un problème.

    Je suis content du télé­phone donc n’ai pas forcé­ment envie de le chan­ger mais la répa­ra­tion me coûte dans les 200 €. Pour un télé­phone qui a presque deux ans, je ne sais pas si c’est très perti­nent par rapport à un neuf

    J’ai un Sony Z3 compact. Donc voilà, si vous trou­vez quelque chose dans des prix raison­nables pour mes besoins, ça m’in­té­resse. Mes carac­té­ris­tiques idéales :

    • Très large auto­no­mie (ça sera mon critère premier)
    • Au moins 32 Go de SD, ou la possi­bi­lité d’y mettre une carte SD externe
    • Prix modéré, idéa­le­ment dans les 350 €, proba­ble­ment pas plus de 450 €
    • Écran dans les 5″, éven­tuel­le­ment 4.8″ ou 5.2″ (je peux aller à 5.5″ mais il faut vrai­ment que je sois emballé par le reste)
    • Un bon écran suffi­sam­ment contrasté pour être lisible en plein soleil mais pas de lumi­no­sité ou défi­ni­tion exces­sive qui consom­mera la batte­rie inuti­le­ment (donc à priori : écran AMOLED ou simi­laire)
    • Supporte les bandes 4G françaises (au moins la B20 800Mhz, idéa­le­ment la future B28 700Mhz)

    Dans le reste :

    • Pas de latence ou mauvaises perfor­mances (mais je ne fais pas de jeux, essen­tiel­le­ment du web ou de l’écrit, parfois de la lecture vidéo pour des films/séries)
    • Ne chauffe pas exagé­ré­ment
    • DAS pas exces­si­ve­ment élevé (on va dire pas idéa­le­ment sous les 0.5, loin des 1.0)
    • Le moins possible de surcouche, app inutiles, etc.

    Dans le super­flu mais qui peut faire pencher mon choix :

    • Port de charge magné­tique ou sans contact (genre Qi, ou celui du Z3)
    • Étanche / résis­tant à l’eau
    • À jour au niveau de l’OS (idéa­le­ment sur la ROM du construc­teur)
  • Cherche à discu­ter orga et mana­ge­ment

    Je cherche à discu­ter orga­ni­sa­tion et mana­ge­ment d’une équipe tech­nique / produit, et donc à rencon­trer des gens qui sont ou ont été partie prenante dans des équipes de taille signi­fi­ca­tive (on va dire de l’ordre de 20 à 50 personnes en tech­nique).

    CTOs, leads, mana­gers, si vous vous retrou­vez dans cette descrip­tion vous voulez bien me lais­ser un message pour qu’on discute un peu ? Merci pour l’aide.

  • Qui comprend le nommage des Kobo Aura ?

    Le nommage des liseuses Kobo Aura me semble des plus étranges.

    La Aura One est la troi­sième liseuse de la gamme Aura (logique hein ?). Elle a aussi un écran de plus haute défi­ni­tion et plus haute réso­lu­tion que la Aura HD.

    On voit arri­ver une Aura 2. La Aura 2 est la quatrième liseuse de la gamme Aura. On peut trou­ver ça natu­rel si la Aura One est la troi­sième liseuse de la gamme, mais la Aura 2 n’est pas la suite de la Aura One. En fait Aura One et Aura 2 sortent presque en même temps sur le marché, sur deux formats diffé­rent. Pour ajou­ter à la clarté, la Aura 2 a un plus petit format que la Aura One.

    Le couple Aura / Aura HD corres­pond à respec­ti­ve­ment à des liseuses format stan­dard (6″) et moyen format (6.8″) de même géné­ra­tion mais le couple Glo / Glo HD corres­pond à deux liseuses du même format stan­dard (6″) de géné­ra­tion diffé­rente.

    La Aura était le haut de gamme 6″, contenu simi­laire à la Glo mais avec un design de boitier plus cher, plus haut de gamme. Elles sont rempla­cées respec­ti­ve­ment par la Aura 2 et la Glo HD mais la Glo HD, bien que sortie bien avant, a un écran plus haut de gamme et se retrouve au même prix que la Aura 2.

    Quelqu’un m’ex­plique ?

  • Variables et constantes — Javas­cript 103

    Travailler avec ES2015 c’est quelques chan­ge­ments sur les décla­ra­tions des variables.

    Premier chan­ge­ment : Les modules ES2015 sont impli­ci­te­ment en mode strict. Y utili­ser une variable non décla­rée provoque une erreur. Ce seul chan­ge­ment est une béné­dic­tion vu l’ubuesque compor­te­ment par défaut de Javas­cript. Il reste que ça ne chan­gera pas grand chose pour qui utili­sait déjà un outil d’ana­lyse de code (linter).

    Pour décla­rer les variables nous avons aussi le nouveau mot clef let en complé­ment de l’an­cien var.  La portée est alors limi­tée au bloc de code parent le plus proche (if, while, func­tion, for…) au lieu d’être éten­due à toute la fonc­tion parente.

    let a = 2;
    for(let b=1; b<3; b++) {
      let a = 3;
      a = 4;
    }
    console.log(a); // 2 et non 4

    Au début j’étais enthou­siasmé. J’ai trouvé excep­tion­nel de pouvoir travailler avec des variables jetables le temps de quelques lignes et j’ai pensé éviter de nombreuses réuti­li­sa­tions par erreur.

    À l’usage c’est un ajout sympa mais pas si révo­lu­tion­naire. Si c’est pratique c’est surtout pour gérer les ferme­tures syntaxiques (closure) au sein des boucles. Le reste du temps ça n’a que peu d’in­fluence quand on a des fonc­tions de taille et de niveau d’im­bri­ca­tion raison­nables.

    var fns = [ ];
    for(var i=1; i<3; i++) {
      fns.push( function () { console.log(i); } );
    }
    var fn = fns[0];
    fn(); // affichera 3 et non 1
    
    //----
    
    fns = [ ];
    for(let j=1; j<3; j++) {
      fns.push( function () { console.log(j); } );
    }
    fn = fns[0];
    fn(); // affichera 1

    Je me demande si ça pour­rait être la portée par défaut dans un langage. Visi­ble­ment certains pensent que non mais je n’ai pas été convaincu par l’ar­gu­men­taire.

    L’autre nouvel arrivé c’est const. Décla­rée ainsi la variable a la même portée qu’un let mais on ne peut pas y affec­ter une valeur diffé­rente.

    Là aussi c’est pas mal d’en­thou­siasme. Une variable qui est modi­fiée sans aver­tis­se­ment par une ferme­ture lexi­cale ou un module tiers, ça fait parfois des dégâts.

    Le problème c’est que ça ne protège pas vrai­ment de ça. Si on ne peut pas affec­ter de nouvelle valeur au même nom de variable, la valeur elle même n’est pas immuable. On peut toujours faire chan­ger d’état un objet ou modi­fier les éléments d’un tableau. Domma­ge…

    const tab = [ ];
    tab[3] = 4; // ne provoque pas d'erreur mais change `tab`
    
    const obj = { 
      var priv = 2; 
      this.chg = function() { priv = 3; };
    };
    obj.chg(); // `obj` vient de changer d'état silencieusement
    
    tab = [1, 2, 3]; // là par contre on génère une erreur.

    Pour obte­nir une vraie sûreté il faut utili­ser des des struc­tures de données expli­ci­te­ment prévues pour. On ne peut plus utili­ser les raccour­cis habi­tuels { } ou [ ] et l’ins­tan­cia­tion devient bien plus verbeuse. Facile d’ou­blier par inat­ten­tion et par habi­tude.

    import immutable from "immutable";
    const map = Immutable.Map({a:1, b:2, c:3});
    // map ne changera plus jamais de valeur

    Le problème c’est que tous les modules tiers conti­nuent à utili­ser les struc­tures de données variables habi­tuelles. Malheu­reu­se­ment des modules tiers, vue la pauvreté de la biblio­thèque stan­dard de Nodejs, on en utilise des tonnes,  y compris pour des fonc­tions de base.

    Pour se proté­ger vrai­ment des chan­ge­ments d’état il faudra non seule­ment utili­ser expli­ci­te­ment nos struc­tures de données immuables (aie), mais en plus faire régu­liè­re­ment des conver­sions quand on commu­nique avec des modules tiers (ouch).

    Il y a tout lieu de penser qu’on finira par avoir des données variables et d’autres immuables, suivant d’où elles viennent et comment elles sont décla­rées. Il faudra réflé­chir à chaque utili­sa­tion, parfois remon­ter à la créa­tion de la donnée. Possible même que le compor­te­ment de const avec les struc­tures de données natives nous incite plus d’une fois à nous croire en sécu­rité alors que ce ne sera pas le cas.

    Pour moi c’est le scéna­rio du pire. Non seule­ment on complexi­fie le code (plus verbeux) et la charge cogni­tive (savoir à chaque fois quel est le type de variable et le type de données), mais en plus on garde des risques.

    Pour jouer à ça il aurait fallu que le langage s’as­sure que ce qu’on déclare comme tel soit réel­le­ment immuable, jusqu’en profon­deur. Je comprends très bien pourquoi ça aurait été diffi­cile voire impos­sible, mais du coup ce const m’a l’air d’une vraie fausse bonne idée. Domma­ge…

    Pour autant je me prends quand même à utili­ser const pour les litté­raux. Ça ne coûte pas grand chose et ça fixe par écrit l’in­ten­tion que j’ai en tête. Même si je n’y suis pas obligé, je fais tout de même atten­tion à garder let quand j’uti­lise un tableau ou un objet natif. J’ai trop peur d’in­duire en erreur le prochain déve­lop­peur qui passe (d’au­tant que ce sera proba­ble­ment moi).

    Je jette­rai peut-être de nouveau un œil à immu­table.js si une partie signi­fi­ca­tive des modules s’y conver­tit. Entre temps le ratio béné­fices/(risques+­dé­fauts) me parait assez faible.


    Au delà de ces ques­tions de décla­ra­tions, j’en tire un avis plutôt néga­tif sur la propa­ga­tion des variables en Javas­cript. On fait des ferme­tures lexi­cales de partout et on ne maitrise pas bien les effets de bord. Pas éton­nant que les déve­lop­peurs cherchent à avoir des variables et des struc­tures de données immuables ! Si la propa­ga­tion des variables était plus saines au départ, ce besoin ne ferait pas surface ainsi.

    var i = 1;
    function hello10times() {
      for(i=1; i<10; i++) {
        console.log("hello ");
      }
    }
    hello10times();
    // oups ! i a changé et vaut désormais 10

    PHP est plus strict (ouch, dire ça me fait mal) : Les variables ne sont pas décla­rées mais ne sont jamais héri­tées d’un contexte parent sauf à le décla­rer expli­ci­te­ment, avec global pour les variables globales, ou use pour les ferme­tures lexi­cales. On peut toujours faire des effets de bord assez moche, mais on les voit venir assez faci­le­ment.

    $i = 3;
    $hello10times = function () {
      for (i=1; i<10; i++) {
        echo "hello ";
      }
    }
    // $i vaut toujours 3
    
    $hello10times = function () use ($i) {
     for (i=1; i<10; i++) {
     echo "hello ";
     }
    }
    // $i vaut 10 mais là c'est forcément intentionnel

    La visi­bi­lité des variables de Python est plus proche de ce que fait Javas­cript mais, sauf à le décla­rer expli­ci­te­ment, si on utilise une variable d’un contexte parent, c’est en lecture seule. On garde des effets de bord, mais c’est déjà plus limité (bon, en échange savoir si la variable utili­sée est locale ou héri­tée n’est pas toujours super expli­cite).


    D’ailleurs, quitte à parler d’ex­pli­cite, je trouve dommage d’avoir à décla­rer mes variables en Javas­cript. Il n’y a pas vrai­ment le choix vu l’his­to­rique du langage mais ça reste agaçant vue la faible valeur ajou­tée de la chose, surtout quand je vois avec Crys­tal que même un langage à typage statique peut s’en passer.

    Si j’avais à créer un langage de zéro je pense que j’ap­pré­cie­rais de ne pas avoir à décla­rer mes variables, éven­tuel­le­ment leur donner la portée par défaut de let, mais avec la décla­ra­tion expli­cite de PHP pour les ferme­tures lexi­cales (avec peut-être une excep­tion pour les petites fonc­tions anonymes d’une unique ligne/expres­sion).

    L’idée de const me plait beau­coup, mais unique­ment si le langage se révèle capable de réel­le­ment rendre la donnée tota­le­ment immuable, et ça en profon­deur. À minima le freeze de Ruby serait une demie-solu­tion (une demie seule­ment parce qu’il faut penser à faire un freeze récur­sif sur un clone de tous les objets avant leur affec­ta­tion par const, ce qui est assez pénible). Celui de Javas­cript ne me semble pas effi­cace pour bloquer les chan­ge­ments d’état d’objets qui contiennent des proprié­tés privées (implé­men­tées via des ferme­tures syntaxiques).

    Tiens, ça pour­rait même être inté­gré au langage : si l’af­fec­ta­tion se fait avec := plutôt qu’a­vec =, alors ni la variable se voit affec­ter une copie immuable de la donnée, sans possi­bi­lité de modi­fi­ca­tion ou ré-affec­ta­tion.

    Si vous déve­lop­pez le nouveau langage de demain, vous avez désor­mais mon cahier des charges :-)