Philippe F a écrit 2182 commentaires

  • [^] # Re: du pourquoi du comment

    Posté par  (site web personnel) . En réponse au journal Exercices de programmation et benchmarks. Évalué à 5.

    C'est vraiment la question que je me pose à chaque fois quand je lis ce genre d'optimisation. Combien sont spécifiques à la machine hôte, et combien vont encore fonctionner sur une machine avec une config hardware légèrement ou fondamentalement différente ?

  • # Et la version courte ?

    Posté par  (site web personnel) . En réponse au journal Exercices de programmation et benchmarks. Évalué à 2.

    J'avoue que sur ces exercices de programmation, j'adore la partie qui consiste à chercher le programme le plus court qui résout le problème. Surtout en Python, en jouant sur le langage, on arrive à gratter pas mal par rapport à la solution de base.

    Par contre, s'il y a un codeur ruby dans le challenge, aucune chance. Ce langage est vraiment très concis!

  • # Parfois, ça passe

    Posté par  (site web personnel) . En réponse au journal Un libriste dans une liste pour les municipales 2020. Évalué à 9.

    Mon épouse est sur une liste d'opposition sans étiquette dans notre village de 2000 habitants. La liste comprend deux libristes convaincus qui ont posé leurs conditions: pas de dropbox/google drive/trello pour le partage de document, et pas de what's app pour la communication inter-liste. Du coup, tout le monde découvre Signal et Owncloud (hébergé chez un ami), plus un Wordpress. Ils renaclent un peu mais ça va à peu près. Par contre, l'interface Owncloud est pas trop noob friendly. Si ils sont élus, ils prévoient de passer à quelque chose de plus accessible aux non ititiés.

  • [^] # Re: Attention au stats

    Posté par  (site web personnel) . En réponse au journal A propos de packaging et de LuaUnit. Évalué à 6.

    J'ai quand même un élément de comparaison: le LuaUnit de mon forkeur était moins populaire. En 2 ans, il avait fait un peu moins de 30 000 hits sur luarocks. J'ai fait ça en 4 mois à peu près. Donc mon LuaUnit est devenu plus populaire.

    J'avais pas pensé à l'utilisation en CI. Comme j'ai rajouté une sortie au format TAP et une sorite au format Junit XML (Jenkins/Hudson en gros), il est possible que des développeurs se soient rués là dessus pour le mettre en CI. Donc, soit ils sont très nombreux à avoir fait ça, soit il s'agit de projets hyper dynamiques … soit les deux.

    Je ferai un autre article sur la popularité de LuaUnit d'après d'autres stats. En tout cas, ça fait du bien au moral !

  • [^] # Re: Questionnements

    Posté par  (site web personnel) . En réponse au journal The Qt Company annonce un changement dans ses « offres ». Évalué à 8.

    Pour moi, Qt reste un cran au dessus des autres toolkits graphiques. J'ai encore eu une expérience positive d'un projet qui commence comme un proto sous Windows à livrer pour hier, et se retrouve être un produit à livrer sous Rapsbery Pi avec des interfaces bien plus complexes. Le choix de PyQt a sauvé la livraison de ce projet pour mon collègue.

    J'ai aussi épaté mes collègues avec une calculatrice graphique redimensionnable en 50 lignes de PyQt, tout à fait compréhensible pour des débutants en Python / Qt.

  • # Impressionnant

    Posté par  (site web personnel) . En réponse au journal Chaînes de formatage et sécurité en python (solution au "Petit Défi Python"). Évalué à 10.

    Je connais bien le langage Python et j'ai fini par trouver la solution mais j'aurai jamais réussi sans les trucs filés dans les commentaires. Ça me confirme que ma carrière de hacker est pas prêt de décoller :-)

    Sinon, outre l'erreur de laisser l'utilisateur contrôler la chaîne de formattage, le script traîne aussi l'erreur de laisser la largeur en l'état de string. Puisqu'on attend un entier, autant la convertir tout de suite en entier:

    self.width = int(input("How wide do you want the nice box to be ? "))
    Et là, plus de faille de sécurité.

    Bon, sinon, on constate plus il y a de magie dans le langage, plus il s'expose à des failles soit de surface d'attaque, soit de mauvaise compréhension des utilisateurs. Et dans Python, il y a beaucoup de magie…

  • [^] # Re: Clause de non-concurrence ?

    Posté par  (site web personnel) . En réponse au journal HS libre : une question emploi et ressources humaines qui me chiffonne. Évalué à 7.

    Oui, le choix des marques est volontairement absurde car le monde me semble absurde en général. Et encore, j'aurai pu glisser Nissan.

    Pour répondre sur la confidentialité, c'est un peu subtil. Tu ne peux clairement pas piquer des schémas de design à Renault avant de partir bosser chez Dacia. Mais, exemple plus subtil, tu passes 6 mois chez Renault en enquête terrain et grâce à ton travail acharné, tu comprends quels sont les attentes des futurs clients. Il ressort notamment qu'il faut un aileron sur la kangoo pour la version 2020. Tu passes chez Dacia, tu leur suggères de mettre un aileron sur le prochain modèle parce que tu sais que cela correspond aux attente du terrain.

    Est-ce que tu violes l'accord de confidentialité ? Il ne s'agit pas d'une information qu'on t'a donné avec l'interdiction de la partager, il s'agit d'une information que tu as découvert seul, avec les moyens de l'entreprise mis à ta disposition, que tu as ensuite partagé avec l'entreprise. La distinction entre savoir-faire/expérience et information confidentielle n'est pas facile à trancher.

    Prenons un cas plus concret dans notre domaine. Ton entreprise Alpha veut se lancer dans le cloud et n'en a jamais fait avant. Tu passes 1 an à te former et à migrer tous les services internes sur du cloud. Tu es embauché par la société Beta qui veut faire la même chose et là, grâce à l'expérience acquise, tu sais exactement quelle architecture et quels fournisseurs choisir et tu fais le taf en 3 mois. Rupture de la confidentialité ? Je dirai non.

  • [^] # Re: Clause de non-concurrence ?

    Posté par  (site web personnel) . En réponse au journal HS libre : une question emploi et ressources humaines qui me chiffonne. Évalué à 3.

    Et comme l'entreprise qui te laisse partir a en général du mal à te payer alors que tu bosses chez dans une autre entreprise, elle fait sauter la clause dès que tu démissionnes (ça m'est arrivé déjà deux fois).

    Il n'y a que dans des domaines hyper stratégiques et très concurrentiel que les entreprises vont vraiment jouer la clause de non-concurrence. Genre le designer de la dernière Kangoo s'en va chez Dacia et Renault est prêt à payer une fortune pour que les secrets de finition de la Kangoo ne permettent à Dacia de lancer un modèle de luxe (ha ha) à moindre frais. Du coup, l'heureux démissionnaire peut faire son CAP d'ébenisterie tout en étant payé par Renault un certain temps.

  • [^] # Re: Au revoir mercurial

    Posté par  (site web personnel) . En réponse au journal Bitbucket abandonne les utilisateurs de Mercurial. Évalué à 6.

    Je reconnais que c'est pas forcément évident

    Tu me rassures.

    Un autre exemple, c'est que sur pas mal de SCM, la commande "revert" permet d'annuler les modifs en cours. Sauf que Git a choisi cette commande pour un usage légitime mais différent. Ca crée de la confusion, en plus du reste. On récemment ajouté la commande "restore" qui est arrivé pour pallier au fait que revert se faisant avec "checkout --" mais même là, il va falloir du temps avec que tout le monde se l'approprie.

    Une autre difficulté avec Git, c'est la présence de l'index. Du coup, toute la documentation est assez complexe à lire puisque chaque commande peut avoir un effet soit sur l'index, soit sur le working tree, soit parfois directement sur le stockage. Perso, je me penche très régulièrement sur la doc et au bout de deux minutes, je suis perdu entre les 3 zones d'effet. Quand je vois mes collègues qui connaissent très peu git lire la doc, ils sont encore plus perdus que moi. Bien que celle-ci se veille complète et précise, elle est hyper difficile d'accès.

    J'ai plusieurs fois perdu des changements, et aidé des collègues à récupérer des changements presque perdus tellement Git est complexe à utiliser.

    Le plus ironique, c'est que une grande partie de la complexité provient de l'aspect décentralisé alors qu'en entreprise, le développement est hyper centralisé et hyper hierarchique. Bref, perso, SVN ça m'allait très bien.

    Il n'y a que les tracking branches que je trouve sympa comme concept, et manquant dans mercurial.

  • [^] # Re: Au revoir mercurial

    Posté par  (site web personnel) . En réponse au journal Bitbucket abandonne les utilisateurs de Mercurial. Évalué à 5.

    Je connaissais pas cet article mais c'est tout à fait ce que j'en pense. On peut aussi citer le nombre incalculable de commandes de git, ou le fait que le nommage est "à chier" au sens où les commandes ne font pas forcément ce qu'indique le nom de la commande.

    Après, Git a gagné, GitHub a gagné aussi en terme de popularité, c'est irratrappable. Mais quand je vois à quel point on pleure dans ma société pour réussir à utiliser Git, j'ai de la peine. Comme disaient les vieux barbus "worse is better" a gagné.

  • # Au revoir mercurial

    Posté par  (site web personnel) . En réponse au journal Bitbucket abandonne les utilisateurs de Mercurial. Évalué à 7.

    C'est quand même un sacré pas coup pour mercurial. Pour rappel, bitbucket ne gérait que mercurial aux origines.

    C'est dommage, j'ai toujours trouvé mercurial mieux foutu que git à l'utilisation. Mais année après année, on sent bien qu'il se fait écraser…

  • [^] # Re: Apple ][

    Posté par  (site web personnel) . En réponse au sondage Quelle est la technologie la plus obsolète sur ou avec laquelle j'ai dû travailler récemment ?. Évalué à 3.

    Le logiciel était hyper critique, il encodait la politique de stationnement de la ville (zones, tarifs, durées maximum) sur 256 bits. C'était ensuite utilisé pour produire des centaines, voire des milliers de stationnement, qui représentait l'unique source de revenu de la PME !

  • # Apple ][

    Posté par  (site web personnel) . En réponse au sondage Quelle est la technologie la plus obsolète sur ou avec laquelle j'ai dû travailler récemment ?. Évalué à 7.

    C'était il y a 5 ans mais je le compte quand même: ma boite a racheté une antique PME qui faisait un produit de stationnement. Le logiciel de génération des politiques de stationnement tournait sur un vénérable Apple // . C'était la première fois que j'en touchais un ! Bien sur, il n'y avait qu'une seule version dudit logiciel, un seul ordinateur et pas de sauvegardes. Mais tout ça se passait très bien. Je vous le dis, les backup, c'est pour les flippés de la vie!

    J'avoue qu'on a transféré le logiciel sur un émulateur d'Apple ][ et que j'ai donné la matériel à un amoureux des vieilles machines ! Mais c'était beau d'utiliser cette antiquité!

  • [^] # Re: Gtk et le C++

    Posté par  (site web personnel) . En réponse au journal Mes activités open sources / libres "récentes". Évalué à 4.

    Je vais pas être la bonne personne pour te répondre sur des questions spécifiques Gtk / C++. La seule chose que je peux dire, c'est qu'entre la théorie "Gtk 3 a de l'introspection donc gtkmm peut profiter de tout ça" et la pratique, il y a beaucoup d'efforts. Le site web de gtkmm donne peu d'informations qui permettraient de savoir si le boulot a été fait ou pas.

    Mais si tu veux vraiment faire du C++, mieux vaut quand même choisir un toolkit nativement C++. Les bibliothèques adaptées dans un autre langage tendent à conserver beaucoup de modèles de conception du langage originel et restent un peu étranges dans le langage cible.

    Typiquement, pour bouffer du C++ moderne, va voir du côté de chez Boost, une partie de leur travail à pour volonter d'être réintégrer dans le standard C++. Ils adorent le C++ moderne (que je trouve plutôt imbitable perso). Un coup d'oeil rapide me montrer une lib C++ pour faire du GUI: https://github.com/kosenko/ui .

  • # Gtk et le C++

    Posté par  (site web personnel) . En réponse au journal Mes activités open sources / libres "récentes". Évalué à 8.

    Je me lance, ca fait une bonne quinzaine d'année qu'on s'est pas fait un petit flamewar sur Gtk vs Qt vs C++, ça me rappellera mes brulures de jeunesse !

    L'ex-développeur de GtkMM Guillaume Laurent m'avait expliqué à une époque que Gtk souffrait d'un vrai handicap pour la génération de binding: le C qui est utilisé pour décrire l'ensemble des widgets et autres éléments de Gtk n'est pas un langage suffisamment expressif pour en générer automatiquement une version C++. Il faut un travail manuel considérable d'annotation et d'aide au générateur pour arriver à une solution qui se tienne. La conséquence est que ce travail a eu tendance à épuiser les mainteneurs motivés et que GtkMM a souvent été fortement à la traîne de Gtk, le rendant au mieux difficilement utilisable en dehors des widgets très standards et au pire, inutilisable.

    A jeter un coup d'oeil sur le site, cela n'a plus l'air d'être le cas aujourd'hui mais ton commentaire laisserai entendre que si en fait.

    Un autre handicap de gtkmm, c'est clairement que les dév qui aiment bien Gtk ne sont absolument pas attiré par le C++. Il faut une combinaison assez particulière de développeur aimant bien Gtk et le C++ pour travailler ou utiliser Gtk. C'est peut-être un peu moins vrai aujourd'hui où le C++ a gagné des lettres de noblesses même dans le monde du logiciel libre.

    A l'inverse, Qt bénéficie de pas mal d'avantages pour la génération de binding: le C++ et les classes de retour gérant la mémoire intelligemment (du type QString) fournissent une information suffisamment riche pour automatiser une grosse partie du travail. C'est ce qu'a fait Phil Thompson pour les binding Python-Qt et Richard Dale pour tous les autres (KDE principalement). PyQt bénéficie d'un autre très gros avantages: Phil Thompson a basé une partie de son business de consulting dessus, ce qu'il fait qu'il maintient ça depuis 15 ans avec une régularité et une rigueur qui m'impressionnent. Toutes les versions de Qt sont supportées dans la semaine qui suit et les bindings manquants concernent des parties de Qt vraiment peu utilisées.

    L'outil qu'il utilise pour générer ses bindings - sip - a même été repris par WxPython pour refondre les binding vers WxWidget en Python 3 (projet Phoenix).

    Du coup, si tu aimes le C++, mieux vaut rester côté Qt. Et j'en dira autant pour le Python sans prendre un gros risque.

  • [^] # Re: attention

    Posté par  (site web personnel) . En réponse au journal Informatique et écologie. Évalué à 1.

    Typiquement quand tu fais un programme à l'échelle d'une ville, tu dois avoir un résultat visible et immédiat. Si tu lances un super programme de passage à l'éclairage LED mais précise que ça se fera sur 10 ans, au fur à mesure que les lampes tombent en panne, le maire ne va pas apprécier, c'est pas vendeur. En plus, pour peu que ces saloperies de lampe à incandescence soient robustes et durables, tu vas rien remplacer du tout !

  • [^] # Re: attention

    Posté par  (site web personnel) . En réponse au journal Informatique et écologie. Évalué à 10.

    Ca te donne ta consommation instantanée en carbone mais on est loin du bilan carbone. Quid de la fabrication du matériel, de son recyclage lorsqu'il n'est plus utilisable ? Typiquement, un hébergeur professionnel va utiliser du matériel très performant et le remplacer dès qu'il y a un semblant de panne qui se profile afin de garantir une très bonne qualité de service. En général, l'auto-hébergement se fait sur des machines de recyclage avec moins de qualité de service, donc permettent un meilleur bilan carbone global. Cela fait pencher pour moi la balance vers de l'auto-hébergement mais il y a tellement de paramètres que c'est difficile de s'y retrouver.

    Je ne sais pas précisément pour les ordinateurs, mais pour une voiture, le coût carbone de sa fabrication est tellement démesuré que sa consommation en carburant ne finit par être visible sur son bilan carbone qu'au bout d'une 20aine d'année et entre 200 000 et 300 000 km (chiffres de mémoire, je ne trouve plus ma source).

    Pour cette raison, mon vieux diesel qui crache une grosse fumée noire et fait tousser tout le voisinage est plus écolo que la voiture électrique de mon voisin, qu'il a acheté en sacrifiant la réparabilité de son véhicule précédent encore fonctionnel.

    Perso, je privilégie au maximum toute l'économie circulaire. Chaque objet de moins qui est fabriqué est un gain pour la planète. Et je hurle à chaque fois que je vois des programmes "écolo" qui visent à remplacer un parc entier d'équipements parfaitement fonctionnels par des trucs green-washing (typiquement, des lampes à led, ou linky). Tout ça pour gagner qqs kilowatts.

  • # Et l'auteur ?

    Posté par  (site web personnel) . En réponse au journal wavbreaker : un bon outil qui a besoin d'amour?. Évalué à 3.

    Quand on va sur la page, on a pas l'impression d'un projet abandonné ? Pourquoi ne pas faire la demande auprès de l'auteur du logiciel tout simplement ?

  • [^] # Re: Moi aussi je me suis posé plusieurs fois la question ...

    Posté par  (site web personnel) . En réponse au journal Changement de carrière.. Évalué à 3.

    J'ai posé des plaques de placo dans ma maison, sans l'avoir jamais fait avant donc avec plus ou moins succès sur le résultat final.

    Un artisan est venu à la maison pour un devis sur un autre sujet, et il m'a proposé de travailler un interim pour lui: il a beaucoup de mal à trouver des gens fiables pour ses chantiers.

    Moralité: on sait faire plus de choses que ce qu'on imagine !

  • [^] # Re: Travail sur soi

    Posté par  (site web personnel) . En réponse au journal Changement de carrière.. Évalué à 2.

    J'ai eu aussi des phases difficiles sur le plan personnel qui ont rejailli sur ma capacité à effectuer mon travail. C'est généralement pas le bon moment pour changer de carrière ou même de travail car ce type de changement implique une très grande implication personnelle en temps et en énergie, bien plus que ce que tu donnes à l'heure actuelle à ton travail. Et c'est justement là que tu pèches aujourd'hui.

    Mon expérience personnelle pour traverser cette période a été de passer à un temps partiel. Il y a trois voies possibles:

    Voie Médecin du travail: tu demandes en rendez-vous avec un médecin du travail et tu expliques ta situation et une demande en temps partiel thérapeutique. Ça peut être 50%, 80% ou tout autre chose qui t'arrange.

    Je suis bien tombé lorsque j'ai fait cela, le médecin m'a "prescrit" un 50% pendant 6 mois, et je l'ai revue à l'issue de cette période pour passer à 80% pendant les 6 mois suivants. Durant cette période, j'ai bénéficié d'une indemnisation de la sécurité sociale sur la perte de salaire, plus une compensation de mon entreprise (non obligatoire) qui m'a permis de rester financièrement à l'équilibre. Ce temps en plus m'a aidé à gérer mes soucis personnels (un burn-out suivi d'une dépression) et de revenir en meilleur état. J'ai aussi demandé à avoir moins de responsabilité, et le médecin du travail a également contacté ma hiérarchie pour leur demander de ne pas me mettre sous pression.

    Le 50% était sous la forme de 1 semaine à 2 jours et 1 semaine à 3 jours, ce qui me permettait d'avoir des longues périodes de 4 ou 5 jours entre deux moments de travail, qui furent précieuses pour me reconstruire et m'occuper de moi.

    Si le médecin du travail te prescrit cela, l'employeur ne peut pas refuser. Suivant la taille et l'ambiance de l’entreprise, ils peuvent le prendre plus ou moins bien. J'ai perso eu des retours plutôt positifs des entreprises et des RH.

    Je connais d'autres personnes qui ont suivi cette démarche, avec des résultats plutôt positifs et des médecins du travail compréhensifs. Il y a bien quelques exemples de médecin qui te prescrivent une aspirine et basta mais dans mon expérience, ce n'est pas la majorité.

    Voie congé parental: ça ne s'applique évidemment que si tu as un enfant en bas age. C'était mon cas, et après cette année de en congé partiel thérapeutique, je suis passé en congé parental d'éducation à 90%, avec une semaine sur deux à 4 jours et 5 jours. Là, j'ai laissé 10% de mon salaire mais j'ai vraiment apprécié d'avoir deux fois tous les mois des week-ends de 3 jours. Ca convenait pile à mon état, j'étais capable de travailler mais le rythme devait être moins intensif qu'auparavant.

    Jusqu'au trois ans de ton enfant, tu as droit à un congé parental d'éducation qui ne peut être refusé par ton employeur, seules les modalités exactes peuvent être discutées.

    Voie temps partiel classique: mon fils va bientôt avoir trois ans et j'ai prévu de demander un temps partiel à 90% pour conserver le même mode de vie. Cela me donne plus de temps pour moi et pour mes enfants, contre 10% de mon salaire, ce qui compte tenu des rémunérations de nos métiers, est en général gérable. L'entreprise peut accepter ou refuser mais sachant que plusieurs de mes collègues femmes ou hommes sont déjà en 80% avec le mercredi non travaillé, je m'attends à un accord.

    Ca fait bizarre de demander un temps partiel alors que tout notre travail est orienté vers la productivité, mais ça nous rappelle à notre condition d'être humain. Et ça le rappelle aussi à notre entreprise.

    Ce temps en plus m'a personnellement été précieux, que ce soit pour gérer mes enfants, pour faire des stages de développement personnel, ou pour soutenir mon épouse dans ses changements à elle. Vraiment, je recommande!

  • # Mon amour reste Sublime

    Posté par  (site web personnel) . En réponse au journal Atom / VSCode. Évalué à 3.

    J'avoue que je reste fidèle à Sublime. J'ai essayé VSCode qui était globalement pas mal, sauf que plutôt lent et catastrophique pour le debuggage de Python. Du coup, PyCharm (avec le plugin Vi) pour debugger, Sublime Text pour tout le reste. Je regrette pas d'avoir payé ma licence.

    Par contre, ma config Sublime s'est dégradée, j'ai maintenant un contraste pourri pour les couleurs et mon mode Vi est moins performant qu'avant, genre certaines commandes ne passent plus bien. J'imagine que je me suis maillé entre les NeoVintageous, Vintage et autres plugins vi.

  • [^] # Re: Yoda ?

    Posté par  (site web personnel) . En réponse à la dépêche Python 3.8 : opérateur d’assignation, REPL async, Pickle v5 et plus. Évalué à 2.

    Peut-être que ton besoin serait plutôt autour de l'annotation de type. Jette un coup d'oeil à mypy et aux tutoriaux sur l'annotation de type (et à ma modeste conférence sur le sujet) pour voir si ça te parle plus.

  • [^] # Re: SPAM

    Posté par  (site web personnel) . En réponse à la dépêche Le bulletin d’automne d’ONLYOFFICE : mises à jour, nouveau partenariat et #OSSParis19. Évalué à 5.

    Il manque donc des informations accompagnant le code source, ce qui est contraire à la licence libre du projet

    D'un point de vue strictement juridique, il me semble que livrer les sources sans les build est tout à fait confirme à la GPL. C'est même ce que faisait Redhat et CentOs s'arrachait un peu les cheveux à retrouver les bonnes options de compile.

    Je suis d'accord cependant que dans l'esprit, c'est bien de founir aussi le reste.

    Ce n'est donc pour le moment pas du libre.

    Je crois que tu viens de marquer un point Zenitram.

  • [^] # Re: Python se rapproche du Perl ?

    Posté par  (site web personnel) . En réponse à la dépêche Python 3.8 : opérateur d’assignation, REPL async, Pickle v5 et plus. Évalué à 4.

    Il faut absolument garder le **2 , sinon, ça ne pique pas les yeux !

    >>> l: Dict[int,int] = { 5:9, **{ v: t**2 for v in d if (t:=v%2) } }
    
  • [^] # Re: Python se rapproche du Perl ?

    Posté par  (site web personnel) . En réponse à la dépêche Python 3.8 : opérateur d’assignation, REPL async, Pickle v5 et plus. Évalué à 10.

    Avec plaisir. Alors, l'explication de texte:

    def f(a, /, d, *, e):
        l: Dict[int,int] = { 5:9, **{ v: v**2 for v in d if (t:=v%2) } }
        return l
    

    Pour ce qui des arguments de la fonction f: / comme epxliqué dans la dépêche implique que a peut être passé uniquement en paramètre positionnel, d peut être passé un paramètre positionnel ou par mot-clé et e ne peut peut être passé que par mot-clé.

    Concrètement:

    >>> f({},{},{})
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f() takes 2 positional arguments but 3 were given
    >>> f({},{},e={})   # ca marche
    {5: 9}
    >>> f({},d={},e={}) # ca marche aussi
    {5: 9}
    >>> f(a={},d={},e={}) # et non, a ne peut pas être passé par mot-clé
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: f() got some positional-only arguments passed as keyword arguments: 'a'
    
    

    La partie l: Dict[int,int], c'est juste pour le sport. Ça déclare une variable annotée en tant que dictionnaire avec des clés de type entier et des valeurs de type entier. Pour rappel, les annotations sont ignorées par Python, il faut lancer un outil externe comme mypy pour en tirer quelque chose.

    La nouvelle syntaxe permettant du unpacking dans les dictionnaires: {5:9, **dict}, cela crée un nouveau dictionnaire, avec d'une part une clé 5 associée à la valeur 9, et toutes les autres clés-valeurs sont piochées dans le dictionnaire qui suit le **.

    Les dict comprehensions {v: v**2 for v in d }, cela crée un dictionnaire dont les clés seront v et associées aux valeur v**2 c'est à dire v puissance 2. La valeur v est piochée en parcourant les clés du dictionnaire d.

    On rajoute ensuite un filtre sur les valeurs qu'on pioche dans d via if v%2, en ne gardant que celles qui vérifient v%2 est vrai, c'est à dire v%2 différent de zéro, c'est à dire les nombres impairs. On a donc l'explication du { v: v**2 for v in d if v%2 }.

    Le (t:=v%2) permet de stocker la valeur v%2 dans une variable t, c'est la nouveauté du Python 3.8 expliquée dans la dépêche.

    En pratique:

    >>> t # variable does not exist yet
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 't' is not defined
    >>> d={1:2, 2:3, 4:5}
    >>> l: Dict[int,int] = { 5:9, **{ v: v**2 for v in d if (t:=v%2) } }
    >>> t
    0
    >>> l
    {5: 9, 1: 1}