news
Programming Leftovers
-
Undeadly ☛ Game of Trees 0.127 released
Version 0.127 of Game of Trees has been released (and the port updated). Complete release notes are as follows: [...]
-
Nate Graham ☛ Legal obligations vs social contracts
My post about responsibility for bug reports on old software versions the other day stirred up quite some discussion, and I wanted to drill a bit more into what I think is the crux of the dispute: the difference between legal obligations and the social contract.
When you package and distribute free open source software (FOSS), you legally have to comply with the terms of the license: “make the source code available,” “don’t change the license,” and so on.
You might also notice the absence of a warranty, or silence about responsibility for bug reports.
So let’s return to the question: [...]
-
Niall Murphy ☛ Software Failures: What We Believe
Being professionally interested in questions of software reliability, we have often wondered whether or not we can find good models to help explain, characterise, or predict failure. The industry doesn’t have much in the way of such models today. What we have is practitioner’s intuition, and it’s often the best thing we do have, but it’s hard to know if it’s the best thing we could have.
In the act of reflecting on this question, we realised that there isn’t a good source that documents precisely what that intuition actually says. The rest of this document is an attempt to do that.
-
Rlang ☛ Little useless-useful R functions – Jug solver with Bezout’s Identity
We all were presented with this problem – water jug problem, which – in the time of Football world cup 2026 – can be translated to any liquid. *hint hint* But the riddle is as logical as mathematical. With mathematics finding the greatest common divisor. In general, it can be used with state search or Depth First Search (DFS).
-
Andrew Nesbitt ☛ –end-of-options
I was reading through the fix for a package manager CVE last week and ran into a git flag I’d somehow never noticed: --end-of-options. My first reaction was that some LLM had hallucinated it, but it’s documented in gitcli(7), it was added in git 2.24.0 in November 2019, and it exists because git had already used -- for something else.
In most Unix tools -- marks the end of option parsing, so rm -- -f removes a file called -f rather than passing the force flag. Git had repurposed -- early on to separate revisions from pathspecs, because git log foo on its own is ambiguous between a branch named foo and a file named foo and one of the two readings needed a marker: git log main -- README.md means commits on main touching that file. That left the revision position with no terminator, so if a script runs git log "$rev" and $rev starts with a dash, git parses it as an option.
-
L-Labs ☛ Why l.
Twenty-five years with k and q. I did not want a new language. I wanted to rebuild the engine underneath it.
-
Perl / Raku
-
Olaf Alders ☛ How to Deprecate a CPAN Module
You may have noticed that the CPAN Security group recently got funded by Alpha-Omega to work on further securing the Perl and CPAN ecosystems. This means that A LOT OF CVEs are currently being issued. Since the group is not the arbiter of which modules are still in use (and this is largely an unknowable problem), there will be CVEs published for modules which probably can simply be deprecated.
Deprecating a module on CPAN is not as simple as pushing a button, so let’s run through what’s actually involved. The key thing to know here is that to deprecate a module you have to upload a deprecated version. This may seem counter-intuitive because uploading a new archive makes it look like the module is still under development, but none of this is going to change anytime soon. File it under “historical reasons” and get on with your day.
-
-
Python
-
John D Cook ☛ Forensic statistics in Python
I recently had a project in which I had to reverse engineer a data analysis. There was some ambiguity regarding which of several possibilities someone chose for several of the variables, something analogous to the following example.
Suppose you have three numbers with uncertain values with a known, or at least purported, sum. The first number could be 31, 41, or 59; the second could be either 26 or 53; the last could be 58, 97, 93, or 23.
-
Julia Evans ☛ Some more things about Django I've been enjoying
So here are some Django features that make building this kind of site feel more achievable than when I was trying and failing to use Go’s standard library or Flask. And I’ll talk about a couple of issues with Django I’ve run into.
-
-
Shell/Bash/Zsh/Ksh
-
Hackaday ☛ Tired Of Xargs?
What if you want to do something in Linux for a lot of files? [Numerator] was tired of using xarg and other ways to handle this job and created bashumerate.
Some examples in the post of the “other ways” include: [...]
-
Michael Kjörling ☛ On Linux, waiting for a non-child process to exit
That generally works well for processes already started in the background, but in the case of wanting to wait on an already-started process, possibly involving a complex pipeline, a long-running or otherwise expensive process or multiple processes that donʼt deal well with being interrupted, adding the wait from within the existing shell can be tricky.
-
-
Java/Golang
-
Kevin McDonald ☛ Beating Go's encoding/json with Schema-Guided ProtoJSON
ProtoJSON sits in an awkward place. It gives Protobuf-backed APIs a JSON representation that human operators, browsers, API gateways, and debugging tools can work with, but Go’s official protojson implementation pays heavily for this generality. To resolve field names, enum values, presence semantics, and message structure at runtime, it has to walk message descriptors using Protobuf reflection (protoreflect) and allocate intermediate values.
This is the right tradeoff for correctness and compatibility. But it made me wonder: how much of this cost is fundamental to ProtoJSON, and how much comes from repeatedly resolving schema mappings at runtime?
-
Alexandru Nedelcu ☛ On Performance, GCs and Rust
Programming platforms like Java, .NET or Go use tracing garbage collection. This is a form of automatic memory management that delays the deallocation of unused objects. When it comes to memory allocation, GC-managed languages can achieve excellent throughput, better actually than what your average C/C++ developer can achieve, especially if they use malloc.
-