<?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>Mon, 06 Apr 2026 12:00:50 +0000</lastBuildDate>
<image>
  <url>https://www.c0t0d0s0.org/favicon.svg</url>
  <title>c0t0d0s0.org</title>
  <link>https://www.c0t0d0s0.org/</link>
</image>
    
    
    
    
    
    
    
<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 das Obst 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 weitestgehend 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.&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 allerdings: „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 would 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>
    
    
    
    
    
<item>
<title>The internet is made for p...bots</title>
<description>Eine Woche c0t0d0s0.org</description>
<content:encoded>&lt;h2 id=&quot;tldr&quot;&gt;TL;DR&lt;/h2&gt;

&lt;p&gt;3,84 % … bloße 3,84 % der Requests auf das Blog sind möglicherweise Browser mit Menschen vor dem Monitor.&lt;/p&gt;

&lt;h2 id=&quot;logfile-analyse&quot;&gt;Logfile-Analyse&lt;/h2&gt;

&lt;p&gt;Ich schrieb ja im &lt;a href=&quot;https://www.c0t0d0s0.org/blog/bias.html&quot;&gt;„Thoughts: Bias”-Eintrag&lt;/a&gt;, dass ich Bots nicht blocke. Ich benutze auch keine Statistik-Tools, die Aussagen über die Leserschaft machen.&lt;/p&gt;

&lt;p&gt;Das bedeutet aber nicht, dass ich nicht zuweilen neugierig bin, und strato.de führt Logfiles, die ohnehin entstehen. Ehda-Statistiken. Diese sind anonymisiert. Für die Information, die mich interessiert, ist das ausreichend.&lt;/p&gt;

&lt;p&gt;Ich habe mal in die Logfiles geguckt, weil mich interessierte: Wie viele Menschen gucken eigentlich aufs Blog? So als Webseite. Nicht via Reader-App. Wie viele Requests sind von Bots?&lt;/p&gt;

&lt;p&gt;Ich habe also das Logfile meines Blogs genommen, die Shell und vi angeworfen und ein wenig analysiert. Ich habe dazu ein Logfile verwendet, das vom 15. bis zum 21. läuft.&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;% head -1 access_log_20260315-20260322 | cut -d &quot; &quot; -f 5,6
[15/Mar/2026:00:00:14 +0100]
% tail -1 access_log_20260315-20260322 | cut -d &quot; &quot; -f 5,6
[21/Mar/2026:23:59:37 +0100]
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Insgesamt hatte meine Webseite 120288 Requests, die in meinem Logfile gelandet sind.&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;% wc -l access_log_20260315-20260322 
 120288 access_log_20260315-20260322
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Ich ignoriere sämtliche Logeinträge in anderen Domains, die nur auf c0t0d0s0.org redirecten, da diese letztlich zu Zugriffen in der untersuchten Domain führen. Das sind auch noch mal um und bei 25000 Zugriffe.&lt;/p&gt;

&lt;p&gt;Zunächst filtere ich gegen eine Liste von bekannten Bots und Schrottanfragen aus. Matcht eine Zeile in dieser Liste, werden alle weiteren Requests von derselben Quelle ebenfalls ignoriert. Die Art und Weise, wie Strato die Logfiles anonymisiert, müsste den Beifang in Grenzen halten.&lt;/p&gt;

&lt;p&gt;Dieser Schritt erkennt bereits 13027 Quellen und unterdrückt 88265 Zeilen. Hier finden sich Perlen wie eine russische IP-Adresse, die jede Stunde meinen Bericht über die Herz-OP crawlt. Aber nur die ersten 10 Teile. Das verstehe, wer will. Auch ist die Zahl von Zugriffen auf Wordpress-Admin-Infrastruktur erstaunlich hoch. Vor 20 Jahren lief dieses Blog mal auf Wordpress. Danach auf S9Y und heute auf Jekyll. Leute, ihr könnt euch das sparen. Es gibt hier kein Wordpress mehr.&lt;/p&gt;

