RSSAmplifier

Blog

Econometrics and Free Software

b-rodrigues.github.ioRSS feed ↗20 posts

Latest posts

The Future of Programming Looks Like Its Past or Why I build T

This is a post based on two other posts I wrote for LinkedIn. It has become quite long. AI Won’t Save People From Work They Never Thought to Automate I’m a fairly optimistic person, but when it comes to AI adoption and how it will be generating billions in increased GDP I’m more skeptical. Not that AI is not capable: on the contrary, I think that for all intents and purposes, even the models from…

You can just build your own programming language

Last summer, while relaxing on the beaches of Berck, a French town known for treating tuberculosis in kids by exposing them to the fresh maritime air (back in 19th century, they have antibiotics these days), I found myself daydreaming about building my own programming language. Spoiler alert: I don’t know how to build programming languages, but I have developed extremely strong opinions over the…

From scripts to pipelines in the age of LLMs

I was recently reading Davis Vaughan’s blog post Semi-automating 200 Pull Requests with Claude Code and it really resonated with me, as I’ve been using LLMs for tedious tasks like that for some time now. Davis’s key insight: structure = success . When you can scope a task tightly and provide clear context, LLMs become genuinely useful tools. If you’ve been following my work, you know that…

Toy Post: Per-Post Nix Dependencies

This is a toy post demonstrating per-post Nix dependencies. This post has a corresponding 2025-12-31-toy-post.nix file that adds the purrr package to the environment. library (purrr) # Use purrr to demonstrate it's available result <- map_dbl ( 1 : 5 , ~ .x ^ 2 ) print (result) [1] 1 4 9 16 25 The purrr package is not in the base posts/default.nix , but it’s available here because of the…

What would a keyboard optimised for Luxembourgish look like? Now with an actual keyboard!

An optimised layout for a polyglot country 5 years ago I discussed what features a keyboard optimised for Luxembourg should have. I’m talking about Luxembourg the country, and not Luxembourgish the language, because in Luxembourg no one types only Luxembourgish. The most commonly typed language is probably French, and English a close second. German follows in third and then Luxembourgish (some…

Of course, someone has to write imperative code to build reproducible data science pipelines. It doesn’t have to be you.

Last time I quickly introduced my latest package, {rixpress} , but I think that to really understand what {rixpress} brings to the table, one needs to solve the same problem without it. And incidentally, I think that this exercise also show what makes Nix actually so good. The goal is to build a data science pipeline. The example here is purely illustrative, and compare a Nix-based approach to a…

Orchestrating Polyglot, Reproducible Data Science with Nix and {rixpress}

TL;DR: {rixpress} lets you build multi-language data pipelines (R, Python, Julia) where each step runs in its own reproducible environment. Uses Nix under the hood. Now on CRAN, and there’s even a Python port on PyPI! {rixpress} is now on CRAN! As discussed in previous blog posts, {rixpress} is a package heavily inspired by {targets} that uses Nix as the underlying build automation tool to build…

Python needs its CRAN

How is it that in the year 2025 of our Lord installing a Python package is still such a gamble? This post comes from someone that rarely uses Python, but consider the following: the rare times I need to use it, I’m often confronted to dependency hell (and if you think it’s a skill issue, hold that thought and keep reading); I’m one of the maintainers of the R ecosystem for Nix, but also package…

You can outsource the grunt work to an LLM, not expertise

The more I use LLMs for programming, the more it seems to me that they can only be used successfully if you ask them to do things that you could do yourself. This seems to be the case because: you know exactly what you want/need and thus can exactly describe it; you know exactly if the LLM is actually delivering quality code or not; you know exactly if something the LLM suggests that you hadn’t…

ggplot2 4.0.0 is coming and why ultimately it’s on YOU to ensure your environments are reproducible

It looks like a major update to {ggplot2} is coming (version 4.0.0), where Posit is switching the internals from S3 to S7. This will break many reverse dependencies of {ggplot2} (a reverse dependency is a package that depends on {ggplot2} ), and so Posit is following the recommendation of the CRAN policies, which state that they should give a heads-up to devs of reverse dependencies and give them…

Multi-language pipelines with rixpress

If you want to watch a 2-Minute video introduction to {rixpress} , click the image below: In August last year I tried to see how one could use Nix as a built automation tool for data science pipelines, and in March this year, I’ve started working on an R package that would make setting up such pipelines easy, which I already discussed in my previous post . After some weeks of work, I think that…

Announcing rixpress

As I’ve already discussed in this vignette of my {rix} package , it is very easy to run a {targets} pipeline inside of a Nix environment for increased reproduciblity. The main drawback of {targets} though, is that it is not possible to compute one particular object in one particular environment, and another object in another environment. It is also not possible to compute a target using Python for…

Why we forked nixpkgs

Here’s why nixpkgs is a GitHub repository that contains tens of thousands of Nix expressions used by the Nix package manager to install software. By default, the nix package manager will pull expressions from NixOS/nixpkgs , but when using {rix} our fork rstats-on-nix/nixpkgs is used instead. Because forks can sometimes be a bit controversial, we decided a blog post was in order. First of all,…

Using options() to inject a function’s internal variable for reproducible testing

No image this time Imagine you have a function that does something complicated, and in the middle of its definition it generates a variable. Now suppose that you want to save this variable and then re-use it for tests, what I mean is that you want your function to always reproduce this intermediary variable, regardless of what you give it as inputs. This can be useful for testing, if computing…

New year, new blog

Happy new year! The blog has a new look! Well it’s not that different on the surface. But under the hood, it is quite different indeed! My previous setup was: GitHub to host the code, on each push the build process would get started on Netlify and then it would be hosted there. The engine was Hugo. This blog now still uses GitHub to host the code, but now also uses GitHub pages for hosting and the…

Reproducible data science with Nix, part 13 – {rix} is on CRAN!

Simplifies the creation of reproducible data science environments using the ‘Nix’ package manager, as described in Dolstra (2006) <ISBN 90-393-4130-3> . The included ‘rix()’ function generates a complete description of the environment as a ‘default.nix’ file, which can then be built using ‘Nix’. This results in project specific software environments with pinned versions of R, packages, linked…

Reproducible data science with Nix, part 12 – Nix as a polyglot build automation tool for data science

Nix is not only a package manager, but also a build automation tool, and you can use it to build polyglot data science pipelines in a completely reproducible way. For example, suppose that you need to mix Python, R and maybe some others tools for a project (by the way, some believe this will become the norm in the coming years, use your favourite search engine to look for “polyglot data science”…

Reproducible data science with Nix, part 11 – build and cache binaries with Github Actions and Cachix

Intro I have this package on CRAN called {chronicler} and last month I got an email from CRAN telling me that building the package was failing, and I had two weeks to fix it. I immediately thought that some dependency that my package depends on got updated, and somehow broke something. But when I checked the results of the build, I was surprised, to say the least: How come my package was only…

Reproducible data science with Nix, part 10 – contributing to nixpkgs

I’ve very recently started contributing to the nixpkgs repository of packages, which contains all the packages you can install from the Nix package manager. My contributions are fairly modest: I help fix R packages that need some tweaking to make them successfully build for Nix. Most of these fixes are very simple one-liners. Most users of any free and open source tool rarely contribute to the…

Reproducible data science with Nix, part 9 – rix is looking for testers!

After 5 months of work, Philipp Baumann and myself are happy to announce that our package, {rix} is getting quite close to being in a state we consider “done” (well, at least, for a first release). We plan on submit it first to rOpenSci for review, and later to CRAN. But in the meantime, if you could test the package, we’d be grateful! We are especially interested to see if you find the…