<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>WhyNotHugo</title><link>https://whynothugo.nl/</link><description>Recent content on WhyNotHugo</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 09 Apr 2024 10:33:42 +0200</lastBuildDate><atom:link href="https://whynothugo.nl/posts.xml" rel="self" type="application/rss+xml"/><item><title>Darkman portal configuration</title><link>https://whynothugo.nl/journal/2024/04/09/darkman-portal-configuration/</link><pubDate>Tue, 09 Apr 2024 10:33:42 +0200</pubDate><guid>https://whynothugo.nl/journal/2024/04/09/darkman-portal-configuration/</guid><description>Since early 2022, darkman supports exposing the dark mode / light mode preference via the appropriate xdg-desktop-portal API. While this works quite well, it&amp;rsquo;s been a constant source of questions, since setting it up and actually understanding how it works is far from trivial.
The xdg-desktop-portal is a kitchen-sink service1, which implements dozens of unrelated functionalities mashed together. Some of these features are implemented directly in the portal, while others are delegated to portal implementations.</description></item><item><title>Vdirsyncer status update, March 2024</title><link>https://whynothugo.nl/journal/2024/03/29/vdirsyncer-status-update-march-2024/</link><pubDate>Fri, 29 Mar 2024 15:11:00 +0100</pubDate><guid>https://whynothugo.nl/journal/2024/03/29/vdirsyncer-status-update-march-2024/</guid><description>Sync status[permalink] As I mentioned before, when synchronising two storages, the sync algorithm keeps around a local &amp;ldquo;status&amp;rdquo; with some basic metadata. Future executions use this metadata to understand which side has changed and which side needs updating.
I had to re-write most of my previous status implementation due to the issues that I mentioned in my previous status update. The new implementation keeps track of the metadata for the latest synchronised version, instead of the latest seen version.</description></item><item><title>Notes on s6</title><link>https://whynothugo.nl/journal/2024/03/25/notes-on-s6/</link><pubDate>Mon, 25 Mar 2024 10:26:41 +0100</pubDate><guid>https://whynothugo.nl/journal/2024/03/25/notes-on-s6/</guid><description>s6 is a collection of programs that can be used for service supervision and service management. It is composed of multiple simple tools that can be used individually or together.
The s6 suite of programs can be used to supervise and manage system service, user-session service, or just ad-hoc collection of services.
The official documentation does a good job of explaining every component in great details. This is merely a high level overview.</description></item><item><title>My 'lock-and-sleep' script</title><link>https://whynothugo.nl/journal/2024/02/26/my-lock-and-sleep-script/</link><pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2024/02/26/my-lock-and-sleep-script/</guid><description>My lock-and-sleep locks the system and puts in back to sleep after 10 seconds of idle as long as it remains locked.
Locking the system before going to sleep ensures that the system never shows an unlocked desktop when waking up from sleep. If the screen locker fails to start for some reason, this fact becomes clear sooner rather than later.
Going back to sleep automatically prevents the system from remaining active if woken up by accident.</description></item><item><title>vdirsyncer: rewriting status management</title><link>https://whynothugo.nl/journal/2024/01/27/vdirsyncer-rewriting-status-management/</link><pubDate>Sat, 27 Jan 2024 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2024/01/27/vdirsyncer-rewriting-status-management/</guid><description>Current state[permalink] Vdirsyncer keeps a &amp;ldquo;status&amp;rdquo; file locally. The status file contains metadata from items on both storages the last time they were synchronised. My current implementation runs the synchronisation process, and then returns a new status, which should be saved to disk until next time.
I decided on this API since it made the whole codebase easier to reuse in different scenarios, including situation where the local system has no persistent storage (and the status could be saved onto a storage server, or wherever feasible).</description></item><item><title>Nine months of Xendmail</title><link>https://whynothugo.nl/journal/2024/01/16/nine-months-of-xendmail/</link><pubDate>Tue, 16 Jan 2024 11:27:11 +0100</pubDate><guid>https://whynothugo.nl/journal/2024/01/16/nine-months-of-xendmail/</guid><description>Last year I wrote xendmail, a tool based on the proposal mentioned in my thoughts on sendmail in 2023 article. Xendmail exposes the same interface as sendmail1, it takes an email as input, reads credentials from the user&amp;rsquo;s secret store, and dispatches the email via an the appropriate SMTP server. Xendmail implements the 5% of sendmail that I need, plus 5% extra which no other implementation offers.
The approach has somewhat worked, but has some issues.</description></item><item><title>Setting up an IRC bouncer (soju) on OpenBSD</title><link>https://whynothugo.nl/journal/2024/01/12/setting-up-an-irc-bouncer-soju-on-openbsd/</link><pubDate>Fri, 12 Jan 2024 16:13:26 +0100</pubDate><guid>https://whynothugo.nl/journal/2024/01/12/setting-up-an-irc-bouncer-soju-on-openbsd/</guid><description>Given the outage at sourcehut right now1, I need an alternative bouncer to use IRC without leaving a client running 24/7. Running my own seems like a simple enough choice.
I opted to run soju (mirror) on my personal server running OpenBSD. soju is what powers chat.sr.ht. It is well tested, I know it fits my needs, and has support for connecting to multiple networks. Its bouncer/network support integrates nicely with senpai, a modern irc terminal client.</description></item><item><title>Extended usages of the primary selection</title><link>https://whynothugo.nl/journal/2024/01/06/extended-usages-of-the-primary-selection/</link><pubDate>Sat, 06 Jan 2024 00:50:20 +0100</pubDate><guid>https://whynothugo.nl/journal/2024/01/06/extended-usages-of-the-primary-selection/</guid><description>When some text is selected, it becomes the primary selection. Other applications can then access this primary selection. The most common usage is to paste it by middle clicking elsewhere, but that&amp;rsquo;s really the full extent of the interactions that are currently available1.
There is a lot of unexplored potential in this feature. For example, it is perfectly feasible to have some desktop-wide special menu with actions that apply on it.</description></item><item><title>vdirsyncer: preparing for alpha version</title><link>https://whynothugo.nl/journal/2023/12/21/vdirsyncer-preparing-for-alpha-version/</link><pubDate>Thu, 21 Dec 2023 18:30:23 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/12/21/vdirsyncer-preparing-for-alpha-version/</guid><description>I&amp;rsquo;ve been synchronising my calendars with the still-experimental rewrite of vdirsyncer lately. vdirsyncer --sync --daemon has been running for about three days now. The --daemon flag makes it run continuously, synchronising changes every five minutes.
Eventually I want --daemon to monitor for changes and immediately synchronise when changes occur. Until monitoring of storages is actually implemented, it simply syncs every five minutes.
This solves a long standing issue in vdirsyncer: there&amp;rsquo;s no way to continuously sync in background.</description></item><item><title>Specification and development status for valarmd</title><link>https://whynothugo.nl/journal/2023/11/30/specification-and-development-status-for-valarmd/</link><pubDate>Thu, 30 Nov 2023 11:02:38 +0800</pubDate><guid>https://whynothugo.nl/journal/2023/11/30/specification-and-development-status-for-valarmd/</guid><description>I have made a few mentions to valarmd, a project of mine which is paused for the moment. It is a daemon used to show desktop notifications for alarms in calendar entries. This is its specification. I hope to continue working on it after completing my current work on vdirsyncer.
Specification for valarmd[permalink] The basic usage is:
valarmd --socket /path/to/socket --vdir /path/to/vdir valarmd shall read icalendar components (both events and todos) from a local file-system directory, extracting their respective dates, alarms and summaries.</description></item><item><title>vdirsyncer status update, November 2023</title><link>https://whynothugo.nl/journal/2023/11/27/vdirsyncer-status-update-november-2023/</link><pubDate>Mon, 27 Nov 2023 19:51:45 +0800</pubDate><guid>https://whynothugo.nl/journal/2023/11/27/vdirsyncer-status-update-november-2023/</guid><description>Designing the low level icalendar parser took longer than it should have taken. To be sincere, part of the problem was my trying to be too ambitious in its scope and growing beyond the strictly necessary requirements.
Requirements[permalink] The main goal of this parser (now called vparser) is to parse only the basic structure of icalendar and vcard files. The main requirements for vdirsyncer&amp;rsquo;s use case are:
Extracting the UID from an entry (calendar component or vcard).</description></item><item><title>Measuring test coverage in Rust</title><link>https://whynothugo.nl/journal/2023/11/27/measuring-test-coverage-in-rust/</link><pubDate>Mon, 27 Nov 2023 13:10:56 +0800</pubDate><guid>https://whynothugo.nl/journal/2023/11/27/measuring-test-coverage-in-rust/</guid><description>I want to measure test coverage for the vparser library, and this is my first time measuring coverage with Rust. Some notes for future reference.
First, run the tests with instrumentation enabled:
&amp;gt; RUSTFLAGS=&amp;#34;-C instrument-coverage&amp;#34; cargo test -p vparser Compiling vparser v0.1.0 (/home/hugo/src/git.sr.ht/~whynothugo/vdirsyncer-rs/vparser) Finished test [unoptimized + debuginfo] target(s) in 0.33s Running unittests src/lib.rs (target/debug/deps/vparser-5204a1fc06fb7f74) ... In some cases, you might need to merge multiple profraw files into a single one.</description></item><item><title>Setting a battery charge threshold</title><link>https://whynothugo.nl/journal/2023/11/24/setting-a-battery-charge-threshold/</link><pubDate>Fri, 24 Nov 2023 12:46:47 +0800</pubDate><guid>https://whynothugo.nl/journal/2023/11/24/setting-a-battery-charge-threshold/</guid><description>Modern batteries degrade faster if continuously charged to 100%. Some vendors provide software implementations to avoid continuously feeding the battery when full to avoid overloading it. Usually this is tricky, since they have to invent some kind of mechanism to determine whether the user wants the battery fully charged or not.
In the case of my laptop, the grand majority of my usages happens while plugged into a power source. Continuously charging the battery in this state merely serves to reduce its battery life and keep it warm, neither of which is desirable.</description></item><item><title>Setting up an Alpine Linux workstation</title><link>https://whynothugo.nl/journal/2023/11/19/setting-up-an-alpine-linux-workstation/</link><pubDate>Sun, 19 Nov 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/11/19/setting-up-an-alpine-linux-workstation/</guid><description>In the upcoming months I will travel to visit family and friends. I intend to work remotely during some of those weeks (and will take some other weeks off too). In preparation for this, I&amp;rsquo;ve set up a new1 ThinkPad T14s Gen 2i laptop that I&amp;rsquo;ll be using to work remotely.
This article covers the steps that I take when setting up Alpine on this device. It is not intended to cover all possible installation options, but is a reference of my particular setup.</description></item><item><title>vdirsyncer status update, October 2023</title><link>https://whynothugo.nl/journal/2023/11/01/vdirsyncer-status-update-october-2023/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/11/01/vdirsyncer-status-update-october-2023/</guid><description>After having an initial version of the configuration parser, I&amp;rsquo;ve moved on to working on the actual command line for vdirsyncer itself.
Replacing Box&amp;lt;dyn Storage&amp;gt; with Arc&amp;lt;dyn Storage&amp;gt;[permalink] This section is pretty technical and requires some understanding of Rust.
In my synchronisation algorithm, the type representing the pair to be synchronised, SyncPair kept references to the Storage instances, and these shared references had started to become a pain point due to Rust&amp;rsquo;s lifetime rules.</description></item><item><title>A configuration format for vdirsyncer v2</title><link>https://whynothugo.nl/journal/2023/10/05/a-configuration-format-for-vdirsyncer-v2/</link><pubDate>Thu, 05 Oct 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/10/05/a-configuration-format-for-vdirsyncer-v2/</guid><description>Settling down a configuration format for the upcoming vdirsyncer v2 has taken more than I anticipated. These is a summary of my journey, considerations and the current state.
The previous format[permalink] My first approach was to retain the existing configuration format. I&amp;rsquo;ll call this one the &amp;ldquo;legacy&amp;rdquo; format, to keep language simple. I wrote a parser for it but it was far from trivial and, honestly, extremely complicated code. The configuration format itself is a bespoke format designed for vdirsyncer.</description></item><item><title>Debugging a non-functional pylsp</title><link>https://whynothugo.nl/journal/2023/09/05/debugging-a-non-functional-pylsp/</link><pubDate>Tue, 05 Sep 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/09/05/debugging-a-non-functional-pylsp/</guid><description>pylsp wasn&amp;rsquo;t working today for some reason. It wasn&amp;rsquo;t jumping to definitions, offering any auto-completions, nor formatting code. I had to figure out why.
Usually, LSPs are executed directly by the IDE with stdin/stdout piped directly into an LSP client, which means that logging to stdout/stderr is not as simple as usual.
Running the LSP manually on a TCP port makes following logs nice and simple. The following command should be executed in the root of a python project:</description></item><item><title>vdirsyncer status update, August 2023</title><link>https://whynothugo.nl/journal/2023/08/26/vdirsyncer-status-update-august-2023/</link><pubDate>Sat, 26 Aug 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/08/26/vdirsyncer-status-update-august-2023/</guid><description>I had family visiting during this past month, so I&amp;rsquo;ve taken some time off to spend with them. Progress has therefore been slower than usual.
Sub-tasks missing from planning[permalink] As I mentioned a few months ago, the NLnet foundation is currently funding my work rewriting on vdirsyncer. As part of this process, I&amp;rsquo;ve shared a full plan with tasks that need to be done and an estimation for them.
While I had a pretty solid plan on how to approach re-writing vdirsyncer, some requirements did fly under my radar.</description></item><item><title>Building and running sway-master</title><link>https://whynothugo.nl/journal/2023/08/04/building-and-running-sway-master/</link><pubDate>Fri, 04 Aug 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/08/04/building-and-running-sway-master/</guid><description>I wanted to run sway from upstream master branch to tests the yet-unreleased fractional scaling support. This recipe also works for trying to build sway with custom patches.
First, I needed to clone sway itself and wlroots as a subproject. Building wlroots as a subproject is required since I need to use the current master of wlroots. Using the distribution/system provided wlroots is unlikely to work (due to it being the latest stable release).</description></item><item><title>vdirsyncer status update, July 2023</title><link>https://whynothugo.nl/journal/2023/07/17/vdirsyncer-status-update-july-2023/</link><pubDate>Mon, 17 Jul 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/07/17/vdirsyncer-status-update-july-2023/</guid><description>CardDav support[permalink] This month I&amp;rsquo;ve worked on missing CardDav support in existing libraries.
Regarding libdav itself, this has helped tidy up parts of the code that are shared between the CalDav and CardDav. This wasn&amp;rsquo;t very complicated; the latter is very similar to the former, so it was just making sure that all of the little differences were tweaked currently. The recent rewrite of the parsers helped a lot since I could reuse most of the code from the CalDav implementation.</description></item><item><title>Extending an expired GPG key</title><link>https://whynothugo.nl/journal/2023/07/13/extending-an-expired-gpg-key/</link><pubDate>Thu, 13 Jul 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/07/13/extending-an-expired-gpg-key/</guid><description>Slightly over a year ago, I set up a new hardware-backed GPG key on my yubikey device. Today I needed to sign a release, and noticed my key expired two days ago. It&amp;rsquo;s time to renew it.
Possible approaches[permalink] When a key expires, there are three alternatives on how to address this:
Generate a new key pair. This requires updating my public key everywhere (e.g.: on services that use my public key, in the README for projects where I sign releases, etc), which is somewhat of a nuisance.</description></item><item><title>senpai: a modern IRC terminal client</title><link>https://whynothugo.nl/journal/2023/07/05/senpai-a-modern-irc-terminal-client/</link><pubDate>Wed, 05 Jul 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/07/05/senpai-a-modern-irc-terminal-client/</guid><description>I&amp;rsquo;ve been writing some IRC-related experiments using a bouncer lately. I don&amp;rsquo;t have anything useful yet. My code so far connects to a bouncer, enumerates bouncer networks, opens a second connection to the bouncer (you need an additional connection per upstream network), and then crashes.
While trying to find some details on the AUTHENTICATE command using SASL (do I know what I&amp;rsquo;m doing at this point?), I ended up falling down a rabbit hole where I came across a particular IRC client I that had somehow slipped under my radar:</description></item><item><title>vdirsyncer status update, June 2023</title><link>https://whynothugo.nl/journal/2023/06/30/vdirsyncer-status-update-june-2023/</link><pubDate>Fri, 30 Jun 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/06/30/vdirsyncer-status-update-june-2023/</guid><description>This month started out rather slow, with me taking a week off on vacation and then coming back home only to be sick in bed for another week. But it ended up being rather productive after all.
Configuration parsing[permalink] My initial goal since last month was to implement a small binary that can work as a drop-in replacement for vdirsyncer. With some basic sync scenarios working1, the next step was to parse the configuration file.</description></item><item><title>Understanding the XDG access portal</title><link>https://whynothugo.nl/journal/2023/06/20/understanding-the-xdg-access-portal/</link><pubDate>Tue, 20 Jun 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/06/20/understanding-the-xdg-access-portal/</guid><description>The upcoming version of Firefox 116 will use Pipewire for camera access. This sparked my curiosity and I wanted to know if my setup would work for this. In recent times, Firefox has been moving rather quickly, adding dependency on these Flatpak portals (even in scenarios where Flatpak is not involved). This is no exception.
Access to the camera via pipewire is mediated by the camera portal, an interface of the xdg-desktop-portal.</description></item><item><title>vdirsyncer status update, May 2023</title><link>https://whynothugo.nl/journal/2023/05/27/vdirsyncer-status-update-may-2023/</link><pubDate>Sat, 27 May 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/05/27/vdirsyncer-status-update-may-2023/</guid><description>So far, libdav seems to be working pretty solid for interacting with CalDav server, and davcli has been handy for interactively inspecting remote collections.
There are a few reported issues for the previous vdirsyncer implementation that are related URL decoding. These can probably be inspected well with davcli, but I still need to write a proper guide that people can follow to do this. I want to use this to confirm that the new implementation handles all these scenarios fine (and debug them if necessary).</description></item><item><title>Introducing davcli</title><link>https://whynothugo.nl/journal/2023/05/01/introducing-davcli/</link><pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/05/01/introducing-davcli/</guid><description>I mentioned in the past that libdav (the library which I&amp;rsquo;ve written to interact with caldav and carddav servers) implements DNS-based discovery.
This should make any tools built on this library a lot easier to configure for end users. One such tool so far is davcli, a simple command line tool to interact with caldav servers manually or via simple scripts. It is also useful for hosting providers that want to validate that discovery is set up correctly.</description></item><item><title>DNS-based discovery for CalDav and CardDav</title><link>https://whynothugo.nl/journal/2023/04/30/dns-based-discovery-for-caldav-and-carddav/</link><pubDate>Sun, 30 Apr 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/04/30/dns-based-discovery-for-caldav-and-carddav/</guid><description>rfc6764 describes a mechanism for caldav service providers to expose exactly where their server is located while requiring minimal input from the user.
The main intent here is that if you are hosting your email and calendar for example.com, your users only need to provide their calendar application with the domain example.com and it can automatically figure out exactly where the caldav server is located. Let&amp;rsquo;s assume, for this example, that the caldav service is located at https://dav.</description></item><item><title>libdav live test results</title><link>https://whynothugo.nl/journal/2023/04/27/libdav-live-test-results/</link><pubDate>Thu, 27 Apr 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/04/27/libdav-live-test-results/</guid><description>One of my goals for re-writing vdirsyncer was to write &amp;ldquo;live tests&amp;rdquo;. These tests are series of operations against a real CalDav server, failing if the server doesn&amp;rsquo;t behave as expected (or if it doesn&amp;rsquo;t support a specific feature).
I&amp;rsquo;ve had this working for a couple of weeks now, and while it always feels like &amp;ldquo;it could be better&amp;rdquo; (the code quality isn&amp;rsquo;t great, but it&amp;rsquo;s also not my worst), the reality is that it fulfils its goal and can be improved later as needed.</description></item><item><title>Tracking dotfiles</title><link>https://whynothugo.nl/journal/2023/04/18/tracking-dotfiles/</link><pubDate>Tue, 18 Apr 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/04/18/tracking-dotfiles/</guid><description>The term dotfiles refers to files with filenames starting with a dot. These are treated as &amp;ldquo;hidden&amp;rdquo; files and usually not listed by default in most tools unless an extra flag is provided, a &amp;ldquo;show hidden files&amp;rdquo; checkbox is checked or some similar mechanism.
Additionally, the term dotfiles is nowadays often used to describe a specific collection of these files: the ones that contain a user&amp;rsquo;s configuration associated helper scripts and some other related files.</description></item><item><title>Installing postmarketOS on a OnePlus 6 with an encrypted filesystem</title><link>https://whynothugo.nl/journal/2023/04/12/installing-postmarketos-on-a-oneplus-6-with-an-encrypted-filesystem/</link><pubDate>Wed, 12 Apr 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/04/12/installing-postmarketos-on-a-oneplus-6-with-an-encrypted-filesystem/</guid><description>I&amp;rsquo;ve been experimenting with postmarketOS for a long time now. My long-term aspiration is to set up a phone that I can use as a daily driver. I need to overcome a lot of obstacles to achieve this.
Today, my goal is to encrypt the main partition. So if I lose the phone, it doesn&amp;rsquo;t have all my messaging, email and credentials totally unencrypted. This is a hard requirement before moving forward with a lot of other things.</description></item><item><title>Thoughts on sendmail in 2023</title><link>https://whynothugo.nl/journal/2023/03/30/thoughts-on-sendmail-in-2023/</link><pubDate>Thu, 30 Mar 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/03/30/thoughts-on-sendmail-in-2023/</guid><description>Sendmail is a classic mail transfer agent (MTA) in the world of Unix-like systems. It&amp;rsquo;s design is simple, and worked well for many setups for decades. For many scenarios it still works. For others, it does not.
Sendmail as a system-wide tool[permalink] Sendmail is typically set up by a system administrator and configured to relay emails from any local user via some administrator-defined mechanism. This doesn&amp;rsquo;t play well with typical multi-users systems as we see today, especially if they each have their own different mailbox providers and accounts.</description></item><item><title>vdirsyncer status update 2023-03</title><link>https://whynothugo.nl/journal/2023/03/28/vdirsyncer-status-update-2023-03/</link><pubDate>Tue, 28 Mar 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/03/28/vdirsyncer-status-update-2023-03/</guid><description>This is a long overdue update on the status on vdirsyncer&amp;rsquo;s rewrite. I keep thinking &amp;ldquo;I&amp;rsquo;ll just finish this one bit before publishing it&amp;rdquo;, but that always seems to be a day or two in the future, so here goes.
Funding[permalink] I&amp;rsquo;m very happy to announce that the NLnet foundation has agreed to fund my work on vdirsyncer. Thanks to this, I&amp;rsquo;ve been able to put a lot more focus hours into this project, which would have not been possible without this support.</description></item><item><title>AI-assisted computer interfaces of the future</title><link>https://whynothugo.nl/journal/2023/03/23/ai-assisted-computer-interfaces-of-the-future/</link><pubDate>Thu, 23 Mar 2023 23:08:15 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/03/23/ai-assisted-computer-interfaces-of-the-future/</guid><description>I&amp;rsquo;ve been rewatching Star Trek TNG lately, and a question that often comes to mind is:
If they have all these computerised sensors, and they have a computer capable of converting information into voice, why do they need technicians constantly interacting with each terminal to read information out to the team and to the captain?
This got me into thinking how we&amp;rsquo;d design these terminals today, assuming that we had such a ship full of sensors and that kind of computing power.</description></item><item><title>Notes on Podman</title><link>https://whynothugo.nl/journal/2023/03/15/notes-on-podman/</link><pubDate>Wed, 15 Mar 2023 11:21:05 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/03/15/notes-on-podman/</guid><description>Podman is an alternative implementation of Docker which addresses some design issues in Docker. The most obvious/notable difference is that Podman doesn&amp;rsquo;t require a daemon running permanently, which is nice, but not a huge deal. It also has other design differences, but most of them are good ideas that have little to no impact in practice.
A big feature of Podman was that it was the first to implement rootless support.</description></item><item><title>Using a Yubikey for both GPG and TOTP</title><link>https://whynothugo.nl/journal/2023/03/13/using-a-yubikey-for-both-gpg-and-totp/</link><pubDate>Mon, 13 Mar 2023 18:39:00 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/03/13/using-a-yubikey-for-both-gpg-and-totp/</guid><description>I&amp;rsquo;ve written before on how I use a Yubikey for hardware-based GPG and 2FA on the web. I also use it for TOTP. That is, the Yubikey itself generates those common &amp;ldquo;authenticator codes&amp;rdquo; like many other Authenticator apps. But the secret seed is saved into hardware that does not support revealing it, instead of being handled by a regular app on a network-connected device.
A nasty issue I&amp;rsquo;ve been dealing with is that when I signed something using GPG, the key would no longer work for TOTP unless I killed the gpg-agent.</description></item><item><title>In praise of Alpine and apk</title><link>https://whynothugo.nl/journal/2023/02/18/in-praise-of-alpine-and-apk/</link><pubDate>Sat, 18 Feb 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/02/18/in-praise-of-alpine-and-apk/</guid><description>Since the change of year, I&amp;rsquo;ve been using Alpine Linux on my main computing device (a new desktop PC that I assembled in December). These are some notes on in, some niceties and caveats.
I used ArchLinux for over a decade before, so keep in mind that my main point of reference/background is using Arch+pacman. However, this is not an &amp;ldquo;Arch vs Alpine&amp;rdquo; article.
My woes with package management[permalink] Over the years, I&amp;rsquo;ve experimented with many ways of &amp;ldquo;keeping a list of the list of packages installed&amp;rdquo;.</description></item><item><title>OpenWrt with KPN fibre optics</title><link>https://whynothugo.nl/journal/2023/02/11/openwrt-with-kpn-fibre-optics/</link><pubDate>Sat, 11 Feb 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/02/11/openwrt-with-kpn-fibre-optics/</guid><description>I&amp;rsquo;ve always preferred to use my own router at home when possible, and was pleasantly surprised to learn that the EU actually has rules around router freedom. That is, each user is allowed to use their own hardware at home, rather than being imposed which hardware they can use by their service provider.
Additionally, the Netherlands has local legislation to reflect this, and KPN has a dedicated page explaining that they support this too.</description></item><item><title>vdirsyncer: looking for hosted Dav servers</title><link>https://whynothugo.nl/journal/2023/01/30/vdirsyncer-looking-for-hosted-dav-servers/</link><pubDate>Mon, 30 Jan 2023 15:48:50 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/01/30/vdirsyncer-looking-for-hosted-dav-servers/</guid><description>Current state of affairs[permalink] As part of vdirsyncer&amp;rsquo;s test suite, I currently run tests against a multiple CalDav/CardDav servers. The CI pipeline does this by downloading dockerised versions of all the servers, starting them up and then running tests.
This isn&amp;rsquo;t ideal. On CI, the radicale, xandikos and baikal containers get downloaded on each test run which really doesn&amp;rsquo;t scale1. Adding more and more servers will just make the whole test suite slower, as well as more maintenance work.</description></item><item><title>icalendar bug at NS International</title><link>https://whynothugo.nl/journal/2023/01/22/icalendar-bug-at-ns-international/</link><pubDate>Sun, 22 Jan 2023 16:16:52 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/01/22/icalendar-bug-at-ns-international/</guid><description>Today I purchased train tickets to FOSDEM on NS International. The site has a handy option to &amp;ldquo;Add to Agenda&amp;rdquo;, which generates an icalendar file which one can add to their calendar agenda.
I downloaded it and tried to import it into my calendar tool of choice, khal. It crashed. I&amp;rsquo;m a software developer who&amp;rsquo;s deeply into calendaring and I&amp;rsquo;ve written plenty of things that deal with icalendar, so I had to dig in deeper.</description></item><item><title>Setting up IRC redirects</title><link>https://whynothugo.nl/journal/2023/01/20/setting-up-irc-redirects/</link><pubDate>Fri, 20 Jan 2023 11:39:00 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/01/20/setting-up-irc-redirects/</guid><description>Updated 2023-10-23: The +i mode was added. See below for details.
A few weeks ago I wanted to set up a few redirects on IRC. Mainly, I wanted to redirect #vdirsyncer, #khal and #todoman to the #pimutils channel (given that pimutils is the umbrella project for both of these).
These are the commands I had to run after authenticating:
/msg ChanServ register #todoman /msg ChanServ set #todoman mlock +if #pimutils /msg ChanServ set #todoman guard on /msg ChanServ register #vdirsyncer /msg ChanServ set #vdirsyncer mlock +if #pimutils /msg ChanServ set #vdirsyncer guard on /msg ChanServ register #khal /msg ChanServ set #khal mlock +if #pimutils /msg ChanServ set #khal guard on Reference[permalink] mlock locks the mode to the specified one guard will retain the channel even if everyone leaves.</description></item><item><title>Notes on ruff</title><link>https://whynothugo.nl/journal/2023/01/20/notes-on-ruff/</link><pubDate>Fri, 20 Jan 2023 11:24:00 +0100</pubDate><guid>https://whynothugo.nl/journal/2023/01/20/notes-on-ruff/</guid><description>ruff is a tool to check and lint Python code. It&amp;rsquo;s written in Rust and it really is blazing fast. The first time I ran it on a real codebase I immediately got an error and, for a split-second, though it was an execution error. It had actually run successully in a few milliseconds and found an issue in my code (a silly one, but a valid one).
A flake8 replacement[permalink] ruff implements all the rules from pyflakes and pycodestyle, which essentially implies it serves as a full replacement for flake8.</description></item><item><title>Notes on pre-commit</title><link>https://whynothugo.nl/journal/2023/01/12/notes-on-pre-commit/</link><pubDate>Thu, 12 Jan 2023 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2023/01/12/notes-on-pre-commit/</guid><description>pre-commit is a tool to configure git pre-commit hooks. It allows defining hooks in a simply syntax and runs them only if files of a specific type change (e.g.: run mypy only if *.py files have changed).
Additionally, it&amp;rsquo;ll stash unstaged changes when running, so any files that are not being committed won&amp;rsquo;t interefere with the hooks. This makes hooks fail if you forgot to commit a file, and prevents hooks from failing if some uncommitted file has broken code.</description></item><item><title>Selection / clipboard cheatsheet</title><link>https://whynothugo.nl/journal/2022/12/03/selection-cheatsheet/</link><pubDate>Sat, 03 Dec 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/12/03/selection-cheatsheet/</guid><description>There&amp;rsquo;s multiple selections:[permalink] PRIMARY: is the old-school Unix one; select text to copy it. Middle-click to paste it. Three-finger tap on a touchpad also pastes it. CLIPBOARD: the well-known ctrl-c and ctrl-v (or Super+c). SECONDARY: historical, irrelevant, don&amp;rsquo;t worry about this one. Vim (&amp;amp; derivates)[permalink] Vim has registers. They are accessed by prefixing &amp;quot;X, where X is a register name. These extend the ones above:
&amp;quot;-: /dev/null &amp;quot;*: (see :h unnamed), the PRIMARY SELECTION &amp;quot;+: (see :h unnamedplus), the CLIPBOARD SELECTION There&amp;rsquo;s also a lot of other registers which are historical and exotic IMHO Neovim config example:[permalink] Copying to the PRIMARY selection:</description></item><item><title>Copying with Super+C</title><link>https://whynothugo.nl/journal/2022/11/04/copying-with-super-c/</link><pubDate>Fri, 04 Nov 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/11/04/copying-with-super-c/</guid><description>Historically, Ctrl+c has been used to interrupt a process on terminals. This applies on Linux, but also applied to BSDs and Unixes before it. This is still true, even today, on pretty much any terminal emulator.
When mice became a thing, one could simply select text and then click mouse2 to paste it. mouse2 was the right mouse button back when mice had two buttons, and became the middle mouse button now that mice typically have three buttons (or three-finger tap on touchpads).</description></item><item><title>Systemd, locking and sleeping</title><link>https://whynothugo.nl/journal/2022/10/26/systemd-locking-and-sleeping/</link><pubDate>Wed, 26 Oct 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/10/26/systemd-locking-and-sleeping/</guid><description>Locking the system[permalink] logind (part of systemd) emits events when the system is about to be locked or go into sleep. Typically, one can configure logind so that closing the laptop lid triggers a &amp;ldquo;lock the session&amp;rdquo; event. However, this just emits a D-Bus signal and doesn&amp;rsquo;t provide facilities for running any screen locker. One needs a separate process listening for this event, and this process itself needs to run a screen-locker and any other similar actions.</description></item><item><title>How the clipboard works</title><link>https://whynothugo.nl/journal/2022/10/21/how-the-clipboard-works/</link><pubDate>Fri, 21 Oct 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/10/21/how-the-clipboard-works/</guid><description>Reading how copy-paste works from the Wayland specification is non-trivial unless you understand a lot of how desktop computing works and Wayland internal. It took me quite a while to figure it all out, though once you get there, it seems quite obvious.
Here&amp;rsquo;s my attempt at explaining how it works for mere mortals.
Terminology[permalink] Let me clarify that what we usually call &amp;ldquo;clipboard&amp;rdquo; is actually called a &amp;ldquo;selection&amp;rdquo;. I&amp;rsquo;ll use the term &amp;ldquo;clipboard&amp;rdquo; here anyway to keep this friendly, but keep in mind that it&amp;rsquo;s not the actual technical term.</description></item><item><title>Shotman 0.2 development update part 2</title><link>https://whynothugo.nl/journal/2022/10/04/shotman-0.2-development-update-part-2/</link><pubDate>Tue, 04 Oct 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/10/04/shotman-0.2-development-update-part-2/</guid><description>After the initial proof of concept of the shotman rewrite, my next goal was to have an implementation that could fully replace the previous version for daily usage.
My main use of shotman is &amp;ldquo;take screenshot of current window&amp;rdquo;, and I have two other (less frequent) use cases. They are all mapped to global hotkeys:
Super+p to screenshot the current window. Super+Shift+p to screenshot a region. Super+Ctrl+p to screenshot the entire output.</description></item><item><title>Shotman 0.2 development update part 1</title><link>https://whynothugo.nl/journal/2022/08/28/shotman-0.2-development-update-part-1/</link><pubDate>Sun, 28 Aug 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/08/28/shotman-0.2-development-update-part-1/</guid><description>Update: This article was renamed to &amp;ldquo;part 1&amp;rdquo; when publishing part 2.
These last couple of week I&amp;rsquo;ve been putting a lot of time into shotman. Shotman is a small GUI tool I wrote a few months ago. It shows a small preview window when a screenshot is saved, and has controls to copy the screenshot into clipboard or delete it right away.
The previous version was 0.1. This newly written version is to be 0.</description></item><item><title>My packaging policy</title><link>https://whynothugo.nl/journal/2022/08/13/my-packaging-policy/</link><pubDate>Sat, 13 Aug 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/08/13/my-packaging-policy/</guid><description>The open source sphere has continuously had a lot of discussion regarding packaging, and there&amp;rsquo;s often an expectation that upstream developers should distribution packages. I want to make it clear where I stand on this, what users of my projects can expect, and what how packagers can contribute.
As a general rule, for projects I maintain, I&amp;rsquo;ll only do source releases (e.g.: tag a version as v2.0.1 and sign that tag or tarball).</description></item><item><title>Please verify it's you</title><link>https://whynothugo.nl/journal/2022/07/28/please-verify-its-you/</link><pubDate>Thu, 28 Jul 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/07/28/please-verify-its-you/</guid><description>Welcome!
It looks like you haven&amp;rsquo;t logged into your account in a really long time. We need to verify it&amp;rsquo;s you. To do so, we hope you still have that one thing that people frequently change after a really long time: your phone number! Obviously you can&amp;rsquo;t have moved or simply switched phone provider over the years, right?
We&amp;rsquo;ll send you an SMS, if you don&amp;rsquo;t receive it with the code, you can&amp;rsquo;t use your account any more.</description></item><item><title>Meson for Python applications</title><link>https://whynothugo.nl/journal/2022/07/26/meson-for-python-applications/</link><pubDate>Tue, 26 Jul 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/07/26/meson-for-python-applications/</guid><description>I&amp;rsquo;ve ported caffeine-ng to use meson rather than python-wheel for building and installing. Python&amp;rsquo;s packaging ecosystem is moving in a direction that will only support python packages, but not packages that need to install data files outside python&amp;rsquo;s package location. This last scenario is deprecated and will become unsupported in future. It already doesn&amp;rsquo;t work when using python wheels, as discussed on that issue.
caffeine-ng, like many other desktop applications, ships with data files including manual pages, desktop entry files, icons, translations, etc.</description></item><item><title>Announcing caffeine-ng v4.0.0</title><link>https://whynothugo.nl/journal/2022/07/12/announcing-caffeine-ng-v4.0.0/</link><pubDate>Tue, 12 Jul 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/07/12/announcing-caffeine-ng-v4.0.0/</guid><description>caffeine-ng is a small tool that shows an icon on the desktop status bar to temporarily disable screenlockers, screensavers, and screen dimming. It is typically used to temporarily avoid the screen turning off for things like watching a movie, a videoconference and alike.
Version 4.0.0 of caffeine-ng is now available. Many of the changes in this release are thanks to the contributors who have both written and tested many of these improvements, so a huge thanks to all those who have made this possible!</description></item><item><title>Using a Yubikey for GPG</title><link>https://whynothugo.nl/journal/2022/07/11/using-a-yubikey-for-gpg/</link><pubDate>Mon, 11 Jul 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/07/11/using-a-yubikey-for-gpg/</guid><description>I&amp;rsquo;ve written recently on how I use a Yubikey as a hardware security token for two factor authentication.
One item I was missing was GPG, and this was mostly because setting up GPG is a bit tricker to set up and I simply hadn&amp;rsquo;t had the time. My previous key recently expired, so this is a good time to address that.
This article explains the basics of how Yubikey + GPG works, and how to get started.</description></item><item><title>Quick and simple VMs with qemu</title><link>https://whynothugo.nl/journal/2022/07/01/quick-and-simple-vms-with-qemu/</link><pubDate>Fri, 01 Jul 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/07/01/quick-and-simple-vms-with-qemu/</guid><description>I don&amp;rsquo;t use VMs very often, so there&amp;rsquo;s no chance I can remember all the dozens of command line flags for qemu.
I end up using virt-manager most of the time. It&amp;rsquo;s a GUI for managing QEMU (and other VM backends) and has dozens of checkboxes and buttons, which come in handy for really complex virtual hardware configurations where I&amp;rsquo;d need to know a dozen obscure command line flags to replicate the same results.</description></item><item><title>The Murena Lies</title><link>https://whynothugo.nl/journal/2022/05/31/the-murena-lies/</link><pubDate>Tue, 31 May 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/05/31/the-murena-lies/</guid><description>I usually abstain from writing just to criticise someone&amp;rsquo;s work. Rather than say &amp;ldquo;X is wrong&amp;rdquo;, I prefer to say &amp;ldquo;X could improve by doing Y&amp;rdquo;.
However, in the case of Murena, there&amp;rsquo;s just too much shameless lying to the public. I don&amp;rsquo;t think this kind of activity should be allowed to continue.
Live stream[permalink] Murena had a live stream today, announcing their privacy centric tools and services. On this stream, they explained how many modern companies continuously spy on users, and send all sorts of granular data to advertising companies (Google, Facebook and many others).</description></item><item><title>Status update, May 2022</title><link>https://whynothugo.nl/journal/2022/05/27/status-update-may-2022/</link><pubDate>Fri, 27 May 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/05/27/status-update-may-2022/</guid><description>vdirsyncer rewrite[permalink] I&amp;rsquo;ve been working on some foundational code for the vdirsyncer rewrite.
I have some basic traits that all storages will implement, and have a working filesystem storage, which reads a vdir. The filesystem storage itself also helps validate that the API is sound enough before starting to write the other storage implementations.
I considered exposing async APIs, but this turned out to not be a great idea. Async functions in trait are not something fully stabilised.</description></item><item><title>How I secure my setup with a YubiKey</title><link>https://whynothugo.nl/journal/2022/05/07/how-i-secure-my-setup-with-a-yubikey/</link><pubDate>Sat, 07 May 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/05/07/how-i-secure-my-setup-with-a-yubikey/</guid><description>YubiKeys[permalink] I have a pair of YubiKey 5C NFC, which I use for authentication a lot. They&amp;rsquo;re small USB-C authentication devices which can generate multiple types of keys and are usable for different types of authentication.
There's also a USB-A version if USB-C ports aren't your thing. The keys generated on-device cannot be extracted, which means that the only way to steal the keys is to physically steal the device itself.</description></item><item><title>Open source platforms for open source software</title><link>https://whynothugo.nl/journal/2022/04/29/open-source-platforms-for-open-source-software/</link><pubDate>Fri, 29 Apr 2022 19:11:35 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/04/29/open-source-platforms-for-open-source-software/</guid><description>There&amp;rsquo;s something that&amp;rsquo;s been low-key bothering me for many months now: the fact that so much open source software is hosted on proprietary platforms and has such a strong dependency on non-open source non-free forges.
Now, sometimes we must be pragmatical, and use the closed sourced software when we don&amp;rsquo;t have a choice. But when it comes to products like GitHub, there&amp;rsquo;s plenty of choices. And most of them are, feature-wise and UI-wise, superior.</description></item><item><title>Fairphone: please lead by example!</title><link>https://whynothugo.nl/journal/2022/04/29/fairphone-please-lead-by-example/</link><pubDate>Fri, 29 Apr 2022 09:29:22 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/04/29/fairphone-please-lead-by-example/</guid><description>The FSFE published an open letter a couple of days ago, asking for legislation to allow users to freely user their own devices, contrary to the status quo, where devices are locked down and controlled fully by the manufacturer rather than the end-user.
I whole agree with this stance and applaud this request: if I can&amp;rsquo;t install the software I want on devices I paid for, do I really even own them?</description></item><item><title>A vdirsyncer rewrite</title><link>https://whynothugo.nl/journal/2022/04/18/a-vdirsyncer-rewrite/</link><pubDate>Mon, 18 Apr 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/04/18/a-vdirsyncer-rewrite/</guid><description>I&amp;rsquo;ve been planning a full rewrite of vdirsyncer for quite some time now. So far work on vdirsyncer (both on the original version and on this rewrite) has happened during free time and is mostly unpaid. My intention is to seek sponsors for this rewrite, so that I can dedicate more hours to this project and deliver a well polished product to the open source ecosystem.
By becoming a sponsor, you will allow me to focus on this endeavour and spend much more time on it than I ever could on &amp;ldquo;another side project&amp;rdquo;.</description></item><item><title>Introducing darkman v1.0.0</title><link>https://whynothugo.nl/journal/2022/02/25/introducing-darkman-v1.0.0/</link><pubDate>Fri, 25 Feb 2022 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2022/02/25/introducing-darkman-v1.0.0/</guid><description>I&amp;rsquo;m pleased to announce the release of darkman 1.0. Darkman is a session service that transitions a desktop environment between colour schemes. It switches to dark mode at sundown, and back to light mode at sunrise.
This small project started in 2020, out of frustration with dark mode being too hard to read during sunny days, and light mode being blinding at night-time.
Darkman runs as a session service. It sets a timer for the next sunrise/sundown based on the current location and sleeps 99% of the time.</description></item><item><title>I like that Signal is looking for sponsors</title><link>https://whynothugo.nl/journal/2021/12/14/i-like-that-signal-is-looking-for-sponsors/</link><pubDate>Tue, 14 Dec 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/12/14/i-like-that-signal-is-looking-for-sponsors/</guid><description>Recently Signal has started asking people to sponsor them, and I&amp;rsquo;m actually really glad that this is happening.
There are many companies out there offering &amp;ldquo;free services&amp;rdquo;, but, generally, companies that offer free instant messaging are often doing it to build a detailed profile on you, what you believe, how you behave, and how you feel about an important topic. They do this so they can then sell advertising (or, often, propaganda).</description></item><item><title>Running Eve-Online on Linux/Wayland</title><link>https://whynothugo.nl/journal/2021/12/07/running-eve-online-on-linux/wayland/</link><pubDate>Tue, 07 Dec 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/12/07/running-eve-online-on-linux/wayland/</guid><description>Initially, the launcher would render only a black window, and nothing else. I noticed that moving it off-screen and back again, it would have updated content, but remained frozen.
As a coincidence, I noticed that when moved onto the edge of the screen, parts near the edge would render, and would respond to input events, whereas other parts didn&amp;rsquo;t.
This made it obvious that the game was doing something funny with window positioning.</description></item><item><title>The issue with flatpak's permissions model</title><link>https://whynothugo.nl/journal/2021/11/26/the-issue-with-flatpaks-permissions-model/</link><pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/11/26/the-issue-with-flatpaks-permissions-model/</guid><description>There seems to be a lot of discussion of whether Flatpak is terrible or is great, whether it&amp;rsquo;s the future or whether it&amp;rsquo;s complete trash.
I think Flatpak does a lot of very useful things, and requires more work in other aspects. I&amp;rsquo;m not sure what the The One True Package Manager™ will be, but I&amp;rsquo;m sure we can all learn some lessons from flatpak.
Isolation[permalink] Flatpak itself does a pretty good job of isolating applications.</description></item><item><title>How disk encryption works</title><link>https://whynothugo.nl/journal/2021/09/03/how-disk-encryption-works/</link><pubDate>Fri, 03 Sep 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/09/03/how-disk-encryption-works/</guid><description>Note: this article avoids being too technical and is rather geared towards non-technical users.
Without disk encryption[permalink] Historically, computers used to ask you for a username and password after you turned them on.
This was mostly an authentication mechanism to prevent strangers sitting in front of your computer from using it. However, they could still open the computer, remove the disk, and access all your information without further obstacles.
The password prompt was a soft protection, akin to a security guard outside the entrance to a room with an open window on the other side.</description></item><item><title>My desktop-wide microphone mute toggle</title><link>https://whynothugo.nl/journal/2021/06/16/my-desktop-wide-microphone-mute-toggle/</link><pubDate>Wed, 16 Jun 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/06/16/my-desktop-wide-microphone-mute-toggle/</guid><description>I use a global hotkey (Super1+m) to toggle my microphone between muted and unmuted.
It&amp;rsquo;s been very handy so far. Different videocall applications all have different hotkeys to mute / unmute oneself, and this avoids me having to keep a mental map of all the different mappings.
It&amp;rsquo;s also been super handy when pair-programming; I can mute while typing and unmute when I need to talk, saving my co-programmer the pain of hearing my rather loud keyboard.</description></item><item><title>A simple boot setup with SecureBoot</title><link>https://whynothugo.nl/journal/2021/06/11/a-simple-boot-setup-with-secureboot/</link><pubDate>Fri, 11 Jun 2021 00:00:00 +0000</pubDate><guid>https://whynothugo.nl/journal/2021/06/11/a-simple-boot-setup-with-secureboot/</guid><description>I use a pretty simple setup for booting my systems.
The hardware firmware (UEFI) loads a signed bootloader (systemd-boot in my case, but gummiboot is basically the same for non-systemd systems). The bootloader loads a signed executable that bundles the kernel, initrd and the cmdline (I&amp;rsquo;ll call this the bundle&amp;quot; from here on). The initrd prompts for the encryption passphrase, mounted the decrypted disk, and then boots the actual OS. That&amp;rsquo;s the basic boot process.</description></item><item><title>Zoom screen sharing on ArchLinux</title><link>https://whynothugo.nl/journal/2020/06/14/zoom-screensharing-on-archlinux/</link><pubDate>Sun, 14 Jun 2020 20:23:46 +0200</pubDate><guid>https://whynothugo.nl/journal/2020/06/14/zoom-screensharing-on-archlinux/</guid><description>Zoom doesn&amp;rsquo;t support screen sharing on Linux unless you&amp;rsquo;re using GNOME or X11.
Also, Zoom only runs via XWayland (a compatibility layer for older applications). XWayland doesn&amp;rsquo;t really support desktop scaling, which is why it looks so blurry:
This is a very funny message, and not really something that&amp;rsquo;s an option for desktop users. Saying &amp;ldquo;please use a different desktop&amp;rdquo; is not really realistically applicable advise.
Changing something like the desktop environment on an OS is a great recipe for disaster.</description></item><item><title>What is git?</title><link>https://whynothugo.nl/journal/2020/03/25/what-is-git/</link><pubDate>Wed, 25 Mar 2020 17:55:58 +0000</pubDate><guid>https://whynothugo.nl/journal/2020/03/25/what-is-git/</guid><description>git is one of the most important tools for a developer nowadays regardless of what programming language is being used.
Regrettably, it seems that nobody explains what git is to new developers at any point. Over the years, I&amp;rsquo;ve mentored many fellow developers of different levels of experience, and it&amp;rsquo;s clear that git is something that&amp;rsquo;s not explain well enough (if at all) in educational settings. Those who were familiar were mostly self-taught or had learned from colleagues.</description></item><item><title>Spotify review</title><link>https://whynothugo.nl/journal/2016/11/29/spotify-review/</link><pubDate>Tue, 29 Nov 2016 11:23:59 +0000</pubDate><guid>https://whynothugo.nl/journal/2016/11/29/spotify-review/</guid><description>Since copying music to my iPhone is a bit of pain, I decided to stop being a dinosaur, and get into this new world of on-demand music streaming.
Regrettably, it seems that these services are really below alpha quality - and amazingly, manage to have millions of customers anyway (but hey, stuff is frequently made popular due to marketing and not due to good quality).
Spotify website[permalink] The website is so riddled with bugs it&amp;rsquo;s incredible.</description></item><item><title>Using FreeOTP with Battle.net</title><link>https://whynothugo.nl/journal/2016/11/23/using-freeotp-with-battle.net/</link><pubDate>Wed, 23 Nov 2016 23:00:34 +0000</pubDate><guid>https://whynothugo.nl/journal/2016/11/23/using-freeotp-with-battle.net/</guid><description>Some battlet.net users have requested, over and over to use other apps as a battle.net 2FA. These include FreeOTP, Authy, and possible others (Google Authenticator, AFAIK, cannot be used since it lacks the ability to configure the amount of digits).
After some searching the web, I found out all the pieces of the puzzle are out there, but nobody built it entirely, so here goes!
First of all, install bna using pip.</description></item><item><title>Using letsencrypt with HKPK</title><link>https://whynothugo.nl/journal/2016/02/07/using-letsencrypt-with-hkpk/</link><pubDate>Sun, 07 Feb 2016 21:15:40 +0000</pubDate><guid>https://whynothugo.nl/journal/2016/02/07/using-letsencrypt-with-hkpk/</guid><description>HKPK (RFC7469) is a standard that tells browser to cache a certain TLS certificate&amp;rsquo;s signature, and validate that future visits use that certificate (or a defined backup).
I intended on enabling this on my servers, but since letsencrypt renews your certificates every few months, it would mean updating this setting on my nginx configuration. It also means that if something catastrophic happens (like a disk failure), the certificate would be lost, but browsers would still expect to see that same one.</description></item><item><title>I'm giving up on IM</title><link>https://whynothugo.nl/journal/2015/09/22/im-giving-up-on-im/</link><pubDate>Tue, 22 Sep 2015 02:08:42 +0000</pubDate><guid>https://whynothugo.nl/journal/2015/09/22/im-giving-up-on-im/</guid><description>I&amp;rsquo;ve been using XMPP as my primary IM protocol for years now. I&amp;rsquo;ve used a few other things on the side, but I&amp;rsquo;ve always advertised it as my primary mean of communication. And it&amp;rsquo;s really worked for a long time: lots of developers and people in FLOSS circles use XMPP, and Google Talk federated as XMPP too, so that worked for less tech-inclined users.
In recent years, I also ended up having to use Facebook&amp;rsquo;s IM a bit more as well, since a lot of people I know only used that to online communication.</description></item><item><title>Start small, then grow</title><link>https://whynothugo.nl/journal/2015/04/06/start-small-then-grow/</link><pubDate>Mon, 06 Apr 2015 02:33:45 +0000</pubDate><guid>https://whynothugo.nl/journal/2015/04/06/start-small-then-grow/</guid><description>All of us developers who love what we do have started lots of side-projects.
And almost all of us have equally as many side-projects abandoned on some workspace or projects directory, rotting, with no hope of every achieving completion. New projects are dumped there periodically, into a pit of abandonment and decay.
I wanted to find my way out of this endless, and pointless loop. I needed to get things done, and make the best of my time.</description></item><item><title>Introducing Todoman</title><link>https://whynothugo.nl/journal/2015/03/30/introducing-todoman/</link><pubDate>Mon, 30 Mar 2015 13:57:23 +0000</pubDate><guid>https://whynothugo.nl/journal/2015/03/30/introducing-todoman/</guid><description>Inspired on memo and khal, todoman is a simple todo manager, (or task manager), designed to take note and keep track of pending tasks, that runs as a cli application on almost any Unix-like system (this includes Linux, BSD and probably other OSs from the Unix family).
Todoman is MIT licensed and saves tasks as icalendar, meaning you can use a CalDav-complaiant too to sync your calendar (for example, vdirsyncer). You can also then sync this to your mobile phone, tablet, or any other device with a CalDav-compliant client.</description></item><item><title>Open source your website</title><link>https://whynothugo.nl/journal/2015/03/17/open-source-your-website/</link><pubDate>Tue, 17 Mar 2015 17:15:28 +0000</pubDate><guid>https://whynothugo.nl/journal/2015/03/17/open-source-your-website/</guid><description>Unless your business&amp;rsquo;s value is actually on your website code itself, there&amp;rsquo;s little reason not to share your site&amp;rsquo;s code.
I understand why facebook or gmail won&amp;rsquo;t release the code to their site (I understand, without condemning nor condoning), but if you&amp;rsquo;ve got a blog, an institutional website, a three-page site that merely links to &amp;ldquo;download our app&amp;rdquo;, there&amp;rsquo;s little reason not to share the source with the public.
All of us web developers (or just curious designers) have come across some site and wondered &amp;ldquo;Hmm, wonder how they did X and Y with just jekyll&amp;rdquo;, or wondered what plugin they used on Z platform to achieve something.</description></item><item><title>Opensmtpd and dovecot with a shared SQL database</title><link>https://whynothugo.nl/journal/2015/02/15/opensmtpd-and-dovecot-with-a-shared-sql-database/</link><pubDate>Sun, 15 Feb 2015 15:04:03 +0000</pubDate><guid>https://whynothugo.nl/journal/2015/02/15/opensmtpd-and-dovecot-with-a-shared-sql-database/</guid><description>This article will describes how to achieve a flexible and scalable email setup using opensmtpd and dovecot. For single-user or single-domain setups, this is an overkill, but feel free to read ahead, you may still find something useful.
Introduction[permalink] I&amp;rsquo;ve used opensmtpd and dovecot for years now, and have been hosting email for several domains for a large portion of that time.
For small sites the text-based backends work fine, however, as the amount of users, domains and virtual users grows, it&amp;rsquo;s not easy to keep track.</description></item><item><title>Performing backups the right way</title><link>https://whynothugo.nl/journal/2014/08/06/performing-backups-the-right-way/</link><pubDate>Wed, 06 Aug 2014 20:33:45 +0000</pubDate><guid>https://whynothugo.nl/journal/2014/08/06/performing-backups-the-right-way/</guid><description>For years I&amp;rsquo;ve had a single task on my TO-DO list: backup photos. I had an awful solution years ago, and only recently did a permanent, proper solution.
Doing backups the right way means taking several items into consideration, and should not be done lightly. Trusting poor backup solutions will result in a false sense of security where you might loose everything suddenly, and not even realize it until it&amp;rsquo;s too late!</description></item></channel></rss>