&lt;p&gt;Es sei auch angemerkt, dass ich hier die Zugriffe von mir nicht ausfiltere. Ich habe da jetzt mal was bei mir eingebaut, das das in Zukunft ermöglichen soll. Aber momentan sind sie noch drin.&lt;/p&gt;

&lt;p&gt;Danach filtere ich alle Quellen, die mindestens 3 &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-Seiten in 10 Sekunden abfragen. Das sollte einigermaßen zuverlässig verhindern, dass jemand fälschlicherweise als Bot erkannt wird. Ich gehe zudem davon aus, dass das ein Verhalten ist, das vor allen Dingen jene „Nutzer” an den Tag legen, die schon im ersten Schritt ausgefiltert worden sind. Daher erwischt dieser Filter relativ wenig Zugriffe. Es werden 39 Quellen erkannt, die zum Ausfiltern von weiteren 509 Requests führen.&lt;/p&gt;

&lt;p&gt;Insgesamt werden 19240 Zugriffe auf die &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt;-Feeds durchgeführt. Das sind im Grunde genommen auch Bot-Zugriffe, aber für eine Datei, die dafür gedacht ist, automatisch gelesen zu werden. Ich kenne nur relativ wenig Menschen, die Webseiten direkt im XML-Feed lesen. Bezeichnen wir die mal als „gute Bots”.&lt;/p&gt;

&lt;p&gt;Das heißt, nach Stufe 1 bis 3 verbleiben von 120288 noch 12274 Requests übrig, bei denen man im Entferntesten davon ausgehen kann, dass Menschen diese ausgeführt haben.&lt;/p&gt;

&lt;p&gt;Nun bestehen die Seiten nicht nur aus einer einzelnen Datei. Ich habe mal Mediendateien herausgetrennt (Bilder, Javascript, &lt;abbr title=&quot;JavaScript Object Notation&quot;&gt;JSON&lt;/abbr&gt; etc.). Das sind 4187 Zugriffe. Okay, ich bin jetzt bei 8087 (yay, numerischer Coprozessor) Zugriffen.&lt;/p&gt;

&lt;p&gt;Wenn ich dann alles, was die Filterung bis hierher überstanden hat, noch einmal hinsichtlich des Resultcodes des HTTP-Requests durchsiebe, fallen 3483 Requests weg, die keinen Resultcode von 200 haben.&lt;/p&gt;

&lt;h2 id=&quot;384-prozent&quot;&gt;3,84 Prozent&lt;/h2&gt;

&lt;p&gt;Am Ende schlagen dort 4614 Requests auf &lt;abbr title=&quot;HyperText Markup Language&quot;&gt;HTML&lt;/abbr&gt;-Seiten durch. Von 120288. Das sind 3,84 % Requests, die von einem Browser mit einem Menschen kommen könnten. Sicher ist das nicht.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://www.c0t0d0s0.org/images/filtered_v2.svg&quot; alt=&quot;Gefiltert&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Jetzt sei allerdings auch angemerkt, dass letztlich hinter vielen der Feed-Aufrufe auch Menschen stecken. Blogs werden üblicherweise nicht über die Webseite gelesen, sondern via &lt;abbr title=&quot;Really Simple Syndication&quot;&gt;RSS&lt;/abbr&gt;. Nehme ich alleine die in den User-Agent-Strings angezeigten Subscriber, stecken da circa 500 Menschen hinter. Feedburner liefert keine sinnvollen Statistiken mehr. Ich weiß nicht, wie viele Leute sich dahinter verbergen. Vor 2010 waren das bei Weitem die meisten. Keine Ahnung.&lt;/p&gt;

&lt;p&gt;Da das wiederkehrende Leser sind, ist mir diese Zahl ohnehin am wichtigsten.&lt;/p&gt;

