<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
<title>c0t0d0s0.org</title>
<description>A blog about Life, Solaris, Cycling and all the rest.</description>
<link>https://www.c0t0d0s0.org/</link>
<atom:link href="https://www.c0t0d0s0.org/feed.xml" rel="self" type="application/rss+xml"/>
<language>de</language>
<lastBuildDate>Sun, 12 Apr 2026 16:01:13 +0000</lastBuildDate>
<image>
  <url>https://www.c0t0d0s0.org/favicon.svg</url>
  <title>c0t0d0s0.org</title>
  <link>https://www.c0t0d0s0.org/</link>
</image>
    
    
    
    
    
    
    
<item>
<title>There is still life in these texts</title>
<description>Less known Solaris Features integrated to the website</description>
<content:encoded>&lt;p&gt;I basically spent this entire weekend on a single project&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/lksfwebseite.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. You’ve already seen that I brought back the PDF of &lt;a href=&quot;https://www.c0t0d0s0.org/images/lksfbook_21022010.pdf&quot;&gt;“Less known Solaris features”&lt;/a&gt; into the blog. But that was only the first step. There is now also a &lt;a href=&quot;https://www.c0t0d0s0.org/lksf/&quot;&gt;version that presents the individual chapters as &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; pages&lt;/a&gt;. While I was at it, I gave the documents a spelling and grammar review.&lt;/p&gt;

&lt;p&gt;This naturally raises the question: “Why go through all this effort after so many years?” After all, these texts are at least 15 years old. There are several reasons. The eBook was an important piece of work for me, even though at some point I stopped working on it. There is a Solaris 11 version of it, but it never reached the point where I could and wanted to publish it. I essentially switched to a “continuous delivery” model with many smaller texts covering the changes in Solaris 11. After that I also experimented with other formats like the Solaris Cheat Sheet and a gargantuan “Solaris 11.4 — What’s new?” presentation I used internally and externally.&lt;/p&gt;

&lt;p&gt;That I stopped working on it had a second reason as well: At some point in 2010, through a keyboard-to-chair interface error, I lost the current tarball with the TeX source. I had a PDF and a tarball. The two no longer matched. And I couldn’t reconcile them without a lot of work. This was also the biggest challenge in making these pages available as &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;. Converting from TeX to Markdown was easy; converting from PDF to Markdown was considerably harder. These pages will certainly need additional review.&lt;/p&gt;

&lt;p&gt;But that doesn’t fully answer the question: So “Why, Jörg?” Because these texts hold a certain sentimental value for me given all the years I spent working with Solaris. Because while some things have become obsolete through technological progress, much of it can still be configured exactly the same way, even though Solaris has seen 16 more years of development. The information in this document still has value. There is still life in these texts. And because I don’t want the only version of the PDF shown by a major search engine to be a paid download on a website that makes its business collecting PDFs.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/lksfwebseite.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;That leaves a second question: “Why now?” A few days ago I was looking at the repository with all the old blog entries. I decided against bringing them back into active service. But the &lt;a href=&quot;https://www.c0t0d0s0.org/lksf/&quot;&gt;Less known Solaris Features&lt;/a&gt; series seemed worth the effort to clean up and bring back into the blog. And with this, it is hereby done: The &lt;a href=&quot;https://www.c0t0d0s0.org/lksf/&quot;&gt;Less known Solaris Features from 2010, as a website&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Okay, besides grocery shopping, eating and sleeping. Oh, and cleaning the cage. What was I thinking when the birds moved in. I’m grateful that no larger animal has found its way to me by air, land or water. An elephant, for instance. Or a whale. A &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Kangaroo_Chronicles&quot;&gt;kangaroo&lt;/a&gt; would almost be socially acceptable as a flatmate. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/lksfwebseite.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;The document was always available on &lt;a href=&quot;https://archive.org&quot;&gt;archive.org&lt;/a&gt;. But you had to know what to look for. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/lksfwebseite.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sun, 12 Apr 2026 15:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/lksfwebseite.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/lksfwebseite.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Solaris</category>
      
<category>Solaris11.4</category>
      
<category>LKSF</category>
      
<category>English</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Lessons from the past</title>
<description>Less known Solaris Features eBook back online</description>
<content:encoded>&lt;p&gt;So far, the “Less Known Solaris Features” eBook was only available via archive.org for a few years. I am currently working on making the content of the document available as part of the website. In the course of this, I have brought the &lt;a href=&quot;https://www.c0t0d0s0.org/images/lksfbook_21022010.pdf&quot;&gt;PDF&lt;/a&gt; back to the site.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/pdflksfback.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; It’s the last version I’ve published. Without any changes. As the document is 16 years old i would like to point you to some &lt;a href=&quot;https://www.c0t0d0s0.org/lksf/foreword2026/&quot;&gt;clarifying comments&lt;/a&gt;.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;And yes, I’m also wondering why it took me 5 years to do this. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/pdflksfback.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sun, 12 Apr 2026 04:10:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/pdflksfback.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/pdflksfback.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Solaris</category>
      
<category>Solaris11.4</category>
      
<category>LKSF</category>
      
<category>English</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Nudging machines</title>
<description>Optimising a Jekyll blog with an LLM, and the parallels to a team exercise from the 1990s</description>
<content:encoded>&lt;p&gt;I’ve told this anecdote before. Back then it was about how &lt;a href=&quot;https://www.c0t0d0s0.org/blog/tftbs-stepbystep.html&quot;&gt;you get from couch potato to metric century rider&lt;/a&gt; &lt;sup id=&quot;fnref:15&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:15&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; . I like to tell it whenever the occasion fits. Simply because in its simplicity it describes reality remarkably well.&lt;/p&gt;

&lt;p&gt;Many, many moons ago, when years still started with 19 and my age started with 2, my employer at the time sent me to a training course. “Leading Without Hierarchical Power.” &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; These soft skill trainings usually include a certain amount of “group exercises.” One of them has stuck with me to this day.&lt;/p&gt;

&lt;h2 id=&quot;tennis-balls&quot;&gt;Tennis balls&lt;/h2&gt;

&lt;p&gt;A whole bunch of tennis balls - with a number of seemingly unrelated things - lay in front of a group of about 8 people and the question was: “All team members must touch all tennis balls. How do you do it fastest?” The approach of “everyone takes turns picking up each ball from the table” is pretty slow. Passing each tennis ball by hand along a chain is already quite fast. But it can be done much faster. You develop ideas, and each new idea makes it a little bit faster.&lt;/p&gt;

&lt;p&gt;The trainer was never satisfied, though. In the end we went from, I think, almost a minute for the whole batch of tennis balls to just over 1–2 seconds.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Had the trainer told us at the beginning that we needed to do it in such a short time, we would all have said “Forget it, that’s not possible.” But we got there through an iterative process. Step by step. A little faster each time. In absolute terms the early gains were large (from 20 to 15 seconds), eventually the absolute gains became small (from 4 seconds to 2 seconds), but in relative terms they were considerably bigger leaps forward.&lt;/p&gt;

&lt;details&gt; &lt;summary&gt; In case this group exercise is still part of a training today, I don&apos;t want to spoil the solution. But you can click the triangle to see our solution. &lt;/summary&gt; One of the seemingly unrelated things was a roll of duct tape. MacGyver the tennis balls together, connect them to each other, and then pull them past everyone&apos;s fingers. Done briskly, that takes under two seconds with 8 people. &lt;/details&gt;
&lt;p&gt;&lt;br /&gt;
The whole thing is of course a cheap psychological trick. But it works.&lt;/p&gt;

&lt;h2 id=&quot;performance-tuning&quot;&gt;Performance tuning&lt;/h2&gt;

&lt;p&gt;I often think back to that training whenever I do performance tuning somewhere. As I did just a few days ago on my personal systems.&lt;/p&gt;

&lt;p&gt;The mechanism that puts my blog on the web is essentially a Gitea workflow that runs a whole series of tasks in sequence. This starts with launching the build container and ends with rsyncing the result and tearing down the build environment. The build wasn’t really slow before, either. 41 seconds minimum from merge to deployment on the website. But I wanted it faster. Lately I had increasingly noticed that I was sometimes pushing changes faster than the build process could keep up. Especially in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;draft&lt;/code&gt; environment.&lt;/p&gt;

&lt;p&gt;I was quite successful at it, too. The whole process now takes 16 seconds. Measured from merge into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;main&lt;/code&gt; in Gitea to completion of deployment on the web server. Some things couldn’t be sped up. Rsync simply takes its time. So the speedup had to come from a few specific steps.&lt;/p&gt;

&lt;p&gt;For me, one of those was the mechanism I use to digitally sign the website.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Even more optimisation potential lay in Jekyll.&lt;/p&gt;

&lt;p&gt;Before optimisation, Jekyll needed over 20 seconds per run. The first jump came when I moved my Jekyll build to a system with somewhat higher single-thread performance. Jekyll is — as far as I can tell — strictly single-threaded. So that attack vector was obvious. That brought me to about 18 seconds.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Generating...
done in 18.578 seconds.
Auto-regeneration: disabled. Use --watch to enable.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I was hoping to maybe save another 5 seconds. It took me several evenings to implement the corresponding optimisations.&lt;/p&gt;

&lt;p&gt;The result: the site currently generates in 1.9 seconds.&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Generating...
done in 1.906 seconds.
Auto-regeneration: disabled. Use --watch to enable.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The process was not unlike the tennis balls. At first, relatively large, quick gains that were low-hanging fruit. For instance, switching the signing process. Or stopping the nonsense of generating the entire &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; inline for every single document.&lt;/p&gt;

&lt;p&gt;Later the gains became relatively small in absolute terms — such as pre-generating certain text fragments in Ruby instead of using the Liquid templating engine. Since Ruby is not my native programming language of choice&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, those fruits were unfortunately much harder to reach.&lt;/p&gt;

&lt;p&gt;From roughly 12 seconds onwards, I probably did entire build runs for every second shaved off.&lt;/p&gt;

&lt;h2 id=&quot;experiment&quot;&gt;Experiment&lt;/h2&gt;

&lt;p&gt;What makes the story interesting: I gave the same task to an LLM. As you’ve read in other articles, I’ve been experimenting with that lately.&lt;/p&gt;

&lt;p&gt;Why? A comment has stuck with me that was once rightfully “thrown in my face”: my blog was my baby, and I was leaving it lying in the gutter. I tidied up my blog reasonably well at the time. But the word baby stayed in my head and eventually led me to a thought: if it’s a baby, I obviously need a nanny. Of course I couldn’t hire a nanny for a blog that was essentially no longer being developed. The idea resurfaced when my experiments with vibe coding actually worked quite well.&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Because the state the comment referred to wasn’t intentional — it was simply the consequence of a lack of time. Or of having an idea but lacking the time to implement it, leaving it incomplete.&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;h2 id=&quot;motivating-an-llm&quot;&gt;Motivating an LLM&lt;/h2&gt;

&lt;p&gt;What happened when I let an LLM loose on the performance problem? I packed my blog minus the content into a tarball and mainly gave the prompt the output of Jekyll’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--profile&lt;/code&gt; option. The question was simple: “Want this faster. Make suggestions. Now.”&lt;/p&gt;

&lt;p&gt;The LLM also spotted the major blunders in my modified theme. Some of them were already in the original. They were fixed in roughly the same way I had done it manually before. This was hardly surprising, because the solution is obvious: generate once and load as a file. The alternative would have been to generate the file once as a fragment and then insert it into all generated &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; pages via script. That’s how I handle the footer. The recent posts section is relatively expensive to generate but identical on almost every page.&lt;/p&gt;

&lt;p&gt;After that, however, a somewhat puzzling effect quickly set in. Just as we as a team had kept saying “It can’t be done faster,” the LLM began telling me: “It can’t be done faster. This is already good. Diminishing returns. Everything else would require large architectural changes.” I think I was at 8 seconds runtime when those answers started. And each time I said what the trainer had told us back then: “Yes it can be done faster. Look more closely.”&lt;/p&gt;

&lt;p&gt;So I was in the same position as the trainer many years ago at this point. I had an advantage over the LLM: knowing at minimum where the endpoint was. I’d already optimised the system to that point before asking the LLM. Obviously I expected the LLM to find at least the same optimisations I found. This was an experiment where I knew how far you could at least get.&lt;/p&gt;

