Things I found annoying, so I fixed them

- 7 min to read


This post is about a collection of small things - mostly inconveniences I perceived as minor at first, but then ended up spending hours fixing.

I like listening to podcasts

Some of my DVD audiobooks are stored in my Audiobookshelf instance, while I manage a few RSS feeds in another app. Combining everything into a single app is tricky because ABS doesn’t support streaming directly from RSS feeds, and I don’t want to download thousands of podcast episodes.

To solve this, I built a small FUSE library in Go that mounts the audio files in a virtual filesystem. However, ABS doesn’t match files by their filename but by their ID3 tags. That would be fine if podcast providers tagged their files correctly - or at least consistently. Unfortunately, most don’t.

Since the metadata is already present in the RSS feed, I wanted a way to embed it into the MP3 files. My solution was to overwrite the first block of each file and modify the ID3 tags on the fly. This turned out to be harder than expected because some tags include images spanning multiple blocks. But now ABS can match each podcast episode correctly.

My phone is old

Sonos speakers. These things are both amazing and infuriating. I really like them, but I also really hate them. Not only did they break the app - they completely bricked it for older Android versions. This, along with a few other minor inconveniences, pushed me down the rabbit hole of rooting my phone. I’m now running EvolutionX Android 16 on my 7-year-old device, and it works great. Thanks Joey (EvoX Maintainer)!

While I was at it, I also replaced the battery for €20. The phone feels like new - except, of course, for a few minor inconveniences.

Mainly the speakers. The range of the volume slider just isn’t the same as the original. It doesn’t go low enough, and it lacks the necessary granularity. But since I’m rooted, I can fix that - I just needed a way to change the volume curve.

Enter Volume Curves Next, a KernelSU module that does exactly that. It overwrites the system curves with the ones I want, giving me precise control over the volume on the phone I actually want to use.

My clock/alarm app does not support the feature I want

My phone supports booting shortly before an alarm rings. This is really useful: I can power off my phone at night so I’m not woken by notifications and, more importantly, I’m not tempted to look something up in the middle of the night.

The original app is closed source, and I couldn’t find a FOSS clock app that fully supports this feature. So I made a PR @BlackyHawky/Clock#293 and added the feature to a fork of the google clock app, which seems to be actively maintained. It’s really nice to have it working again.

Ikea - They have almost everything

IKEA’s Tossberg chairs are great - except that they completely destroyed my floor. The feet are set at such a steep angle that the felt pads don’t touch the floor at all; instead, the hard plastic scrapes directly against it.

I drilled new holes so the feet could be mounted straight, but the pins that go into the holes broke. I bought replacements - those broke too. Finally, I 3D-printed a sleeve that fits over the edges of the feet and has a flat bottom where I can attach felt pads. Works perfectly now.

Hopefully you don’t own the same chairs. And if you do, I hope either you don’t care about your floor - or you at least own a 3D printer.




Oh, I also bought some inserts for my cupboard. I wanted a drawer, but Ikea doesn’t make them. I first tried to build one out of cardboard - didn’t work too well. Then I ordered some custom paper-cut inserts. Oh boy, they were terrible. The ones I made weren’t much worse, and they cost about 5% of the price of the custom ones. It’s literally just a piece of cardboard.

So I took more exact measurements. How hard could it be to manufacture my own? A good friend of mine has access to a laser cutter, so I asked him for help, bought some wood, and customized a really nice script I found for lasercut boxes. We cut the first one - total disaster. The machine didn’t cut through the wood, the burnt edges looked awful, and the fit was terrible and inconsistent.

I switched to a CNC machine. Ruined the drill. Bought a new one. Ruined that too. Bought another - ruined it again. Clearly, I was doing something wrong. I bought some cheap bits since the expensive ones were… well, expensive. After chewing through almost four boxes’ worth of material, we finally got our first box. But in the end, they turned out really nice.

Just don’t ask about price/performance.

Mice - Not the living ones

My mouse is loud - really loud. And it also started double-clicking… You can decide which of these is the bigger issue.

I found this one guy on reddit that repaced their switches of my mouse. I figured I could do the same. I’d always wanted a reason to solder something anyway. So I researched some switches and ordered them from AliExpress. Delivery time: about a month. Too bad they were delayed by almost another month.

In the meantime, I had to use an old, really crappy mouse I had lying around. I should have just bought a new one, but the guy I tried to buy a used one from never answered. And I didn’t want to buy a new mouse because - come on - it was only going to be a week until the switches arrived. Right? Right?!

Well, the switches ended up stuck at the local airport for three weeks, so they were delayed again. I’m still waiting for them. I just hope they fit when they finally get here. In the meantime, my hand hurts from using the backup mouse. I really need a new one.

Proxmox

Just works. Kidding - nothing ever just works. Wait, it actually does work if you configure it correctly? Great! I’m planning to move my homelab services there.

The main reason I went down this path was because I needed compute that’s accessible from the internet, and I didn’t want to pay for a bigger server. I already rent a decent node from Contabo; I just needed a way to connect it to a node at home. But I didn’t want it on my local network - I didn’t want my whole network to go down just because I gave a friend access to this compute instance.

So, let’s isolate it. That should be easy, right? My router can’t do subnetworks (next step: new router). Well, technically it can, but only on Wi-Fi - I need Ethernet. Luckily, I’m fully virtualized inside Proxmox, so I can do pretty much anything.

I set up a VPN host on my Contabo server, connected a Proxmox container to it, and then set up a VM that routes all traffic through that container. At first, SSL handshakes kept failing. Turns out you need to configure WireGuard/iptables properly so they don’t break.

I wrote up a guide on how to do it here; And I’ll go into a bit of the proxmox specific stuff:

There is a container that handles the internet connection. It runs the Turnkey WireGuard template. It is connected to both ethernet and a custom WireGuard bridge (with IP 192.168.15.1/24) for another VM to connect over. The VM only needs to be on the WireGuard bride and a static IP, no other connections, no other config needed, its completely transparent.

Configuring the WireGuard container is a bit tricky, but in short it comes down to:

sudo iptables -t filter -A FORWARD -d 192.168.15.101/32 -i eth0 -o eth1 -j ACCEPT # allows traffic between CT to VM
sudo iptables -t nat -A PREROUTING -s 192.168.4.0/24 -d 192.168.4.2/32 -j DNAT --to-destination 192.168.15.101 # redirects all incoming traffic to the VM
sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE # source nating
sudo iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu # prevent network fragemntation

Learned a lot about networking, really interesting stuff.

Oh, and there’s one small detail I missed when setting up a VM: discarding unused blocks isn’t enabled by default for LVM volumes in Proxmox. You have to turn it on manually. If you don’t, your VM will eventually run out of space, since nothing ever really gets deleted.

Tinkering is fun - at least for me, once it’s done.