&lt;p&gt;Was ich mit den Zahlen machen werde? Nichts. Aber meine Neugier hat eine Antwort. Wenn Du eine Schlussfolgerung haben möchtest: Vielleicht können wir uns darauf einigen, dass &lt;a href=&quot;https://www.youtube.com/watch?v=YRgNOyCnbqg&quot;&gt;knapp die Hälfte des Internets für Pornographie ist&lt;/a&gt;, knapp die andere Hälfte für Bots. Und die paar Prozent, die dann noch übrig bleiben: Da steckt alles andere drin. Und generative AI wird wahrscheinlich dafür sorgen, dass zukünftig die erstere Hälfte von Bots ist.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/statistics.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&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:1&quot;&gt;
      &lt;p&gt;Ich gehe davon aus, dass langfristig alle Schauspieler einen Karrierewechsel ins Auge fassen sollten. Sei es ernste Kunst, Unterhaltung oder Adult. Es ist davon auszugehen, das diese Entwicklung in keinem der drei Bereiche wirklich eine gute Idee ist. Und da spreche ich noch nicht mal von der Entwicklung, die durch Collien Fernandes in den der Situation angemessenen Fokus gekommen ist und dringend einer entsprechenden Strafbewehrung bedarf. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/statistics.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, 22 Mar 2026 08:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/statistics.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/statistics.html</guid>
      
<dc:creator>c0t0d0s0</dc:creator>
      
      
<category>Blog</category>
      
<category>German</category>
      
<category>Internet</category>
      
<category>Statistics</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Herr Norris</title>
<description>Vom völligen Fehlen von Ironie</description>
<content:encoded>&lt;p&gt;Nun ist er also gestorben. Herr Norris. Wie zu erwarten, rauschte eine Welle von Chuck-Norris-Witzen über uns weg. Ich habe mich auch eines solchen schuldig gemacht. Genauso war jene Welle von Kommentaren zu erwarten, die berechtigterweise anmerkten, dass Chuck Norris ein ziemlicher Unsympath war.&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/norris.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; Beides lässt nur eins außer Acht: Im Sinne des Memes war Chuck Norris längst nicht mehr Carlos Ray Norris. Chuck Norris war bereits eine absurde Abstraktion, auf die die Memes noch mal eine dicke Schicht Absurdität aufgetragen haben.&lt;/p&gt;

&lt;p&gt;Anders als andere Protagonisten des - völlig unironisch - im Jahrestakt die Welt rettenden 80er-Jahre-Kinos, wurde die Abstraktion nie gebrochen. Könnte man sich Norris als Turbo-Man in „Jingle All the Way” vorstellen? Als Gegenentwurf zu Danny de Vito in Twins? Oder als Polizist in Copland? Vielleicht sogar in „Stop! Or My Mom Will Shoot”&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/norris.html#fn:2&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;? Könnte man sich ihn im Doppelrippunterhemd barfuß vorstellen, der zweimal zu Weihnachten am falschen Ort war? Schwarzenegger und Stallone haben es geschafft, sich im Verlauf ihrer Karriere vom 80er-Jahre-Archetypen des unüberwindlichen Actionhelden zumindest zeitweise zu distanzieren. Willis war von Anfang an als Jedermann angelegt, der durch die Umstände in die Rolle des Retters gerät. Norris tat das nie. Er blieb absurd.&lt;/p&gt;