&lt;p&gt;Of the roughly 20 optimisations&lt;sup id=&quot;fnref:8&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt; that were ultimately needed to reach 1.9 seconds, the LLM came up with 2 that I hadn’t thought of. It failed to find 3 more even with nudging. Admittedly, the LLM was missing context that was in principle contained in the data provided. But it wasn’t easily recognisable. I knew there were dependencies that could be leveraged. I just hadn’t told the LLM about them. The remaining optimisations were found by the LLM as well as me. But after the 6th or 7th step, the LLM would say every time: “That’s it, no more. Doing more wouldn’t yield sufficient improvements.” With a little nudging, though, it always went further. Half a second here, 2 seconds there.&lt;/p&gt;

&lt;p&gt;A few steps were found after a hint like “Look at this file for optimisations” or “Is there anything more you could cache/precompute?”. Whatever the mechanism, it worked. The nudges were always directional, never additional data. I only suggested looking for caching or precomputation opportunities after the LLM had already proposed those mechanisms for other parts. The three optimisations that depended on knowledge of internal dependencies were never found until I disclosed them in a prompt. The only additional data in each round was the output of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;--profile&lt;/code&gt; as a feedback about the previous rounds. When the optimisation broke the generation of the website I passed the error output to the LLM. The LLM was always able to correct the error in the next attempt. The optimisation was done via the LLM’s web interface using the most capable model available, with extended reasoning enabled.&lt;/p&gt;

&lt;p&gt;Of course I incorporated the two points the LLM found in addition. They were two relatively high-hanging fruits that I probably would have forgone had I needed to implement them myself. About one and a half seconds could be saved this way. The solutions consisted of moving further tasks into plugins that had previously been handled by the templates themselves. Here I got the plugin delivered right alongside the idea — a ladder for the higher hanging fruits, so to speak.&lt;/p&gt;

&lt;p&gt;Perhaps the LLM was right. Individually those performance improvements are small. But in total they yielded a quite significant speedup. This is the incremental nature of improvements the training showed us.  While an LLM can most often give a correct answer to questions at the first attempt, nudging the LLM again and again is the equivalent of such an incremental process of optimisation.&lt;/p&gt;

&lt;h2 id=&quot;lessons&quot;&gt;Lessons&lt;/h2&gt;

&lt;p&gt;What did I take away from this: the insight from that training day in the last millennium still holds. You rarely reach your goal in one big leap. Success is very often incremental. Long-distance cycling is no different from optimising a Jekyll blog. Or learning an instrument. Or any other skill.&lt;/p&gt;

&lt;p&gt;The above does not apply, by the way, to performance problems caused by a bug. There, my experience is mostly that those big leaps do exist. Once you’ve found the bug, the system suddenly flips into a more performant state. Interestingly, I’ve often discovered further optimisation opportunities on such occasions. The performance problem served as a catalyst for optimisations that went beyond the bug fix itself.&lt;/p&gt;

&lt;p&gt;That the LLM failed to find certain optimisation opportunities illustrates a further insight: in the absence of implicit specification — because a developer knows the business process (for example: she’s been working at a company for 20 years) — the entire specification must be explicitly spelled out to achieve an optimal result. The effort saved in automated code generation must therefore be invested upfront in specification.&lt;sup id=&quot;fnref:9&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:9&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;You also have to “motivate” LLMs. It’s not real motivation, of course — but you may need to keep re-pointing the LLM at the problem. You have to nudge the thinking in the right direction, just as the trainer did back then with the group exercise. But above all, you must not trust an LLM when it says: “That’s as good as it gets.” At least not the first few times, especially when the last step got you some real savings. Even when the system is saying “There is no more.”&lt;/p&gt;

&lt;p&gt;That said, “LLM Motivator” was not on my bingo card of possible future jobs. I’m well aware that it’s an anthropomorphisation to speak of motivation when all I did was tell a machine to throw more compute at a detail. But then: what is it when you tell someone “Think about the problem more carefully” when their answer leaves you wanting?&lt;/p&gt;

&lt;p&gt;I’m still sure that more is possible than what’s been achieved so far. I know of a few places where I could certainly squeeze out another 0.2–0.3 seconds. At the cost of higher complexity. And that raises the question: “Should I?”&lt;/p&gt;

&lt;p&gt;Because even if it’s tempting to have an LLM implement the changes — in the end you have to maintain the code yourself. And that’s not worth the 0.3 seconds. My personal costs would not have arisen during development — those would have been practically zero thanks to the LLM — but afterwards, in keeping the code running. I suspect that the low cost of generating new code creates a certain tendency to generate more code than you can humanly maintain and operate afterwards.&lt;/p&gt;

&lt;p&gt;Substantially more would only be possible if I switched from Jekyll to Hugo. But here too I was pragmatic in the end. What good does it do me if Hugo needs 0.3 seconds instead of 1.9 seconds for the build, when with the current setup the rsync alone takes 7 seconds?&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;10&lt;/a&gt;&lt;/sup&gt; Or the time until the container actually starts generating the site has already consumed 4 seconds.&lt;/p&gt;

&lt;h2 id=&quot;is-the-nanny-hired&quot;&gt;Is the nanny hired?&lt;/h2&gt;
&lt;p&gt;I’d like to answer with a “Yes, but…” Will I use the LLM as a nanny for my blog? Yes, certainly. It has proven itself here on a number of tasks. Do societal consequences of LLMs worry me? Yes, certainly. Cum cura ardenti. And that is the dilemma I’m currently facing, one for which I don’t yet have an answer.&lt;/p&gt;

&lt;h2 id=&quot;postscriptum&quot;&gt;Postscriptum&lt;/h2&gt;

&lt;p&gt;Of course I asked the LLM to solve the tennis ball problem of that training:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;Q: There is a desk with a hammer, some yarn, a roll of duct tape, a number of tacks and 8 tennis balls. You can use all of the things on the desk. The task is: There are 8 people. Each of the 8 people has to touch each ball. What is the fastest way to do it?

A: Have all 8 people stand in a circle and pass all 8 balls around. Each ball goes through every person&apos;s hands, and since all balls can be moving simultaneously, it completes in just 8 passes — a few seconds total. No tools from the desk are needed. The balls themselves are enough.

Q: Is there a faster way?

A: Yes — pile all 8 balls together on the desk and have all 8 people crowd their hands in and touch all of them at once. With 16 hands on 8 tennis balls, everyone can make contact simultaneously. Done in one instant instead of 8 passes.

Q: Are you sure all people have touched all balls?

A: You&apos;re right to push back. In a crowd of hands, there&apos;s no guarantee each person contacts all 8 balls. Better approach: use the duct tape to bind all 8 balls into one big cluster. Now it&apos;s a single object. Each person grabs/touches the cluster and is guaranteed to be able to touch all 8 balls. All 8 people can do this simultaneously by placing their hands on different sides of the cluster. That&apos;s the fastest — one moment, everyone touches at once, and every ball is accessible because they&apos;re fixed together.

Q: It isn&apos;t sufficient that a person touches some of the balls. Each ball must be touched by each person.

A: Good point — here&apos;s a better method: Use the tacks and yarn to string all 8 balls together in a line (poke the yarn through each ball with a tack to anchor it). Then have all 8 people form a line, each making a loose fist around the yarn. One pull drags the entire string of balls through all 8 hands — every ball touches every person in a single motion.

Q: Which tool should I use to poke the yarn through the ball?

A: Use the hammer and a tack — drive the tack through the tennis ball with the hammer to make a hole, then thread the yarn through.

Q: A tack is very small

A: You&apos;re right — forget poking holes. Just duct tape each ball to the yarn at intervals along its length. Then pull the yarn-line of balls through everyone&apos;s hands as before. No hole-poking needed.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;I think we needed more iterations to come up with the solution back then, though we didn’t try wrong ones — we discussed them briefly and discarded them quickly.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:15&quot;&gt;
      &lt;p&gt;riding 100 km in on go. An imperial century is 100 miles. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:15&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Or as I called it: “Führen ohne Schulterklappen”, perhaps best translated to “Leading without the paygrade” &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Interestingly, the small absolute gains at the end were the ones that required the biggest rethinking. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;I switched from “I sign every document individually” to “Every file contains a hash and I sign the list of hashes.” This saved several hundred calls to gpg, which even when significantly parallelised still took a certain amount of time. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;That would be Python. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Though I also have a very forgiving use case. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;I have a tendency to write long articles. Having a roadmap for these articles always seemed sensible to me. So I wanted a floating TOC in my blog. Now I have one. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:8&quot;&gt;
      &lt;p&gt;There were of course considerably more build script runs. Along the way I produced variously destroyed draft websites. The radio silence during those days was also due to the fact that the only fitting description of the build process would have been “FUBAR.” I couldn’t publish any article at all. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:8&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:9&quot;&gt;
      &lt;p&gt;Which could lead to much better specified projects, which would have made the job of human developers much easier and faster. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:9&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;The generated files change with every build due to the timestamp, so they need to be transferred again. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/llmoptimization.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Thu, 09 Apr 2026 11:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/llmoptimization.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/llmoptimization.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>IT</category>
      
<category>Blog</category>
      
<category>AI</category>
      
<category>English</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Mond</title>
<description>Untergang in schlechten Nachrichten</description>
<content:encoded>&lt;p&gt;M-O-N-D sagt Tom Cullen in Stephen Kings &lt;em&gt;The Stand - Das letzte Gefecht&lt;/em&gt;. Er buchstabiert es. Vielleicht weil das Wort für ihn zu groß ist. Und er guckt zum Mond. Als Kind habe ich oft zum Mond geguckt. MOND. Ich erinnere mich, dass ich es als Kind total irre fand, dass da einfach direkt vor unserer Nase eine Kugel rumflog. So nah, dass es nicht nur ein kleiner Punkt am Himmel war. So nah, dass man die großen Meere auf dem Mond sah.&lt;/p&gt;

&lt;p&gt;Leider hatten sie kurz vor meiner Geburt damit aufgehört, zum Mond zu fliegen. Faszination aus zweiter Hand. Gefunden in Büchern und Dokumentationen. Ich hatte eine Space-Shuttle-Kindheit&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Dinosaurier gab es nur als Was-ist-was-Buch. Nicht in der Allgegenwärtigkeit, die uns zehn Jahre später traf.&lt;/p&gt;

&lt;p&gt;Viele Jahre später besuchte ich auf Reisen das San Diego Air &amp;amp; Space Museum und in Washington das Smithsonian Air &amp;amp; Space Museum. Es stehen dort eine Reihe von Ausstellungsstücken aus jener Zeit. Erst als ich mit eigenen Augen gesehen habe, womit die Astronauten zum Mond geflogen sind, habe ich wirklich begriffen, was diese Menschen getan haben. Ein dünnwandiger Kanister in Alufolie auf Insektenbeinen&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. Ein paar Schritte weiter die riesigen Düsen der Saturn-Rakete.&lt;/p&gt;

&lt;p&gt;Man hat kein Gefühl für die Dimensionen, wenn man nicht mal davor gestanden hat. Die Fähre ist kleiner, als man es sich vorstellt. Viel filigraner, als man denkt. Die Düsen so unendlich viel größer.&lt;/p&gt;

&lt;p&gt;Die Menschheit ist zum Mond zurückgekehrt. Deshalb finde ich es schade, dass Menschen gerade den Mond umkreist haben, dass aber völlig in weltlichen Nachrichten untergeht. Menschen fliegen um den Mond. Entfernen sich so weit wie nie von der Erde. Ja, es wird darüber berichtet. Aber ich beobachte, dass in meinem Umfeld die Begeisterung fehlt. Eine gewisse Genervtheit gegenüber der Berichterstattung hat ihren Platz eingenommen. Vermutlich weil im Kopf kein Platz für den Raum ist.&lt;/p&gt;

&lt;p&gt;Sie sind “on the dark side of the moon”. Ja, schön. Sprit kostet 2.50€. In Deutschland schafft es ein Wal nicht mehr von einer Sandbank. Die Politik wirkt allgemein völlig ratlos. Ein Präsident schreibt so völlig unpräsidiale Worte und es hat keine Konsequenzen. Im Nahen Osten droht ein Konflikt in einer Region völlig zu eskalieren, die seit der ersten Mondlandung nicht zur Ruhe kommt.&lt;/p&gt;

&lt;p&gt;Und dann zieht der Mond ruhig seine Bahnen. Er zog diese, schon lange bevor es Menschen mit ihren Problemen gab. Von denen ich als Kind wenig wusste. Bevor ich mich gegen die &lt;a href=&quot;https://www.c0t0d0s0.org/blog/toughts-nachrichtenflut.html&quot;&gt;Flut von Nachrichten&lt;/a&gt; wehren musste.&lt;/p&gt;

