RSSAmplifier

Blog

Felix' Blog

felix-knorr.netRSS feed ↗20 posts

Latest posts

Using Coding Agents Without Producing Slop

This article was first release in the german IT-magazine Golem . When it comes to AI coding, I see the following two sentiments almost exclusively online: AI is useless, and generates nothing but unmaintainable slop AI is going to replace all developers by the end of 2026 The truth is typically somewhere in between. For the last 6 months, I've been spending a lot of time with AI agents, and have…

Project-Specific clangd Configuration with a Temporary Shell

I've been writing C and some C++ in terminal-based editors for the past five years. By default, clangd searches the current file's parent directories for a compile_commands.json . This becomes annoying when a repository contains several independently built firmware projects that share code and have a common repository root. Each project needs its own compilation database. Replacing a single…

On Error Handling in Rust

The current standard for error handling, when writing a crate, is to define one error enum per module, or one for the whole crate that covers all error cases that the module or crate can possibly produce, and each public function that returns a Result will use said error enum.

A Review of Helix after 1.5 Years

I've been using Helix for roughly 1.5 years now, and for the latest release (25.01) I decided to summarized the thoughts I've been collecting until now.

Replacing nginx with axum

For the last seven years, I've been reaching for nginx when I wanted to host something that was facing the public internet. Mostly as a reverse-proxy, but also for static sites. My webservers tend to accumulate features over time (like all software, I guess) and after a while, I have multiple services running under different subdomains, some being protected using basic auth, and of course TLS in…

GitHub Actions are a Problem

You push (or better, merge) to master, and the deployment happens automagically. No further work required. That's the promise of GitHub-Actions (GHA), and probably every other CI service provider. However, things are not as shiny as they seem at first glance. There are many problems with the approach that GHA and co. use. Some are addressable by more disciplined usage behavior[^1], but others are…

Raku is pretty damn Cool

The first time, I've heard of Raku was maybe a year ago. I was too busy to look into it though. I've done that now and BOY OH BOY, do I like this language.

Traits are more than interfaces

I've been paid for writing Rust for 1.5 years now, but I still have eye-opening experiences now and then. Even though I've invested quite some time in learning functional languages, the first language I've used a lot was C++ and I've written a lot of object-oriented code. Given this background, I've mostly interpreted traits as Interfaces or Abstract Classes as they're called in C++. However, that…

Rust Cross-compilation pitfalls

When you want to cross compile Rust programs, you have two options: You either use cross , or you do it manually. The first approach is easier, but only until you run into problems. I want to talk about the problems and corresponding solutions that you might encounter with the second approach.

The Little Joys of Code: Proc Macros

Most of the code software engineers write is pretty mundane, which is good. Simple code is easier to read, to maintain, and has less bugs. However, sometimes we write code that feels super cool, and makes us want to show it off to our peers. Well, at least for me that's the case. And this is precisely what this post is about: a cool piece of code, that made me smile, and that I want to share with…

Debugging with GDB

My first programming language was C++ and for a long time, I was using Visual Studio Express in Windows. When I had to debug something, I would click on the line number to set a breakpoint and press F5. Maybe I'd add some variables to the watch window, and press some F-keys a couple of times. Recently, I switched jobs and I'm now mostly developing firmware in C. Since I switched to using Linux and…

Markdown Note - The best Note app around

That title is obviously click bait. However, it is also true, at least for me, as I wrote Markdown Note (MDN) because I was not satisfied with any existing solution. It allows you to write notes in Markdown, with any editor you prefer, and display them in the Browser. It also has some bibliographic features.

An introduction to Jupyter - and why I don't like it

Jupyter Notebooks are hugely popular. In this post I'll give an introduction into what they are, why I would actually not recommend using them, and what I do instead.

A Python Course

Recenty I've been asked whether I could teach Python to a fellow PhD student and said yes. My plan was not to invest too much time into this, and just assemble a list of resources to read, and a few practice tasks. However, by now two more people have asked whether they could join, so I decided to gather everything in one place and this place is here.

The best way to create a Pathfinder character sheet? Python!

I love playing Pathfinder. And I've tried many different ways to manage my character sheets. You can do it by hand, use an Excel-sheet or use one of the many available programs to do it for you. The problem with the programs is that even if they actually contain everything, you get into trouble if you want to use custom items or house rules. This is obviously no problem if you do it by hand but…

A comparison of Peg-Thing written in Clojure, Python and functional Python

Currently, I am learning Clojure reading the great (and free) book [Clojure for the brave and true]. In chapter 5 , the game Peg-Thing is implemented. I thought this would be a good opportunity to compare Python and Clojure. I reimplemented the game in Python two times. First in the 'normal' Python way and a second time in a way that seemed to me like the ideal functional implementation in Python.

How to code basic psychological experiments with Python quickly

A few days ago, I read an article: How to code basic psychological experiments with Python by Mathias Gatti. It advertises PsychoPy, which is a python library to create psychological paradigms, which is really just a fancy name for what is basically a very simple mini game that will usually measure reaction times or the like. In his post, he walks the reader through the code necessary for a very…

How well can an SVM deal with noise and small samples?

What I do at my job is called "Multi Voxel Pattern Analysis" (MVPA). It involves applying classification algorithms to functional MRI (fMRI) data, i.e. recorded brain-activity, to predict some parameter or a behavior. The classification algorithm of choice in most studies is the Support Vector Machine (SVM). The reason for this is that commonly we only have small samples (usually ) while the…

Accessing pandas DataFrame using SQL-like select statements

Recently I was writing the following code: processing_frame = \ sl_results [ sl_results . c == coi ][[ "subscript" , "kappa" ]] . rename ( columns = { "kappa" : "value" }) Another piece of code that might look familiar to the habituated pandas user is: my_frame [( my_frame . col1 == a ) & ( my_frame . col2 == b ) & ( my_frame . col3 < c )] Typing this kind of stuff is annoying, and it triggers me…

Functionalish Programming

There already is a myriad of blog posts on functional programming, with this post, I don't try to give an introduction to it, but I want to highlight, how we can get inspirations from it, to improve our code. This is why the post is called "functionalish" programming, instead of "functional" programming.