Chris' Writing
Two weeks with the Pebble Time 2
Remember the Pebble smart watch? The device that originally came out in 2012 could be considered the OG of smart watches, and was pretty radical for its time.
I backed the Kickstarter campaign for the original black and white model and wore it for many years until the battery capacity dropped to only last for two days, and stopped wearing watches entirely for a while. That’s quite ironic, considering that even for present day smart watches, a two day battery life would be considered pretty good.
RIP iRobot - we'll miss you(r repairability)
The U.S. vacuum robot manufacturer iRobot was sold to a Chinese company for scraps a while ago. The once leader in household cleaning robot technology lost their way somewhere along the line, stopped innovating, and was left behind. For a long time, they made damn fine vacuums, though.
My apartment is still home to one iRobot j7, lovingly called Wayne Inhalierts, and it will continue to live with us until it breaks or the new Chinese overlords turn off the servers.
Automating fear away
I’m a fearful person. Much of my life is spent building and maintaining stable systems that need to satisfy a high standard of reliability, and fear helps me make good decisions for that. Sure, it can hold you back a lot in life if you let the fear dictate behavior, but if you interpret it as a signal, it can be incredibly useful.
It took me an embarrassingly long time to harness fear as a power, a signal for things not being right. This only helps with rational fear, though.
Naturally, I’m affected by low-signal, irrational fear as well. This post is about dealing with it using technology.
SSO for Frigate with Keycloak
A growing fleet of services makes it more messy to have separate credentials for each of them. I’ve been tinkering with single sign on (SSO) with the goal to have one account per person for all the services in my home network. Not just HTTP, but other protocols as well, but I haven’t gotten to the latter part yet.
Fortunately, many popular pieces of software come with SSO support out of the box, typically OpenID Connect (OIDC) via OAuth2 rather than the more enterprise-y SAML. Grafana has built-in OIDC support, there are multiple OIDC addons for Home Assistant, and Miniflux, Open WebUI, and Paperless-NGX just work.
Synology DSM was a huge pain, because it provides no feedback as to why the current configuration isn’t working - just “talk to your administrator”. My brother in christ - I am the administrator.
Frigate proved to be challenging in a slightly different way.
As a bonus, I’m running my own private key infrastructure, so all the parts talking to each other need cooperate with certificates signed by my own certificate authority.
NFS performance troubles 2: What actually happened
A while ago, I wrote about VictoriaMetrics and, by extension, Grafana performing poorly, and placed the blame on NFS not being a good storage backend for most types of databases due to the requirement for reliable, granular, low-latency writes. While that’s objectively true, I didn’t use the database heavily enough for that to matter. It turned out that the problem was of entirely different nature all along.
Are ceramic key caps as awesome as they sound?
I’ve been watching Cerakey’s products for a while. The sheer idea of mechanical keyboard caps being made out of ceramic sounds intriguing.
The stock caps on the Keychron K6 I use at the office or when traveling haven’t been doing well for a while:
- Multiple keys’ paint started coming off. Less of an issue for finding the keys (I know where they are), more of an aesthetic issue.
- The G key’s switch stem broke off and got stuck in the G key cap. After failing to extract the broken part from the cap, the cap was essentially lost and I replaced it with a generic translucent cap from a switch tester.
Post mortem: vendor-agnostic non-invasive washing machine monitoring
The washing machine ETA is a lie.
Everyone agrees, nobody has solutions. No, a washing machine that needs WiFi to do its work is not a solution, just a larger collection of points of failure.
I wanted something that works with any basic, repairable washing machine, and doesn’t void the warranty. So, attaching to traces on the PCB wasn’t an option.
In the end, the computer vision route worked pretty well until the ESPCam I used for it died. That’s why this is a post mortem.
NFS performance troubles
Recently, I started having issues with self-hosted services running slow, despite ample memory reserves and load averages that were fractions of the number of available CPUs. That got pretty annoying, especially given that I recently set up Grafana alerts that send Telegram notifications when one of the services is slow or unreachable.
Cat classification with Frigate
My Frigate surveillance setup’s primary purpose is to keep an eye on my cats while I’m away.
An older setup supported only motion detection, but reviewing all motion events of the day while on vacation to make sure that each cat is doing fine was somewhat cumbersome. I switched to Frigate to leverage its entity detection capabilities so I only have to review events that detected cats, and could skip random motion.
Making of paracelsusgood.at
The swimming situation in Salzburg isn’t exactly great. 150k residents share two (!) indoor pool places (one of them often being closed for extended periods of time due to shoddy construction), and there are only two additional outdoor pool places operating during summer months.
For people who like swimming lanes, as I do, there is a grand total of about 16 swim lanes available during summer, and only 10 during winter (if one of the places isn’t closed yet again because the contractor used rust-susceptible screws… for a pool).
A mysterious drop in Ethernet speed
At some random point in the past few weeks, Ethernet speed on my couch dropped from just under 1 Gbit/s to less than 100 Mbit/s. Besides feeling like I was back in the early 00s, this frustratingly ruined my low latency streaming performance.
The (ongoing) quest for 1 second Linux boot to desktop
Micro VMs are becoming more popular as a more secure alternative to containers, but VMs traditionally suffered from long boot times that containers typically haven’t. Boot time optimizations make VMs more accessible for ephemeral loads that need to spin up quickly.
That’s not why I’m interested in fast boot times.
Reinventing my rack cooling solution
Most of my computers have been sitting in a noise-insulated 19“ rack for 6 years or so. Although I’ve been administrating real servers for more than a decade, I still get a kick out of cosplaying as sysadmin with machines that I can actually touch, rather than being located in some rented data hundreds of kilometers away.
The rack I bought came with a temperature-controlled fan that pulled air through the whole box (just tall enough to fit under a desk), but could only run at 0% and 100% speed, because the temperature control was just a binary switch. That kinda defeated the point of the rack being noise-insulated, because even Noctua fans make some noise at 100% speed.
Static site search optimization
I get this recurring urge to have a nice website, and usually fail to pull through after doing some interesting things and subsequently losing interest. The jury is still out on how it’s going to go this time, but I certainly reached an interesting thing: Search without a full-blown search engine.
Zola, the static page renderer that’s in use here, comes with support for two search libraries out of the box:
- Fuse.js (a few more features)
- Elasticlunr.js (leaner bundle)
Both have as basic operating principle that the static page renderer generates an index file that is loaded and searched directly on the client. Elasticlunr.js has a bit smaller footprint, so I went with this one.
AI entity detection with Hailo accelerator for containerized Frigate on Debian Trixie in 2026
Frigate is probably the most comprehensive FOSS video surveillance solution out there. It comes with rich entity detection support using relatively small neural nets, and supports various hardware acceleration strategies out of the box, as well as sporting first-class support of energy efficient single board PCs like the Raspberry Pi.
Alpine Linux on Raspberry Pi
Raspbian, a Debian Linux derivative, is the standard operating choice on a Raspberry Pi, developed and recommended by the makers of the device. As someone who always favored Debian and sometimes its derivatives as well, I never gave much thoughts to alternatives on this platform.
When Docker emerged, I started noticing Alpine Linux, because it was a popular choice for small images, and I started using it for my own images. I always thought that Alpine is a child of container architecture, but the distribution is actually twice as old as Docker, and still a couple of years older than the concept of containers on Linux.
Getting my pollen forecast into Home Assistant
As someone who is affected by various plants’ pollen, knowing in advance how bad it’s going to be helps planning the day and anticipate allergy-related malady.
My country’s meteorological service publishes pollen forecasts on their website, including per-state maps. It has become a ritual to visit their site every morning to check out the updated forecast, which is slightly inconvenient.
Switching PoE devices attached to a Linksys switch with Home Assistant
Some recent office space restructuring enabled employees to take home certain now-unused pieces of equipment that the company would otherwise have to sell off or trash. I was lucky to get a Linksys LGS124 PoE-capable managed switch to simplify wiring in my rack at home.
Being able to power cycle devices remotely is really useful to get crashed/locked-up stuff to work again, but the switch web UI is a nightmare and borderline unusable on touch devices, which are sometimes the only available option on the go, so I looked into API options.
Putting to sleep and waking up Windows machines with Home Assistant
I begrudgingly tolerate some Windows machines on my network, because some games’ anti cheat malsoftware consider virtual environments cheating. While VMs do make it easier to manipulate the state of a video game to one’s advantage, it’s annoying.
Balancing between power saving and convenience, I want these machines up as quickly as possible when I need them, so I keep them in sleep and wake them up with Wake-on-LAN. Putting them back to sleep via remote desktop is mightily annoying, so I searched for remedies.
Running ESPHome on the AZ ONEBoard
The AZ ONEBoard is a development board from the electronic components seller AZ Delivery based on ESP8266. Similarly to Adafruit’s STEMMA system, it’s intended to ease the entry into embedded development with sensors that can be easily plugged into a standardized interface, without requiring soldering.
I got a few sets of those with sensor modules for temperature, humidity, volatile organic compounds (VOC, and by extension eCO2), and brightness so I could get some sensors into the still-sensorless spots in my apartment.
Trains seat reservations
Some friends and I were traveling from Slovenia to Austria by train recently. It was a busy, so naturally we had reservations, and naturally, we were involved in a dispute regarding said reservations. Eventually, our seats’ challengers left when the conductor told them that they were in the wrong car.
From this experience, we deduced that train reservations were inherently flawed, and spent a bit of the remaining train ride coming up with a simple, easy to implement solution to remove a bit of ambiguity from train seat reservations.
Slow Laravel IDE helper generation
While working on a pretty standard headless Laravel app, I got really annoyed by how long composer install took whenever switching to branches with varying dependencies. Some hooks had been added recently, which invited the assumption that the experience would be the same for my peers. Retrospective was just around the corner, so I brought the topic up before taking a closer look myself, and was surprised that I was the only one suffering from this. Execution times were in the lower single-digit seconds for everyone else, while I was waiting nearly indefinitely.
Working around a broken SD card slot on a Raspberry Pi
While moving a cable, I violently ripped the SD card out of my Raspberry Pi by accident, breaking some of the slot’s plastic in the process. I was certainly careless, but using flimsy plastic for a component that can receive quite a bit of physical stress is probably not the best idea.
Suspicious disk failures
The disks in my home server have been acting up lately: Two of them (which I bought at once a few years ago) deliver different results when I hash a file multiple times, another just randomly hangs sometimes for a few minutes. The SATA and power cables seemed fine, replacing them had no effect on the problem. So, why not check what wisdom S.M.A.R.T. has to offer?
Distributed document creation
One of my jobs involves creating documents. >10MiB PDFs, or piles of dead trees, if you will. Big documents with several contributors, providing revision after revision of their part of the cake.
So I bought one of those fancy South Korean IPS monitors...
Recently, people on the Internet have been talking about (comparatively) cheap 27“ monitors from South Korea with a glorious 2560x1440 resolution. Jeff Atwood and Scott Wasson wrote about it, and summarized their critiques fairly positively.
For something around €300, you can order a monitor like this from a South Korean ebay vendor. Shipping and an international power adapter are included. The monitors are of brands I’ve never heard of in the West, so I guess they mainly supply Asian countries.
Developing software for people with disabilities
This article was written a long time ago. It may contain some broad generalizations that are not accurate.
My current internship at LIFEtool focuses on finding ways to utilize the Kinect as an input method for people with motoric disabilities. So far, I’ve been experimenting mainly with body poses and touching stuff (like a virtual button) as ways to express an intention.