<?xml version="1.0" encoding="utf-8"?>

<feed xmlns="http://www.w3.org/2005/Atom">
	<title>Ingo Karkat's blog</title>
	<subtitle>software curiosities in development and engineering</subtitle>
	<link href="https://ingo-karkat.de/blog/" />
	<link rel="self" href="https://ingo-karkat.de/blog/feed" />
	<updated>2025-03-24T22:21:52+01:00</updated>
	<author>
		<name>Ingo Karkat</name>
		<email>ingo@karkat.de</email>
	</author>
	<id>https://ingo-karkat.de/blog/</id>

	<entry>
		<title>Snaps still cause trouble</title>
		<link href="https://ingo-karkat.de/blog/2025/03/24/Snaps%20still%20cause%20trouble.html" />
		<id>ffb5cd11-08f5-11f0-b991-d41243264e9e</id>
		<published>2025-03-24T22:21:49+01:00</published>
		<updated>2025-03-24T22:21:49+01:00</updated>
		<summary> A short scare during upgrading to Ubuntu 24.04 could have been easily prevented by using proper mechanisms. </summary>
	</entry>
	<entry>
		<title>New Vim plugin release through my custom tooling</title>
		<link href="https://ingo-karkat.de/blog/2025/02/11/New%20Vim%20plugin%20release%20through%20my%20custom%20tooling.html" />
		<id>e67a65be-e873-11ef-a7f5-c9058f9633ec</id>
		<published>2025-02-11T13:29:55+01:00</published>
		<updated>2025-02-11T13:29:55+01:00</updated>
		<summary> I use the 671st publish of a Vim plugin to explain how I'm currently doing that with my custom tooling, and how I arrived at that. </summary>
	</entry>
	<entry>
		<title>Retrofitting variable outputs to Gnuplot graphs</title>
		<link href="https://ingo-karkat.de/blog/2025/02/06/Retrofitting%20variable%20outputs%20to%20Gnuplot%20graphs.html" />
		<id>60b5f50e-e479-11ef-8b2a-b74241a99bbe</id>
		<published>2025-02-06T11:59:03+01:00</published>
		<updated>2025-02-06T11:59:03+01:00</updated>
		<summary> I've written a small utility that enables me to change graph size and output formats of Gnuplot invocations without touching the Gnuplot script itself. </summary>
	</entry>
	<entry>
		<title>My use of command-line DSLs</title>
		<link href="https://ingo-karkat.de/blog/2024/12/14/My%20use%20of%20command-line%20DSLs.html" />
		<id>a4a43944-ba38-11ef-9a9e-3d567bd13b87</id>
		<published>2024-12-14T17:29:51+01:00</published>
		<updated>2024-12-14T17:29:51+01:00</updated>
		<summary> An example of how my Git extensions help me maintaining a huge list of projects, especially through custom iterators that apply commands to a group of repositories as if it were one. </summary>
	</entry>
	<entry>
		<title>Good CLIs are composable and extensible</title>
		<link href="https://ingo-karkat.de/blog/2024/11/21/Good%20CLIs%20are%20composable%20and%20extensible.html" />
		<id>4d3dc15e-a8d4-11ef-8efd-27bd43510a57</id>
		<published>2024-11-22T14:18:45+01:00</published>
		<updated>2024-11-22T14:18:45+01:00</updated>
		<summary> Customization towards a productive shell environment can be hard. I identify two requirements for that. </summary>
	</entry>
	<entry>
		<title>Git trailers to document project parameters</title>
		<link href="https://ingo-karkat.de/blog/2024/11/19/Git%20trailers%20to%20document%20project%20parameters.html" />
		<id>85444016-a738-11ef-8efd-27bd43510a57</id>
		<published>2024-11-20T13:11:06+01:00</published>
		<updated>2024-11-20T13:11:06+01:00</updated>
		<summary> I automatically record system and tool version information in Git commit messages for better troubleshooting, leveraging Git trailers. </summary>
	</entry>
	<entry>
		<title>Fat-shaming Linux app stores</title>
		<link href="https://ingo-karkat.de/blog/2024/11/18/Fat-shaming%20Linux%20app%20stores.html" />
		<id>2330ab94-a59e-11ef-8efd-27bd43510a57</id>
		<published>2024-11-18T12:13:28+01:00</published>
		<updated>2024-11-18T12:13:28+01:00</updated>
		<summary> I complain that both Snap and Flatpak require manual cleanup of old package versions, how that is too complex, and showcase my scripting solution. </summary>
	</entry>
	<entry>
		<title>My workflow for signed letters</title>
		<link href="https://ingo-karkat.de/blog/2024/11/15/My%20workflow%20for%20signed%20letters.html" />
		<id>7006a10a-a353-11ef-8efd-27bd43510a57</id>
		<published>2024-11-15T14:13:42+01:00</published>
		<updated>2024-11-15T14:13:42+01:00</updated>
		<summary> How my tooling lets me write a letter, add my signature, and produce a PDF that looks as if I had followed a classic analog workflow. </summary>
	</entry>
	<entry>
		<title>Synology updates suck</title>
		<link href="https://ingo-karkat.de/blog/2024/11/03/Synology%20updates%20suck.html" />
		<id>e77fb2a6-9a8b-11ef-952b-771b8387aa44</id>
		<published>2024-11-04T10:05:14+01:00</published>
		<updated>2024-11-04T10:05:14+01:00</updated>
		<summary> A rant about updates on the Synology NAS and how it affected my customizations. </summary>
	</entry>
	<entry>
		<title>Nextcloud side-by-side migration</title>
		<link href="https://ingo-karkat.de/blog/2024/10/04/Nextcloud%20side-by-side%20migration.html" />
		<id>3b8f4d70-857e-11ef-9a7e-93b9d298d968</id>
		<published>2024-10-08T16:04:28+02:00</published>
		<updated>2024-10-08T16:04:28+02:00</updated>
		<summary> My Nextcloud instance had to be moved to another server, and this worked very well due to their great admin tooling. </summary>
	</entry>
	<entry>
		<title>Two approaches to file exclusions</title>
		<link href="https://ingo-karkat.de/blog/2024/09/26/Two%20approaches%20to%20file%20exclusions.html" />
		<id>e7296614-7c0c-11ef-9280-db9fa6e1e162</id>
		<published>2024-09-26T15:40:33+02:00</published>
		<updated>2024-09-26T15:40:33+02:00</updated>
		<summary> A story of confusing backup file exclusion syntaxes in borgmatic, and how my knowledge of rsync's exclusions led me astray. </summary>
	</entry>
	<entry>
		<title>Good documentation is priceless</title>
		<link href="https://ingo-karkat.de/blog/2024/03/29/Good%20documentation%20is%20priceless.html" />
		<id>53c12a44-edbc-11ee-b0e0-89f6c103c171</id>
		<published>2024-03-29T12:06:00+01:00</published>
		<updated>2024-03-29T12:06:00+01:00</updated>
		<summary> Good documentation saves time and makes working a breeze; this becomes very apparent when having to work with poor documentation. Often it's the small things, like omissions and inconsistencies. </summary>
	</entry>
	<entry>
		<title>versions-maven-plugin inconsistent interface</title>
		<link href="https://ingo-karkat.de/blog/2024/03/03/versions-maven-plugin%20inconsistent%20interface.html" />
		<id>025d9190-d964-11ee-be3a-ff79be7f8c80</id>
		<published>2024-03-03T14:43:25+01:00</published>
		<updated>2024-03-03T14:43:25+01:00</updated>
		<summary> The Versions Maven Plugin is useful to manage dependency versions; unfortunately, its API is inconsistent and poorly discoverable. </summary>
	</entry>
	<entry>
		<title>The power of evolving abstractions</title>
		<link href="https://ingo-karkat.de/blog/2022/06/23/The%20power%20of%20evolving%20abstractions.html" />
		<id>a976aa0a-f330-11ec-b3de-a5620e80ab8b</id>
		<published>2022-06-23T22:11:26+02:00</published>
		<updated>2022-06-23T22:11:26+02:00</updated>
		<summary> A short example of the evolution of my home-grown commands, climbing up the ladder of abstractions for greater reuse. </summary>
	</entry>
	<entry>
		<title>Composing shell scripts</title>
		<link href="https://ingo-karkat.de/blog/2022/04/25/Composing%20shell%20scripts.html" />
		<id>637d3290-c580-11ec-ba26-9575130d0371</id>
		<published>2022-04-26T18:46:15+02:00</published>
		<updated>2022-04-26T18:46:15+02:00</updated>
		<summary> An example of my style of composing shell scripts via commands that take another command as command-line arguments, and a discussion of the benefits. </summary>
	</entry>
	<entry>
		<title>One tool enables another enables new features</title>
		<link href="https://ingo-karkat.de/blog/2022/04/24/One%20tool%20enables%20another%20enables%20new%20features.html" />
		<id>d7969ea0-c3e1-11ec-b33f-ff02bbaedae1</id>
		<published>2022-04-24T17:18:49+02:00</published>
		<updated>2022-04-24T17:18:49+02:00</updated>
		<summary> Turtles all the way down; short story of how one custom tool allowed me to quickly compose new functionality around update notifications, and in the process created yet another reusable tool. </summary>
	</entry>
	<entry>
		<title>The curse of different regexp dialects</title>
		<link href="https://ingo-karkat.de/blog/2022/04/18/The%20curse%20of%20different%20regexp%20dialects.html" />
		<id>93c5f042-c024-11ec-b33f-ff02bbaedae1</id>
		<published>2022-04-19T23:06:27+02:00</published>
		<updated>2022-04-19T23:06:27+02:00</updated>
		<summary> Lamenting the different regular expression capabilities and syntaxes in common Unix tools like Bash, sed, AWK, Perl, Vim, and how this is holding back an awesome technology. </summary>
	</entry>
	<entry>
		<title>Fortuitous find of a compatibility bug leads to a new tool</title>
		<link href="https://ingo-karkat.de/blog/2022/04/08/Fortuitous%20find%20of%20a%20compatibility%20bug%20leads%20to%20a%20new%20tool.html" />
		<id>2aa2928a-b761-11ec-a10a-191af960b017</id>
		<published>2022-04-08T19:27:29+02:00</published>
		<updated>2022-04-08T19:27:29+02:00</updated>
		<summary> Another short story of how a planned tool extension suddenly unearths a compatibility bug in AWK, the investigation of that prompts me to write a Git tool. </summary>
	</entry>
	<entry>
		<title>Excursions in tool writing</title>
		<link href="https://ingo-karkat.de/blog/2022/04/04/Excursions%20in%20tool%20writing.html" />
		<id>c5da9b24-b579-11ec-865f-b702152877ed</id>
		<published>2022-04-06T09:18:35+02:00</published>
		<updated>2022-04-06T09:18:35+02:00</updated>
		<summary> Short story how a perceived need of a new shell script led to various small extensions and side quests, until coming full cycle and realizing the script isn't actually needed. </summary>
	</entry>
	<entry>
		<title>Gmail inbox Atom feed with App password</title>
		<link href="http://ingo-karkat.de/blog/2022/03/25/Gmail%20inbox%20Atom%20feed%20with%20App%20password.html" />
		<id>afe21c58-ad49-11ec-a58a-63f6b6100663</id>
		<published>2022-03-26T22:14:13+01:00</published>
		<updated>2022-03-26T22:14:13+01:00</updated>
		<summary> Application tokens now need to be used for third party applications that want to access your Google account; I use that for an Atom feed of my Gmail inbox. </summary>
	</entry>
	<entry>
		<title>ImageMagick multiple clones and compositions</title>
		<link href="http://ingo-karkat.de/blog/2022/03/21/ImageMagick%20multiple%20clones%20and%20compositions.html" />
		<id>e5efb40c-a9c2-11ec-a58a-63f6b6100663</id>
		<published>2022-03-22T10:31:48+01:00</published>
		<updated>2022-03-22T10:31:48+01:00</updated>
		<summary> How to do multiple parallel transformations of a source image and combine everything into one target image with both multiple and single ImageMagick invocation(s). </summary>
	</entry>
	<entry>
		<title>The odyssey of unison on a NAS</title>
		<link href="http://ingo-karkat.de/blog/2020/11/22/The%20odyssey%20of%20unison%20on%20a%20NAS.html" />
		<id>105a0834-aa7a-11ec-a58a-63f6b6100663</id>
		<published>2022-03-23T08:22:57+01:00</published>
		<updated>2022-03-23T08:22:57+01:00</updated>
		<summary> Trying to get a recent version of the unison file synchronizer tool running on a Synology DS220j NAS eventually proved futile, and exposed some weaknesses of the community-driven software ecosystem. </summary>
	</entry>
	<entry>
		<title>Longevity of my notebook battery</title>
		<link href="http://ingo-karkat.de/blog/2020/04/08/Longevity%20of%20my%20notebook%20battery.html" />
		<id>61a3387c-9bf0-11ea-9cf6-c48508de0945</id>
		<published>2020-05-22T07:52:12+02:00</published>
		<updated>2020-05-22T07:52:12+02:00</updated>
		<summary> After 7½ years, my original HP EliteBook 2170p battery finally died peacefully through reduced capacity, BIOS warning, and finally physical disintegration. </summary>
	</entry>
	<entry>
		<title>Testing a standalone Perl script</title>
		<link href="http://ingo-karkat.de/blog/2019/03/03/Testing%20a%20standalone%20Perl%20script.html" />
		<id>5eff3026-3e7c-11e9-af47-101f74778c39</id>
		<published>2019-03-04T13:52:30+01:00</published>
		<updated>2019-03-04T13:52:30+01:00</updated>
		<summary> Good test coverage can be achieved without splitting a simple Perl script into separate modules, by masquerading it as a module, and combining two test libraries. </summary>
	</entry>
	<entry>
		<title>JSON is used for web apps because XML is not simple enough</title>
		<link href="http://ingo-karkat.de/blog/2014/03/03/JSON%20is%20used%20for%20web%20apps%20because%20XML%20is%20not%20simple%20enough.html" />
		<id>96126561-3b19-4e28-9977-f2a9a57f35c9</id>
		<published>2014-03-03T17:12:27+01:00</published>
		<updated>2014-03-03T17:12:27+01:00</updated>
		<summary> Despite the stated goal of simplicity, XML and related standards are still too complex for serializing object hierarchies, so JSON is gaining ground here. </summary>
	</entry>
	<entry>
		<title>The Case of the broken mount.cifs in Ubuntu 13.10</title>
		<link href="http://ingo-karkat.de/blog/2013/12/06/The%20Case%20of%20the%20broken%20mount.cifs%20in%20Ubuntu%2013.10.html" />
		<id>3e335f1a-43b1-43b3-8c2b-ddbbfc98976d</id>
		<published>2013-12-06T11:20:10+01:00</published>
		<updated>2013-12-08T21:31:13+01:00</updated>
		<summary> A sudden mount error(13): Permission denied after upgrading to Ubuntu 13.10, my troubleshooting steps, and how I eventually found and fixed a small syntax issue. </summary>
	</entry>
	<entry>
		<title>Upgrade woes - why does it have to be so uncertain</title>
		<link href="http://ingo-karkat.de/blog/2013/12/05/Upgrade%20woes%20-%20why%20does%20it%20have%20to%20be%20so%20uncertain.html" />
		<id>d6c2920e-7aaa-4d2c-89b5-10d864c24a8c</id>
		<published>2013-12-05T20:00:01+01:00</published>
		<updated>2013-12-08T21:30:11+01:00</updated>
		<summary> Recent (bad) experiences with the Ubuntu upgrade to 13.10 make me contemplate the difficulties of software upgrades in general. </summary>
	</entry>
	<entry>
		<title>Updated: Pentadactyl set filetype in external Vim editor based on URL</title>
		<link href="http://ingo-karkat.de/blog/2012/05/22/Pentadactyl%20set%20filetype%20in%20external%20Vim%20editor%20based%20on%20URL.html" />
		<id>3d6ae95e-5ec5-47b3-8c9a-28b735492498</id>
		<published>2012-05-23T09:20:09+02:00</published>
		<updated>2013-03-14T16:33:41+01:00</updated>
		<summary> Update: Just appending the +setf doesn't work when (like in the default option value) there's already a +cmd. I've extended the code to handle this. Determine the filetype / syntax for known sites (e.g. Wikis) based on the URL and pass that on to Vim when editing a field in the external editor via I_CTRL-I. </summary>
	</entry>
	<entry>
		<title>XML processing still hard in Groovy</title>
		<link href="http://ingo-karkat.de/blog/2013/02/22/XML%20processing%20still%20hard%20in%20Groovy.html" />
		<id>3abf8057-4d18-4063-a980-663ed627cb76</id>
		<published>2013-02-22T17:35:21+01:00</published>
		<updated>2013-02-22T17:35:21+01:00</updated>
		<summary> A tale of woe and struggles with Groovy's XML processing APIs, mostly due to poor documentation. </summary>
	</entry>
	<entry>
		<title>Nasty Android bugs and no updates for old devices</title>
		<link href="http://ingo-karkat.de/blog/2012/10/01/Nasty%20Android%20bugs%20and%20no%20updates%20for%20old%20devices.html" />
		<id>67231013-3878-4273-9740-7237fd2a18ef</id>
		<published>2012-10-01T14:47:34+02:00</published>
		<updated>2012-10-01T14:47:34+02:00</updated>
		<summary> A critique of the update policies of Google and Android handset makers in the light of a very annoying SMS problem and the recent USSD vulnerability. </summary>
	</entry>
	<entry>
		<title>The fresh upgrade oxymoron in Linux Mint</title>
		<link href="http://ingo-karkat.de/blog/2012/07/10/The%20fresh%20upgrade%20oxymoron%20in%20Linux%20Mint.html" />
		<id>a820938c-1180-4cd3-b6d9-96bc916e64dd</id>
		<published>2012-07-10T11:29:32+02:00</published>
		<updated>2012-07-10T11:29:32+02:00</updated>
		<summary> A critique of the recommended upgrade mechanism of Linux Mint via a fresh OS install and data restore. </summary>
	</entry>
	<entry>
		<title>Better Android app update mechanisms</title>
		<link href="http://ingo-karkat.de/blog/2012/06/01/Better%20Android%20app%20update%20mechanisms.html" />
		<id>0ad2afbe-ea86-4c56-8f5e-91b14aa23e31</id>
		<published>2012-06-01T11:23:59+02:00</published>
		<updated>2012-06-01T11:23:59+02:00</updated>
		<summary> Ideas to improve Android app updates by allowing rollback to previous versions and flagging app crashes on particular platforms. </summary>
	</entry>
	<entry>
		<title>I want rollback for Android apps</title>
		<link href="http://ingo-karkat.de/blog/2012/05/31/I%20want%20rollback%20for%20Android%20apps.html" />
		<id>2e1a2b81-3958-4c9d-b793-1460335c0a7b</id>
		<published>2012-05-31T18:08:25+02:00</published>
		<updated>2012-05-31T18:08:25+02:00</updated>
		<summary> A plea for a more sophisticated app management for Android SmartPhones (especially for phones with older Android versions) in Google Play, because I have been suffering from malfunctioning apps after a updating. </summary>
	</entry>
	<entry>
		<title>No permissions on files created outside Cygwin with UAC active</title>
		<link href="http://ingo-karkat.de/blog/2012/05/09/No%20permissions%20on%20files%20created%20outside%20Cygwin%20with%20UAC%20active.html" />
		<id>1bd824cf-7b28-4548-864f-006aaf5142c7</id>
		<published>2012-05-09T09:49:56+02:00</published>
		<updated>2012-05-09T09:49:56+02:00</updated>
		<summary> Work around a strange Cygwin interaction with file permissions and UAC to get access permissions to files created outside of Cygwin. </summary>
	</entry>
	<entry>
		<title>Put build number into Grails WAR manifest</title>
		<link href="http://ingo-karkat.de/blog/2012/03/29/Put%20build%20number%20into%20Grails%20WAR%20manifest.html" />
		<id>http://ingo-karkat.de/blog/2012/03/29/Put%20build%20number%20into%20Grails%20WAR%20manifest.html</id>
		<published>2012-03-29T16:00:00+02:00</published>
		<updated>2012-04-03T15:52:18+02:00</updated>
		<summary> Work around deficiencies in the Grails Maven plugin to get the Maven build version number included in the manifest of a Grail web application. </summary>
	</entry>
	<entry>
		<title>FlexMojos minimized Flash Player run</title>
		<link href="http://ingo-karkat.de/blog/2012/03/28/FlexMojos%20minimized%20Flash%20Player%20run.html" />
		<id>http://ingo-karkat.de/blog/2012/03/28/FlexMojos%20minimized%20Flash%20Player%20run.html</id>
		<published>2012-03-28T16:00:00+02:00</published>
		<updated>2012-04-03T15:47:55+02:00</updated>
		<summary> Suppress work-inhibiting pop-ups of the Flash Player window when executing Flex tests through the Maven FlexMojos plugin by injecting a small batch wrapper via Maven configuration. </summary>
	</entry>
</feed>
