Ma veille

TODO: flux RSS

TODO: tags

TODO: permalinks

Les eaux du web sont si étendues qu'on ne peut les explorer complètement, mais elles regorgent de merveilles. En voici quelques-unes que j'ai pu rencontrer.

Self-Documented Makefile

#makefile

How I started believing in Cycle Time over Estimation

Presque rien ne prend le temps estimé, autant se baser sur des indicateurs fiables.

#estimation #planning #cycletime #

Une parodie "corporate" du Manifeste Agile.

#manifesto #agile #lol

PyCon US - YouTube

Les replays des confs des PyCon US.

#python #pycon #conf

The Rise of Worse is Better

Tiré d'une conf Lisp provocante, cet extrait tente d'expliquer pourquoi le style "crado" C/Unix a gagné face à la pureté Lisp : (reformulé de façon plus moderne/Agile) il vaut mieux livrer rapidement quelque chose qui marche déjà à moitié, et finalement un truc 90% satisfaisant, plutôt que de chercher la perfection et de ne jamais rien réussir à livrer. L'auteur a continué d'être tiraillé et l'explique dans Worse is better (et d'autres suites), tandis que de nombreuses autres personnes ont donné leur vision de ce schisme.

#worseisbetter #essay

The dispassionate developer

Critique de l'évolution du métier de développeur.

#rant #job

The Evolution of a Haskell Programmer

Satire de la progression en complexité du code fonctionnel/Haskell produit avec l'expérience.

#lol #functionnalprogramming #haskell

Software Folklore

Recueil d'histoires de dèv/de bugs surprenantes.

#lol #debugging #story

Full Grammar specification

La grammaire complète du langage Python.

#python #language #grammar

Python is 1.3x faster by just adjusting some compiling options for libpython | Hacker News comments

Les commentaires Hacker News qui discutent d'un rant sur les impacts de perf de LD_PRELOAD sur libpython, et le ticket de bug Python associé (qui a été mergé depuis).

#hn #python #rant #performance #linker #ld_preload

Git tips

Astuce Git : git push --force-with-lease permet de ne pas écraser la branche distante si elle a bougé depuis le dernier push (typiquement si quelqu'un d'autre a pushé dessus depuis).

#git #tips

Git tips

