Sitemap

A list of all the posts and pages found on the site. For you robots out there, there is an XML version available for digesting as well.

Pages

Posts

Autodiff: Why Earth System Modeling Still Depends on Compiler Infrastructure

13 minute read

Published:

Large scientific simulation codes written in Fortran underpin much of climate science, weather prediction, and geophysical modeling. Increasingly, these codes are not only used for forward simulation but also for inverse problems where one wants to infer parameters, sensitivities, or initial conditions from observations. Recent work in Earth system modeling has increasingly argued that differentiable programming could enable more systematic calibration, data assimilation, uncertainty quantification, and hybrid ML–physics workflows in large scientific models. In this context, automatic differentiation (AD) has become a key enabling technology. However, applying these ideas to large Fortran codebases exposes a less visible dependency: the maturity of the compiler infrastructure itself. This article discusses autodifferentiation in the context of Fortran codebases as well as its relationship to compiler infrastructure.

OpenMP Defaults Are Not Portable: A Note on OMP_DYNAMIC

3 minute read

Published:

For reproducible scaling experiments, it is good practice to explicitly set OMP_DYNAMIC=false, especially when you want to guarantee the number of threads spawned for each parallel region. In this short article, I explain why this is important and how one can sift through the GCC codebase (140k+ files and more than 5 million LOC) plus the OpenMP standard to find this information.

Printer Rejects USB Drive: How I Fixed It

1 minute read

Published:

I recently ran into a frustrating problem: I wanted to print a PDF directly from a USB stick, but the printer kept showing “memory device is not working properly.” The drive had previously been flashed with Debian, so I assumed deleting the old files and copying my PDF would be enough. This was, of course, not the solution. In this short article, I cover what I did to fix the problem.

Fixing a Broken NVIDIA / GNOME Setup on Ubuntu

3 minute read

Published:

Recently my Ubuntu installation ended up in a broken state after a reboot: external displays stopped working, nvidia-smi failed inside the desktop environment (DE), and the system would hang while stopping gdm during shutdown. Interestingly, the NVIDIA driver still worked in recovery mode, which suggested the kernel modules themselves were not completely broken. I decided to reset both the NVIDIA stack and the DE entirely since I have had issues in the past with GPU weirdness.

How-to: Perform Portable Substitution Using nvim and ripgrep

2 minute read

Published:

Often I have to perform substitution of variables or code blocks with something new as part of refactoring efforts. Since I am using nvim, I wanted a way to do this without having to close nvim, but also taking advantage of highly optimized regex search utilities like ripgrep. In this short how-to, I provide the commands one can use to do this without ever having to close nvim.

Lightweight CI/CD on a Raspberry Pi 3B+: Deploying a Robust Self-Managed GitLab Runner

26 minute read

Published:

If you choose to host a self-managed (i.e. private) GitLab instance on on-premises infrastructure, you do not get access to GitLab’s shared (public) runners for CI/CD. Unlike GitLab.com or GitLab Dedicated, a private GitLab instance puts you fully in control, but that control comes with responsibility: you have to bring your own runners. In this article, I document my experience setting up a GitLab runner on a Raspberry Pi 3B+, why I chose this route, and how I did it. Spoiler: while the setup itself is fairly straightforward, there are some Raspberry Pi–specific hardware quirks that are worth handling correctly if you care about long-term stability and recoverability.

How-to: Enable nvim Color Schemes in tmux Windows

3 minute read

Published:

I am constantly using ssh to remotely login to different compute clusters (e.g., DKRZ’s Levante, ECMWF’s Atos, local clusters at work, etc.). I find it much more convenient to use a terminal-based text editor like neovim coupled with the standard terminal multiplexer tmux in order to switch easily between several programs in one terminal. However, I quickly encountered an issue where my neovim color scheme was not displayed when using it within tmux. Fortunately, there’s an easy fix to this issue that I cover in this article. I first show the problem and the expected behavior, diagnose the error, and then correct it accordingly. I document the solution here and tie to use with legacy systems.

How-to: Update PDF Metadata Using pdftk

4 minute read

Published:

I often download and read scientific journal articles on my Kobo eReader. Unfortunately, the metadata in the PDFs for such journal articles may lack title information. This means that the searchable title that appears for the article once loaded onto the eReader is something very ugly like an uninterpretable string of digits. An easy way to fix this is using the open-source tool pdftk. In this short article, I show how to use pdftk for this purpose.

Extra Mathematical Details: The Steady-State Reaction-Diffusion Equation and its Solution in PETSc

23 minute read

Published:

In this article, some extra mathematical details related to the solution of the steady-state reaction-diffusion equation using PETSc are discussed. First, the simple nonlinear governing equation of interest is shown. Then, Newton’s method is presented at the partial differential equation (PDE) level for generality rather than being presented at the algebraic level. Subsequently, the spatial discretization via the finite difference method is shown for completeness. Finally, a commented PETSc implementation of the discretized reaction-diffusion equation is shown to concretely illustrate how the mathematical notation maps to code.

portfolio

LinguaLoop

Published:

Full stack (Python FastAPI, minimal JS/HTML/CSS), single-page web app for learning languages via transcription. Code at jfdev001/lingua-loop.

publications

Git for Everyone

Presented at Leibniz Institute of Atmospheric Physics, 2026

Version control is an essential tool for modern software development and research, yet many people either do not use it or use only a small subset of its capabilities. This workshop introduces the fundamentals of Git and collaborative workflows using GitHub. Participants will learn the core concepts behind version control, including commits, branches, and repositories, and how these ideas support effective collaboration and reproducible work. The session combines short explanations with hands-on exercises using a small, Fortran-based weather simulation project. Participants will practice common workflows such as tracking changes, creating branches, opening issues, and contributing through pull requests. By the end of the workshop, attendees will have a practical mental model of Git and GitHub that they can apply to their own projects. No prior Git experience is required.

Go to Slides

Download Presentation Recording

LinguaLoop: A Modular, Tested, and Packaged Language Learning App

In this brief talk, I present LinguaLoop, a modular language learning web application, to demonstrate a full-stack software design focused on testability, automation, and reproducibility. The talk highlights how the system is structured into clear components with strong separation of concerns, supported by a layered testing strategy ranging from unit tests with mocks to full integration tests against a real database. At the end, I map these engineering practices to spacecraft software infrastructure concepts such as subsystem isolation and system-level verification.

Go to Slides

Full-Stack Scientific Software Engineering: From FastAPI to PyTorch Bindings and Climate Modeling

This talk presents three projects spanning the full scientific software stack — LinguaLoop (Python/FastAPI web app with CI/CD, containerization, and layered testing), FTorch (Fortran-PyTorch library with multi-compiler build engineering and legacy system integration), and ICON (large-scale Fortran climate model with 10k+ LOC refactoring and compiler modernization). Together, they demonstrate skills directly aligned with the DPPS Software Developer role at CTAO: automated cross-platform testing and build engineering, legacy system integration, large-scale codebase stewardship, and distributed collaborative development. The talk also represents a small portfolio of what I’ve done for the last 2 years, and can be mapped to other projects accordingly.

Go to Slides

talks

teaching