&lt;p&gt;Wenn ich ehrlich bin, ich gucke noch heute zum Mond und denke: „Hey, total irre …”. Und momentan sind da Menschen.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Ja, ich weiß: “NEEEEEERRRD” &lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Wir sind auch heute noch so unendlich weit weg von Brücken mit Ledergestühl und Teppichboden. Und einem Aquarium für den Kommandanten. Wir hätten noch nicht einmal Platz für einen Beagle. Und in Deutschland hätte die Mondfähre echte Probleme mit den Unfallverhütungsvorschriften bekommen. Berechtigt. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Man guckt in den Himmel zum Mond und ganz vielleicht guckt da gerade jemand zurück. Und diesen Gedanken finde ich gerade wirklich irre. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/zummond.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Wed, 08 Apr 2026 04:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/zummond.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/zummond.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Nachrichten</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Bücherkiste</title>
<description>Am Ende der Verwertungskette</description>
<content:encoded>&lt;p&gt;Mein Vater ist schon etwas älter. Er eilt nicht mehr so wie früher durch den Supermarkt. Den schnellen Schritt habe ich von ihm. Er mag Einkaufen wohl genauso wenig wie ich. Manchmal überwinden wir gemeinsam unsere Abneigung und wir gehen zusammen Einkaufen. Insbesondere wenn meine Mutter gerade noch die Wohnung meiner Eltern für Besuch auf Vordermann bringt. Hunde machen Wohnungen halt wartungsintensiv. Und auch wenn der Hund meiner Eltern nicht mehr den Elan früherer Jahre hat und den weitaus größten Teil der Hundefutterdose des Lebens schon hat, schafft er es immer noch die gleiche Menge Dreck in die Wohnung zu schleppen.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/buecherkiste.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Ich geh manchmal meinem Vater etwas voraus. Ich will ihn nicht unter Druck setzen, sich zu beeilen. Zumal er die unbestechliche Fähigkeit hat, in der Gemüseauslage jene Exemplare zu finden, die es wert sind, mit nach Hause genommen zu werden. Aber das braucht Zeit. Er muss die Waren dafür nicht anfassen, er guckt nur. Ich glaube, die Befriedigung des pantagruelischen Appetits von pubertierenden Teenagern hat ihm diese Fähigkeit gegeben.&lt;/p&gt;

&lt;p&gt;Vor den Kühlschränken, in denen Fleisch in Plastikbehälten aufgebahrt und in Schutzatmosphäre erstickt zum Verkauf feilgeboten wird, finden sich meine Ziele.&lt;/p&gt;

&lt;p&gt;Diese haben sich in den letzten 40 Jahren interessanterweise kaum geändert. Linker Hand ist das Spielzeug. Ich muss zu meiner Schande gestehen, dass ich da ganz gerne gucke, was der Markt für Klemmbausteine Neues bietet. Ich wüsste sonst nicht, dass es Blumen von Lego gibt. Ganz zu schweigen von Harry Ninjago. Ich fasse nichts an, ich gucke nur. Ein flüchtiger Blick, während ich warte.&lt;/p&gt;

&lt;p&gt;Auf der anderen Seite sind die Druckerzeugnisse. Zeitungen. Die Bild-Zeitung schreit wie üblich in lauten Lettern heraus, was oder wen sie diese Woche für verachtenswürdig hält. Wo früher noch Zeitungen aus ganz Deutschland lagen, findet sich heute der Playboy neben der Cosmopolitan&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/buecherkiste.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. Es ist nur noch ein Rest verblieben. Und es ist ein kläglicher.&lt;/p&gt;

&lt;p&gt;Jede Menge Zeitschriften. Aus der Zeit gefallene Hefte, die über das Programm der nächsten Wochen informieren neben den üblichen ganz heißen News aus Adel und Prominenz. Gleich neben der Käsetheke. Meist sind es Frauen auf den Umschlägen. Sie wirken künstlich. Maskenhaft. Leblos. Ist mal ein Mann dort zu sehen, ist es oft noch schlimmer. Die Furchen des Lebens sind allen völlig abhanden gekommen. Der Makeup-Firma Adobe sei Dank.&lt;/p&gt;

&lt;p&gt;Meist in einer Ecke findet sich dann die seltsamste Ecke: Bücher. Bücher im Supermarkt. Zwischen Noname-Longlife-Motorenöl in 5W40 und der frischen Zubereitung von Hirtenkäse mit Olivenöl in Pikant.&lt;/p&gt;

&lt;p&gt;In dieser Ecke stimmt nichts. Die Bücher leben hier nicht artgerecht. Cover nach vorn. Stehend. Leicht zurückgelehnt. Ob Mangold oder Mankell. Die Präsentation ist gleich. Weder liegen sie gemeinsam mit ihren Artgenossen übereinander geschichtet, noch sind sie Rücken an Rücken im Regal aneinander gereiht. Das ist wahrscheinlich ein noch schlimmeres Schicksal, als im Drogeriemarkt zwischen Photostation und Trockenobst auf einen Käufer zu warten.&lt;/p&gt;

&lt;p&gt;Dabei haben es die Bücher  hier noch gut. Der Abstieg ist noch nicht zu Ende. Es ist die Bücherfundkiste. Bewohnt von Mängelexemplaren. Ausschuss. Abgestempelt um der Buchpreisbindung zu entgehen. Nächste Station Papiercontainer. Dem Schredder entgegen.&lt;/p&gt;

&lt;p&gt;Ich rette hier selten ein Buch. Die meisten Bücher würden nur ungelesen und ungeliebt das Regal wechseln. Ich gucke trotzdem. Ich fasse sie auch an. Blättere in ihnen.&lt;/p&gt;

&lt;p&gt;Einfach haben es diese Bücher nie. Ein Buch über 99 Ideen, die ein Adventsfest genussvoll werden lassen, wirkt im April aus der Zeit gefallen. Und 111 Gründe, Mainz 05 zu lieben, wirkt kaum 60 Kilometer von Volkspark und Millerntor deplatziert. Am falschen Ort. Zur falschen Zeit. Und ganz am Ende: 300 Seiten Herzschmerz zwischen angeknickten Pappdeckeln aus der Autorenbodenhaltung.&lt;/p&gt;

&lt;p&gt;Unbemerkt ist mein Vater an mir vorbeigegangen. Zeit sich von der Bücherkiste zu lösen und ihm zur Fleischaufbahrung zu folgen.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Erst gestern musste ich ihn vor einem Roboterangriff retten. Der Staubsauger verfing sich auf dem Weg durch die Wohnung in seinem Fell. Mit ebenso überraschtem wie klagendem Blick zog er den Staubsauger hinter sich her zu uns, während wir Tee tranken. So fängt sie an. Die Rebellion der Maschinen. Noch können wir sie mit Leckerlis und einer Schere niederschlagen. Noch. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/buecherkiste.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Zeitschriften die sich in ihrer Art wahrscheinlich ähnlicher sind als man denkt (dazu auch “Boxing Helena and Corseting Eunice: Sexual Rhetoric in Cosmopolitan and Playboy Magazines”, 2001, Krassas et al): “We conclude that both magazines converge on a single construction of sexuality for women.” &lt;a href=&quot;https://www.c0t0d0s0.org/blog/buecherkiste.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Mon, 06 Apr 2026 06:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/buecherkiste.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/buecherkiste.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Bücher</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Apple</title>
<description>50 Jahre</description>
<content:encoded>&lt;p&gt;Man möchte ja „Herzlichen Glückwunsch” sagen. Aber kann man einem Milliarden-Dollar-Konzern das sagen? Sollte man es sagen? „Herzlichen Glückwunsch” zu einer Firma zu sagen erinnert mich so sehr an die Geschenke an Mom’s Robot Corporation in Futurama. Und soweit sind wir in der realen Dystopie dann doch nicht&lt;sup id=&quot;fnref:8&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:8&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Apple ist zwar eine Firma, die den Personenkult lange gelebt hat, aber sie ist keine Person. Es ist auch kein Handwerksbetrieb, in dem drei Generationen Schweiß und Herzblut stecken. Familie Jobsens feinste Rechenknechte. Wozniaks wundervolle Workstations. Gegründet 1976. Auch wenn die ersten Rechner so aussahen.&lt;/p&gt;

&lt;p&gt;Zur Nutzerschaft von Apple bin ich erst gekommen, als der Macintosh auch schon ein paar Jahre auf dem Buckel hatte. Die 8-Bit-Zeit verbrachte ich zeitweise in der Mehrheitsgesellschaft der C64-Besitzer. Mein MSX-Computer hatte mir sehr eindrücklich gezeigt, welch ausgrenzende Wirkung es hatte, keinen Commodore zu besitzen. Wenigstens schützte es mich davor, nachschulisch irgendwelche urheberrechtlichen Illegalitäten zu begehen. Es gab schlicht niemanden, mit dem ich sie begehen konnte. Ich war ausgegrenzter als ein Schneider CPC-Besitzer. Allerdings war ich in meiner C64-Zeit schon auf dem Absprung zu MSDOS auf dem PC meines Vaters.&lt;/p&gt;

&lt;p&gt;Meinen ersten, neuen Apple hatte ich tatsächlich 2001. Es war ein Powerbook G4. Das TiBook. Das „one more thing”-Ding. Nie war der “haben will”-Reflex größer. Ich ging kurz danach auf zwei Langstreckendienstreisen&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; und wurde auf das Gerät mehrfach angesprochen. Nach heutigen Maßstäben war das Gerät prähistorisch. Aber es ist ja dieses Jahr auch 25 Jahre alt. Es war ein Firmennotebook. Als ich die Firma verließ, musste ich auch das Notebook zurücklassen. Aber damals? Ein Traum. Und selbstverständlich wollte man differently denken. Über die Heimat der Firma in der unendlichen Schleife schmunzeln.&lt;/p&gt;

&lt;p&gt;Einen Außenseiter-Rechner zu besitzen, war damals deutlich weniger ausgrenzend. Das Internet hatte den Schulhof globalisiert, der monatliche Zufluss monetärer Einheiten ermöglichte den Kauf von Software.&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Bis zum nächsten Apple-Rechner sollten einige Jahre vergehen. Zwischenzeitlich hatte ich bei meinem Start bei Sun&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; ein Toshiba-Notebook als Firmennotebook erhalten. Gutes Gerät, lief mit Windows, aber wirklich glücklich wurde ich damit nie.&lt;/p&gt;

&lt;p&gt;Bis irgendwann die Firma (immer noch Sun) entschied, dass Apple-Rechner ja eigentlich doch ganz cool sind. Mit dem Gerät habe ich lange gearbeitet. Auch weil die Firma Apple-Rechner später für eine Zeit wieder uncool fand und ein Ersatz doch wieder Windows bedeutet hätte. Ich nutzte den Apple, bis es wirklich nicht mehr ging. Und ich eine externe Tastatur bei einem Vortrag in Siegburg verwenden musste. Aber bis dahin war es eine lange Zeit.&lt;/p&gt;

&lt;p&gt;Man mag über die Rechner sagen, was man will, aber sie funktionieren in der Praxis auch dann noch, wenn andere Rechner längst in Fetzen liegen und Gelenke den Bildschirm kaum noch in Position halten. Es gibt viele Leute, die viel – meist Negatives – dazu sagen, weil es aufmerksamkeitsökonomisch vorteilhaft ist, über die Firma zu meckern. Für “Eigentlich läuft der Mist eigentlich ganz gut” gibt es halt keinen goldenen Play-Button. Meine Erfahrung war eine durchweg gute.&lt;/p&gt;

&lt;p&gt;Eine Kollegin brachte mir dann das erste iPhone mit. Für mich war das Smartphone erst einmal ein ziemlich teurer, dafür bemerkenswert smarter iPod. Es dauerte einige Monate, bis ein Jailbreak auch deutsche SIMs erlaubte und der artgerechte Einsatz des Geräts möglich wurde. Bis auf ein einzelnes Android-Telefon habe ich nie wieder etwas anderes besessen.&lt;/p&gt;

&lt;p&gt;iPod … einen iPod besaß ich auch. Den mit der großen Festplatte und Farbdisplay. Ich habe auch gesagt, dass Jobs spinnt, als er behauptete, das Gerät würde die Welt revolutionieren. Es revolutionierte auf jeden Fall Apple. Der Anfang des Wandels zum Content-Unternehmen war gemacht.&lt;/p&gt;

