Hello! I’m Daniel, a Software Engineer based in Edinburgh. This is where I note down useful things I don’t want to forget and also where I document some of the personal projects I’ve worked on.

Blog Posts

Converting FLAC to ALAC on macOS

I’ve been looking for a way to batch convert FLAC files to ALAC (Apple Lossless) format easily on my Mac. I finally found a solution that does what I want: convert the file with equivalent quality and preserve metadata so I can drop the file right into the macOS Music app and play it.

Logitech K380 keyboard: Page Up/Down/Home/End with Logi Options+

In a previous post, I described a way to configure page up, down, home and end on the Logitech K380 keyboard when used with macOS and Logi Options. Years have passed since then, and a helpful comment on the previous page from Bob C pointed out that the newer Logi Options+ made it much easier to configure these keys. So, if you’re facing this problem in 2025, you might want to give this a try instead.

Running Large Language Models locally

The easiest way to get started with Large Language Models (LLMs) like GPT-4 is to use the OpenAI API or Azure OpenAI. However, since the LLaMA leak a variety of LLMs have been created that can be hosted locally. I was interested to see what it would take to do this and what tools are available.

Steam Deck setup

I caved and finally bought a Steam Deck. The internet was full of guides to upgrade and modify it so I’m documenting some of the things I’ve tried here.

Issues with floating point

Floating point values normally just work, but there are a few issues with them that are useful to be aware of! My previous post discussed the representation of values, but this one will talk more about the times where things might not work quite as expected. I’m aiming for this to be a practical guide with some simple rules to follow, rather than an exhaustive study into all the issues with floating point.

Floating point numbers: some basics

A recent discussion with a colleague about issues with floating point comparisons made me realise that my knowledge of best practices boiled down to comparing floating point values using tolerances and switching to double if issues with accuracy popped up. I figured it was time to look into it further and get a better understanding of what is actually going on.

Python collection classes: a summary

Following on from the C++ collections post, it’s time to create a similar overview page for Python! There are more collection classes than this, but I wanted to revise the basics.

C++ collection classes: a summary

As I work through a bunch of algorithm problems in C++, I thought it would be useful to create a summary of the collection classes built into the standard library.