news
Programming Leftovers
-
Daniel Stenberg ☛ What the bliss taught us
At this exact moment curl’s summer of bliss 2026 ends.
We (the maintainers of curl) took the entire month of July off from vulnerability reporting and in this post I will try to explain how this went.
(If you feel like skipping the wordy blab below, the single word answer is: fine)
This was possibly our best project decision in a long while.
-
Ham Vocke ☛ Use Task Runners for Common Coding Tasks
You can make your software developer life suck a bit less by using task runners to run common coding tasks consistently across multiple repositories
-
Fabian “ryg” Giesen ☛ ryg_rans is not a library
ryg_rans is not a library, never was. It’s a toy implementation of an algorithm whose core fits in something like 20 lines of code. It’s the equivalent of the wooden board you sometimes see in hardware stores where they have 30 different types and sizes of fasteners screwed, bolted or nailed in. The idea is not that you should use this in your builds; it’s a visual aid to show you the options available to you. A real project should pick one, or maybe two, options and stick with it.
-
Eli Bendersky ☛ Relative velocity and closing speed
In Physics simulations or game engines it’s sometimes useful to determine the speed with which two objects are approaching each other. This post will discuss the concept of closing speed, which is the normal component of the relative velocity of two objects.
-
Henry Schreiner ☛ C++26
C++26 is done (technically complete March 2026, publication expected later this year), so let’s explore the new features in C++, from a data science point of view. This is the biggest release since C++11; in fact, one feature might be the biggest single feature ever. Reflection means C++ now understands itself without macros or hacks; it’s also one of the first mainstream compiled languages to have full static reflection (Rust has syntactic macros, but not true reflection; D, zig, and C# have reflection). Contracts finally landed after 20+ years of attempts; the async model (std::execution) and data-parallel types (std::simd, std::linalg) are also big additions.
Standard stuff from previous releases is also continuing to improve. Much more constexpr, more ranges, mdspan grows sub-views, formatting keeps improving. Plus memory-safety improvements (erroneous behavior, hardened standard library).
-
Python
-
Juha-Matti Santala ☛ B is for batteries included - Python A to Z
I love Python’s batteries included philosophy and its standard library so much that I dedicated an entire Blaugust in 2024 writing about it: [...]
-
Adam Johnson ☛ Python: how time-machine is O(1) where freezegun is O(n)
time-machine is my library for mocking the current date and time in Python tests. Its headline advantage over freezegun, the library that inspired it, is speed.
Back in 2021, I benchmarked the two libraries at two project sizes, and found time-machine 100 to 200 times faster. That post asserted that freezegun’s work grows with the number of imported modules, whilst time-machine’s does not.
Five years on, following many time-machine optimizations, including in Friday’s time-machine 3.3.0, let’s re-benchmark the two libraries to empirically measure their runtime complexity and examine their code to explain why.
-
-
Shell/Bash/Zsh/Ksh
-
University of Toronto ☛ What 'sh -x' mostly doesn't tell you about a shell script
The first and biggest thing that 'sh -x' doesn't give you is shell redirections. If the script makes heavy use of redirecting things into working files that it manipulates, shoves around, and then deletes, a lot of the specifics of this may be invisible to your debugging (although you can usually tell that redirection is going on). This is most likely to apply if the file names are set up dynamically through things like shell variables.
-
-
Java/Golang
-
Anton Zhiyanov ☛ Going Backward
Go's standard library has a slices package with a function called Backward. It lets you iterate over the elements of a slice in reverse order: [...]
-
-
Rust
-
PHP ☛ C++ to Rust Migration
Tldr: For many production systems, the safest C++-to Rust migration strategy is not a full rewrite. It is an incremental migration: start with isolated modules, make Rust work inside the existing build and release process, and expand gradually as confidence grows.
-