&lt;p&gt;Gerade deswegen funktionierten die Memes. Sie brauchten eine Projektionsfläche, der jedwede Ironie fehlte. Sie brauchten nicht den Menschen, der die Rolle des Chuck Norris gespielt hat. Jenen Menschen, der jetzt eben gestorben ist.&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;Man soll nicht schlecht über gerade verstorbene Menschen reden, aber bei seinen politischen Ansichten (und beim Kreationismus) ist bei mir endgültig Schluss (siehe &lt;a href=&quot;https://en.wikipedia.org/wiki/Chuck_Norris&quot;&gt;Wikipedia&lt;/a&gt;). Allerdings muss man auch im Hinterkopf halten, dass das, was uns in Europa völlig absurd erscheint, möglicherweise im politischen Spektrum der USA deutlich weniger randständig ist. Beispielsweise: Um die 35% aller Amerikaner glauben an Kreationismus. Etwa 29% aller Amerikaner lehnen gleichgeschlechtliche Ehen ab. Das legitimiert nicht die Positionen, setzt sie aber in einen gesellschaftlichen Kontext. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/norris.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;Was für ein ausnehmend schlechter Film …. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/norris.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, 21 Mar 2026 16:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/norris.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/norris.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Kultur</category>
      
<category>USA</category>
      
<category>Film</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Fundsache</title>
<description>Perlen neben der Dauerwerbesendung</description>
<content:encoded>&lt;p&gt;Ich mag YouTube. Nicht wegen des KI-Schunds, der einem an allen Ecken und Enden präsentiert wird. Nicht wegen Influencern, die praktisch nur durch den Produktionswert ihrer Videos von den Verkäufern im Teleshopping zu unterscheiden sind.&lt;/p&gt;

&lt;p&gt;Nö, weil man dort einfach mal einen tätowierten Typen findet, der sich barfuß zuhause an sein E-Piano setzt und eine &lt;a href=&quot;https://www.youtube.com/watch?v=a-qGm6gft40&quot;&gt;wirklich großartige Coverversion eines ebenso großartigen Songs&lt;/a&gt; spielt.&lt;/p&gt;
</content:encoded>
<pubDate>Fri, 20 Mar 2026 16:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/fundsache.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/fundsache.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Musik</category>
      
<category>Internet</category>
      
      
</item>
    
    
    
    
    
<item>
<title>Thoughts: Mixtape</title>
<description>Das Ungesagte auf 74 Minuten</description>
<content:encoded>&lt;p&gt;Irgendwo, in längst vergessenen Schachteln liegen vielleicht immer noch MixCD, die ich zusammengestellt habe. Die ich an Menschen weitergegeben habe, die mir wichtig waren. Die Mixtapes dürften wahrscheinlich längst verschwunden sein. Irgendwann mit dem letzten Kassettendeck entsorgt. Oder sie schlummern noch in verstaubten Schubladen. Mehr Erinnerung als Tonträger.&lt;/p&gt;

&lt;p&gt;Das waren wohlüberlegte Werke. Was sagt die Musikauswahl über mich? Was sagt die Auswahl darüber, was ich über den anderen Menschen denke? Kann man in der Musik einen sehr subtilen, vor allen Dingen aber dementierbaren Hinweis über die eigenen Gedanken verstecken, die man selber noch nicht offen aussprechen möchte?&lt;/p&gt;

&lt;p&gt;Die Jahre waren noch nicht den zwei Nullen entwachsen, als ich die letzte dieser CD zusammenstellte. Nicht wissend, dass es die letzte werden würde.&lt;/p&gt;

&lt;p&gt;An dieser Stelle hat uns die Weiterentwicklung wirklich etwas genommen. Ich finde die Weitergabe einer Playlist bei weitem nicht so schön, wie die Weitergabe eines Tonträgers, dessen Booklet man mit viel Mühe in seiner schönsten Schrift&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/mixtapes.html#fn:1&quot; class=&quot;footnote&quot; rel=&quot;footnote&quot;&gt;1&lt;/a&gt;&lt;/sup&gt; beschrieb.&lt;/p&gt;

&lt;p&gt;„Ich habe etwas Musik für Dich zusammengestellt, vielleicht gefällt sie Dir” ist eben sehr viel schöner, wenn man eine Kassette oder eine CD weitergibt, nicht nur eine URL.&lt;/p&gt;

&lt;p&gt;Ohnehin gab und gibt es zu viele Streamingdienste. Es ist schwierig, den richtigen Dienst davon zu treffen. Das Risiko, dass die Weitergabe an einem „Du hast gar kein &lt;em&gt;&amp;lt;Streamingdienst einfügen&amp;gt;&lt;/em&gt;? Hmm, das ist ja doof” scheiterte, war immer da, war immer groß. Und der Musik gewordene Pfeil eines Engels flog weiträumig am Ziel vorbei. „Ich hab nur Apple Music.” „Oh, ich nur Spotify.” Und schon musste man dann doch zu den Worten greifen.&lt;/p&gt;

&lt;p&gt;In Nick Hornbys &lt;em&gt;High Fidelity&lt;/em&gt; nimmt das Zusammenstellen dieser Mixtapes eine sehr wichtige Rolle ein. Das Buch endet damit, dass er schon weiß, wie er das nächste Tape für seine wiedergefundene Liebe zusammenstellt.&lt;/p&gt;

&lt;p&gt;Als ich das Buch vor vielen Jahren las, habe ich mich so sehr darin wiedergefunden. Ich. Mitte zwanzig. Der erste für viel Geld erstandene CD-Brenner. Mit dem Kopfhörer vor der Anlage. Später beim Brennen die größte Vorsicht. Rohlinge waren teuer. Der Vorgang mit der kleinsten Bewegung der Maus ruiniert.&lt;/p&gt;

&lt;p&gt;Vorher kaufte man sich zu diesem Zweck die guten Kassetten. Die eigenen Gedanken sollten nicht in der Dumpfheit einer billigen Ferro-Kassette untergehen. Nein, es musste das gute Chromdioxid sein.&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a href=&quot;https://www.c0t0d0s0.org/blog/mixtapes.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;Es war eine schwierige Aufgabe. Der Wunsch, die Neunte auf einen Tonträger bannen zu können[^3], hatte uns 74 Minuten auf einer CD gegeben. Ich habe nie jemanden die Neunte übergeben. Aber dennoch musste ich damit auskommen, um all das zu sagen, was man in Musik packen wollte. Weil man noch keine Worte dafür gefunden hatte. Oder sie nicht direkt auszusprechen traute.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Joerg 2026&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Max Richter – Recomposed: Vivaldi, The Four Seasons: Spring 1&lt;/li&gt;
  &lt;li&gt;Moderat – Therapy&lt;/li&gt;
  &lt;li&gt;Kiasmos – Burst&lt;/li&gt;
  &lt;li&gt;Peter Gabriel – Sky Blue (Martyn Bennett Remix)&lt;/li&gt;
  &lt;li&gt;David Poe – Joy&lt;/li&gt;
  &lt;li&gt;Zaz – Je veux&lt;/li&gt;
  &lt;li&gt;Devin Townsend Project – Supercrush!&lt;/li&gt;
  &lt;li&gt;Mike Oldfield – Five Miles Out&lt;/li&gt;
  &lt;li&gt;Nine Inch Nails – Who Wants To Live Forever&lt;/li&gt;
  &lt;li&gt;Collide – Tempted (Conjure One Mix)&lt;/li&gt;
  &lt;li&gt;VOLA – Napalm (Re-Witnessed)&lt;/li&gt;
  &lt;li&gt;Jan Blomqvist – The Space in Between&lt;/li&gt;
  &lt;li&gt;Talvin Singh – Butterfly&lt;/li&gt;
  &lt;li&gt;The Irrepressibles – In This Shirt (Röyksopp Remix)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;1 Stunde, 13 Minuten&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;Die dennoch eine Klaue in feinem Gewand blieb. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/mixtapes.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;War ja, wie jeder damals durch die Werbung wusste, &lt;a href=&quot;https://www.youtube.com/watch?v=62LHGXIaan8&quot;&gt;verdammt nah an der CD&lt;/a&gt;. &lt;a href=&quot;https://www.c0t0d0s0.org/blog/mixtapes.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, 19 Mar 2026 00:00:00 +0000</pubDate>
<link>https://www.c0t0d0s0.org/blog/mixtapes.html</link>
<guid isPermaLink="true">https://www.c0t0d0s0.org/blog/mixtapes.html</guid>
      
<dc:creator>joerg</dc:creator>
      
      
<category>Thoughts</category>
      
<category>German</category>
      
<category>Musik</category>
      
<category>Jugend</category>
      
      
</item>
    
    
</channel>
</rss>