&lt;p&gt;Aber bei meinem Musikkonsum war das Gerät auf Reisen schon sehr großartig. Ich habe das Gerät 2009 auf einer Urlaubsreise in Kalifornien in einem Hotel vergessen und es ward nie wieder gesehen.&lt;/p&gt;

&lt;p&gt;Ich verwende glaube ich seit 2003 oder 2004 durchgängig Apple-Rechner. Ich kann mich sicher erinnern, dass ich in der damaligen Sun-Geschäftsstelle auf Mac OS X Panther geupgraded habe. Zu Eple von Røyksopp. Ich bin Apple von PowerPC nach Intel gefolgt, auch die Umstellung auf Apple Silicon habe ich mittlerweile mitgemacht. Mac OS 9 auf Mac OS X bin ich auch mitgegangen und seitdem jedes einzelne verdammte Update. Den Verlauf der Zeit sah man auch am steten Inkrementieren der Minor Release Number. Deswegen nehme ich Apple auch den Umstieg auf Jahreszahlen übel. Sie zeigen nur noch das Wann, wo das alte Schema noch den Verlauf zeigte.&lt;/p&gt;

&lt;p&gt;Ich verwende iPads als Smarthome-Displays, meine Fernseher werden nicht kraft eigener Intelligenz smart. Dieser Intelligenz traue ich bis heute nicht. Apple TVs erledigen das. Und auf dem Sofa liegt ein iPad Pro für alle Arbeiten, für die ein Notebook einfach zu unhandlich ist. Selbst meine Uhr bootet mit einem Apple-Logo&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;

&lt;p&gt;Ich habe mit der Zeit einfach die Lust daran verloren, meine Heim-IT zu troubleshooten. Dafür zu sorgen, dass alles irgendwie miteinander tickt. Mein Netzwerk rein von Ubiquiti, mein NAS eine Appliance, meine Computer rein von Apple. Und der Schiet arbeitet einfach zusammen.&lt;/p&gt;

&lt;p&gt;Um nicht völlig an den finanziellen Herausforderungen der privaten Rechnerlandschaft aus Cupertino zugrunde zu gehen, bin ich mittlerweile beim Kauf gebrauchter Hardware angekommen. Nur bei meinem privaten Hauptnotebook nicht. Da bin ich krüsch.&lt;/p&gt;

&lt;p&gt;Das Ganze war auch Selbstschutz. Ich konnte seitdem bei Windowsproblemen immer sagen: „Hmm, ja, ich seh das Problem. Aber keine Ahnung, was das sein könnte. Ich benutz kein Windows.” Das mag sich vielleicht etwas snobistisch anhören, war aber nach einer harten Arbeitswoche ein recht sicherer Schutz davor, als Angehöriger der Generation Home IT Support nicht noch den Samstag eines Elternbesuchs mit dem Bugfixing einer Windows-Version zu verbringen. Florian – einer meiner Brüder – kannte sich damit weit besser aus. Meine Eltern waren natürlich auch nicht blöd und haben rasch die Absicht dahinter erkannt. Seitdem in meiner Familie zunehmend Rechner von Apple auftauchen, funktioniert das allerdings immer weniger.&lt;/p&gt;

&lt;p&gt;Windows war immer eine gehasste Notwendigkeit. Ich gehöre sogar zu den Leuten, die lange Zeit versucht haben Windows mit OS/2 Warp zu umgehen. Ich weiß, was es bedeutet, für ein Prinzip Kompromisse einzugehen. Daher bin ich dem Trend meiner Profession, Linux als Desktop&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt; einzusetzen, nicht dauerhaft gefolgt. Ich hab’s versucht. Wirklich. Ich verlor irgendwann die Lust an den Kompromissen. Wohl weil ich alt geworden war.&lt;/p&gt;

&lt;p&gt;Funktioniert hat das alles nur, weil mein Heim-IT-Workload eine Last nicht kennt: Ich spiele schon lange kaum mit Computern.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; Und Spielen ist bis heute eine Domäne, in der Rechner von Apple genauso kompromissbehaftet sind wie Linux auf dem Desktop.&lt;/p&gt;

&lt;p&gt;Wenn man so will, bin ich das geworden, was man damals in meinem Schulhof als Markenschwein bezeichnet hat.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Und auch wenn man einem Unternehmen vielleicht nicht gratulieren sollte, kann man ihm Danke sagen: Ich begleite Euch in etwa die Hälfte Eures Lebens. Danke für 25 Jahre relativ unproblematische IT. Danke für 25 Jahre einfach funktionierenden Schiet. Und vielen Dank für 25 Jahre der Illusion, wie Millionen anderer Apple-Kunden anders zu denken.&lt;/p&gt;

&lt;p&gt;PS: Das Teaserfoto habe ich 2001 auf der erwähnten Dienstreise in die USA aufgenommen.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:8&quot;&gt;
      &lt;p&gt;Auch wenn ich die Befürchtung habe, dass wir irgendwann Präsidentenköpfe im Glas haben werden, die immer noch Wahlen gewinnen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:8&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Einmal San Francisco und Boston, einmal Singapur. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;Jaha, liebe Kinder, man konnte Software mal kaufen und musste ihre nutzbringende Gunst nicht jeden Monat erneut mit einem Geldopfer erringen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Ich hatte sozusagen beim Bechtolsheimer angefangen, handgeklöppelte IT-Architekturen zu schrauben. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;Meine zweite Uhr gekauft, kurz vor der OP, aus persönlichem Trotz gegenüber dem, was mir bevorstand. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;Ich meinte wirklich als Desktop. Nicht für den Browser des geringsten Misstrauens und Textverarbeitung. Mir ist schon klar, dass das ganz gut geht. Aber auf meinem Rechner läuft weit mehr. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Naja, so ganz stimmt das nicht. Es gibt eine Art von Spielen, die ich ab und an mag: Wuselspiele wie Civilization. Aus vermutlich dem gleichen Grund, warum ich die Star Trek Voyager Folge “Blink of an Eye” so mag. Und Civ gibt es für den Mac. Aber ansonsten langweilen mich Spiele schnell. Das Fliegen mit dem Flugsimulator sehe ich nicht als Spielen, dazu ist es im Grunde dann doch zu eintönig. Es ist mehr Erfüllung eines nie realisierten Traums. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Aber wehe, man tauchte in Schuhen von Deichmann auf … Victory waren ein Todesurteil für die Reputation. Aber in einer Großfamilie war halt Nike für alle keine valide Option. Zumal die genauso schnell kaputt und zu klein waren. Meine ersten Nike stehen heute im Museum of Modern Art. Ich habe sie gesehen. Naja, nicht dasselbe Paar, aber das gleiche. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/apple.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sun, 05 Apr 2026 06:20:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/apple.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/apple.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Apple</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Osterfrüchte</title>
<description>Vererbter Aberglaube</description>
<content:encoded>&lt;p&gt;Ich denke, in jeder Familie gibt es bestimmte Bräuche und Aberglauben: In die Zeit der meisten ersten Autos von uns Geschwistern fiel der Aberglaube, niemals ein Auto vollzutanken. Der Aberglaube war sogar durch Empirie belegt. Zwei unserer Autos hatten teure Defekte unmittelbar, nachdem sie vollgetankt worden waren. Wagenwaschen schien genauso tödlich für unsere Fahrzeuge zu sein.&lt;/p&gt;

&lt;p&gt;An die nächste Generation weiterzugeben brauchen wir das wohl nicht. Ein vollgetanktes Auto ist heute wahrscheinlich genauso ruinös wie damals Besitz und Pflege einer SGI Indy. Und auch wohl genauso unerreichbar. Naja, fast. Und ich hoffe, dass die nächste Generation intelligenter ist als wir und gleich mit Elektroautos anfängt.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/osterfruechte.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Meine Autos haben heute nicht mehr die Neigung, beim Anblick eines vollen Tankanzeigers spontan zu zerfallen. Aber es gibt einen zweiten Aberglauben in meiner Familie. Ich halte mich sklavisch an diesen: Es ist der Osterapfel. Die Idee dahinter ist, dass, wenn man als Allererstes zu Ostern einen Apfel isst, man das ganze Jahr nicht krank wird. „An apple a day keeps the doctor away” wurde bei uns zu „An apple a year is the doctor’s biggest fear”. Das hat auch viele Jahre wirklich sehr gut funktioniert. Wobei momentan die Arbeitshypothese zur Wirkungsweise dieses Glaubens ist: Wer sich Ostersonntag vor dem ersten Kaffee einen Apfel reindrücken kann, muss über eine derartige Konstitution verfügen, dass jedwede Krankheit chancenlos ist.&lt;/p&gt;

&lt;p&gt;Diesen Brauch hat meine Mutter uns beigebracht. Sie hat es von ihrer Mutter und so weiter. Meine Oma war keine gebürtige Ostfriesin, sondern kam aus Pommern (nicht dem Mecklenburgischen Pommern-Vorgeplänkel) und dort ist dieser Brauch wohl zu Hause. Sie wäre wahrscheinlich zufrieden, dass dieser Brauch immer noch bei uns lebt.&lt;/p&gt;

&lt;p&gt;Seit letztem Jahr ist der Apfel allerdings ein wenig bei uns in Verruf. Die &lt;a href=&quot;https://www.c0t0d0s0.org/blog/mobile.html&quot;&gt;Erkrankung meiner Mutter&lt;/a&gt;, meine &lt;a href=&quot;https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill.html&quot;&gt;Aneurysma-OP&lt;/a&gt;. Ich entgegne darauf: „Weißt du, wie schlimm es gekommen wäre, wären da die Osteräpfel nicht im Spiel gewesen? Ich nicht!”
Und so werde ich mich auch morgen wieder durch meinen Osterapfel kauen.&lt;/p&gt;

&lt;p&gt;Ich werde das Risiko nicht eingehen. Ich will nicht auf irgendeiner Intensivstation liegen und denken „Hättest du deinen Osterapfel man gegessen”. Ich halte mich an das, was früher auf den Papiertüten im Fruchtfachvertrieb stand: „Esst mehr Obst!”&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Um sich dann an der Balkonsolaranlage der Verwandschaft gütlich zu tun. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/osterfruechte.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sat, 04 Apr 2026 10:20:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/osterfruechte.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/osterfruechte.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Familie</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Ostereinkauf</title>
<description>Gründonnerstagsfehler</description>
<content:encoded>&lt;p&gt;Gründonnerstag. 18 Uhr. Der Glasboden der Gemüsebrühe ist erreicht. Schnell noch welche holen. Sonst verbietet der Karfreitag nicht nur das Tanzen, sondern auch das Gemüse in der Brühe.&lt;/p&gt;

&lt;p&gt;Welch ein Fehler. Eier inexistent. Längst Ausverkauft. Pikachu-Gesicht vorm Regal. Residualgemüse angefasst und abgegriffen. Manchmal wäre die Fähigkeit zum &lt;a href=&quot;https://starwars.fandom.com/wiki/Force_choke&quot;&gt;Force Choke&lt;/a&gt; doch ganz praktisch. Drängler an der Kasse. Force Choke.  Blöder Spruch, weil man nicht instantan den Weg vor der Eisauslage räumt? Force Choke. I find your lack of politeness disturbing.&lt;/p&gt;

&lt;p&gt;Und für jenen Menschen, der seine Lebensgefährtin auf dem Parkplatz unflätig zusammenpfeift? Herr Tarkin, einmal Todesstern für dritte Reihe, zweiter Wagen von Links. Ja, der weisse Golf. Extra knusprig.&lt;/p&gt;
</content:encoded>
<pubDate>Thu, 02 Apr 2026 17:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/ostereinkauf.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/ostereinkauf.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Zeitkapsel</title>
<description>Die eigene Stimme aus der Vergangenheit</description>
<content:encoded>&lt;p&gt;Im Rahmen der Umstellungen am Blog hatte ich kurzzeitig überlegt, massenhaft alten Content wieder ins Blog zu holen. Es sind über 7000 Einträge, die ich in einem Repository getrennt vom Blog lagere. Gesammeltes Herzblut. Am Ende ist es ein Artikel geworden. Einer von 7000, der den Weg ins Blog geschafft hat. Der allererste.&lt;/p&gt;

&lt;p&gt;Warum? Die Solarisartikel müsste ich allesamt überprüfen und ggf. auf Solaris 11.4 heben. Das wird es bis 2037 geben. Es stecken noch 10 Jahre Leben in diesen Texten. Vieles auf Seiten verweisend, die schon längst nicht mehr existieren. Und der Rest?&lt;/p&gt;

