Massacring C Pointers (2018)
I'm taking a break from debugging books to talk about a calamitous shitshow of textbook writing: Mastering C Pointers: Tools for Programming Power , by Robert J. Traister.
Writing a RISC-V OS in Rust: System Calls
System calls are a way for unprivileged, user applications to request services from the kernel. In the RISC-V architecture, we invoke the call using the ecall instruction. This will cause the CPU to halt what it's doing, elevate privilege modes, and then jump to whatever function handler is stored in the mtvec…
A note of reflection after 10 years of “A successful Git branching model”
In this post I present a Git branching strategy for developing and releasing version-based software.
Run More Stuff in Docker
In 2020, Docker is the best medium for distributing and running most developer-facing software . It’s widely accepted that Docker is great for building and deploying the artifacts for your enterprise web app, but this is less well known when it comes to things like developer tools. However, running tools in containers…
Restoring and MIDI-Fying a Baby Grand Piano
As much as I love digital instruments, synthesizers and other electronic gear I also really love the look and feel of instruments made from wood, brass, steel and felt. There is objectively no difference between the best digitally sampled pianos but for some reason it doesn’t quite feel as much alive as an actual…
Emacs Prelude 1.0
I’ve got a big news to share with you today - after (over) 9 years of development, Emacs Prelude finally made it to version 1.0! There’s nothing really big or groundbreaking there, as Prelude has been in a pretty good place for a very long time feature-wise, but I felt like tagging a 1.0 release, because it’s 2020 and…
It’s 255:19AM. Do you know what your validation criteria are?
Ed25519 signature validation criteria vary widely between implementations, creating risks for consensus systems. Here's why and how to fix it.
Why Programming Is Hard to Fundamentally Improve (2017)
My thoughts on why programming hasn’t changed that much and where the next generation of improvements will come
Syntax highlighting is a waste of an information channel
No newsletter next week Running the TLA+ workshop. No way I'm gonna have any brainpower after that. Syntax highlighting is a waste of an information channel...
Plywood: A New Cross-Platform Open Source C++ Framework
For the past little while – OK, long while – I’ve been working on a custom game engine in C++. Today, I’m releasing part of that game engine as an open …
Guide to Concurrency in Python with Asyncio
A guide to Python's asyncio module covering async/await, event loops, tasks, and when to use asyncio vs threading or multiprocessing.
The Stack Monoid
(Updated 2020-09-06 with pointers to related work and a bit more explanation)
Vim Creep (2011)
It all started out innocently enough. You experimented with it once or twice in your first year of college, but Nano and Pico were easier—closer to what you had already been using during high school on the Windows machines and Macs. But as time went on and you got more experience under your belt in the college-level…
Cost of a thread in C++ under Linux
Almost all our computers are made of several processing cores. Thus it can be efficient to "parallelize" expensive processing in a multicore manner. That is, instead of using a single core to do all of the work, you divide the work among multiple cores. A standard way to approach this problem is to create threads. ……
Want to call C from Python? Use D
In my last blog post I wrote about the power of D’s compile-time reflection and string mixins, showing how they could be used to call D from Python so easily it might as well be magic. As ama…
Your First THINK C Program
Welcome, child! Come in, come in! I have so few visitors to this little hut. Pull up a chair, and I’ll put on some tea.
Become a Better Developer by Reading Source Code
In this post, I share why I think that reading source code is an important technique which can be applied to become a better software developer.
Extreme Debugging
Debugging without source or symbols, alternatively, "Where there's a will there's a way"
Faster than radix sort: Kirkpatrick-Reisch sorting
Radix sort sorts n w-bit integers by splitting them up into chunks of logn\log nlogn bits each, and sorting each chunk in linear time. Thus it achieves O(nw/logn)O(nw/\log n)O(nw/logn) time.
All about Modelica: An equation-based language for modeling physical systems
Marco Bonvini’s personal website.