news
Programming Leftovers
-
Keith Harrison ☛ Swift Observations AsyncSequence for State Changes
Swift 6.2 introduces a new Observations type to stream state changes from an Observable type. Let’s see an example of why that can be useful.
-
DJ Adams ☛ Excluding specific diagnostics in Neovim
Here's what I did to be able to filter out certain diagnostic messages in Neovim.
Note: I'm still learning (a) Lua, (b) the API surface of Neovim and (c) how the different core components interact and work together, so this may not be the best solution, but it works for me and I've learned a lot digging in and putting it together.
-
Hackaday ☛ A Gentle Introduction To Fortran
Originally known as FORTRAN, but written in lower case since the 1990s with Fortran 90, this language was developed initially by John Backus as a way to make writing programs for the IBM 704 mainframe easier. The 704 was a 1954 mainframe with the honor of being the first mass-produced computer that supported hardware-based floating point calculations. This functionality opened it up to a whole new dimension of scientific computing, with use by Bell Labs, US national laboratories, NACA (later NASA), and many universities.
Much of this work involved turning equations for fluid dynamics and similar into programs that could be run on mainframes like the 704. This translating of formulas used to be done tediously in assembly languages before Backus’ Formula Translator (FORTRAN) was introduced to remove most of this tedium. With it, engineers and physicists could focus on doing their work and generating results rather than deal with the minutiae of assembly code. Decades later, this is still what Fortran is used for today, as a domain-specific language (DSL) for scientific computing and related fields.
In this introduction to Fortran 90 and its later updates we will be looking at what exactly it is that makes Fortran still such a good choice today, as well as how to get started with it.
-
NetBSD ☛ NetBSD Blog: New build cluster speeds up daily autobuilds
For several years our autobuild cluster at Columbia University has been providing our CI and produced many official release builds.
Over the years, with new compiler versions and more targets to build, the build times (and space requirements) grew. A lot. A few weeks ago the old cluster needed slightly more then nine and a half hours for a full build of -current.
So it was time to replace the hardware. At the same time we moved to another colocation with better network connectivity.
-
Rachel ☛ Squashing my dumb bugs and why I log build ids
I screwed something up the other day and figured it had enough meat on its bones to turn into a story. So, okay, here we go.
For a while now, I've been doing some "wrapping" of return values in my code. It's C++ stuff, but it's something that's been inspired by what some of my friends have been doing with Rust. It's where instead of just returning a string from a function that might fail, I return something else that enforces some checks.
-
Perl / Raku
-
Ted Unangst ☛ regexp/o
Perl has a regex option /o, which pretends to optimize your code, but actually introduces bugs. Go has been missing out. Until now.
We need regexp of course, but also text/template for interpolation. Add in runtime to get the pc, and we have all the elements for a cache of only once regex.
-
Rakulang ☛ Rakudo Weekly 2025.31 Snappy Turtles
Anton’s Corner Anton Antonov has provided us with two more lovely posts this week. As ever his visuals and movies are a stunning insight into our world made with Raku.
-
-
Shell/Bash/Zsh/Ksh
-
Vincent Delft ☛ Vincent's blog
There a tones of zsh config on internet, but I've decided to build mine and to share it with you. Feel free to copy / re-use part of it.
-
-
Golang
-
Double Free Dev ☛ Go's race detector has a mutex blind spot
This reminded me of a quirk in Go's dynamic data race detection that causes it to miss data races in executed code that could easily be spotted by a human2.
Here is the code the data race detector struggles with: [...]
-
University of Toronto ☛ Understanding reading all available things from a Go channel (with a timeout)
Recently I saw this example Go code (via), and I had to stare at it a while in order to understand what it was doing and how it worked (and why it had to be that way). The goal of waitReadAll() is to either receive (read) all currently available items from a channel (possibly a buffered one) or to time out if nothing shows up in time. This requires two nested selects, with the inner one in a for loop.
-