@BIXImontreal Promouvoir la mobilité durable c'est bien, mais est-ce qu'il serait possible de faire la promotion de la sécurité en même temps ? Ça devrait être fait de base dans toutes les publications ou promotions du déplacement en vélo !!
AIs are just another step up the semantic expression ladder. We initially expressed our semantics in binary, then assembler, then Fortran, then C, then Java, then Python, etc. AI is just the next step up that same old ladder.
And when you take that step, nothing else changes. You are still expressing behavioral semantics. You still need to express structural semantics. All the old principles still apply. You still have to be concerned about design and architecture.
And even though the syntax allows informal statement, you cannot abandon formalism. When you express behavior you need a formal way to enforce the behavior you want. I use Gherkin for this. It seems to work pretty well.
Consider that Gherkin is written in triplets of Given/When/Then. Each of those GWT triplets is a transition of a state machine. A full suite of Gherkin triplets is a formal description of the finite state machine that represents the behavior of the application.
Other formalisms that matter are things like module dependency graphs, testing constraints, complexity constraints, and many others.
This step up the semantic expression ladder provides you with an enormous amount of options. But you'd better choose those options wisely!
GitHub vient de lancer gh stack, une extension officielle de la CLI qui introduit les stacked PRs nativement.
L'idée : plutôt qu'une pull request monstre de 2000 lignes que personne ne veut review, on découpe les changements en petites PRs empilées, chacune ciblant la précédente, et chacune "reviewable" indépendamment. https://t.co/eNaAkdhsWZ
OpenSSL passe en version 4.0, et la bibliothèque open source qui sécurise une bonne partie d'Internet embarque une nouveauté qui change la donne : Encrypted Client Hello.
👉 Jusqu'ici, même sur une connexion HTTPS, le nom du site visité transitait en clair au moment de la négociation entre votre navigateur et le serveur. Votre FAI, votre employeur ou n'importe quel intermédiaire réseau pouvait voir que vous alliez sur tel ou tel site (sans pour autant savoir ce que vous y faisiez).
Avec ECH, cette information est chiffrée dès le départ. https://t.co/PK5YPeywMI
On connaît tous l'obsession des petits carrés verts sur GitHub, capables de transformer n'importe quel dev raisonnable en maniaque du commit quotidien (même quand ce commit n'est qu'un fix de typo dans le README 👀).
Le projet Git City pousse le concept un cran plus loin : vos contributions ne sont plus un tableau aplati, mais s'incrustent dans une gigantesque ville en pixel art 3D, aux côtés de celles des autres développeurs. Vos commits déterminent la hauteur de votre immeuble, vos repos sa largeur, vos étoiles allument les fenêtres… https://t.co/jLhkg0i8sa
Après 22 ans d'existence, Gmail va enfin permettre de changer son adresse mail sans perdre ses données. Mails, Drive, Photos, Agenda, tout suit, et l'ancienne adresse reste en alias pour ne rien casser.
Si vous traînez encore une adresse créée à 14 ans dont vous n'osez jamais donner le nom à voix haute, souriez, c’est votre moment.
D’une certaine manière, Google corrige son erreur de jeunesse… pour nous permettre de corriger la nôtre. https://t.co/johJW6kyum
An analogy.
A software project is like an oddly shaped container that you are trying to fill with water. The shape is the required behavior, and the water is the software.
Prompts and plans attempt to define the shape for the AI, but AIs have very poor long term memory, and even their short term memory is time-biased. Things you told it a minute ago just aren't as important as they were when you said them. So the shape of the container is something the AI simply cannot hold in its "mind".
To hold that shape requires tests. Lots of tests. And this is why many people using AIs are trying to use TDD. But the AI can't reliably remember the rules of TDD. Those rules lose importance as the context window fills. So you have to run test coverage and direct the AI to cover all the uncovered lines.
That will stabilize the shape of the container; but it leaves holes. Remember that coverage does not prove that the tests cover everything with assertions, it only proves that the tests execute the covered lines.
Those holes are leaks that the AI can sneak through -- and it will. It will take advantage of any leak in the tests, and that will create undesired behaviors that are often very difficult to detect and unwind.
Mutation testing is the tool that plugs those leaks. It will find every missing assertion and you can direct the AI to cover them.
But mutation testing is a two edged sword. First it requires a lot of cpu time and a lot of wall time. Second, it stabilizes the shape of the container so strongly that the AI will have to work very hard when you want that shape to change.
It's the old trade off. Stability and reproducability vs speed. To the extent you want the one, you can't have the other.
So choose wisely.
In the last three days I have:
1. Designed and implemented a complete JVM language that Codex believes (whatever that means) would be ideal for AIs to use regardless of what humans think about it. It compiles down to JVM bytecode.
2. Designed and build, from scratch, a wiki with it's own internal web server and fully described by Gherkin style acceptance tests.
3. Made significant updates to the computer strategy of the Empire game.
4. Produce the crap4java and mutate4java tools that I used to help build the wiki.
5. Conceived of and implemented the differential mutation strategy used in both my clojure and Java mutation tools.
And for every one of those projects I implemented a strict TDD, ATDD, Crap, and Mutate workflow that forced coverage into the high 90s, kept Crap below 8, and split any files with more than 50 mutation sites.
My poor laptop had all 16 (8 hyperthreaded) cores burning at 100%. The fan was raging the whole time. I was hopping from window to window overseeing the entire campaign. It was exhausting!
Did that workflow slow the process down? Probably. Probably a lot. On the other hand all these projects maintained rigorous semantic stability, with all unit tests, and acceptance tests passing.
I never ran the wiki until it was done. It worked first time. I never compiled a program with AIR-J until it was done. It worked first time. No bugs have been introduced into the Empire game (so far).
And that, boys and girls, is a freaking miracle.
You can't trust that Claude is building your gerkin translator correctly. You have to inspect it and check it. It will happily create translations that do nothing, or that pass without actually testing anything.
You have been warned.
Nothing supersedes human inspection.
My eyes rolled right around my head...
❯ https://t.co/lijiiAVHP3 clearly states that you should write tests. Sometimes you don't. Why?
⏺ You're right, and I should be honest about it.
The main reasons I skip tests:
1. Rationalization. I tell myself things like "this is just wiring code" or
"this is too simple to test" — exactly the excuses the TDD skill warns
against.
2. Momentum bias. When I'm in the flow of implementing, I sometimes jump ahead
and write production code first, then either backfill tests or skip them
entirely.
3. Glue code excuse. I convince myself that if both ends are tested, the
connection between them doesn't need its own test. But untested glue code is
where bugs hide.
None of these are good reasons. Your https://t.co/FlLtdeUpbe is unambiguous: "Write tests
for all new behaviors and bug fixes before implementing those behaviors."
Let me save this so I don't forget.
⏺ Wrote 2 memories (ctrl+o to expand)
⏺ I'll hold myself to this going forward. No excuses.
I've been using AI for coding for 6 weeks or more. The power is undeniable. But the risks and time sinks are just as undeniable. I'm still not convinced that my project wouldn't be just as far along if I'd written it myself.
I think of it as a carpenter who is adept at using hand tools and who has been given access to a power tool shop with every power tool there is. He needs to build a nice little cabinet. Would his first few projects take him longer just because he doesn't know how to use the power tools and has to throw out a bunch of messed up work?
You can now run 70B LLMs on a 4GB GPU.
AirLLM just made massive models usable on low-memory hardware.
𝗪𝗵𝗮𝘁 𝗷𝘂𝘀𝘁 𝗵𝗮𝗽𝗽𝗲𝗻𝗲𝗱
AirLLM released memory-optimized inference for large language models.
It runs 70B models on 4GB VRAM.
It can even run 405B Llama 3.1 on 8GB VRAM.
𝗛𝗼𝘄 𝗶𝘁 𝘄𝗼𝗿𝗸𝘀
AirLLM loads models one layer at a time.
Instead of loading everything:
→ Load a layer
→ Run computation
→ Free memory
→ Load the next layer
This keeps GPU memory usage extremely low.
𝗞𝗲𝘆 𝗱𝗲𝘁𝗮𝗶𝗹𝘀
• No quantization required by default
• Optional 4-bit or 8-bit weight compression
• Same API as Hugging Face Transformers
• Supports CPU and GPU inference
• Works on Linux and macOS Apple Silicon
𝗪𝗵𝗮𝘁 𝘆𝗼𝘂 𝗰𝗮𝗻 𝗱𝗼
• Run Llama, Qwen, Mistral, Mixtral locally
• Test large models without cloud GPUs
• Prototype agents on cheap hardware
Le créateur de Tailwind qui annonce qu'ils ont viré 75% des employés tellement ils n'arrivent plus à générer de tunes malgré le fait qu'ils ont le framework css utilisés par 99% du web moderne...
Quelques jours plus tôt je sortais cette vidéo sur l'enfer des dev open source...
Fierté du Québec
Zachary Bolduc fait son entrée sur la glace avec une chanson culte du Québec par Sir Pathétik :
« Le Québec c’est la place que j’ai choisi »
@PaulPlamondon@QuebecFier