Astuce Git : [pull] ff = only permet de s'assurer qu'un git pull ne causera jamais de merge indésiré en local (qu'il faut défaire ensuite).

#git #tips

PEP 563 – Postponed Evaluation of Annotations

Depuis Python 3.7, les annotations de type sont persistées au runtime. C'est la base de nombreux outils dynamiques.

#python #typing

What Every Programmer Should Know About SSDs

Un résumé des différences fondamentales du fonctionnement d'un SSD par rapport à un HDD, et les implications que ça a sur les performances.

#perf #ssd

(2009) The ultimate SO_LINGER page, or: why is my tcp not reliable

Le récit de la correction d'un bug qui touche à des subtilités de TCP.

#tcp #bug

Qt Features | Framework Essentials, Tools & Add-Ons

L'ensemble de catalogue Qt.

#qt

git man page generator

Satire de page Git générée aléatoirement. (nécessite d'activer le javascript)

#lol #git

Rebase Considered Essential

Une défense du git rebase que Fossil ne permet pas une fois que la branche a été pushée.

#git #fossil #scm

2022-09-13

Accelerate Python code 100x

Encore un compilateur AOT pour Python.

#python #perf

2022-09-14

NaN boxing

Optimisations typiques pour un interpréteur de langage dynamique (Python, Javascript).

#tagged-pointers #optimization

2022-09-17

Debuggex: Online visual regex tester. JavaScript, Python and PCRE.

Très bon outil pour débugger des regexes : d'une part il offre une visualisation sous forme de "railroad diagram", d'autre part il permet de voir caractère par caractère comment on évolue dedans.

#regex #debug

2022-09-20

Optimising Docker Layers for Better Caching with Nix

Comment Nix layerise les images qu'il produit afin qu'entre elles un maximum de layers soient partagés.

#docker #build #nix

2022-09-21

Goat Ops

Des phrases qui comparent avec humour (amer) la simplicité d'être éleveur de chèvres par rapport à DevOps. Exemples :

#lol #devops #goat

2022-09-21

Making python fast for free - adventures with mypyc

Comment compiler son code Python typé pour faire x2 sur les perfs (seulement).

#python #perf #typing #mypy

2022-09-28

High throughput Fizz Buzz

Exercice d'optimisation sur le simpliste programme "FizzBuzz". Python arrive à ~0.1GiB/s, Java, Go et Rust montent à ~3, en C ça taquine le 8, et avec de l'ASM optimisé et les bons appels systèmes Linux ça peut même monter à 57 (2+ ordres de magnitudes par rapport à Python) !

#perf #asm #linux #syscall #codegolf

2022-09-28

You suck at Excel with Joel Spolsky

Joel Spolsky, en outre fondateur de Stack Overflow et auteur de l'influentiel blog "Joel on Software", a également été développeur à Microsoft sur Excel, il présente (dans un ton un peu dédaigneux) les fonctionnalités essentielles que pas assez de mondes connaît, en particulier la supériorité des "Tables".

#youtube #excel #tuto

2022-09-28

Reducing Logging Cost by Two Orders of Magnitude using CLP

Uber a historiquement une grosse quantité de logs non-structurés (juste une string interpolée), qui prenaient trop de place (trop cher de les stocker longtemps). Ils ont mis au point un algo de compression spécialisé dans les logs, qui tire partie de leur format semi-répétitif (texte à trou, rempli par des valeurs répétées ou similaires), avec une compression classique par-dessus (mais custom pour les floats, qui réduit l'entropie de leur représentation binaire quand ils varient seulement d'un exposant base 10, ou qu'ils sont proches). C'est une optimisation largement dépendante de leur dataset, mais facile à indexer pour des recherches, et qui ne demande pas de changer le code de log.

#perf #logging #float

2022-10-03

Britney Spears' Guide to

http://britneyspears.ac/lasers.htm

#lol

2022-10-04

Big List of Naughty Strings

Un fichier qui contient énormément de strings susceptibles de causer des problèmes, que ce soit d'encoding Unicode, de quoting, de parsing, d'interpolation, de rendu, ...

#string #parsing #testing #unicode

2022-10-05

Introducing Test-Last Development (TLD)

J'espère que c'est de l'humour, même si je comprends pourquoi ça peut passer pour du premier degré. C'était le premier résultat Google pour ce qu'est l'Iterative Test Last (ITL) alors que l'article présente le Test Last Development (TLD).

#lol #testing #itl

2022-10-06

Syntax accross languages

Beaucoup d'exemples de la syntaxe de différents langages pour la même opération, par exemple l'appel de fonction.

#language #design #rosetta

2022-10-21

Someone improved my code by 40,832,277,770%

TL;DR: Le problème est : trouver 5 mots (anglais) de 5 lettres qui utilisent 25 lettres différentes (donc aucune en commun). Sa solution en Python faisait une recherche exhaustive et a pris 32 jours pour terminer. Des personnes ont proposé des programmes plus performants, ne prenant que quelques minutes, puis quelques secondes, enfin quelques millisecondes (d'où le titre), et en fin de vidéo 500 micro-secondes. Techniques employés :

Et c'est un problème qui avait déjà été inventé avant en linguistiques récréatives : the Jotto problem.

#lol #optimization #algo #rust

2022-10-22

Mkcert: Simple zero-config tool to make locally trusted development certificates

Alternative à devoir se coltiner OpenSSL.

#ca #cert #https #openssl

2022-11-01

Solving Sudoku with Poetry's dependency resolver

Et ça marche.

#lol #python #poetry

2022-11-10

The Grug Brained Developer

Les conseils et bonnes pratiques d'une caricature de développeur "moyen", formulé comme par un homme des cavernes. Beaucoup de pragmatisme.

#lol #best-practices

2022-11-10

The Seven Levels of Busy

A quel niveau êtes-vous actuellement ? Et à quel niveau vous sentez-vous bien ?

#health

2022-11-17

Extremely Linear Git History

En se basant sur GitHashCrash qui permet de modifier un commit pour que son SHA-1 colisionne avec une valeur donnée, avec un peu de bash et de git-rebase il arrive (contre un peu de CPU) à avoir des commits dont les SHA commencent à 0 et s'incrémentent.

#lol #git #cryptography

2022-11-22

Hexagonal Architecture and Free Monad: Two related design patterns?

Après un rappel sur les avantages de l'archi Hexagonale, comment aller plus loin (en Haskell) avec une Free Monad pour construire un *embedded DSL* avec les propriétés voulues. Il s'agit d'un prélude (2017) aux *effect systems*.

#archi-héxagonale #haskell #monade #effect

2022-11-26

Does Sam Gross nogil CPython fork perform faster?

Une (trop) courte analyse des performances d'un fogk CPython sans GIL.

#python #perf #gil

2022-12-15

We need to talk about testing

Une vision très pragmatique de ce qu'est le test, et de pourquoi le TDD n'en est pas un très bon exemple.

#testing #tdd #bdd

2022-12-19

https://ericlippert.com/2008/09/10/vexing-exceptions/

Une ontologie des exceptions :

#exceptions

2022-12-21

https://www.pypy.org/posts/2022/12/jit-bug-finding-smt-fuzzing.html

Un développeur de PyPy explique comment utiliser Z3 (un SMT-solver facile d'accès grâce à ses bindings en Python) pour prouver que des optimizations faites par PyPy sont correctes. Les traces générées par PyPy (puisque c'est une tracing-JIT) peuvent donc être converties en code Z3 et automatiquement prouvées. Il l'a fait pour tous leurs tests unitaires d'abord, puis en branchant en entrée un fuzzer (Hypothesis) qui génère de bonnes traces, certains recoins de l'optimiseur ont pu être explorés et d'autres byg trouvés, principalement concernant les over/underflows et l'asymétrie INT_MAX != abs(INT_MIN). Cela lui a permis de confirmer que deux bugs subtils en étaient bien, maid cela reste pour l'instant limité aux optimisations des opérations numériques.

#python #pypy #fuzzing #smt

2022-12-21

A not so unfortunate sharp edge in Pipenv

Le récit d'un build cassé et des difficultés à réparer avec l'outillage Pipenv.

#python #pipenv #lockfile #dependency #supplychainattack

2022-12-22

PyPI malware creators are starting to employ Anti-Debug techniques

Techniques d'obfuscation et d'anti-analyse en Python relevées par JFrog.

#python #malware #debug #obfuscation

2022-12-25

Detecting the use of "curl | bash" server side

Comment un serveur peut détecter que ce qu'il envoie est pipé dans bash, qui lit et exécute les lignes une par une.

#security #bash #curl

2022-12-31

What’s in a package

Comment packager PyTorch pour Guix (Nix) ? En inspectant le contenu des packages Python et les méthodes pour les construire, on constate que ce n'est ni reproductible, ni même fiable en terme de supply chain. La récente supply chain attack (https://pytorch.org/blog/compromised-nightly-dependency/) dessus le montre bien.

#python #package #pip #nix #security #supplychain #reproduciblebuild

2023-01-05

Writing a TLA⁺ tree-sitter grammar

Le récit de la (re)définition de la grammaire TLA+ et de son l'implémentation pour tree-sitter afin d'être ensuite intégré dans NeoVim. Avec une bonne explication de la différence entre tree-sitter et un Langage Server. Et des étapes dans le ressenti personnel envers le code OpenSource. J'en suis à 3,5 actuellement.

#tlaplus #treesitter #lsp #grammar #opensource

2023-01-17

Why We Need to Know LR and Recursive Descent Parsing Techniques

Une bonne présentation des différences, et donc des avantages et inconvénients, entre les grammaires/parsers LR et descent-recursive. Nécessite de bonnes bases.

#parsing

2023-01-18

Software testing, and why I'm unhappy about it

Effectivement, nos outils actuels d'exécution de suites de test sonr encore rudimentaires.

#testing #pragmatism

2023-01-20

Calculating the mean of a list of numbers

Calculer la moyenne d'une séquence de nombres est bien plus compliqué que ça n'en a l'air (en partie à cause des nombres flottants) et le test d'hypothèse peut se révéler utile.

#property-based-testing #hypothesis #floats

2023-01-23

Git Commands You Probably Do Not Need

En effet, des commandes avancées qui aident à comprendre Git, et peuvent à l'occasion se révéler utiles.

#git #nix

2023-01-24

Compiled and Interpreted Languages: Two Ways of Saying Tomato

Une démonstration par l'exemple que la frontière est floue entre un interpréteur et un compilateur. L'article en lui-même ne m'a pas vraiment convaincu, mais je suis d'accord. Et le langage "BF" en question c'est "Brainfuck". cf les Projections du Docteur Futamura : http://blog.sigfpe.com/2009/05/three-projections-of-doctor-futamura.html

#compilation #brainfuck

2023-01-25

Eviscerating the Test Automation Pyramid

En partant du constat que personne n'est d'accord sur la définition exacte de la Pyramide des Tests, il en propose une que je trouve pertinente : l'axe vertical c'est simplement la portion de l'appli (ou du système) qui est testée. Ça a l'avantage de ne pas trop s'ancrer dans les détails (s'il y a une UI, une API, des classes, ...), et il n'y a pas de labels sur les différents tiers. La présentation de la Pyramide chez Martin Fowler (https://martinfowler.com/articles/practical-test-pyramid.html) est je trouve bonne et adéquatement nuancée.

#testing #pyramid

2023-01-26

Be Careful with Python's New-Style String Format

Le "new style" c'est str.format car l'article date de 2016. Mais en effet puisqu'on peut exécuter du code arbitraire c'est un risque, que n'ont pas les f-strings je pense.

#python #security

2023-01-28

4 reasons to leave a code comment

(je ne suis pas convaincu par la 4ème)

#comment

2023-02-03

Crafting container images without dockerfile

Créer une image Docker sans utiliser un Dockerfile, mais directement en éditant un fichier OCI (en Rust).

#docker #rust

2023-02-06

https://www.luu.io/posts/mature-engineer

Laisser les choses en meilleur état.

#craft #career

2023-02-06

Rewrite, refactor, or reinvent ? Lessons from 6 software rewrite stories

Quels facteurs ont justifié de prendre le risque d'une récriture (malgré l'avertissement de Joel Spolsky) et les différentes stratégies pour réussir.

#business #technical-debt

2023-02-07

An Issue for Open Education: Interpreting the Non-Commercial Clause in Creative Commons Licensing

La mise en évidence du flou dans la clause NC ("non-commercial") des licences Creative Commons. TL;DR : il n'y a pas de jurisprudence, donc se méfier.

#creative-commons #licence

2023-02-08

Why does 0.1 + 0.2 = 0.30000000000000004?

Très bonne explication des problèmes de précision/représentation causés par les floats.

#float

2023-02-09

Can sanitizers find the two bugs I wrote in C++?

TL;DR: oui, cf ma revue le 2023-01-17, les réponses en commentaires à son article lui disaient que les sanitisers auraient trouvé les 2 bugs qu'il a rencontré.

#cpp #asan #ubsan

2023-02-09

Let's be real about dependencies

En réponse aux critiques comme quoi les programmes Rust utilisent trop de dépendences transitives, il montre que c'est aussi le cas pour les programmes "clean" en C/C++ mais qu'ils le font de manière (beaucoup) moins évidente. Ses conclusions à la fin sont bonnes.

#dependencies #os #c #cpp #rust

2023-02-11

Google’s Fully Homomorphic Encryption Compiler — A Primer

Une petite démo de la transpilation d'un programme simpliste en C++ (syntaxe réduite) vers du code qui réalise les opérations sous chiffrage homomorphique, c'est-à-dire sans avoir à déchiffrer les données. Par contre les perfs sont abyssales (pénalité de 20000).

#encryption

2023-02-14

The 4 things it takes to be an expert

TL;DR: l'expertise c'est savoir reconnaître des patterns, il faut réunir 4 critères :

Pour moi, ça ressemble beaucoup à l'esprit Craftmanship : maîtriser ses outils et techniques via les kata, mentorer.

#expert #craft

2023-02-15

Naming things in code

TL;DR : dans les noms de variables : pas d'abbréviation, pas d'info de type (hungarian notation), pas d'unité, pas de type (I pour Interface, pas de *abstract* ou *base*.

#naming

2023-02-15

"Stop writing dead programs" by Jack Rusher (Strange Loop 2002)

Dans la lignée du "Stop drawing dead fishes" de Bret Victor, ce talk présente les limitations de la manière classique de travailler avec les langages mainstream, et des alternatives (ou pistes de réflexion) pour augmenter l'interactivité.

#future

2023-02-15

Lessons learnt while trying to modernize some C code

L'échec de tenter de contribuer à un projet open-source ... en langage C sale.

#c #cpp #codequality

2023-02-20

Weird architectures weren't supported to begin with

La décision des dévellopeurs de l'éminent package Python `cryptography` de passer de C à Rust en 2021, pour des raisons de fiabilité, a cassé beaucoup de pipelines (car Rust n'était pas présent pour compiler le package depuis ses sources si pip ne trouvait pas de wheel pré-compilée adéquate) et ne peut donc qu'être installé sur des plateformes supportées par le backend de LLVM. Ça a été l'occasion de relancer le débat sur la responsabilité (ou pas) des mainteneurs OpenSource.

#python #rust #cryptography

2023-02-21

This Goes to Eleven (Part 1/∞)

"I ended up going down the rabbit hole re-implementing array sorting with AVX2 intrinsics. There’s no reason I should go down alone." est le premier opus d'une série d'articles qui suivent de façon très introductive l'implémentation d'un QuickSort à base d'instructions vectorielles (AVX), pour DotNet. Il y a des infographies complètes, des data sourcées, des animations, ... un vrai soin apporté !

#avx #dotnet #optimisation #algo

2023-02-21

NP-Complete isn't (always) Hard

Un petit rappel que les classes de complexité se basent sur le *worst case*, qui peut ne pas être représentatif (contraposée : des problèmes communs sont facilement SAT-solvés bien que NP-Complete/Hard). Et les *package managers* n'utilisent pas de SAT-solvers (en général) car c'est peu approprié/pratique.

#algo #complexity #dependency #sat

2023-02-21

The age of cargo cult Agile must end.

Débunkage d'un article critique de l'Agile. Il y a de très nombreuses sources, la perspective historique que cela donne est très appréciable. Et cela ré-affigme ce qu'est l'Agile et ses méthodologies. Je vois souvent les gens confondre Agile et Scrum, voire faux-Scrum.

#agile

2023-02-23

A tale of Phobos - how we almost cracked a ransomware using CUDA

Pour tenter de casser les clés de chiffrement d'un ransomware, les chercheurs ont réduit l'espace de recherche (entropie) puis optimisé le code, pour atteindre une durée de crack raisonnable. Mais tout cela requière des infos très précises sur le contexte d'exécution du ransomware.

#cryptography #reverse-engineering #cuda

2023-02-24

GNOME’s horrid coding practices

L'autfur explique qu'avoir raison est plus important qu'être poli, de ça je ne suis pas convaincu. Par contre refuser une contribution et s'enfermer dans un marasme de hotfixes me semble clairement inefficace. Un bug est un bug.

#opensource #communication

2023-02-26

Manifesto for Half-Arsed Agile Software Development

La version semi-parodique "foireuse" du [Manifeste Agile](https://agilemanifesto.org/iso/fr/manifesto.html)

#lol #agile

2023-03-01

This is a motherfucking website.

Un exemple de site web pas trop moche avec quasi aucun CSS. A inspiré http://bettermotherfuckingwebsite.com/ et https://thebestmotherfucking.website/

#lol #design #css

2023-03-02

Goodhart's Law Isn't as Useful as You Might Think

Une présentation de la Weekly Business Review d'Amazon, qui passe en revue des centaines de métriques actionnables pour améliorer les résultats de l'entreprise.

#process #data-driven

2023-03-04

Imaging A Hard Drive With non-ECC Memory - What Could Go Wrong?

La recherche de la cause d'une erreur de checksum.

#debugging #ram #ecc

2023-03-06

The Registers of Rust

Présentation du concept de "registre de language" par analogie à nos langues où l'on peut user de différents registres (formel, familier, ...) qui permettent différemment de communiquer. Dans le cas de Rust ici il est discuté des manques de certains, surtout en regard des *effects* et de la programmation fonctionnelle versus impérative.

#rust #language-theory #functional #effects

2023-03-09

The Cube Rule of Food Identification

La fin des débats de ce qui est ou pas un sandwich ? (non)

#lol

2023-03-09

How we can correct the mistakes made with Agile • Allen Holub

Allen Holub dans cette vidéo défend une vision très pure de l'Agile : autonomie complètes des équipes, livraison permanente qui donne lieu à du feedback immédiatement, ... Et en effet c'est assez différent de Scrum.
Il dézingue Scrum en expliquant que ça ne peut pas marcher (son analogie sur l'usine de Detroit), mais je crois plutôt que, contrairement à ce qui est écrit dans le Scrum Guide, il ne faut pas le prendre comme une bible mais comme une base pas trop mauvaise. Je défends ensuite de l'adapter aux envies/besoins/particularités de l'équipe.
[Insérer référence à "les règles au début on les suit sans les comprendre, puis on les comprend, puis on crée ses propres règles]
Se contenter de Scrum c'est effectivement se mettre une poutre dans l'oeil. Mais ça fait fonctionner le biz du "Agile industrial complex" (disclaimer : ma certif dèv Scrum a expiré il y a 3 ans).
Mais pour aller au-delà il faut déplacer des montagnes : sortir du taylorisme, obtenir la confiance et l'autonomie, être auto-critique et savoir s'auto-organiser, ... Je ne crois pas que tout ça soit acquis, donc on se retrouve souvent avec Scrum comme compromis.
Et je voudrais insister sur le fait que Scrum évolue beaucoup. Je ne connais pas la version d'il y a 20 ans, mais la version 2022 est significativement différente de celle de ma certif de 2018. La certif c'était de savoir répondre par coeur à des questions, donc effectivement le niveau zéro de l'esprit critique. Et c'est dans ce terreau que naissent les guéguerres de chapelles. Le cargo culting ne sert personne, à part les vendeurs de hype.
Pour moi, Scrum c'est pas un si mauvais premier choix comparé à bien d'autres situations car tu as l'obligation de livrer (et donc d'intégrer), de se centrer sur la valeur, de s'améliorer continuellement, ... Toutes des valeurs du Manifeste, peut-être pas dans la pureté que défend Allen, mais je pense qu'il vaut mieux "half of scrum badly + jira" (citation d'Andy Hunt) que rien du tout. Et ensuite évoluer vers mieux.
Pour conclure, et par rapport au titre de la vidéo, ne pas perdre de vue le contenu du Manifeste, et ne pas se contenter de Scrum (et surtout pas de Jira !).
PS : se baser sur les slogans Orwelliens c'était un peu pété à mon avis

#agile #scrum

2023-03-13

Repeat yourself, do more than one thing, and rewrite everything

Cet article a l'air intéressant, mais qu'est-ce qu'il part dans tous les sens, je ne vois pas le fil conducteur ! Dès le début ça embraye sur DRY, puis ça tourne sur Sandi Metz à propos de "the wrong abstraction", que ça compare au SRP de Solid, que ça enchaîne sur les difficultés de couplage puis sur la modularisation. Et ça semble ne pas prendre le temps de rappeler que l'origine de DRY c'est The Pragmatic Programmer et que ses auteurs dans 20e édition précisent que DRY ce n'est pas tant à propos du copier-coller que surtout "the duplication of knowledge, of intent". Mais ce n'est pas comme ça que ça a été compris. WET tente de contrecarrer les effets néfastes de DRY sur l'abstraction, mais il n'est pas mentionné dans l'article.

#dry #craft

2023-03-16

Unit test your Java architecture

Un framework pour implémenter en Java des tests sur des règles d'architecture (import de package interdit, respect des couches, pas de cycles, ...).

#archi #java #test

2023-03-20

Outperforming everything with anything

L'exemple porte sur l'optimisation d'une fonction de calcul sur une matrice, dont le temps d'exécution est benchmarké. Une solution naïve est codée en Python, et lorsqu'elle est exécutée la première fois elle note astucieusement le code LLVM correspondant à ce qu'elle fait. Le code ainsi produit est très verbeux et très peu optimisé, mais une phase de compilation avec optimisation plus tard on obtient un super binaire, qui obtient de bons résultats au benchmark. C'est une technique utilisée par des compilateurs Python pour la perf, comme Numba.

#python #perf #compilation #llvm

2023-03-21

Programming Sucks

Un bon râlage sur le bazar qu'est la programmation. Dispo en français

#lol

2021-03-21

A CPU is a compiler

Un CPU est un compilateur qui prend en entrée de l'ASM et en sortie produit des phénomènes physico-électriques. Vu sous cette angle, on retrouve beaucoup de techniques en commun.

#compiler #cpu

2023-03-24

Systems design explains the world: volume 1

Une courte introduction à l'utilité et quelques exemples de systems design. J'aime beaucoup l'approche de tenter de comprendre la réalité et d'aller à la source des problèmes.

#systems-design

2023-03-25

Coordination Headwind

Comment une organisation qui travaillait rapidement devient lente en grandissant ? En devant aligner les intérêts de nombreuses personnes, au même moment, avec un plan clair pour un objectif identifié, de façon satisfante pour chacune, en évitant les tensions inter-personnelles, et les escalades par managers intermédiaires.

#organisation

2023-03-27

Treat your to-read pile like a river, not a bucket

Du haut de mes 300+ onglets sur téléphone (Firefox m'indique "∞"), mon dossier "later" de 200+ bookmarks, mon "later2" de 1000+, mes archives des différents ordinateurs/navigateurs que j'ai eu ... oui j'ai le même problème. Pour s'en sortir il faut choisir quoi sacrifier ; c'est dur. Et ne pas ré-ouvrir Hacker News juste après ...

#veille

2023-03-30

Making Python 100x faster with less than 100 lines of Rust

Un algorithme intensif en calcul récrit efficacement en Rust. L'outillage de base (pyo3/maturin) permet de facilement étendre du code Python par du Rust, avec un peu de connaissances en Rust (et un scope réduit) on peut tout-à-fait en intégrer au besoin. Néanmoins, utiliser la vectorisation intrinsèque à Numpy aurait pu améliorer significativement les perfs sans se compliquer la vie à devoir ajouter du Rust.

#python #rust #performance

2023-04-03

How to be a -10x Engineer

Le nemesis. Effrayant de retrouver certaines pratiques courantes dans cette liste.

#lol

2023-04-04

Recurring opinions or productive improvements — what agile teams actually discuss in retrospectives

Mes remarques dessus, à part que c'est globalement intéressant :

  • * Les ScrumMaster ont l'air de faire du bon boulot (car leur poste est distinct de manager/chef de projet ?), mais je remarque l'absence de scrum master comme sujet de discussion
  • * Les tableaux (figures) sont synthétiquement intéressants pour savoir de quoi discutent les autres, j'aime beaucoup cet aspect du "pratical engineering" (le nom du journal de publication/du domaine de recherche). Mais le n°8 est illisible pour moi (ou je suis daltonien ?)
  • * La figure 10 en particulier montre bien qie l'équipe est très sensibles aux bugs (leur augmentation comme diminution) tant que la variance est forte, on peut appeller ça du "flair" non ?
  • * On voit bien une évolution des sujets dans la vie du projet
  • * Dans la conclusion ils parlent de sujets "bouc-émissaires", mais je serais moins négatif. J'entrevois mal qu'on essaye d'appliquer une rigueur scientifique aux rétros, qui sont pour moi l'occasion de donner un peu de place à l'humain dans les process. Certes ça ne fait pas avancer le schmilblik, mais ça fait du bien de pester un peu ! #Français

#agile

2023-04-05

Le design pattern : décorateur

En lisant l'article, j'ai été surpris de trouver les exemples aussi mauvais. En premier par le cas de notifieurs, ce n'est pas cette solution que je recommanderait, et ce pour 2 raisons :

  • * D'abord ce n'est pas très DDD, c'est-à-dire que ce n'est pas une modélisation du métier tel qu'il existe, ce concept de "wrapper" vient uniquement du code, il n'existe pas dans le problème décrit. Ce qu'on a plutôt, et ils le disent, c'est plusieurs moyens de contact et on veut tous les utiliser. Est-ce qu'une bête liste ne ferait pas aussi bien le travail ? Le client met dedans tous les moyens de contact qu'il veut, et l'appli les effectue un par un.
  • * Et d'un point de vue complexité, pas besoin de classes abstraites, de wrapper, de récursivité (comme semble l'indiquer leur snippet `stack = new FacebookDecorator(stack)`). Pour l'instant, tout cela n'est absolument pas justifié. Et pourtant si on plisse les yeux on voit bien qu'on émule un vecteur avec tout ça (succession d'ajouts conditionnels `if (facebookEnabled) push_back`).

Ensuite leur analogie des vêtements en couche est claquée. Sans moi-même fallacieusement faire remarquer que le même problème peut être vu comme une question d'archi en couche (je l'ai fais dans la phrase précédente), c'est surtout que s'il pleut et qu'ensuite j'ai froid alors je mets mon blouson par-dessus mon anorak ? Le métier (propriétés techniques des habits, et les coutumes vestimentaires) ne prescrit rien, mais on fait quand même un choix technique pété.

Ensuite l'article part sur les décorateurs abstraits. Je soutiens qu'ils ne servent à rien pour le pattern. Surtout qu'ils rigidifient de devoir appeller un unique `extra` sans paramètre, et après l'emballé. Ce qu'il faudra de toute façon override, donc autant s'en passer.

J'ai l'impression que l'article ne démontre pas du tout correctement l'utilité des décorateurs. Pourtant ils sont très utiles, en Python il y a de la syntaxe exprès pour. Mais là ils ne donnent pas d'arguments décisifs et s'encombrent trop je trouve.

#design-pattern

2023-04-06

Ma revue de "Understanding Docker in a visual way" par Aurélie Vache

Un bon *primer* je trouve, on a de bonnes bases pour commencer. Mais ça reste très "catalogue de comment faire certaines actions", je trouve qu'il y a assez peu de "understanding" au final. Pour reprendre la classification Divio https://documentation.divio.com/ on a bien les 3 autres quadrants mais il manque je trouve de la substance entre toutes les commandes qu'elle énumère. La forme a peut-être un peu trop guidé le fond.
Et je trouvais parfois l'écriture manuscrite presque illisible, je préfère le compromis d'Excalidraw plus efficace.
Elle mentionne qu'il ne faut pas passer des secrets avec --build-arg mais ne pointe pas vers la façon correcte de faire.
Ça n'empêche pas que j'ai appris des trucs, soit que je n'avais pas creusé (les limites RAM/swap, CPU, capabilities, ...) soit qui m'était mystérieux (la convention chroot pour les exit code).

#docker

2023-01-12

Ma revue de "Understanding Istio in a visual way" par Aurélie Vache

Aucune explication de ce qu'est un Service Mesh, dès le début. L'avant-propos indique de ne pas troller en comparant les alternatives, mais ni leurs différences ni même leurs noms ne sont évoqués. Et la description de ce que fait Istio se résume à "cette liste de checkpoints [non définis]" (page 9). Le texte manuscrit est devenu majoritaire, au détriment de la lisibilité. Et il y a encore de nombreuses fautes de grammaire. Et j'ai du mal à lire les niveaux d'indentation des Yaml.
Page 27 surgissent les VirtualService sans aucun contexte, ils sont juste cité dans un schéma plusieurs pages avant sur les Gateway, accompagné du mot "bind".
Pour moi, le "in a visual way" prend encore une fois le pas sur le "understanding", mais plus encore que pour son oeuvre similaire sur Docker, tant est que j'ai du mal à suivre le contenu.
Nitpick : elle donne l'exemple de router le trafic HTTP selon l'user-agent "firefox" mais il faut plutôt chercher "gecko", le nom du moteur de rendu qui est présent dans d'autres applicatifs, cf https://webaim.org/blog/user-agent-string-history/

#kubernetes

2023-01-12

Load Balancing

Explication très intuitive grâce aux visuels.

#perf

2023-04-29

The epistemology of software quality

Qu'est qui est plus efficace qu'un linter ou que Rust pour la qualité de code ? Que les devs soient reposés, ne travaillent pas trop et ne soient pas (trop) stressés.

#quality

2023-04-29

Performance Excuses Debunked

5 justifications fréquentes que la perf ne compte *jamais*, réfut3es par Casey Muratori. Ca fait un peu argument de l'homme de paille, mais les très nombreux exemples qu'il donne sont bien une preuve que c'est un sujet fréquemment pertinent (même si pas toujours).

#perf #proof

2023-04-29

Extending web applications with WebAssembly and Python

Suborbital sert d'exemple. C'est un moteur/framework pour permettre les plugins dans des webapps. Il y a notament une interface WASM qu'il est possible de target. En réutilisant les travaux antérieurs sur embarquer un interpréteur Python (compilé en WASM) dans le navigateur, il devient facile de créer un plugin web en pur Python. L'article est clair, le code est dispo et expliqué, cool ! Mais ils ne parlent pas de perf du tout.

#python #wasm

2023-05-11

SectorC: A C Compiler in 512 bytes

Un compilateur qui pour tenir dans le boot sector (0,5 Ko) est minimal. Ca n'est bien entendu pas conforme au dtandard, mais ça montre ce qu'on peut réussir à faire avec de l'ASM.

#c #compiler #lol

2023-05-25

When LIMIT 9 works but LIMIT 10 hangs

TL;DR: certaines requêtes SQL faisaient péter le WebSockets de la lib "undici" entre une app Node et la DB Postgres, car le payload WS dépassait la taille threshold de 126, ce qui provoquait dans la lib un bug de mémoire (non initialisée et non écrite) pour de sombres histoires d'offset dans un ArrayBuffer dans une pool et de perf.

#ws #perf #postgres

2023-05-31

Hacking my “smart” toothbrush

L'article parle d'une brosse à dent dont le manche communique avec la tête via NFC. Et les commentaires sur Hacker News vont bon train sur les implications stupides que cela permet : après 3 mauvais mots de passe, la tête se brick (valeur très basse définie par Philips par sécurité), donc avec le bon matos tu peux aller te balader dans un magasin et bousiller tout leur stock (Toothbrush Terrorist). Ou bien ajouter la 2FA comme mesure de sécurité additionnelle, reconvertir la tête NFC en clé d'hotel ou carte d'abonnement de transport en commun, requérir que le remplacement des parties satisfasse

#lol

2023-06-02

Language Pragmatics Engineering

De l'importance de l'ergonomie dans l'utilisation de certaines fonctionnalités, pour en faciliter l'adoption. Les exemples : le typage fort, les patterns où l'on sépare les IO du code métier, l'outillage du langage, le scaling de 1 Hz (la vitesse de travail d'un dev) à la prod, ...

#programming-language

2023-06-03

Harder Drive: hard drives we didn't want or need

Vidéo humoristique de tom7 où il présente différentes façon de stocker des données : en jonglant à envoyer des pings contenant une payload à des serveurs de l'autre côté du globe, dans la configuration de lignes de milliers de parties de Tetris en parallèle, ou bien dans la minuscule mémoire d'une multitude de tests Covid assemblés en une seule mémoire unufiée.

#lol #network

2023-06-06

Define Define

TodePond est jne chaîne qui parle de codes pour des simulations, avec un style particulier. Ce dernier épisode a une tournure très intéressante.

#trippy #definitions

2023-06-11

La gestion des erreurs

Un talk donné par Robin Moussu, et qui parlait notemment des différentes syntaxes/sémantiques que les langages de programmation offrent pour la gestion des erreurs (code d'erreur, exception, ...). Mais pour choisir entre les différentes possibilités, j'aime bien la classification d'Eric Lippert avec ses Vexing/Fatal/Boneheaded/Exogenous Exceptions. Cela permet de mieux choisir entre checked et unchecked exceptions en Java (je ne retrouve plus l'article qui expliquait si bien la bonne stratégie à employer et les erreurs de la stdlib, celui-ci de Miško Hevery sur le Google Testing Blog avec celui-là peuvent faire l'affaire). Et pour une vision encore plus complète du problème et de son évolution, l'excellent The Error Model de Joe Duffy sur son expérience du projet Midori à Microsoft.

#error-handling

2023-06-14

Introducing Hurl, a terrible (but cute) idea for a language

Un langage où on peut définir des variables et des lambdas, et sinon seulement raise et try-catch des exceptions (et les rewind). Ça suffit pour implémenter les structures classiques de control flow, à l'instar de Python.

#lol

2023-06-19

{n} times faster than C - part one

Micro-optimisation d'une simple boucle et comparaison avec ce que Clang et GCC ont naïvement généré. La partie 2 va explorer l'efficience des cache-lines.

#perf

2023-07-07

Stevey's Google Platforms Rant

Il explique que le succès d'Amazon AWS et de Microsoft est d'avoir crée des plateformes où créer des produits, là où Google peine encore à créer ses produits sans plateforme.

#architecture

2023-07-25

How NAT traversal works

Excellente explication sur le blog de TailScale (WireGuard) qui explique comment NAT impacte les connexions pair-à-pair sur et à travers les réseaux.

#network

2023-08-05

Hexagonal or not Hexagonal?

Réflexions intéressantes sur les formes et l'utilité des Anti-Corruption Layer en Hexagonal/DDD, et plus générallement sur les intérêts ("facets") du pattern Hexagonal selon les interprétations qu'on en fait.

#ddd #hexagonal #architecture

2023-08-09

Nobody ever paid me for code

Conseil de posture pour sa carrière : parler solution plutôt que technique avec un client.

#career

2023-08-15

htmx - Essays

Une collection d'articles par les personnes ayant crée htmx, qui clarifient ce qu'est une API REST (aucun rapport avec JSON), le couplage avec les applications, les problèmes du tout-javascript, l'ergonomie des SPA/MPA, ...

#html #rest #api #hateoas

2023-08-17

ECKHART TOLLE - Le pouvoir du moment présent

Dispo aussi sur Youtube.
TL;DR: vivez le moment présent, focalisez-vous sur vos sensations, plutôt que de ruminer le passé ou de vous inquiéter des futurs possibles. #mindfulness

#philosophie

2023-08-18

GIL removal and the Faster CPython project

Un résumé à date des débats, groupes, positions et difficultés causés par le projet de retirer le GIL de Python. Le GIL est une facilité pour écrire le code multithread de l'interpréteur CPython, qui 20 ans plus tard limite gravement les perfs multithread.

#python #perf

2023-08-19

Asyncio, twisted, tornado, gevent walk into a bar...

Une présentation de ce qu'est l'async en python, et des frameworks historiques qui ont contribué à sa maturation. Et la conclusion rappelle qu'on n'en a rarement besoin

#python #async #historic

2023-08-22

Je suis nul.le

Très bon talk, son message positif est bienvenu. Dommage pour la qualité sonore.

#estime-de-soi #syndrome-imposteur

2023-08-28

The Roofshot Manifesto

Avoir des objectifs raisonnables, et les atteindre incrémentalement, est la route sans histoire du succès.

#sprint

2023-09-25

Fine-grained Language Composition

A l'aide de sorcelerie à base d'une VM composée de 2 meta-tracing interpreters, 2 langages (Python et PHP, via des interpréteurs respectifs) peuvent être exécutés au sein d'un même fichier, sans FFI explicite. Mais l'article date de 2016, je ne sais pas si ça a évolué depuis.

#interpreter #python #php

2023-10-10

Blagues européennes

Collection de clichés/blagues de pays européens envers d'autres.

#lol

2023-10-10

Making hard things easy

Très bon enseignements que je partage :

  • Share useful tools
  • Share your references
  • Tell a chronological story
  • Show hidden things
  • Demo a confusing tool

#impostor #community

2023-10-11

Why Git is hard

Très bonne explication des concepts, et je partage son avis que sans les comprendre on ne peut que faire des erreurs sans s'en rendre compte. Mais la ligne de commande, la config, le stage et le working tree représentent tellement de contexte mutable et de subtilité que je m'y perds parfois moi-même.

#git #learning

2023-10-11

How fast are Linux pipes anyway?

Sur les traces du célèbre FizzBuzz à très haut débit (Stack Overflow), le voyage d'un speedup x20 qui nous plonge dans les tréfonds de Linux.

#linux #perf

2023-10-11

Running the “Reflections on Trusting Trust” Compiler

Ken Thomson, dans les années 80, mit en garde contre les backdoors qui peuvent vivre dans les programmes, et surtout les compilateurs (il est co-auteur du langage C) qui se compilent eux-mêmes, où les backdoors peuvent alors survivre sans être présentes dans le code.
Cet article, 40 ans plus tard, examine ce contre quoi Ken mettait en garde, et le remet au goût du jour.

#sécurité #compilateur #quine

2023-10-28

My User Experience Porting Off setup.py

Le récit détaillé de quelqu'un qui n'est pas novice et qui voudrait simplement et fiablement builder son package en Python 3.12.

#python #packaging

2023-11-01

Reflections on quitting my job.

Rétrospective sur 7 années professionnelles. Je suis très en accord avec ses points : se faire des opinions, observer comment les autres travaillent (code, debug, relecture, ...) pour s'entre-améliorer, faire du code simpliste et le mettre en prod, owner collectivement le code, bien utiliser git, s'autoriser à poser des questions qui semblent idiotes.

#retro #skills

2023-11-01

Sometimes, it is a compiler bug

Le mainteneur d'un linteur pour JS écrit en C++ constate un bug coriace, et va finir par le corriger.

#c++ #asm #windows

2023-11-04

Coding for a Finite World

Comment repenser nos pratiques de dévellopement au regard de la crise climatique et des bouleversements globaux.

#ecologie #résilience

2023-11-15

Color: From Hexcodes to Eyeballs

Explication de bout-en-bout de comment nous perçevons les couleurs décidées dans nos programmes informatiques.

#science

2023-12-04

Escaping the sandbox: A bug that speaks for itself

A l'aide d'un fuzzer, trouver des inputs SSML (XML for speech synthesis), envoyables depuis du JS qui tourne dans un navigateur Chromium à une lib dynamique Windows possédant une vulnérabilité sur le parsing XML.

#debug

2023-12-05

Fuzzing vs property testing

La différence entre 2 techniques de test employant de l'aléatoire : fuzzing et property-based testing. Et 2 comportement intéressants, émergant des properties.

#test #fuzzing #property

2023-12-08

What engineering can teach (and learn from) us

Troisième épisode de sa série où il interviewe des ingénieurs traditionnels (construction, chimie, ...) s'étant reconverti dans l'informatique, ce qui diffère et ce qu'on peut apprendre de leur vision différente.

#philosophie

2023-12-24

The 4 things it takes to be an expert

TL;DR :

    • un environnement valide pour la pratique, c'est-à-dire où la réussite ne dépend pas majoritairement du hasard
      répéter de nombreuses fois
      obtenir du feedback peu après
      pratiquer de façon délibérée, consciemment
  • #expertise #craft

    2023-12-26

    JVM Field Guide: Memory

    Un tutoriel pratique pour comprendre comment Linux gère ses différentes mémoires, l'OOMKiller la récupère, et un programme (Java spécifiquement) l'alloue.

    #linux #os #ram

    2023-12-28

    4 billion if statements

    Une fonction `isEven` avec toutes les réponses (uint32) hardcodées dans des branches de if-elif-else.

    #lol

    2023-12-30

    ugit: DIY Git in Python

    Un tutoriel de comment réaliser une implémentation minimale de Git, pour mieux en comprendre les concepts et le fonctionnement.
    Dans la même veine il y a Committing without git où on crée des commits manuellement.

    #git #pyhon

    2024-01-01

    Network protocols, sans I/O

    Implémenter ses protocoles de façon IO-agnostic, c'est-à-dire en supposant disposer d'une fonction qui récupère les bytes en entrée et d'une autre qui permet de les faire sortir, permet à la fois de les rendre facilement testable (sans mock biscornu) et framework-agnostic (relativement facile à intégrer n'importe où, async ou sync, ...).

    #architecture #pure #async

    2023-01-22

    Porting libyaml to Safe Rust: Some Thoughts

    Récit de la récriture d'un parseur YAML en Rust, tant du point de vue de ce qu'il a fallu techniquement faire, que des intérêts humains que cela apporte.

    #rust #yaml #parser

    2024-02-09

    libfaketime

    Typiquement injecté via LD_PRELOAD, va remplacer l'appel système "time" par une implèm qui en donne le choix de la valeur, de l'avancement, de la vitesse. Hyper pratique pour tester de manière non-intrusive du code de gestion du temps.

    #testing #time

    2024-03-15