news
Programming Leftovers
-
Jussi Pakkanen ☛ C and C++ dependencies, don't dream it, be it!
Bill Hoffman, the original creator of the CMake language held a presentation at CppCon. At approximately 49 minutes in he starts talking about future plans for dependency management. He says, and I now quote him directly, that "in this future I envision", one should be able to do something like the following (paraphrasing).
Your project has dependencies A, B and C. Typically you get them from "the system" or a package manager. But then you'd need to develop one of the deps as well. So it would be nice if you could somehow download, say, A, build it as part of your own project and, once you are done, switch back to the system one.
-
Marc Brooker ☛ You Are Here
The cost of turning written business logic into code has dropped to zero. Or, at best, near-zero.
The cost of integrating services and libraries, the plumbing of the code world, has dropped to zero. Or, at best, near-zero.
The cost of building efficient, reliable, secure, end-to-end systems is starting to drop, but slowly.
Where does that leave those of us who have built careers in technology? Our road diverges. Not into the undergrowth of a wood, but into a dense fog. The future is harder to see than ever. But lets peer forward and see as best we can.
On the first road we can see this as the end to a craft we have loved. The slow end of programming as an economic discipline, as weaving, ploughing, and coopering went before. It is reasonable and rational to feel a sense of loss, and a sense of uncertainty. With the loss of the craft comes the loss of the economic moment where that craft was valued beyond nearly any other. Perhaps any other in history. It is irrational to feel denial. You are here.
On the second road we can see this moment as the beginning of something new. With new tools comes greater opportunity than ever. Greater economic opportunity for those who value that. Greater technical opportunity for those who value that. The most powerful set of new tools since the dawn of computing itself. With these tools come risk, and with risk comes opportunity. With these tools come new industries, new fields of research, and new careers. All bring opportunity.
-
Manton Reece ☛ Read the code
As I blogged last night, successful developers will now need to focus even more on other aspects of their business. Writing and reviewing code is still going to be part of the job for the foreseeable future.
-
Justin Duke ☛ Building a data greenhouse
For sensitive data that needs to be extremely accurate and timely, we use webhooks. And for everything else that is relatively bounded in terms of size, we just have an hourly cron that resyncs the whole thing. It's maybe a total code footprint of 3,000 lines to pull in data from ten services. 1This number continues to not really grow, which is its own kind of endorsement.
-
Andrew Nesbitt ☛ Dependency Resolution Methods
Every package manager faces the same core problem: given a set of packages with version constraints, find a compatible set of versions to install. The classic example is the diamond dependency: A depends on B and C, both of which depend on D but at incompatible versions. The resolver has to find a version of D that satisfies both, prove that none exists, or find some other way out. Di Cosmo et al. proved in 2005 that this problem is NP-complete, encoding it as 3SAT for Debian and RPM constraint languages. In practice, real-world dependency graphs are far more tractable than the worst case, and different ecosystems have landed on different resolution strategies that make different tradeoffs between completeness, speed, error quality, and simplicity.
These approaches fall roughly into complete solvers (SAT, PubGrub, ASP), heuristic solvers (backtracking, Molinillo, system resolvers), constraint relaxation strategies (deduplication with nesting, version mediation), and approaches that avoid the problem entirely (minimal version selection, content-addressed stores).
The categorizing package manager clients post lists which package managers use which approach. The package management papers post has the full bibliography. The package-manager-resolvers repo has per-ecosystem detail and comparison tables.
-
Zig ☛ Two Package Management Workflow Enhancements
If you have a Zig project with dependencies, two big changes just landed which I think you will be interested to learn about.
Fetched packages are now stored locally in the zig-pkg directory of the project root (next to your build.zig file).
-
NixCI ☛ The purpose of Continuous Integration is to fail
CI is only valuable when it fails. When it passes, it's just overhead: the same outcome you'd get without CI.
-
OMG Ubuntu ☛ JetBrains will enable Wayland support in IntelliJ 2026.1
JetBrains confirms native Wayland support for IntelliJ IDEs starting in 2026.1. The move from X11 improves scaling and performance for GNU/Linux developers.
-
R / R-Script
-
Rlang ☛ How to Predict Sports in R: Elo, Monte Carlo, and Real Simulations
Sports are noisy. Teams change. Injuries happen. Upsets happen. But uncertainty is not the enemy—it’s the input. In this hands-on guide you’ll build a practical sports prediction workflow in R using tidyverse, PlayerRatings, and NFLSimulatoR, then connect ratings to Monte Carlo simulations and forecasting models (logistic regression & Poisson).
-
Andy Wingo ☛ Andy Wingo: ahead-of-time wasm gc in wastrel
Hello friends! Today, a quick note: the Wastrel ahead-of-time WebAssembly compiler now supports managed memory via garbage collection!
hello, world
The quickest demo I have is that you should check out and build wastrel itself: [...]
-
Athanasia Mo Mowinckel ☛ Why Every R Package Wrapping External Tools Needs a sitrep() Function
Stop playing “diagnostics ping-pong” with your users. This post explores why the _sitrep() (situation report) pattern — popularized by the usethis package — is a game-changer for R packages wrapping APIs or external software. Learn how to build structured validation functions that power both early error-handling and comprehensive system reports, featuring real-world implementation examples from the meetupr and freesurfer packages.
-
-
Python
-
Eric Matthes ☛ Anatomy of a Python Function
MP 160: When we're discussing functions in Python, what do we call the different parts?
I've been reflecting on typing in Python recently. I haven't used type hints much, because all my programs have worked fine without them. But typing in Python has matured quite a lot since it was first introduced. I originally came to Python from C and Java, and I was quite happy not to have to specify types for a while. I wasn't eager to jump back into declaring types when they were first introduced to Python, but I'd like to start using them where they are helpful.
-
-
Shell/Bash/Zsh/Ksh
-
Arjen Wiersma ☛ Automatically storing my notes
I tried out obsidian a while back, and while I did not particularly like the experience as a whole, one thing I did like was the git integration. Back in my Emacs I have to manually call up magit to do the commits. So I decided to solve it in “The Linux way ™”; a small program that does the trick.
Normally I would use crontab for this job, but modern Linux systems come equipped with something more powerful. systemd is on pretty much every linux system now, if you like it or not. It provides a framework of managing services and tasks.
-