hello@manuel·2026-02-12·via Ye Olde Blogroll — Firehose
Welcome to my personal website. I’m Naty, a tech dabbler, third-culture kid, serial hobbyist, and lifelong learner.
BurgeonLab is a blog where I document my mostly geeky interests and other enlightenments. This is my passion project and a work in progress; so expect to see changes.
I am keen on data privacy, self-hosting, technical writing, specialty coffee, street photography, fountain pens, Formula 1, and more.
My other pseudonyms are @eclecticpassions and @aperture2iris.
Thank you for checking out my corner of the Internet, hope you find something interesting!
March 1, 2026: I’m in the process of a big overhaul of my Hugo theme’s CSS. There may be some breakage in the meantime, apologies!
I’m collecting feedback to make the blog better in 2026. As a reader, your opinion matters to me. Could you take my 1–2 minute anonymous questionnaire? Thank you!
Embracing IndieWeb
Learn how and why I'm part of the small web
Ever since I learnt about content ownership, enshittification, and the IndieWeb in 2025; I’m gradually integrating small web principles and IndieWeb features into my site.
For instance, I can receive webmentions if your site supports sending them; otherwise, feel free to send me a webmention manually! Public webmention display isn’t supported yet, only I’ll be notified if you mention something from my site.
A common feature in small web communities are webrings—a collection of sites linked serially around a common theme. You can find what webrings I’m part of in the expandable list in the footer and explore other sites with the navigational links. I also collect web badges (aka 88x31 buttons) which are down there too. And while you’re at it, feel free to sign my guestbook!
In the last week of 2025, BurgeonLab gained full Micropub support through Indiekit; a self-hosted Node.js server! Explore content tagged with: #indieweb, #indiekit.
If you want to learn more about the IndieWeb community, here are some resources:
Besides blog posts, you can explore these other sections: pages, weeknotes, notes (microblogs), likes and photos. Use the Explore dropdown menu at the top or direct links to common pages in the footer to discover the site.
See how I added a pre-build step using a Bash script in my Hugo deployment workflow to check for the draft status of Markdown content. By using stricter linting rules than Hugo’s default draft behaviour, it can catch and prevent drafts from being accidentally published.
Learn how to batch convert plain URL links from a TXT file into a list of Markdown links using Python, handy for link dumps or link lists.
Discover Feather Wiki, a FOSS lightweight and customizable personal private web notebook, with multi-device sync via Syncthing and Android support using Termux.
How I fixed high latency and laggy SSH after getting a new router. Steps on how to SSH into Raspberry Pi over Ethernet with direct connection on Mac devices.
As a long-time user of LanguageTool’s offline server on macOS, I thought I’d share how I set it up. It’s a great way to get a pretty accurate grammar and spell checking / proofreading software without relying on online services. I’ll go through how to configure this open source tool, get extra optional improvements like n-gram data processing, and script shortcuts.
Notes Stream
View my latest notes. I use this post type for sharing shorter content; sometimes as quick status updates or notes on a topic that probably won’t become a full blog article.
digiKam MySQL Database Upgrade Woes
Ever since I left Adobe Lightroom in mid-2025, I’ve been using digiKam from KDE for digital asset management (DAM). I quite like using it to manage my extensive library of photographs (+100k images). But almost every time there’s a version upgrade, the internal MySQL database breaks.
Database Options
There are three database options for digiKam: SQLite, Internal MySQL, Remote MySQL. I have always chosen internal MySQL as apparently SQLite doesn’t do well for libraries over 100k photos. But I can never get MySQL to work seamlessly on the get-go and it breaks every single time when it’s time to upgrade either the database or digiKam itself.
Not Again
I upgraded to digiKam v9.2.0 yesterday, lo and behold, the database broke again. I tried everything I could (with limited database knowledge) but could not get it fixed like the previous three or four times. I made notes each time when I troubleshooted, but the fixes I wrote down didn’t work this time. Previous issues include UNIX socket problems and mariadb from Homebrew was conflicting; but I checked it all this time and could not get the database to upgrade successfully.
Very frustrating because there is nothing to actually set or configure in the database dialog other than the paths for the four needed executables of mariadb/mysql
Trying SQLite
I have decided to give SQLite a try despite being over the 100k suggested limit. Write-ahead logging (WAL mode) is turned on and I’m now waiting for the new database to be built. It’s over two hours by now and it’s past the 50% mark.
Fingers crossed that this will be last time I waste time on the digiKam database.
Regular expression (Regex) is a skill I wish I have a better grasp on; but I’m slowly learning! For example, I often find myself searching for a particular string pattern to replace it with something else. Today, I learnt how to search for this pattern (Markdown bullet points):
The start of a new line (^)
Dash (-)
Space (\s)
Alphabet following the space ([a-zA-Z])
Which makes the search string:
1^-\s([a-zA-Z])
The ( ) bracket around [a-zA-Z] is to capture the matching section and using it later as $1 for the first group, $2 for the second, etc.
My aim is to change the bullet points into Markdown checkboxes. The string to do that is:
1- [ ] $1
This changes the bullet to a checkbox and the captured group in the ( ) is replaced by the original.
Maybe there’s some plugin to do this in a click, but I enjoy learning things in real life scenarios.
No, not beer; but for Homebrew, the package manager which I have used for over five years…? I don’t know how I lived without it before!
I have decided to maintain my own tap for the first time because of the deprecations that will come into action later this year in around September 2026. These deprecations are for macOS software that has not signed or notarized (i.e. paid Apple) to meet the macOS Gatekeeper requirements. Issue #6482 gives more background information.
I’m not entirely sure if this is the right way to do this, so treat this as a personal tinkering log, not a guide per se.
Steps I’ve Taken
Since brew taps are just Git repos, I created one on Codeberg and copied all the ruby cask files that have the deprecation warning from the official Homebrew Cask, and removed the line # disable! date: "2026-09-01", because: :fails_gatekeeper_check.
Initialize the repo with the files in step 1, Casks/*.rb, and push to remote.
Since I’m not using GitHub, the following command is used to add a custom tap in the terminal: brew tap git-username/homebrew-name-of-your-tap https://codeberg.org/git-username/homebrew-name-of-your-tap.git
Brew will warn that this tap is not trusted. To trust a tap, run brew trust git-username/homebrew-name-of-your-tap.
Tell Homebrew to use the new tap as the source of the soon-to-be deprecated casks, e.g. run brew reinstall --cask git-username/homebrew-name-of-your-tap/cask-name. This will explicitly tell Homebrew to install the cask using the new tap instead of the official cask tap. Repeat for all casks with deprecated warning.
Once the cask is officially deprecated, running brew install --cask cask-name should pull the .rb file from your custom maintained tap without the explicit custom tap path.
Run brew tap to see a list of all installed taps and run brew doctor to check if the warning, Some installed casks are deprecated or disabled. You should find replacements for the following casks, is resolved after switching to the custom tap.
Manually Keeping Casks Updated
It’s now up to me to update the .rb files, so I’ve gathered the XML feeds of the release pages and turned on notifications in my feed reader. This will remind me to update the version number and sha256 manually, which will in turn update the tap with the latest cask details ready for tapping.
I have yet to try to calculate the sha256 but it should be relatively straightforward with curl. I’ll update this section when I get at least one cask updated this way.
Lastly, run the usual xattr -dr com.apple.quarantine /Applications/software.app command to bypass macOS’s Gatekeeper. (A step can probably be added to the .rb file to do this automatically—but I am used to running this manually after upgrades so it doesn’t bother me too much.)
Here are my latest weeknotes. They're a type of post that I publish weekly and sometimes covers less technical topics.
Minor site updates, new style-guide, convoluted process of deleting old accounts, attending my first tech event, and link roundup as usual.
Getting to meet Brennan, a blogger I followed for a long time via the IndieWeb, some new features on my site and considering leaving Bitwarden.
Pokémon cards’ value, accidentally published a Hugo draft post and decided to leave WordPress for a new SSG. Considering a digital garden for my secondary blog.
Switching email providers (Tuta to Mailbox.org) meant setting up DNS and using new Android apps. Bitwarden is changing? Trying to update my CV with new tools.
Catching up on the /changelog page, trying to learn more Git to fix my Git mistakes, Mother’s Day, and XL link roundup for missing last week’s weeknote.
Top 10
Most popular pages in the last 30 days based on unique visits. (Privacy-focused analytics, no cookies.)