Migrating from Fathom Lite to Umami
Migrating 6 years of analytics data from Fathom Lite (SQLite) to Umami v3 (PostgreSQL) with a Python script that expands hourly aggregates into individual event rows.
Recent content on devroom.io
Migrating 6 years of analytics data from Fathom Lite (SQLite) to Umami v3 (PostgreSQL) with a Python script that expands hourly aggregates into individual event rows.
If you’re running a self-hosted Forgejo instance and want to use GitHub Actions, you might have noticed that Forgejo defaults to using data.forgejo.org for action resolution instead of GitHub or your local mirrors. Here’s how to configure it properly.
Introduction Yes! 2025 is the year of the Linux desktop! I’ve always liked Linux as a desktop OS, but one thing was lacking: gaming. Lots of things happened in the gaming on Linux space. I’m not an expert, but I think the Steam Deck played a big role. SteamOS, the software that runs on the Steam Deck, is based on Arch Linux and KDE/Plasma. Many games are either compatible with Linux,…
2025 is the year of Artificial Intelligence. With GPT-5 just released, many developers will re-evaluate their use of large language models for assisting in their daily work. I’m here to tell you: you’re probably doing it wrong. And you’re missing out on the real power that AI assisted development can give you.
Background Over time I’ve accumulated quite a bit of hardware for my homelab. I started with a three‑node Proxmox VE setup: Node ID Hostname Role 1 Treebeard Main hypervisor (all production VMs & ZFS pool) 2 Aragorn Going away – VMs are migrating to Treebeard 3 Samwise Tiny SFF box; runs a single Flight‑Radar VM With Aragorn about to be decommissioned, there’s no real benefit in keeping the…
It’s what every sysadmin dreads and prepares for: a failed hard drive. Replacing a failed SSD in a Proxmox boot pool (rpool) can be a daunting task, especially considering the critical role it plays in your server’s operation. A mirrored ZFS boot pool provides redundancy, but when one of the drives fails, it’s imperative to address the issue promptly to maintain system integrity and prevent…
I’ve owned this Toyota Yaris new from 2010. We don’t use it that often, but it’s a cheap car to own and it’s great to have around when needed. Unfortunately, during some very wet winter weather, we noticed that the car was very wet on the inside.
Allowing comments on your website is scary. You have to keep a constant eye on them and there’s lots of spam and trolling. The upside is getting that warm, fuzzy feeling when people react positively to your work.
In previous posts I discussed some Asahi Linux specific setup to make Asahi Linux play nice with my MacbookPro M1 Max. After running Asahi for about a week on my production laptop , I’m ready to do some evaluation.
The MacbookPro has a high pixels-per-inch screen, or as Apple likes to call it, a Liquid Retina XDR display . Including the notch area, it measures in at 3456x2234 pixels at 254 PPI. It’s a beautiful screen…
I’m a big Linux fan. On my Ryzen 3700X desktop rig I run Arch Linux and I like it. The only times I boot into Windows are to play Rocksmith 2014 , because I still haven’t got that game to work properly on Steam/Proton.
This is my Now page where I share what I’m up to right now . Consider getting your own. Updated: 2026-06-13 Personal In the process of settling an inheritance. Playing with AI, a lot Putting the VW Cabriolet back together for it’s periodical inspection Professional Facilitating Code Retreat workshops . Working on an exciting new project (which I can’t talk about)
The stock AMD Wraith cooler on my linux box was getting loud. Since I recently migrated the complete system from a (too) tight mini-ATX case to a larger Corsair 4000D Airflow , I decided to splurge on some new cooling.
Update 2025-09-08 It was brought to my attention by several readers that these instructions are outdated and no longer working. Immich now provides Immich CLI , which allows you to easily upload photos from a terminal.
I love Google Photos for its easy of use and features. But, it’s Google . As you may knwo I like to selfhost all the things, but for the longest time I was not able to find a good selfhosted alternative for Google Photos.
For a while now I’ve had a single 3TB WD Green in my NAS to store local Borg backups before syncing them to Google Drive a Hetzner Storage Box . Because I recently replaced my 3TB Reds for 10TB HGST’s, I have some spare drives left.
I run Debian on all my servers. It’s a great stable OS and I love it. Proxmox, which I run on my homelab server , is also based on Debian. However, on my desktop I run Arch Linux . It’s a great distro to tinker with. It comes with a lot of up to date packages, but it also has the AUR - Arch User Repository. So for any app you can find, there probably is an easy way to install it.
Yesterday the first 10TB recertified drive tested all okay . I’ve decided to upgrade the four 3TB drives in my pool to 10TB to expand capacity. I have a 16 bay hot-swap chassis with 13 slots filled.
You can read more on my homelab and datahoarding problem here and here . Today I scored two recertified 10TB HGST drives for very little. Normally I’d go for the brand new stuff, but this deal was too good to be true.
It’s been almost 18 months since I purchased a, let’s be honest here, beat-up Volkswagen Golf Cabrio from 1994. At the time my knowledge about car mechanics was pretty much zero. Did I tell you I like a good challenge?
I like my colorschemes. The most recent one I discoved is Base2Tone Cave Dark . So, naturally I wanted to have it in Slack too, so I created a custom theme. Here it is.
And now for something completely different: I’m going to fix up 1994 Volkswagen Golf III Cabrio at home.
Please read my previous post on my DIY NAS here: 1 and 2 . 10 gigabit . That is 10,000 megabit . I come from a time when fast internet meant you had ISDN. For reference, that’s 192kbps, or roughly 24KB/s.
Please read my previous post on my DIY NAS here: https://www.devroom.io/2020/02/28/building-a-diy-home-server-with-freenas A brief history In May 2019 I decided it was time to jump on the NAS bandwagon. I started out with the following:
Many less-tech savvy people I know have a robot vacuum cleaner. So why didn’t I? I don’t know, so I bought one. I was able to get a good deal through a Chinese reseller that could ship directly from Spain. As it turned out, they shipped with Amazon.
This week our Philips TV died. I repaired it before, and it seemed the problem was back.
I like tinkering with electronics and one awesome way of doing that is by repairing things that are broken . I get about ten or more requests every month from random people from the internet to help them repair there device. My reaction is always the same: no, I will not. This posts tries to explain why I say no and what alternative I can offer them.
This post is specific to Drone CI , but is probably easily adoptable to other CI systems, like Gitlab. Flutter is UI library based on Dart to create beautiful, natively compiled applications for mobile. Web and desktop targets are also in the works.
This article contains some background to why I wrote this plugin. If you just want to use it, see github.com/ariejan/drone-hugo for details. I recently moved away from Gitlab + Gitlab CI to a Gitea + Drone setup. Both Gitea and Drone are lightweight and fast, and let’s be honest, more than enough for an engineering enthusiast like myself. They now also run on my NAS Homelab Server as docker…
A git submodule, in its essence, is a reference to another git repository. It’s a great way to include vendor code (like plugins or themes) into your own code base. This post contains some examples on how to use git submodules effectively.
Keep reading! I’ve documented several upgrades to my DIY NAS at the bottom of this post. After you’re doing reading this, hop over to my latest update on my homelab server / NAS.
Today I was logged in on my FreeNAS server to setup Duplicity backups. After initial success on a small dataset of about 100MB, I cloned my configuration to backup my long term storage dataset. It contains about 50GB of data - or so I thought. It turns out there’s over 500GB there.
Last week I started a new repair project: a 42" Philips TV. The power supply was obviously defect, but I ran into another problem as well…
Building a quality phono preamp is still one of the joys of the audio electronics enthusiast. This is my first take on a RIAA phono premap.
Recently I got an email asking me about how I classify bugs and issues and how the different categories for a bug’s severity, like Critical and Major can be explained clearly.
After watching The Signal Path for some I decided to treat myself to a classic 34401A 6½ digit multimeter.
This unit sold from 2012-2015 as the top-of-the line AV Network Receiver from Denon. I got my hands on a unit with power protection issues. Here’s the repair log the Denon AVR-4520.
Another lucky find: Rotel RB-970BX Power Amplifier with one defective channel. Let’s fix this!
As a developer, more than anything, you copy and paste things. Making copy and paste work in properly with Vim and Tmux is, unfortunately, not trivial. There’s a lot of information to be found on the internet about setting up copy and paste with Tmux. There’s also lots of information on how to setup Vim. But then you run Vim 8. On macOS Sierra. And things break down quickly.
Note: I’ve moved away from the solution outlined in this post. Mainly because I did not want to write an entire gallery from scratch. I’ve since opted to use lightgallery.js which is a pure JS image gallery solution with some nice goodies.
Bitcoin was introduced in 2008 and has gained much popularity since then. At the time of writing the exchange rate for 1 BTC is about €1100 (or $1166), quite an increase from when you could get 1 BTC for just a few euro.
The venerable Marantz PM80 Mk2. This unit was completely dead, but I was able to bring it back to life!
Today I’ve been fighting to get our test suite to run against a newly delivered Oracle 12 database. Of course, that didn’t work out of the box, so there was some debugging, trial-and-error, and cursing involved. Finally, I managed to get the build back up and running. Yay!
I love music. Recently I got into vinyl and I love it. Although it’s not digital 24/96 studio quality, there is something relaxing about picking a record, putting it on my turn table and listening to the small diamond needle scanning the grooves of the record pressed 30 or 40 years ago. This post is not about vinyl, though.
This is a re-post of my article over at Kabisa ’s The Guild . I’ve been busy rewriting Firefly for a while now using Hanami . Hanami is a fascinatingly fresh ruby web framework with a strong opinion on Clean Architecture . Me like!
A classic 1989 Denon PMA 720a Integrated Amp that made a bang and wont’t turn on. Let’s solve this!
A Marantz SR5200 receiver with a non-working front-right channel. Let’s fix that!
Log of diagnosing and repairing a Denon PMA560 Stereo integrated amplifier.
You may have recently read Website Obesity by Maciej Cegłowski , as featured on Hacker News . There’s a lot of great stuff in that article. The most obivous and striking thing is that there is a lot of bloat on the web. Examples include a tweet (140 characters) that is served as a 900kB website. How to optimize a website and remove bloat is a topic in and of itself. I can highly recommend…
Safari is a great browser. I know there are alternatives, like Firefox and Chrome, but I like Safari. Recently I noticed a lag of about 3-5 seconds when opening a new tab. I use tabs often, so this started to get in my way. Because I did not feel like switching browsers, I did some digging around to see if I could get this problem fixed.