news
Programming Leftovers
-
Wouter Groeneveld ☛ Migrating From Gitea To Codeberg
After the last week’s Gitea attack debacle, moving all things Git off the VPS became a top priority. In 2022, like many of you, I gave up GitHub and spun up two Gitea instances myself: a private one safely behind bars on the NAS and a public one where all my public GitHub projects were moved to. Three years later, I think it’s time to move again.
-
[Old] Alice Boxhall ☛ A threat model for accessibility on the web
Accessibility can fail in far too many ways to count.
It's a hugely complex problem space, existing at the intersection of user experience, specialised technical knowledge, and understanding of the ways specific disabilities and impairments impact the way users are able to interact with software interfaces.
-
Marco Graziano ☛ From COBOL to Kotlin. My First Experiment in Verifiable Modernization.
This persistent reliance on COBOL highlights a simple truth: the systems that move our money, insure our lives, and manage our hospitals cannot afford experiments — they need modernization grounded in proof, not hope.
Yet most modernization projects still rely on translation, not understanding. I wanted to explore something different: a reproducible, verifiable path from COBOL to modern code, grounded in formal semantics rather than pattern-based rewriting.
-
[Old] Loyola Marymount University ☛ languagedesignnotes
So, you want to design your own language? Of course you do. Or perhaps you are taking a class and are being forced to create a programming language under penalty of a bad grade. What kinds of things do you need to know?
-
Hellacheap ☛ One Weird Hashing Trick
Here's a little thing that's obvious once you see it but isn't obvious initially (or at least it wasn't to me).
Say you want to generate low-dimensional projections of bag-of-words (or bag-of-ngrams) vectors (in the rest of this post wherever I say "word" you can substitute "ngram"). Jhonson-Lindenstrauss says if you have the bag-of-words vector you can get a good projection by just multiplying it by a random matrix (!) and the distortion scales logarithmically (!!) not with the number of dimensions but actually with the database size (!!!). And even better that matrix can just be a matrix of 1 or -1 with equal probability.
-
Daniel Stenberg ☛ Parsing integers in C
In the standard libc API set there are multiple functions provided that do ASCII numbers to integer conversions.
They are handy and easy to use, but also error-prone and quite lenient in what they accept and silently just swallow.
-
James Belchamber ☛ Agility in cupcake engineering
Many stories have been written as examples of how to apply agile values in practice. One of my favourites is "The Phoenix Project", which applies agile values alongside DevOps philosophy to achieve transformation in a fictional company. But it's very hard to appreciate if you don't have experience of working in an IT team, and all sorts of companies can benefit from increased agility.
So please indulge me in reading this much shorter story that gets across (more bluntly, but more quickly) how a company could deliver more effectively by becoming more agile.
So: Imagine you run a cake shop.
-
Michail Zarečenskij ☛ Name-based destructuring in Kotlin
Today Kotlin only supports positional destructuring with the well-known syntax: val (x, y) = expr.
And that’s it. This approach has a few drawbacks, where the main one is that positional destructuring doesn’t know anything about the names of the destructured properties. As a result, val (x, y) = … and val (y, x) = … have different semantics, and it’s not clear if that’s a problem without looking at the declaration of the data class.
We could’ve even forgotten about the issues with positional destructuring, but we want Kotlin to evolve. For instance, we know we get value classes and a way to destructure their properties. Reusing positional destructuring with its drawbacks seems unacceptable for us. The same goes for potential evolution with regard to pattern-matching capabilities: first, we have to get a solid solution for destructuring and then expand it for more cases like p is Person(val name, val lastName) // p → Person, + name, lastName.
-
Andy Wingo: the last couple years in v8's garbage collector
Let’s talk about memory management! Following up on my article about 5 years of developments in V8’s garbage collector, today I’d like to bring that up to date with what went down in V8’s GC over the last couple years.
methodololology
I selected all of the commits to src/heap since my previous roundup. There were 1600 of them, including reverts and relands. I read all of the commit logs, some of the changes, some of the linked bugs, and any design document I could get my hands on. From what I can tell, there have been about 4 FTE from Surveillance Giant Google over this period, and the commit rate is fairly constant. There are very occasional patches from Igalia, Clownflare, Intel, and Red Hat, but it’s mostly a Surveillance Giant Google affair.
Then, by the very rigorous process of, um, just writing things down and thinking about it, I see three big stories for V8’s GC over this time, and I’m going to give them to you with some made-up numbers for how much of the effort was spent on them. Firstly, the effort to improve memory safety via the sandbox: this is around 20% of the time. Secondly, the Oilpan odyssey: maybe 40%. Third, preparation for multiple JavaScript and WebAssembly mutator threads: 20%. Then there are a number of lesser side quests: heuristics wrangling (10%!!!!), and a long list of miscellanea. Let’s take a deeper look at each of these in turn.
-
Qt ☛ Qt Champions 2025
Dear Qt community!
with seven weeks to go until an exciting year 2025 will have passed, we are pleased to open the nomination period for the Qt Champion 2025 award!
See this Wiki page for more information about the award and its nomination process: https://wiki.qt.io/Qt_Champions_2025
We're looking very much forward to reading about your favorite candidates! -
Python
-
Stewart C Russell ☛ mz2synth: make sounds from images
Documentation is pretty sparse, so I’ve had to work it out as best I can: [...]
-
Robotic Systems LLC ☛ moteus_tool --read
moteus_tool has long served as the primary interface to moteus controllers from the command line for provisioning and diagnostics, especially so when used in headless environments where running a graphical tool like tview is not an option. As anyone who has debugged a moteus system from the command line can attest to, finding the contents of diagnostic stream channels is annoying at best and that is only if you know how to do it. In short, you have to use --console, and then type some undocumented text incantations .
-
University of Toronto ☛ My script to 'activate' Python virtual environments
Activating a Python virtual environment mostly means making sure that its 'bin' directory is first on your $PATH, so that 'python3' and 'pip' and so on come from it. Venvs come with files that can be sourced into common shells in order to do this (with the one for Bourne shells called 'activate'), but for me this has three limits. You have to use the full path to the script, they change your current shell environment instead of giving you a new one that you can just exit to discard this 'activation', and I use a non-standard shell that they don't work in. My 'venv' script is designed to work around all three of those limitations. As a script, it starts a new shell (or runs a command) instead of changing my current shell environment, and I set it up so that it knows my standard place to keep virtual environments (and then I made it so that I can use symbolic links to create 'django' as the name of 'whatever my current Django venv is').
-
-
Java/Golang
-
Ubuntu Handbook ☛ NetBeans 28 added Java SE 26 and Multiple LSP Servers Support
Apache NetBeans, the free open-source IDE for Java, C/C++, PHP, and HTML5, released new version 28 few days ago. The new IDE release updated UI with a tool widget to execute common text encoding in the IDE: Base64, URL and Hex encoding/decoding.
-