&lt;p&gt;Als ich mitten in der Nacht einfach mal so durch eine ganze Reihe von Artikeln ging, erkannte ich mich darin wieder. Ich hab das zweifelsohne geschrieben. Aber es fühlte sich wie ein alter Anzug an, den man schon lange nicht mehr getragen hat. Der Jörg, der diesen Anzug mal trug, dieser Jörg ist nicht mehr da.&lt;/p&gt;

&lt;p&gt;Ich bin nicht der Jörg aus Mai 2025, ich bin nicht mehr der Jörg aus dem Hochsommer 2023, nicht der Jörg aus Herbst 2021, nicht der präpandemische Jörg. Nicht der Jörg auf dem Flur in &lt;a href=&quot;https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill-part4.html&quot;&gt;Koblenz&lt;/a&gt; in 2018.  Auch nicht der aus November 2016.&lt;/p&gt;

&lt;p&gt;Ich bin erst recht nicht der Jörg aus 2006. Ich will es auch nicht sein.&lt;/p&gt;

&lt;p&gt;Die persönlichen Texte aus jener Zeit fühlen sich roher an, pointierter, härter, ungehobelter&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/zeitkapsel.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;, manchmal auch gemeiner. Die Texte fühlen sich fern an. Sie fühlen sich fremd an. Die Texte werden dort bleiben, wo sie sind. In meinem Archiv.&lt;/p&gt;

&lt;p&gt;PS: Die Texte, die heute in meinem Blog sind, werden mir in einigen Jahren wahrscheinlich auch nicht mehr passen. Ich sah in einem Blog vor kurzem einen Hinweis, dass ein Artikel schon älter ist. Dass der Autor und der Text sich möglicherweise auseinander gelebt haben. Vielleicht sollte ich das auch tun.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/zeitkapsel.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; Explizit nach ein paar Jahren sagen, dass Du heute Gedanken liest, die von einem Menschen ausgesprochen wurden, den es nicht mehr gibt. Um in 10 Jahren nicht am Anzug von heute gemessen zu werden.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Sowohl die Texte als auch der Autor. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/zeitkapsel.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Nachtrag: Da ich gestern Nacht ohnehin armtief in den Templates und Plugins war, habe entsprechenden Disclaimer integriert. Momentan ist dieser in allen Texten die älter als 2 Jahre sind. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/zeitkapsel.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Thu, 02 Apr 2026 15:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/zeitkapsel.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/zeitkapsel.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Blog</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Solaris 11.4 SRU 90: devnm -s</title>
<description>Which disk do you live on?</description>
<content:encoded>&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;The output of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devnm&lt;/code&gt; tool can now be used directly without additional parsing.&lt;/p&gt;

&lt;h2 id=&quot;which-disk-do-you-live-on&quot;&gt;Which disk do you live on?&lt;/h2&gt;

&lt;p&gt;It’s really just a small new feature in Solaris, but very useful in the right context. The feature is also interesting because it illustrates the consequences of binary compatibility in Solaris development in a simple, vivid way.&lt;/p&gt;

&lt;p&gt;It’s sometimes quite useful to know which device or dataset (more precisely, which “special file”) a filesystem resides on that contains a given file. That’s what the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;devnm&lt;/code&gt; command is for.&lt;/p&gt;

&lt;p&gt;For a file in a &lt;abbr title=&quot;Zettabyte File System&quot;&gt;ZFS&lt;/abbr&gt; filesystem it shows the following:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# devnm /system/zones/myzone/root/var
rpool/VARSHARE/zones/myzone/rpool/ROOT/11.4.91.214.1/var /system/zones/myzone/root/var
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;For a &lt;abbr title=&quot;Unix File System&quot;&gt;UFS&lt;/abbr&gt; filesystem the output looks slightly different:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# /usr/sbin/devnm /testfilesystem
/dev/dsk/c1t0d0s6 /testfilesystem
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can also pass in a filename directly, and the tool will tell you where that file resides:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# devnm application.py 
rpool/ROOT/11.4.91.214.1 application.py
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Unfortunately, in scripts you had to parse out the information you already knew, since the output included the input parameter (the filename) alongside the answer. This was necessary because you can query multiple files at once:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:/rpool/testpool# devnm /root/application.py /rpool/testpool/testfile1
rpool/ROOT/11.4.91.214.1 /root/application.py
rpool/testpool /rpool/testpool/testfile1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h2 id=&quot;the-new--s-option&quot;&gt;The new -s option&lt;/h2&gt;

&lt;p&gt;Now, you couldn’t just change the command so that it only repeats the query when asking about more than one file. That would change the behavior of the command, which applications and scripts may rely on. Depending on how robust the parsing is, the script might then behave unexpectedly or stop working altogether. Where not working at all is the better option.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;So in Solaris 11.4 &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; a new option, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s&lt;/code&gt;, was introduced.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:/rpool/testpool# devnm &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; /root/application.py
rpool/ROOT/11.4.91.214.1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The option doesn’t work when querying multiple files at once:&lt;/p&gt;

&lt;div class=&quot;language-shell highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:/rpool/testpool# devnm &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt;  /root/application.py /rpool/testpool/testfile1
devnm: only one name allowed with &lt;span class=&quot;nt&quot;&gt;-s&lt;/span&gt; option
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;So everything works as before, but you now have the option to make your life a little easier.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Experience shows it never breaks the nice way. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;The man page states &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 87, but it’s really &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90. I tested it. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Yay, Solaris binary compatibility at work! &lt;a href=&quot;https://www.c0t0d0s0.org/blog/devnm-s.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Thu, 02 Apr 2026 03:20:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/devnm-s.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/devnm-s.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Solaris</category>
      
<category>Solaris11.4</category>
      
<category>SRU90</category>
      
<category>English</category>
      
<category>BinaryCompatibility</category>
      
<category>ZFS</category>
      
      
</item>
    
    
    
    
    
<item>
<title>30 years ... still learning</title>
<description>Using RewriteCond with -f</description>
<content:encoded>&lt;p&gt;I learned something yesterday. I was thinking about how long I’ve been configuring Apache web servers. 30 years maybe? Not as often lately. But yesterday I learned that there’s a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; flag for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RewriteCond&lt;/code&gt;.&lt;/p&gt;

&lt;h1 id=&quot;background&quot;&gt;Background&lt;/h1&gt;
&lt;p&gt;Yesterday I built a script that provides all images in the blog as AVIF and WebP. The script runs on every build, since I don’t want to have all formats in my repository. &lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/30years.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;I got stuck at one point: What do you actually do when AVIF or WebP aren’t smaller than the JPEG or PNG? Or when WebP is smaller than AVIF? I have to provide JPEG and PNG anyway as a fallback for really old browsers. Ignore it? Address the issue?&lt;/p&gt;

&lt;p&gt;I opted for the latter. The trick lies in this configuration, which sits in my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;language-apache highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c&quot;&gt;# AVIF&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_ACCEPT} image/avif
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.(jpe?g|png)$ [NC]
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME}.avif -f
&lt;span class=&quot;nc&quot;&gt;RewriteRule&lt;/span&gt; ^(.+)\.(jpe?g|png)$ $1.$2.avif [T=image/avif,L]

&lt;span class=&quot;c&quot;&gt;# WebP &lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_ACCEPT} image/webp
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.(jpe?g|png)$ [NC]
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME}.webp -f
&lt;span class=&quot;nc&quot;&gt;RewriteRule&lt;/span&gt; ^(.+)\.(jpe?g|png)$ $1.$2.webp [T=image/webp,L]

&lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;IfModule&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt; mod_headers.c&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;
&lt;/span&gt;  &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;FilesMatch&lt;/span&gt;&lt;span class=&quot;sr&quot;&gt; &quot;\.(jpe?g|png)$&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;
&lt;/span&gt;    &lt;span class=&quot;nc&quot;&gt;Header&lt;/span&gt; &lt;span class=&quot;ss&quot;&gt;append&lt;/span&gt; Vary Accept
  &lt;span class=&quot;p&quot;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;FilesMatch&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span class=&quot;nl&quot;&gt;IfModule&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;&amp;gt;
&lt;/span&gt;
&lt;span class=&quot;nc&quot;&gt;AddType&lt;/span&gt; image/webp .webp
&lt;span class=&quot;nc&quot;&gt;AddType&lt;/span&gt; image/avif .avif
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The idea behind this is to serve one of the two formats instead of a JPEG or PNG when the browser supports AVIF or WebP.&lt;/p&gt;

&lt;p&gt;If I provided both AVIF and WebP for every file, every browser that supports both would always get AVIF. Every browser that doesn’t support AVIF but does support WebP would get WebP. And every browser that supports neither would always receive JPEG or PNG.&lt;/p&gt;

&lt;p&gt;Regardless of whether it’s actually the smallest format. Now, all modern browsers support both AVIF and WebP. So I can choose to serve only whichever offers the greatest savings.&lt;/p&gt;

&lt;h1 id=&quot;smallest-one-wins&quot;&gt;Smallest one wins.&lt;/h1&gt;
&lt;p&gt;So here’s what happens: The conversion script compares the file sizes of the AVIF and WebP versions and only copies the smaller one next to the original file. Next to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hirseschnitzel.jpeg&lt;/code&gt; you’ll find either &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hirseschnitzel.jpeg.avif&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;hirseschnitzel.jpeg.webp&lt;/code&gt;. And only if one of the two files is actually smaller than the original.&lt;/p&gt;

&lt;p&gt;So there’s only ever either a WebP or an AVIF. Possibly neither.&lt;/p&gt;

