news
Programming Leftovers
-
Leon Mika ☛ Working Around One-Shot GPUParticles2D Emitter Slowdown
I’ve got a couple of one-shot GPUParticles2D emitters in my Godot game, and they have a habit of causing slowdown when they’re emitted for the first time. For a while I tolerated this, but it’s got to the point where gameplay was being affected, and this had to be dealt with.
I had some success removing that slowdown using a variant of the technique documented here. Basically, you fire the emitter within the _ready() function, wait a single frame, then hide the emitter: [...]
-
Stefan Marr ☛ Pitfalls of Benchmarking on Modern Systems · Stefan-Marr.de
Modern computer systems are quite fascinating. They are highly complex, run a lot of software, and their performance characteristics are hard or impossible to predict.
Earlier this year, I gave a lecture on benchmarking, which for lack of generic and always-applicable advice, I started with a brainstorming session about its pitfalls. Since systems have become so complex that we rarely know what happens exactly. We are prone to simply guess what’s going on. Or rather, we should hypothesize and verify our hypothesis. Still, there might be many more causes for what we see than we can initially think of.
-
[Old] Jordan LorLord ☛ 3 constraints before I build anything
These are the 3 constraints that I use before I start building anything. I'm a believer in constraints as an enabler for creativity. Constraints help us collapse the search space, and figure out innovative solutions to problems.
I've been a builder for 10 years, and I've built products that went nowhere because they were either too complex or had no identity. These are the constraints that I landed on after making those mistakes.
-
MaskRay ☛ Block frequency
Estimating branch probabilities says how one branch splits. BlockFrequencyInfo turns those local numbers into per-block frequencies, which nearly every profitability decision in LLVM ends up reading.
The core is a linear-time propagation over loop-packaged regions. Where no such structure exists — irreducible control flow — the accuracy goes with it.
-
Vincent Bernat ☛ Vincent Bernat: An interactive introduction to the spanning tree protocol
This post contains interactive examples. To visualize and interact with them, you need to leave your RSS reader.
Imagine you rent office space for a three-day event. You quickly set up a few Ethernet switches and tape some cables on the floor to get everyone online. Unfortunately, Stan, your clumsiest coworker, kicks out a cable every time he gets up for coffee. You could add extra cables, but then you’d get a broadcast storm: Ethernet packets that loop and multiply until nothing else gets through.
-
Vincent Bernat ☛ Vincent Bernat: A non-interactive introduction to the spanning tree protocol
Imagine you rent office space for a three-day event. You quickly set up a few gets up for coffee. Spare cables would fix that, but a loop turns into a broadcast storm: Ethernet packets multiply until nothing else gets through. That’s where the spanning tree protocol comes in: it blocks just enough of the spare cables to leave a loop-free tree, and rebuilds it in a second each time Stan strikes again.
-
Jon Chiappetta: Trying Out Some Hacky Tampermonkey Javascript Modifications For A Better kick.com Live Stream Video Experience!
The kick.com live stream video experience on the web is not the best overall, it seems to constantly lose track of a previously buffered section of the live stream and then sends you to the live portion but mine also gets stuck on reconnecting again and remains frozen until a manual refresh! I tried to write a series of hacky javascript modifications to help solve the following issues: [...]
-
Chris ☛ A curmudgeon tries a language server
I write code roughly the same way I did ten years ago: I make edits in my text editor, I switch over to a terminal window and I run a command to compile and execute the code. I look at the result, then switch back to my editor. If I am unsure of what happens, I either add tracer prints to the code and restart the program, or I restart the program in a debugger. If I hit an exception that crashes my program, I fix the problem and then restart it. I’m envious of what Lisp programmers do. Lisp development typically happens by typing code directly into the REPL to add, remove, and replace parts of the live, running system. -
Dirk Eddelbuettel ☛ Dirk Eddelbuettel: gaussfacts 0.0.3 on CRAN: Maintenance
A new release of gaussfacts package arrived on CRAN – the first in pretty much exactly a decade! gaussfacts provides a fortunes-inspired function to display randomly-chosen facts about Carl Friedrich Gauss, based on the collection curated by Mike Cavers via the gaussfacts web site (with an archive.org link it case it vanishes again). Each call of
gaussfact()displays another (randomly chosen, or indexed) fact. -
Andrew Helwer ☛ The changing role of finite-state model checking
This post stems from a recent conversation with Heidi Howard where we talked about the changing role of TLA⁺ & finite-state model checking in both research and industry.
For a long time, users of TLA⁺ (or other formal specification languages like Quint) had a classic 80/20 payoff/effort choice available to them: they could either put in a large amount of effort to formally prove their system properties correct with 100% confidence, or for 20% of that effort they could model-check their system and get perhaps 80% of that confidence.
This economic calculation might no longer hold.
The summer of 2026 has seen fairly astonishing improvements in the field of automated theorem proving.
-
Python
-
Juha-Matti Santala ☛ U is for uv - Python A to Z
uv is a Python package and project manager but in my day-to-day use it’s more of a script and improved REPL runner. In Tame your pesky little scripts, I wrote about my methods for dealing with different scripts I run from a command line and for the ones I write in Python, I use uv to make them easy to run with dependencies.
-
-
Shell/Bash/Zsh/Ksh
-
University of Toronto ☛ I should write more shell scripts than I do
For reasons beyond the scope of this entry, I've been manually maintaining a group of files in sync across three 'machines' (my GNU Emacs configuration). There is no master machine for edits (it depends on what I'm on at the time when I need a change), and I don't always propagate changes immediately after I make them. Plus, some of these files are in various places under my home directory. I made a lot of use of 'ssh cat /file | diff -u - file' and the like to keep track of this all and make sure I wasn't overwriting changes when I propagated things, and I kept doing it by hand for various reasons.
-