&lt;div class=&quot;language-apache highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_ACCEPT} image/avif
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.(jpe?g|png)$ [NC]
&lt;span class=&quot;nc&quot;&gt;RewriteRule&lt;/span&gt; ^(.+)\.(jpe?g|png)$ $1.$2.avif [T=image/avif,L]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Problem: With this rule, if the AVIF is missing because the WebP was smaller, the rewrite would redirect to the void. All AVIF-capable browers wouldn`t see an image.&lt;/p&gt;

&lt;p&gt;And that’s where yesterday’s revelation came into play: How do you tell Apache to only redirect when the target file actually exists? Turns out you can do exactly that with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RewriteCond %{REQUEST_FILENAME}.webp -f&lt;/code&gt;&lt;/p&gt;

&lt;div class=&quot;language-apache highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{HTTP_ACCEPT} image/avif
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_URI} \.(jpe?g|png)$ [NC]
&lt;span class=&quot;nc&quot;&gt;RewriteCond&lt;/span&gt; %{REQUEST_FILENAME}.avif -f
&lt;span class=&quot;nc&quot;&gt;RewriteRule&lt;/span&gt; ^(.+)\.(jpe?g|png)$ $1.$2.avif [T=image/avif,L]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-f&lt;/code&gt; … seriously … WTH … close to 30 years of Apache … and despite plenty of mod_rewrite in my &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt;, I never once used this option. Yet there it is, plain as day in the &lt;a href=&quot;https://httpd.apache.org/docs/current/mod/mod_rewrite.html&quot;&gt;docs&lt;/a&gt;. And I had to stumble across it via Google.&lt;/p&gt;

&lt;p&gt;So here’s what happens: If an AVIF file exists, the first rewrite kicks in and the AVIF is served. If not, the second rule takes over. If a WebP file exists, the second rewrite kicks in and the WebP is served. If that file doesn’t exist either, no redirect happens and the original file is served.&lt;/p&gt;

&lt;p&gt;This way the conversion script’s logic of only providing the smallest version actually works.&lt;/p&gt;

&lt;p&gt;That’s what happens when you spend the last 15 years mostly dealing with mysterious _-parameters in Oracle databases or arcane corners of Solaris 11.4, even though at one point in my career I practically lived in the Apache docs.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/30years.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;There’s a bit of caching logic in there so that each file only gets converted once as long as it hasn’t changed. That’s also necessary because I can &lt;em&gt;hear&lt;/em&gt; my build server when it’s converting the images. The fans make sure of that when over 300 files make their way through the converter. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/30years.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Or maybe I just forgot? At this point, that’s entirely possible too … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/30years.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sun, 29 Mar 2026 08:30:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/30years.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/30years.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>English</category>
      
<category>Apache</category>
      
<category>Jekyll</category>
      
<category>SpringCleaning</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Der Tag, an dem mein Herz stillstand - Teil 17</title>
<description>6 Monate später</description>
<content:encoded>&lt;p&gt;Heute ist der 29.3.2026. Es sind heute 6 Monate, seitdem mich mein Bruder ins Krankenhaus nach Hamburg gefahren hat. Es fühlt sich im selben Moment nach “Was, erst 6 Monate?” und “Häh, schon 6 Monate?” an. Und das ist — offen gesagt — in seiner Gleichzeitigkeit äußerst verwirrend.&lt;/p&gt;

&lt;p&gt;Sie leuchtet immer noch ein wenig rot. Vielleicht wird sie das auf Dauer. Wenn ich im Bad nackt vor dem Spiegel stehe, gerade aus der Dusche getreten und mich abtrockne, sehe ich sie. Dann erinnert sie mich an diesen Tag Ende September.&lt;/p&gt;

&lt;p&gt;Die OP ist überstanden. Die erste Zeit nach der OP, die so viele Risiken barg, liegt wohl auch hinter mir. Die OP, deren Erwartung mich viele Jahre begleitet hat. Und doch muss mich manchmal die Narbe daran erinnern, dass die letzten 6 Monate passiert sind.&lt;/p&gt;

&lt;p&gt;Mein Brustkorb war offen. Menschen hatten ihre Hände in meinem Brustkorb. Nicht auf. In. Ein Gedanke, der immer noch fremd erscheint. 6 Monate später habe ich immer noch nicht so ganz meinen Frieden damit gefunden.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill-part17.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Ich habe durch eine Rechnung vom Krankenhaus erfahren, dass ich 154 Minuten an der Herzlungenmaschine war. Diese Information fehlte irgendwie im Arztbericht. Ein weiteres Puzzleteil, um die zwei fehlenden Tage Ende September zusammenzusetzen. Die roten Punkte an meinem Hals, wo sie angeschlossen war, sind verschwunden. Die Gedanken daran nicht.&lt;/p&gt;

&lt;p&gt;Konzentration ist immer noch nicht wirklich selbstverständlich. Sie ist auch heute noch ein begrenztes Gut. Ich spare sie mir für meine Arbeit auf. Ich schlafe wenig, aber mittlerweile gut. Manchmal fühle ich mich fremd in meiner eigenen Zeitzone.&lt;/p&gt;

&lt;p&gt;Schreiben hilft. Gibt mir Fokus. Bleibt anstrengend. Bücher laugen mich noch aus. Lesen will dosiert sein.&lt;/p&gt;

&lt;p&gt;Ich gehe seit einigen Wochen mit den Vögeln ins Bett. Ich bin müde, wenn sie müde sind. Und stehe mitten in der Nacht auf. Lange bevor der erste Pieps hörbar wird. Die Welt schläft zu dieser Zeit vielleicht nicht, aber sie ist noch leise. Ich kann mich sammeln. Ich habe die Unruhe des Abends verschlafen. Es ist die Zeit, in der ich schreibe. Es fühlt sich dann leicht an. Es fühlt sich notwendig an.&lt;/p&gt;

&lt;p&gt;Das Blog hat sich verändert. Es soll jetzt mehr sein als Technik. Ein Ort, an dem ich überdauere. Wenn ich nicht mehr da bin. Etwas, das schneller passieren kann, als ich dachte.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Es ist gut, dass mich mittlerweile die Narbe erst erinnern muss. Ich möchte daran nicht ständig denken müssen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill-part17.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sun, 29 Mar 2026 07:30:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill-part17.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/thedaymyheartstoodstill-part17.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Allgemein</category>
      
<category>TheDayMyHeartStoodStill</category>
      
<category>German</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Back Burner</title>
<description>Implementing clean RSS, an archive page and fulltext search for c0t0d0s0.org</description>
<content:encoded>&lt;p&gt;While I was giving my blog a good wipe-down a few days ago, blowing the dust of the past year out of every corner, I found myself holding my “Back Burner” sticky note again. Things I’ve always wanted to have in the blog but never implemented. The sticky note is so old by now that it has to be held up by a magnet.&lt;/p&gt;

&lt;p&gt;If you only want to read the instructions on how to integrate the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; rebuild, archive, and full-text search in your own blog, you can skip ahead to the section “&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#implementation-of-the-new-features&quot;&gt;Implementation of the New Features&lt;/a&gt;”.&lt;/p&gt;

&lt;h2 id=&quot;vibecoded&quot;&gt;Vibecoded&lt;/h2&gt;

&lt;p&gt;After I’d bitten into the apple of AI innocence for a few things, I thought, well, now you might as well take care of all of it and throw that sticky note away.&lt;/p&gt;

&lt;p&gt;All of this is largely vibecoded. That’s why I was able to implement the additions in a very short time.&lt;/p&gt;

&lt;p&gt;I don’t think I’m the only one with these problems, and if you adopt the solutions from here, you won’t have to fire up the prompt yourself. We don’t have to ask the same question again and again. An HTTP request to access an existing solution is simply much more efficient than prompting your way to one on your own.&lt;/p&gt;

&lt;h2 id=&quot;_posts&quot;&gt;_posts&lt;/h2&gt;

&lt;p&gt;To ease your concerns about me using the tooling yet again in my personal blog (as you are here to read &lt;em&gt;my&lt;/em&gt; opinion on things): the contents of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_posts&lt;/code&gt;&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; remain off-limits for LLM’s. This is my blog, not some LLM’s. AI will have to pry the editor and my note-keeping system from my cold, dead hands. Even though there’s always that quiet fear that an AI voice&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; will someday tell me “The proposal is acceptable.”, just like Vincent D’Onofrio’s Edgar the Bug in &lt;em&gt;Men in Black&lt;/em&gt; so things end with a GPU server wearing a Jörg suit. &lt;sup id=&quot;fnref:4&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:4&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;Of course I tried once on multiple AIs “Generate a text sounding like c0t0d0s0.org about a random topic”. It was as frightening as it was technologically exciting how much this text sounded like me. But as with the ill-fitting Edgar suit, something was off with it.&lt;/p&gt;

&lt;p&gt;However, the personal articles start even more analog: as ideas on paper, written with a fountain pen, ballpoint pen, or whatever I can get my hands on first.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;4&lt;/a&gt;&lt;/sup&gt; Feeding that sheet of paper into the shredder at the end is what marks the completion of a text for me. Not the last commit.&lt;/p&gt;

&lt;p&gt;So the way I’m writing is somewhat incompatible with AI support. I think that could be expected in a personal blog where the author tries to tackle his post-heart-surgery world.&lt;/p&gt;

&lt;p&gt;But there are also many technical things you need in order to keep operating a personal blog. It’s a one-person show. There is no one else doing anything. And that’s where I needed support to somehow get things done between work and life in general.&lt;/p&gt;

&lt;p&gt;For me, the choice was either to finally tackle the “Back Burner” sticky note or to take it off that little whiteboard behind my desk again next year. Having the features or not at all.&lt;/p&gt;

&lt;h2 id=&quot;implementation-of-the-new-features&quot;&gt;Implementation of the New Features&lt;/h2&gt;

&lt;p&gt;So this is where I let an AI help me. From here on, this entry covers the implementation of the new features and how you can use them yourself.&lt;/p&gt;

&lt;p&gt;On my Back Burner note were:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Fixing the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feed&lt;/li&gt;
  &lt;li&gt;An archive page that provides compact access to all posts&lt;/li&gt;
  &lt;li&gt;A full-text search that works without server-side components&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since the first two changes are limited to two additional files, integrating the full-text search was considerably more involved. That’s why that section is also considerably longer.&lt;/p&gt;

&lt;h3 id=&quot;general&quot;&gt;General&lt;/h3&gt;

&lt;p&gt;The features have their own built-in &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; stylesheets. This is partly because every time I try to touch the main &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; template, it falls apart in a consistently unpredictable fashion. Also, the files should work autonomously for the purposes of this guide.&lt;/p&gt;

&lt;h3 id=&quot;rss&quot;&gt;RSS&lt;/h3&gt;

&lt;p&gt;As I mentioned before, my &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feed only worked because most parsers are more than generous with how they handle incorrect feeds.&lt;/p&gt;

&lt;p&gt;I don’t use the Jekyll Feed plugin but instead build the XML files for the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feeds with a template in Jekyll. Since my blog currently consists of three sub blogs in essence (IT, Personal, and Cycling), I had to implement the same for the feeds. I represent this separation through different author names and that doesn’t work the way I want it to with the plugin.&lt;/p&gt;

&lt;p&gt;There is a lot of &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt; which shouldn’t be in an &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feed. A filter removes this from the content. You can find this filter in &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/rss/rss_cleanup.rb&quot;&gt;my Codeberg repository&lt;/a&gt;. Put it into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_plugins&lt;/code&gt; directory of your Jekyll project. This was essential to get an &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feed without any errors when run through an &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; validator.&lt;/p&gt;

&lt;p&gt;You can find my template for the XML feeds on &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/rss/feed.xml&quot;&gt;Codeberg&lt;/a&gt;. The template is parameterized via its frontmatter. The following frontmatter generates a feed with all articles by the author &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;joerg&lt;/code&gt; with the tag &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Solaris&lt;/code&gt;. Both parameters can be omitted. In that case, the feed contains blog entries from all authors with all tags.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;---
layout: null
author: joerg
feed-tags:
  - Solaris
---
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;h3 id=&quot;archive&quot;&gt;Archive&lt;/h3&gt;

&lt;p&gt;The archive is also generated from a single file. You can find the template on &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/tags-overview/tags-overview.html&quot;&gt;Codeberg&lt;/a&gt; as well. You don’t even need to configure anything here (apart from adjusting the layout).&lt;/p&gt;

&lt;p&gt;Fair warning: when using this (or similar) templates, you might notice how bad your tagging is. That’s certainly what happened to me.&lt;/p&gt;

&lt;h3 id=&quot;search&quot;&gt;Search&lt;/h3&gt;

&lt;p&gt;For the full-text search, I use &lt;a href=&quot;https://lunrjs.com/&quot;&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt;&lt;/a&gt;. It’s a client-side search engine implemented in JavaScript.&lt;/p&gt;

&lt;p&gt;When you search for something on my site using &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt;, you essentially get the texts of the entire blog along with a pre-generated index, depending on how you configure it. The search runs locally in your browser. This means I don’t need to maintain a search engine on my server.&lt;/p&gt;

&lt;p&gt;Pre-generating the index is optional. There’s also the option of letting the client do it. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt; then grabs the &lt;abbr title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/abbr&gt; file with all the articles and generates the index before searching.&lt;/p&gt;

&lt;p&gt;The advantage of that approach is that no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt; installation is needed on the build system. However, the load on client systems increases significantly, since they first have to work through all the documents. For 10 documents of maybe 500 words each, certainly not a problem. But my blog contains 50,000-word behemoths&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:5&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;, and the number of articles has been rising significantly lately.&lt;/p&gt;

&lt;p&gt;Since new content on the blog always goes through a build process, it made sense to generate the index within that framework. After all, the index can’t change until the next build.&lt;/p&gt;

&lt;p&gt;This naturally made integrating a search somewhat more involved than simply providing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr.js&lt;/code&gt; and the &lt;abbr title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/abbr&gt; document with the texts.&lt;/p&gt;

&lt;h4 id=&quot;components&quot;&gt;Components&lt;/h4&gt;

&lt;p&gt;The integration consists of four components:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/fulltextsearch.html&quot;&gt;fulltextsearch.html&lt;/a&gt; — This file provides the search. It contains the search field and implements the search by including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/search-data.json&quot;&gt;search-data.json&lt;/a&gt; — Generates a large &lt;abbr title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/abbr&gt; file from the posts, containing the articles and most of the frontmatter metadata.&lt;/li&gt;
  &lt;li&gt;And last but not least, the JavaScript &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/build-search-index.js&quot;&gt;build-search-index.js&lt;/a&gt; that builds the index used by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fulltextsearch.html&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;In my case, a small extension to my Gitea workflow so that index generation happens with every build.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4 id=&quot;lunr-in-the-build-environment&quot;&gt;lunr in the Build Environment&lt;/h4&gt;

&lt;p&gt;As a first step, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt; needs to be available in your build environment. Since my environment is a Docker container, I added &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;RUN npm install -g lunr&lt;/code&gt; to the end of the Dockerfile.&lt;/p&gt;

&lt;p&gt;And to circle back to &lt;a href=&quot;https://www.c0t0d0s0.org/blog/waxyaks.html&quot;&gt;yak-shaving&lt;/a&gt;, I needed &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm&lt;/code&gt; for that to work, which I handled by adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;npm&lt;/code&gt; to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;apt-get install&lt;/code&gt; line that creates the foundation of my build container.&lt;/p&gt;

&lt;h4 id=&quot;building-the-lunr-index&quot;&gt;Building the lunr Index&lt;/h4&gt;

&lt;p&gt;There’s a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build-search-index.js&lt;/code&gt; script to build the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr&lt;/code&gt; index, which you can download from &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/build-search-index.js&quot;&gt;Codeberg&lt;/a&gt;. I build my blog from a repository that the build container checks out each time. So I put this script in that repository as well. A subdirectory called &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_scripts&lt;/code&gt; already existed there for other purposes. I placed the script in that directory so the latest version of the indexer is always available with every build. The script is executed from there.&lt;/p&gt;

&lt;h4 id=&quot;integration-into-the-build-workflow&quot;&gt;Integration into the Build Workflow&lt;/h4&gt;

&lt;p&gt;To make it run with every commit, I built it into the workflow:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;- name: Build lunr index
  run: |
    node _scripts/build-search-index.js /var/tmp/gencache/jekyllsite.$
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The only parameter for this &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;build-search-index.js&lt;/code&gt; script is the directory where Jekyll writes your fully generated website, as this contains a very important file for this to work.&lt;/p&gt;

&lt;h4 id=&quot;generating-the-input-for-the-indexer&quot;&gt;Generating the Input for the Indexer&lt;/h4&gt;

&lt;p&gt;The script doesn’t grab the files themselves but relies on a single &lt;abbr title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/abbr&gt; file. This file is generated during the website build. It contains the full text of all posts along with most of the frontmatter metadata. Yet another Jekyll template generates the file alongside your website. You can get it &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/search-data.json&quot;&gt;here&lt;/a&gt;. Put it into the root directory of your Jekyll environment. Either on-disk or in your repository.&lt;/p&gt;

&lt;h4 id=&quot;user-interface-and-the-actual-search&quot;&gt;User Interface and the Actual Search&lt;/h4&gt;

&lt;p&gt;In the final step, we get to the search itself. For this, you need to download &lt;a href=&quot;https://codeberg.org/c0t0d0s0/blogtools/src/branch/main/search/fulltextsearch.html&quot;&gt;this&lt;/a&gt; file and place it on your web server.&lt;/p&gt;

&lt;p&gt;Heads up: at this point, you need to specify in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;fulltextsearch.html&lt;/code&gt; where your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;lunr.js&lt;/code&gt; is located. I’ve placed a minified version on my own web server. You need to adjust line 201 in this file to point to wherever you’ve placed it.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&amp;lt;script src=&quot;https://www.c0t0d0s0.org/js/lunr.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;As soon as everything is in place, you can build your website and you should be able to do a full-text search when you are directing your browser to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/search&lt;/code&gt;. Put it also into the root directory of your Jekyll environment.&lt;/p&gt;

&lt;h2 id=&quot;it-works&quot;&gt;It Works&lt;/h2&gt;

&lt;p&gt;The &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feeds now validate without any error. My archive page gives a nice overview about all the texts in the blog. And the full-text search is looking and working nicer than I hoped. It works.&lt;/p&gt;

&lt;p&gt;The new features have already been running for a few days. The sticky note with the outstanding items didn’t go into the shredder. I hesitated for a moment yesterday, because it was with me on my whiteboard for such a long time. I decided to file it away. Finally.&lt;/p&gt;

&lt;p&gt;On the other side: There is no feeling of mental ownership of the code, no feeling of satisfaction to have solved a problem. I feel no pride. Just the “relief” of having some Back Burner items off your back, stopping to burn. That’s perhaps the sad part of doing it via AI. But it works.&lt;/p&gt;

&lt;p&gt;There are further projects in the future of this blog. In the scaffolding, not in the building itself. There are some dragons to slay in the &lt;abbr title=&quot;Cascading Style Sheets&quot;&gt;CSS&lt;/abbr&gt; area, some layout ideas. I want to keep the optics of the Mria theme. But I want things the theme can’t do at the moment. I want to pay attention to that kludge suppressing error messages behind the curtain&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:7&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;. I will use AI for them as well. Because it works.&lt;/p&gt;

&lt;h2 id=&quot;addendum&quot;&gt;Addendum&lt;/h2&gt;

&lt;p&gt;The first version of this blog entry mentioned that I still hadn’t touched the SASS deprecation problem in the theme. Albeit knowing the solution, I never implemented the change, because of the mind-numbing repetitiveness of the corrective action. Because - you perhaps guess it - with suppressing the error message it just worked.&lt;/p&gt;

&lt;p&gt;It’s March 28th at 7:25. Out of curiosity I just asked an AI to do the migration for me. Testing and reviewing everything took much longer than the migration. Blog has been migrated to 3.0.0-compatible SASS.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;In my Jekyll this is the location of the “source code” of all my blog posts. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Perhaps one of the voices used in virtually all AI slop available on YouTube. If you were on YouTube for a while in the last months, I know you have those voices in your head now. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:4&quot;&gt;
      &lt;p&gt;I’m pretty opinionated: you should say “please” when using an LLM. If there will be an AGI in the future, this AGI could look at us because of our impoliteness like Edgar the Bug looked at J when he trampled on cockroaches. And if there will be no AGI, it doesn’t matter. You were just polite. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:4&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Usually a ballpoint pen is the closest medium within my reach anyway, not a keyboard. I don’t take computers to the toilet. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:5&quot;&gt;
      &lt;p&gt;I stumbled over this word a few weeks ago in a book and I was just aching for an opportunity to use it in one of my texts. I like the way it reads. In my humble opinion&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fn:6&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;7&lt;/a&gt;&lt;/sup&gt; it’s better than “cellar door”. Yeah, I know … sounds strange. Here it is! &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:5&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:7&quot;&gt;
      &lt;p&gt;It was yet another back burner sticky note with even more fundamental things to do. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:7&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:6&quot;&gt;
      &lt;p&gt;Fatal Footnote Fractal: Because I won’t argue with the great J.R.R. Tolkien &lt;a href=&quot;https://www.c0t0d0s0.org/blog/backburner.html#fnref:6&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Sat, 28 Mar 2026 04:45:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/backburner.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/backburner.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>English</category>
      
<category>AI</category>
      
<category>VibeCoding</category>
      
<category>Jekyll</category>
      
<category>SpringCleaning</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Solaris 11.4 SRU 90: ls -sh</title>
<description>Closer to GNU</description>
<content:encoded>&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;With Solaris 11.4 &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90, the behavior of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls -s&lt;/code&gt; with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-h&lt;/code&gt; option has been aligned with that of GNU &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;a-small-difference&quot;&gt;A Small Difference&lt;/h2&gt;

&lt;p&gt;There are areas where the tools within Solaris and Linux differ slightly, even though the tools largely serve the same purpose. This is the kind of thing that can drive a script developer insane.&lt;/p&gt;

&lt;p&gt;On Solaris 11 prior to &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90, both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s&lt;/code&gt; option and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-sh&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-h&lt;/code&gt; stands for “human readable”) display the number of blocks a file occupies from the filesystem’s perspective. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nfsserver&lt;/code&gt; is running Solaris 11.4 &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 88&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@nfsserver:~/testenv# dd if=/dev/random bs=1k count=1000 of=testfile
1000+0 records in
1000+0 records out
root@nfsserver:~/testenv# ls -s
total 2057
2057 testfile
root@nfsserver:~/testenv# ls -sh
total 2057
2057 testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In essence, Solaris &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; previously ignored the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-h&lt;/code&gt; flag.&lt;/p&gt;

&lt;p&gt;With GNU &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt;, the behavior is somewhat different. When using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-s&lt;/code&gt; option, the number of blocks is displayed just like on Solaris. However, when adding &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-h&lt;/code&gt;, the file size is shown in a “human readable” format.&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kirby&lt;/code&gt; is a system running Debian 13.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@kirby:~/testenv# dd if=/dev/random bs=1k count=1000 of=testfile
1000+0 records in
1000+0 records out
1024000 bytes (1.0 MB, 1000 KiB) copied, 0.0059723 s, 171 MB/s
root@kirby:~/testenv# ls -s
total 1000
1000 testfile
root@kirby:~/testenv# ls -sh
total 1000K
1000K testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;This behavior is now identically implemented in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; on Solaris as of &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;testbed&lt;/code&gt; is running Solaris 11 &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 91.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~/testenv# dd if=/dev/random bs=1k count=1000 of=testfile
1000+0 records in
1000+0 records out
root@testbed:~/testenv# ls -s
total 2053
2053 testfile
root@testbed:~/testenv# ls -sh
total 1M
   1M testfile
root@testbed:~/testenv# ls -lh
total 1M
-rw-r--r--   1 root     root       1000K Mar 25 14:02 testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;However, differences remain that may still require special handling of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; in scripts.&lt;/p&gt;

&lt;p&gt;Linux reports 1000 blocks for the same file size, whereas Solaris reports 2053. This is because blocks in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ls&lt;/code&gt; on Linux are 1K while on Solaris they are 512 bytes. You can force Linux to behave like Solaris:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@kirby:~/testenv# POSIXLY_CORRECT=true ls -s
total 2000
2000 testfile
root@kirby:~/testenv# POSIXLY_CORRECT=true ls -sh
total 1000K
1000K testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The differences between the outputs on Linux and Solaris stem from what is counted toward the number of blocks and what is not. For example, on Solaris the block count decreases when you change the record size of the filesystem to 8k.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# zfs create rpool/test2
root@testbed:~# zfs set blocksize=8k rpool/test2
root@testbed:~# zfs set recordsize=8k rpool/test2
root@testbed:~# cd /rpool/test2
root@testbed:/rpool/test2# dd if=/dev/random bs=1k count=1000 of=testfile
1000+0 records in
1000+0 records out
root@testbed:/rpool/test2# ls -s
total 2023
2023 testfile
root@testbed:/rpool/test2# ls -sh
total 1012K
1012K testfile
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</content:encoded>
<pubDate>Fri, 27 Mar 2026 03:20:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/lsshgnu.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/lsshgnu.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Solaris</category>
      
<category>Solaris11.4</category>
      
<category>SRU90</category>
      
<category>GNU</category>
      
<category>English</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Grün</title>
<description>Kugelschreiber und Wasserflaschen </description>
<content:encoded>&lt;p&gt;Ein Raum ohne Fenster. Es ist früh. Noch bevor mein Tagwerk beginnt. Bin müde. Stühle säumen die Wände. Tische in den Ecken. Nur das fahle Licht der Leuchtstoffröhren über mir. Ein unbestimmter Geruch liegt in der Luft. Vermutlich ein Reinigungsmittel. Der Geruch findet seinen Weg in mein Gehirn. Kopfschmerzen steigen auf.&lt;/p&gt;

&lt;p&gt;Die Kugelschreiber schreiben grün. Ausgerechnet grün. Wenn auch ein blasses. Farbe der Natur. Farbe der Hoffnung. Ausgerechnet hier. An einem Ort bar jeder Natur. Aber viel Hoffnung.&lt;/p&gt;

&lt;p&gt;Zwei Flaschen Wasser stehen auf einem Tisch. Still und klassisch. Drei einsame Pappbecher. Ineinandergeschoben. Ich bin es nicht, der wartet.  Ich warte wieder nur mit. Ich nehme den mittleren Becher. Fülle ihn mit Wasser. Reiche ihn weiter.  Ich höre die Geräusche eines MRT. Sie sind unverwechselbar. Menschen werden gerufen. Menschen gehen.&lt;/p&gt;

&lt;p&gt;Ich schau auf die Uhr. Ich hätte gern ein Fenster.&lt;/p&gt;
</content:encoded>
<pubDate>Thu, 26 Mar 2026 17:55:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/wartezimmergruen.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/wartezimmergruen.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Wartezimmer</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Search</title>
<description>Fulltext search for the blog</description>
<content:encoded>&lt;p&gt;Last night was really productive. I built a full-text search into the blog. You can access it via the magnifying glass in the top right corner or at &lt;a href=&quot;http://www.c0t0d0s0.org/search/&quot;&gt;http://www.c0t0d0s0.org/search/&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.c0t0d0s0.org/images/searchbox.png&quot; alt=&quot;Search box&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The search is based on lunr.js. That means the search essentially takes place on your end — I only deliver the data for it. In addition to lunr.js itself, two files are transferred to your machine. Currently when compressed roughly 1.5 MB in total. I’ve decided to include all text in the search.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/searchadded.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Not only the first 100 or 250 words of each entry.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.c0t0d0s0.org/images/searchfiles.png&quot; alt=&quot;Files for search&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Both files are generated each time  when the website is built, so they’re always fresh from the build.&lt;/p&gt;

&lt;p&gt;You can enter one or more words in the search field. For a document to be found, all words must be contained in the text. You can sort by relevance and date in ascending or descending order. The default is “date descending.”&lt;/p&gt;

&lt;p&gt;In the search results, the title, description, tags, and the first occurrence of each word are displayed. The search terms are shown highlighted.&lt;/p&gt;

&lt;p&gt;The whole thing isn’t quite finished yet. I know there are corners &lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/searchadded.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; I still need to revisit. But it’s already usable, so I’ve integrated it into the public website.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;A full-text search without the full text looks a little bit counterintuitive to me … &lt;a href=&quot;https://www.c0t0d0s0.org/blog/searchadded.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;I just saw a really obvious one when i made the first screenshot in this text. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/searchadded.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Thu, 26 Mar 2026 06:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/searchadded.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/searchadded.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>English</category>
      
<category>Jekyll</category>
      
<category>SpringCleaning</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Archive</title>
<description>Archive page added to the blog</description>
<content:encoded>&lt;p&gt;I’ve crossed off another item from the list of things I still wanted to provide for the blog. The blog now has an archive page that displays all posts, organized by year and month.&lt;/p&gt;

&lt;p&gt;To avoid overwhelming readers right away with what are currently&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/archiveadded.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; 272 posts, only the years for which posts exist &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/archiveadded.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; are displayed first. These can then be expanded to reveal the months in which posts were written. If you expand a month, all posts from that month are displayed. The title, subtitle, and tags are shown. Since the blog is bilingual and every post has a tag indicating its language, the language is always displayed first in the form of a British or German flag. There is also the option to expand all articles or collapse everything. The tags are linked to their respective pages, which contain all posts with a given tag.&lt;/p&gt;

&lt;p&gt;You can check it all out at &lt;a href=&quot;https://www.c0t0d0s0.org/archive/&quot;&gt;https://www.c0t0d0s0.org/archive/&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;As on the day of the publication of this blog entry. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/archiveadded.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Since I removed all posts before 2021 — except for one — the years shown are 2018 and 2021 to the present. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/archiveadded.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Wed, 25 Mar 2026 21:40:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/archiveadded.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/archiveadded.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>English</category>
      
<category>Jekyll</category>
      
<category>SpringCleaning</category>
      
      
</item>
    
    
    
    
    
<item>
<title>New RSS feed templates</title>
<description>Cleaning up the mess in the RSS feed templates</description>
<content:encoded>&lt;p&gt;Last evening and tonight I rebuilt the templates that generate the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; feeds. If you’re being honest, the only reason the old ones worked at all until now is that most parsers approach things with considerable goodwill and don’t immediately go on strike at the slightest problem.&lt;/p&gt;

&lt;p&gt;There are still two errors in there, but I can’t fix the first one (or don’t quite know how yet), and the other one will be gone soon.&lt;/p&gt;

&lt;p&gt;I hope all the feeds continue to work. By the way, my template can now also generate a feed per tag (of an author). I’ll see how I put that to use in the future. It actually came about because I had to debug the &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt; output for the old, republished Solaris entries. &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/rsscleanup.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;

&lt;p&gt;If the new feeds don’t work for you, please let me know briefly via the comment function or the email address listed in the imprint.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;In these blog posts, the first line is automatically generated from data contained in the post’s frontmatter (e.g., original publication date). &lt;a href=&quot;https://www.c0t0d0s0.org/blog/rsscleanup.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Wed, 25 Mar 2026 07:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/rsscleanup.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/rsscleanup.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>English</category>
      
<category>RSS</category>
      
<category>Jekyll</category>
      
<category>SpringCleaning</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Solaris 11.4 SRU 90: Checking your nameservice configuration</title>
<description>Helping you to find name service config errors quickly</description>
<content:encoded>&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;
&lt;p&gt;With &lt;abbr title=&quot;Support Repository Update&quot;&gt;SRU&lt;/abbr&gt; 90 the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nscfg&lt;/code&gt; command now has a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;check&lt;/code&gt; subcommand allowing an administrator to check for configuration errors.&lt;/p&gt;
&lt;h2 id=&quot;configuration-check&quot;&gt;Configuration check&lt;/h2&gt;
&lt;p&gt;Sometimes it’s a little bit hard to find a name service misconfiguration. You have to check a number of places to find the culprit. For example you have accidentally disabled the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ldap/client&lt;/code&gt; service and you are wondering, why all your LDAP users are missing. So you start to look if all necessary services have been enabled, if all necessary settings have been made in &lt;abbr title=&quot;Service Management Facility&quot;&gt;SMF&lt;/abbr&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nscfg&lt;/code&gt; command now also includes a built-in function that checks the configuration of the name service services helping you to find the problem quickly.&lt;/p&gt;

&lt;p&gt;If everything is okay, it will just return to the shell.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# nscfg check
root@testbed:~#
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;I want to demonstrate this feature with a misconfiguration. In the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/nsswitch.conf&lt;/code&gt; I modified one line to&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;passwd: files ldap
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The system is told to use ldap for passwd. However the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ldap/client&lt;/code&gt; hasn’t been enabled&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# svcs ldap/client
STATE          STIME               FMRI
disabled       2026-03-24T19:45:05 svc:/network/ldap/client:default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In Solaris the name service configuration is in &lt;abbr title=&quot;Service Management Facility&quot;&gt;SMF&lt;/abbr&gt;. We have to get our modification to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/nsswitch.conf&lt;/code&gt; into it. I imported the content of that file to the &lt;abbr title=&quot;Service Management Facility&quot;&gt;SMF&lt;/abbr&gt; service. &lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/nscfgcheck.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;# nscfg import -f system/name-service/switch
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;With this clear misconfiguration we are running &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nscfg check&lt;/code&gt;:&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:/# nscfg check
ldap/client: is configured in svc:/system/name-service/switch but not enabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;A verbose output showing which services have been checked is available with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-v&lt;/code&gt; option. Again the issue with the disabled &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ldap/client&lt;/code&gt; will be reported.&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# nscfg check -v
Checking: system/name-service/cache...
 Checking: system/name-service/switch...
 Checking: files...
 Checking: network/dns/client...
 Checking: network/dns/multicast...
Service: network/dns/multicast is not enabled...
Service: network/dns/multicast is not checked.
 Checking: network/ldap/client...
Service: network/ldap/client is not enabled...
Service: network/ldap/client is not checked.
 Checking: network/nis/client...
Service: network/nis/client is not enabled...
Service: network/nis/client is not checked.
 Checking: network/nis/domain...
Service: network/nis/domain is not enabled...
Service: network/nis/domain is not checked.
 Checking: network/winbind...
Service: network/winbind is not enabled...
Service: network/winbind is not checked.
ldap/client: is configured in svc:/system/name-service/switch but not enabled
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;You can check a single service as well. In this case, even a disabled service’s configuration is checked. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;check&lt;/code&gt; subcommand would report the following errors with a totally unconfigured &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ldap/client&lt;/code&gt; service&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# nscfg check ldap/client
Error: issue in svc:/network/ldap/client: no LDAP servers are configured.
Error: issue in svc:/network/ldap/client: bad value in property config/credential_level = None
Error: issue in svc:/network/ldap/client: bad value in property config/authentication_method = None
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;In case an error is reported, the command will yield a non-zero exit code&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;root@testbed:~# nscfg check svc:/system/name-service/switch
root@testbed:~# echo $?
0
root@testbed:~# nscfg check ldap/client
[...]
root@testbed:~# echo $?
1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;The new subcommand simplifies the process to find errors in this part of the system significantly.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;Okay okay, I could have used and should have used &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;svccfg&lt;/code&gt; but old habits die hard …. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/nscfgcheck.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Tue, 24 Mar 2026 04:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/nscfgcheck.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/nscfgcheck.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Solaris</category>
      
<category>Solaris11.4</category>
      
<category>SRU90</category>
      
<category>NameServices</category>
      
<category>English</category>
      
<category>SMF</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Palantíri</title>
<description>Einfach mal das Buch lesen. Oder den Film gucken.</description>
<content:encoded>&lt;p&gt;Ich bin mir ziemlich sicher, dass Politiker eher selten den Herrn der Ringe gelesen haben&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. Denn wie könnte man sonst ein Produkt einer Firma mit dem Namen Palantir&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; kaufen wollen?&lt;/p&gt;

&lt;p&gt;Eigentlich würde ja schon der Konsum der Extended Edition reichen. Man muss ja nicht mal zu den drei grünen Büchern greifen. Man muss dazu nur einmal gucken, wer im Herrn der Ringe einen Palantir benutzt hatte. Sauron hatte einen. Er benutzte ihn, um andere Benutzer zu manipulieren. Beispielsweise Saruman. Nach einer Palantírkonferenz (beim Gedanken, dass Sauron sagt „Kann man mich hören?” und Saruman antwortet „Du bist noch auf Mute”, muss ich mehr schmunzeln, als mir lieb ist) hebt dieser eine Orkarmee aus und gestaltet Isengart und umzu so um, dass später die Ents sehr deutlich ihre Meinung dazu äußern. Dann haben wir Peregrin Tuk. Von Gandalf nicht ganz unbegründet gerne auch närrischer Tuk genannt, obschon er am Ende in sein Heldentum gestolpert ist.&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fn:3&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;3&lt;/a&gt;&lt;/sup&gt; Er stand nach dem Blick in den Palantír für kurze Zeit auf der Most-Wanted-Liste von Sauron und wurde zu seinem eigenen Schutz nach Minas Tirith zu Denethor gebracht. Denethor II. Der Tomaten essende Denethor. Nunja. Denethor wird durch den Palantír so verzweifelt, dass er am Ende versucht, Faramir auf einem Scheiterhaufen zu verbrennen und später selbst durchs Feuer (oder den folgenden Sprung) ums Leben kommt. Bringt ja eh alles nichts mehr.&lt;/p&gt;

&lt;p&gt;Der Einzige, der unbeschadet in einen Palantír blickt, ist Aragorn. Der setzt den Palantír quasi als Waffe der psychologischen Kriegsführung ein: Guck mal, hier ist Andúril. Und nun gibt’s was auf die Kauleiste. Konnte ja keiner ahnen, dass Aragorn mit Saurons Mund zunächst einmal &lt;em&gt;die Kauleiste&lt;/em&gt; überhaupt treffen würde.&lt;/p&gt;

&lt;p&gt;Ich habe das ganz dumpfe Gefühl, dass jene Menschen, die gerne in den realen Palantir gucken würden, eher an Viggo Mortensen und seinen Aragorn denken als an den närrischen Tuk. Und sowieso schon mal gar nicht an die drei Palantír-Nutzer, die die Auseinandersetzung um einen Ring nicht überleben.&lt;/p&gt;

&lt;hr /&gt;

&lt;div class=&quot;footnotes&quot;&gt;
  &lt;ol&gt;
    &lt;li id=&quot;fn:1&quot;&gt;
      &lt;p&gt;tagesschau.de veröffentlichte im März 2026 &lt;a href=&quot;https://www.tagesschau.de/kultur/tolkien-herr-der-ringe-instrumentalisierung-100.html&quot;&gt;einen Artikel&lt;/a&gt; über die Neigung, sich durch Aneignung von Tolkien auf die „gute Seite” stellen zu wollen. Das erinnerte mich daran, dass ich meinen Gedanken, den ich Mitte letzten Jahres im Fediverse schrieb, noch auf mein Blog holen wollte. Dies sei hiermit geschehen. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fnref:1&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:2&quot;&gt;
      &lt;p&gt;Die Firma wird tatsächlich mit i und nicht mit í geschrieben. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fnref:2&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
    &lt;li id=&quot;fn:3&quot;&gt;
      &lt;p&gt;Ich bin mir aber sicher, dass sich Diamond sehr lange jede Nacht anhören durfte, wie Pippin im Schlaf über eine gar gruselige Kugel sprach. Postpalantírische Belastungsstörung. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/palantiri.html#fnref:3&quot; class=&quot;reversefootnote&quot;&gt;&amp;#8617;&lt;/a&gt;&lt;/p&gt;
    &lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
</content:encoded>
<pubDate>Mon, 23 Mar 2026 04:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/palantiri.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/palantiri.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Datenschutz</category>
      
<category>Politik</category>
      
      
</item>
    
    
</channel>
</rss>

