<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[instant-thinking.de]]></title>
  <link href="https://instant-thinking.de/atom.xml" rel="self"/>
  <link href="https://instant-thinking.de/"/>
  <updated>2026-03-27T08:00:51+01:00</updated>
  <id>https://instant-thinking.de/</id>
  <author>
    <name><![CDATA[Dennis Wegner]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[12]]></title>
    <link href="https://instant-thinking.de/2026/03/27/12"/>
    <updated>2026-03-27T08:00:00+01:00</updated>
    <id>https://instant-thinking.de/2026/03/27/12</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2014/03/27/nina-ist-da/">vor zwölf Jahren kam Nina auf die Welt</a>. Und mit diesen 12 Lenzen ist sie weiterhin weit vorne unterwegs. Sei es in der Schule oder in ihrem sonstigen<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> Leben. Das Kind ist selten nur mittendrin, wenn ihr wisst was ich meine.</p>

<p>Auf ein Foto konnten wir uns dieses Jahr dennoch<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> nicht einigen, da unterscheiden sich unsere Ansprüche doch schon etwas. Aber sei es wie es sei, das Jahr vor der offiziellen Teenagerzeit wird ganz bestimmt noch viele Gelegenheiten für Fotos bieten und vielleicht können wir im nächsten Jahr wieder eins posten.</p>

<p>Heute ist erst einmal der letzte Schultag vor den Ferien und der heutige Geburtstagsnachmittag wird so verbracht, wie von Nina gewünscht. Morgen kommt dann noch Besuch und wir feiern eine weitere Runde der Tochter um die Sonne.</p>

<p>Daher, wie immer: Happy happy Birthday du tolle Nina. Deine Eltern und dein Bruder haben dich irre lieb.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Da wo die <em>wirklich</em> wichtigen Dinge stattfinden…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Oder vielleicht auch gerade deswegen…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[15]]></title>
    <link href="https://instant-thinking.de/2026/01/26/15"/>
    <updated>2026-01-26T08:00:00+01:00</updated>
    <id>https://instant-thinking.de/2026/01/26/15</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2011/01/26/linus-ist-da/">vor fünfzehn Jahren</a> kam Linus auf die Welt.</p>

<p>Das sind in Worten eineinhalb Jahrzehnte, die wir als Eltern jetzt schon mit diesem Jungen hatten. Das hört sich verblüffend viel an und ging doch umso schneller vorbei. Und das ein oder andere, deutlich ältere Familienmitglied überragt er nun auch recht eindrucksvoll. Nur noch eine Frage der Zeit, bis er auch seinen alten Vater eingeholt haben wird. Die nun nur noch drei Jahre bis zur Volljährigkeit wird er dafür ziemlich sicher nicht mehr voll ausschöpfen müssen…</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2026-01-26-linus-bday-konzert.jpg"><img src="https://instant-thinking.de/images/2026-01-26-linus-bday-konzert.jpg" width="" class="center" alt="" /></a></p>

<p>Das heutige Foto zeigt Linus im Sommer 2025 kurz vor dem Einlass zu einem Querbeat-Konzert in Bochum an der Jahrhunderhalle. Nur eine halbe Stunde zuvor standen wir bei sturzbachartigen Regenfällen noch im Parkhaus, hatten dann aber eine tolle Show bei feinstem Sonnenschein.</p>

<p>Heute startet Linus in seine dritte Woche des Praktikums der neunten Klasse, später gibt es sein Wunschabendessen und am Wochenende kommen dann ein paar Leute für eine kleine Feier. Dann sind schon die ersten Tage auf dem Weg zur 16 rum. Das wird sicher weiter spannend bleiben.</p>

<p>Wie all die Jahre: Allesalles Gute zu deinem Geburtstag Linus! Wir sind hocherfreut dich zu haben und lieben dich sehr.</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[QuickLinks vom 03. Dezember bis zum 09. Juni]]></title>
    <link href="https://instant-thinking.de/2025/06/09/quicklinks-vom-03-dezember-bis-zum-09-juni"/>
    <updated>2025-06-09T10:13:00+02:00</updated>
    <id>https://instant-thinking.de/2025/06/09/quicklinks-vom-03-dezember-bis-zum-09-juni</id>
    <content type="html"><![CDATA[<p>Meine <a href="http://pinboard.in/u:der_dennis">pinboard.in-Links</a> vom 03. Dezember bis zum 09. Juni:</p>

<ul>
  <li><a href="https://localsend.org/de">LocalSend</a> - is an open-source cross-platform alternative to AirDrop.</li>
  <li><a href="https://lgug2z.github.io/komorebi/index.html">Komorebi</a> - is a tiling window manager that works as an extension to Microsoft’s Desktop Window Manager in Windows 10 and above. Komorebi allows you to control application windows, virtual workspaces and display monitors with a CLI which can be used with third-party software such as AutoHotKey to set user-defined keyboard shortcuts.</li>
  <li><a href="https://pit-ray.github.io/win-vind/provides">win-vind</a> - provides a lightweight hybrid UI system of CUI and GUI for Windows. By installing this tool, you will be able to control the Windows GUI in the same way as Vim.</li>
  <li><a href="https://www.abstractspoon.com/">ToDoList</a> - is general-purpose, Windows-based software, which can be used for simple “honey do” home lists or to manage complex multi-user projects for business. In addition to tracking the status of tasks, ToDoList includes a powerful system for logging and reporting time spent on tasks. Combined with powerful reporting mechanisms, this makes ToDoList an effective tool for client billing.</li>
  <li><a href="https://linearmouse.app/">LinearMouse</a> - allows you to find a comfortable pointer acceleration and speed and helps you to move the pointer faster and more accurately. You can even disable pointer acceleration if you are a gamer or designer to get the best pointer accuracy.</li>
  <li><a href="https://github.com/projectdiscovery/subfinder">subfinder</a> -  is a subdomain discovery tool that returns valid subdomains for websites, using passive online sources. It has a simple, modular architecture and is optimized for speed. subfinder is built for doing one thing only - passive subdomain enumeration, and it does that very well.</li>
  <li><a href="https://github.com/OJ/gobuster">gobuster</a> - is a Directory/File, DNS and VHost busting tool written in Go.</li>
  <li><a href="https://goodsnooze.gumroad.com/l/amnesia?layout=profile">Amnesia</a> - allows you to disable the monthly reminders for Screen Capture Access on an app by app basis.</li>
  <li><a href="https://github.com/jordanbaird/Ice">Ice</a> -  is a powerful menu bar management tool. While its primary function is hiding and showing menu bar items, it aims to cover a wide variety of additional features to make it one of the most versatile menu bar tools available.</li>
  <li><a href="https://zed.dev/">Zed</a> - is a next-generation code editor designed forhigh-performance collaboration with humans and AI.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[15. Hochzeitstag]]></title>
    <link href="https://instant-thinking.de/2025/04/30/hochzeitstag"/>
    <updated>2025-04-30T12:00:00+02:00</updated>
    <id>https://instant-thinking.de/2025/04/30/hochzeitstag</id>
    <content type="html"><![CDATA[<p>Heute vor fünfzehn Jahren haben Kathi und ich geheiratet.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg"><img src="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg" width="400" class="center" alt="" /></a></p>

<p>Ich wünsche der besten Ehefrau der Welt und mir eine wundervolle Kristall- oder Gläserne Hochzeit<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> und freue mich auf das nächste Jahr im aufregenden Hafen der Ehe.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Es gibt wirklich wunderliche <a href="http://www.birda.de/Hochzeitstage.html">Listen</a> im Internet…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[11]]></title>
    <link href="https://instant-thinking.de/2025/03/27/11"/>
    <updated>2025-03-27T10:00:00+01:00</updated>
    <id>https://instant-thinking.de/2025/03/27/11</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2014/03/27/nina-ist-da/">vor elf Jahren kam Nina auf die Welt</a>. Und im letzten Jahr ist doch so einiges passiert. Die Tochter hat die Schule gewechselt, ist sportlich in verschiedenen Vereinen unterwegs gewesen, hat Urlaub gemacht und kürzlich<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> ihr erstes, richtiges<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> Konzert besucht. Natürlich <a href="https://de.wikipedia.org/wiki/Joost_Klein">Joost Klein</a>.</p>

<p>Auf dem Foto sehen wir die feine Dame in einem Berliner Hotel kurz vor der Nutzung eines Pool-Lifts.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2025-03-27-ninas-bday-pic.jpg"><img src="https://instant-thinking.de/images/2025-03-27-ninas-bday-pic.jpg" width="" class="center" alt="" /></a></p>

<p>Happy happy Birthday liebe Nina von deinen Eltern und deinem Bruder. Samstag machen wir hier Party und dann geht es weiter in Richtung Zwölf, das wird bestimmt weiterhin sehr aufregend werden.</p>

<p>Toll, dass wir zusammen unterwegs sind, wir alle haben dich irre lieb.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Das war ein Geburtstagsgeschenk vorab…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Nichts gegen <a href="https://www.bummelkasten.de">Bummelkasten</a>, das war aber schon eine andere Liga…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Kuscheln mit Nazis? Das werden wir nach der Wahl wieder tun!]]></title>
    <link href="https://instant-thinking.de/2025/02/09/kuscheln-mit-nazis-das-werden-wir-nach-der-wahl-wieder-tun"/>
    <updated>2025-02-09T19:30:00+01:00</updated>
    <id>https://instant-thinking.de/2025/02/09/kuscheln-mit-nazis-das-werden-wir-nach-der-wahl-wieder-tun</id>
    <content type="html"><![CDATA[<p>Die kleine Geschichte, wie ich diesen Sonntag nach dem Hören eines Podcasts in eines dieser Kaninchenlöcher im Internet gefallen bin und kopfschüttelnd wieder auftauchte<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>.</p>

<p>Ich höre die <a href="https://lagedernation.org/podcast/">Lage der Nation</a> sehr gerne<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> und habe anlässlich der <a href="https://lagedernation.org/podcast/ldn417-merz-weg-ins-kanzleramt-verbaut-kein-notstand-durch-kriminalitaet-tempolimit-rettet-leben-keller-speicher-ans-stromnetz-trumps-zoelle-usa-beenden-entwicklungshilfe-trump-will-gaza/">Folge 417 vom 05. Februar 2025</a> doch schlimm den Kopf geschüttelt<sup id="fnref:fn3"><a href="#fn:fn3" rel="footnote">3</a></sup>. Insbesondere im Kapitel <em>Brandmauer: Die löchrige Logik des Friedrich Merz</em> ab <a href="https://lagedernation.org/podcast/ldn417-merz-weg-ins-kanzleramt-verbaut-kein-notstand-durch-kriminalitaet-tempolimit-rettet-leben-keller-speicher-ans-stromnetz-trumps-zoelle-usa-beenden-entwicklungshilfe-trump-will-gaza/?t=26%3A41">ca. 26 Minuten 41 Sekunden</a>. Hier berichtet die Lage, dass sich Merz auch nach der Wahl, dann als Bundeskanzler, gemeinsame Abstimmungen mit der AfD vorstellen kann oder sie sogar anstrebt. Eine überhaupt nicht beruhigende Vorstellung, <em>to say the least</em>.</p>

<p>Die <a href="https://lagedernation.org/podcast/ldn417-merz-weg-ins-kanzleramt-verbaut-kein-notstand-durch-kriminalitaet-tempolimit-rettet-leben-keller-speicher-ans-stromnetz-trumps-zoelle-usa-beenden-entwicklungshilfe-trump-will-gaza/#shownotes">in den Shownotes verlinkte Quelle</a> war aber ein <a href="https://www.youtube.com/shorts/AVS1Wk6XFSY">YouTube Shorts Video</a>, das mir einigermaßen <em>sketchy</em> erschien:</p>

<iframe width="420" height="315" src="https://www.youtube.com/embed/AVS1Wk6XFSY "></iframe>

<p>Komische Perspektive, irgendwie wirkte das grob zusammengeschnitten. <em>Ist damit irgendwie irgendwas angestellt worden?</em> fragte ich mich. <em>Ist die Lage auf eine Fälschung, einen Deep Fake reingefallen?</em> fragte ich mich.</p>

<p>Ich habe den Ausschnitt dann aber im Original <a href="https://www.ardmediathek.de/video/tagesthemen/tagesthemen-23-30-uhr-01-02-2025/das-erste/Y3JpZDovL3RhZ2Vzc2NoYXUuZGUvMzMxYmVjZjItOGU0Mi00NzM4LWFhODktZmRhNGQwODllNDg0LVNFTkRVTkdTVklERU8">bei den Tagesthemen vom 01. Februar 2025</a>, dort ab ca. Minute 2, wiedergefunden:</p>

<video width="480" height="320" controls="controls">
<source src="https://instant-thinking.de/images/2025-02-01-Tagesthemen-Merz-Ausschnitt.mp4" type="video/mp4" />
</video>

<p>Das ist auf ganz vielen Leveln mal gar nicht so schön. Sei es die implizite Bitte des Mannes, doch vielleicht erst nach der Wahl mit der AfD gemeinsam abzustimmen, sei es der gesamte, trotzige Friedrich Merz Habitus und vor allem das <em>Wir werden es nach der Wahl wieder machen.</em>.</p>

<p>Noch schlimmer: Bei der Berichterstattung des <a href="https://www.zdf.de/nachrichten-sendungen/heute-journal/heute-journal-vom-1-februar-2025-100.html">ZDF Heute Journals vom selben Tag</a> ab ca. Minute 01:25, ist die üble Frage da, Merz’ Antwort fehlt aber nach dem <em>Ja</em>, die Aussage, dass er es wieder machen wird:</p>

<video width="480" height="320" controls="controls">
<source src="https://instant-thinking.de/images/2025-02-01-Heute-Journal-Merz-Ausschnitt.mp4" type="video/mp4" />
</video>

<p>Was ist das denn nun? Ist der Schnitt aufgrund der generellen Zeitplanung des Heute Journals so gesetzt worden? Oder sollte das <em>Wir werden das nach der Wahl wieder machen.</em> aus anderen Gründen im ZDF nicht gezeigt werden? Und warum hört sich das jetzt schon wie eine üble Verschwörungserzählung an?</p>

<p>Nunja. Das ganze ist ja jetzt auch schon wieder eine Woche her, es gibt <a href="https://www.tagesschau.de/ausland/amerika/usa-trump-218.html">schon wieder viele neue Dinge</a>, zu denen man ganz hervorragend den Kopf schütteln kann und man kann sich <a href="https://www.theguardian.com/commentisfree/2025/feb/06/trump-sadism-judith-butler">ja nicht um alles kümmern</a>. Bleibt also die Lehre, stets auf den Schnitt zu achten und in zwei Wochen nicht die CDU und erst Recht nicht die AfD zu wählen.</p>

<p>Heute ist TV-Duell, ich wärme mich schon mal mit beginnendem Kopfschütteln auf…</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Zum Glück war einige Zeit auch dem Erinnern geschuldet, wie man denn noch mal Videos in diesem Blogsystem einbindet. Das hat ja schon fast wieder Spaß gemacht…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Ganz große Empfehlung, hört die Lage!<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn3">
      <p>Also, noch viel schlimmer als sonst…<a href="#fnref:fn3" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[14]]></title>
    <link href="https://instant-thinking.de/2025/01/26/14"/>
    <updated>2025-01-26T08:01:00+01:00</updated>
    <id>https://instant-thinking.de/2025/01/26/14</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2011/01/26/linus-ist-da/">vor vierzehn Jahren</a> kam Linus auf die Welt.</p>

<p>Vierzehn Jahre wird der Junge also heute. Man fragt sich in deutlich zunehmender Frequenz, wo diese ganze Zeit denn geblieben sein könnte. Nur noch vier Jahre bis zur Volljährigkeit, es erscheint gar nicht mehr lang…</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2025-01-26-linus-bday-strand.jpg"><img src="https://instant-thinking.de/images/2025-01-26-linus-bday-strand.jpg" width="" class="center" alt="" /></a></p>

<p>Das Foto zeigt Linus im Sommer 2024 in Breskens an der niederländischen Nordsee. Wie lange er wohl noch mit seinen alten Eltern in den Urlaub fahren wird? Im nächsten Jahr scheint sich eine große, pfadfinderische Reise gen Kanada<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> anzudeuten, das wird bestimmt eine Erfahrung. Dazu der ganz normale Wahnsinn des Alltags im Jahr 2025. Da bekommen vierzehnjährige doch schon Zusammenhäge in unserer Welt mit, da gibt es Nachfragen und Meinungen, das wird nicht weniger interessant und hoffentlich alles gut.</p>

<p>Heute ist aber erst mal eine Geburtstagsfeier angesagt: Allesalles Gute &amp; Liebe zu deinem Geburtstag Linus!</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Und zuvor der Wechsel in die Pfadistufe…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Ein friktionsfreier Datumstempel für iOS]]></title>
    <link href="https://instant-thinking.de/2025/01/03/ein-friktionsfreier-datumstempel-fur-ios"/>
    <updated>2025-01-03T12:00:00+01:00</updated>
    <id>https://instant-thinking.de/2025/01/03/ein-friktionsfreier-datumstempel-fur-ios</id>
    <content type="html"><![CDATA[<p><a class="fancybox" href="https://instant-thinking.de/images/perfect-date-yyyy-mm-dd-meme.jpg"><img src="https://instant-thinking.de/images/perfect-date-yyyy-mm-dd-meme.jpg" width="" class="center" alt="" /></a></p>

<p>(Bild via: <a href="https://www.reddit.com/r/puns/comments/83e7xi/whats_your_idea_of_a_perfect_date/">reddit</a>)</p>

<p>Seit sehr, sehr<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> langer Zeit sind die von mir benutzten Computer so eingestellt, dass sie die Eingabe von <code>dds</code> auf der Tastatur mit dem aktuellen Datum im <a href="https://de.wikipedia.org/wiki/ISO_8601">ISO8601</a>-Format ersetzen. Ich tippe also <code>dds</code> und erhalte zum Beispiel <code>2025-01-03</code> für den heutigen Tag. Das passiert bei mir jeden Tag, sehr häufig.</p>

<p>Warum in diesem Format? Vor allem, weil bei entsprechendem Datums-Prefix in Dateinamen die alphabetische Sortierung der chronologischen entspricht und weil es allerlei Möglichkeiten entgegenwirkt, ein Datum falsch zu verstehen. Siehe dazu bitte auch die <a href="https://xkcd.com/1179/">Ausgabe 1179 des Fachmagazins xkcd</a> für eine Liste der nicht mehr einzusetzenden Datumsformate.</p>

<p>Die Umsetzung der Ersetzung variiert je nach dem verwendeten Betriebssystem und den darauf befindlichen Tools, läuft aber in jeder Hinsicht darauf hinaus, dass es eigentlich immer eine Möglichkeit gibt, das aktuelle Datum herauszufinden und die Eingabe von Text dynamisch zu erweitern bzw. zu ersetzen. Unter MacOS heißt meine Lösung <a href="https://www.alfredapp.com">Alfred</a>, unter Windows <a href="https://www.autohotkey.com">AutoHotKey</a>. Linux auf dem Desktop benutze ich vielleicht <a href="https://yotld.com">nächstes Jahr</a>, dort<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> scheint <a href="https://espanso.org">Espanso</a> eine ganz gute Lösung zu sein…</p>

<p>Das geht wirklich schon seit Jahrzehnten so. Aber ausgerechnet unter iOS nicht so gut und unterwegs habe ich meistens ein iPhone, also einen iOS-Computer, dabei. Das seit ewig schon nicht mehr unter iOS verfügbare Textexpander und auch alle ähnlichen Tools für dynamische Textersetzung benötigen dafür eine eigene Tastatur und die sind dann einfach nicht so gut, wie die von Apple mitgelieferte Standardtastatur<sup id="fnref:fn3"><a href="#fn:fn3" rel="footnote">3</a></sup>. Und der Wechsel von Tastaturen für so eine kleine Aufgabe treibt mich ehrlich gesagt auch in den Wahnsinn<sup id="fnref:fn4"><a href="#fn:fn4" rel="footnote">4</a></sup>…</p>

<p>Seit <a href="https://support.apple.com/de-de/guide/iphone/iph6d01d862/12.0/ios/12.0">mindestens iOS 12</a> gibt es aber immerhin statische Textersetzungen auf iOS-Geräten und die sind sogar per iCloud in Sync mit allen Geräten, die mit dem eigenen iCloud-Account eingeloggt sind. Etwas versteckt unter <em>Einstellungen → Allgemein → Tastatur → Textersetzung</em>, aber immerhin. So schauen bei mir die Abkürzungen mit <em>A</em> aus:</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2024-12-31-iphone-tastaturschnipsel.png"><img src="https://instant-thinking.de/images/2024-12-31-iphone-tastaturschnipsel.png" width="" class="center" alt="" /></a></p>

<p>Das ist nicht schlecht, das ist praktisch, da kann man ansetzen.</p>

<p>Mit einem iPhone alleine kommt man hier allerdings nicht so richtig weiter, man braucht doch einen <em>richtigen</em> Computer, noch dazu einen, der immer an ist. Glücklicherweise habe ich einen Mac mini, auf den passt diese Beschreibung perfekt. Denn dank dem <a href="https://github.com/swmeyer1979/shortcuts">kleinen Tool shortcuts</a> ist es auf einem Mac möglich, die Textersetzungsschnipsel in der Shell zu betrachten, zu erstellen oder auch anzupassen<sup id="fnref:fn5"><a href="#fn:fn5" rel="footnote">5</a></sup>. Dank dem iCloud-Sync gelangen die so bearbeiteten Textkürzel auch auf das iPhone. Das Kürzel für <code>dds</code> auf das aktuelle Datum zu setzen gelingt dann einfach per <code>shortcuts update dds 2025-01-03</code>.</p>

<p>Das will man natürlich nicht jeden Tag von Hand erledigen, deswegen kann man beispielsweise ein Shellscript verwenden. Meins wohnt in <code>~/bin</code> und schaut so aus:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>update_datestamp_shortcut.sh</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="c">#!/usr/bin/env bash</span>
</span><span class="line">
</span><span class="line"><span class="c"># Script to get called via launchd every day  at 00:01 to update the &quot;dds&quot;</span>
</span><span class="line"><span class="c"># datestamp keyboard replacement on iCloud (and therefore on my iPhone).</span>
</span><span class="line"><span class="c">#</span>
</span><span class="line"><span class="c"># Needs the shortcut CLI utility: https://github.com/swmeyer1979/shortcuts</span>
</span><span class="line">
</span><span class="line"><span class="nv">current_datestamp</span><span class="o">=</span><span class="k">$(</span>date +%F<span class="k">)</span>
</span><span class="line"><span class="nb">echo </span>Updating the datestamp to: <span class="nv">$current_datestamp</span>
</span><span class="line">/usr/local/bin/shortcuts update dds <span class="nv">$current_datestamp</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Hier wird das aktuelle Datum im gewünschten Format erzeugt, in einer Variable gespeichert, mit <code>echo</code> ausgegeben und mit <code>shortcuts</code> gesetzt.</p>

<p>Und wie schon in dem Kommentar des Scripts angerissen, soll das Script dann jeden Tag um eine Minute nach Mitternacht ausgeführt werden. Dazu wird dann noch ein LaunchAgent erstellt. Das hört sich total aufregend an, letzlich ist ein LaunchAgent aber nur eine <code>xml</code>-Datei mit <code>plist</code>-Endung im Verzeichnis <code>~/Library/LaunchAgents</code>. Dies hier ist meine:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>de.instant-thinking.update_datestamp_shortcut.plist</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
<span class="line-number">17</span>
<span class="line-number">18</span>
<span class="line-number">19</span>
</pre></td><td class="code"><pre><code class="xml"><span class="line"><span class="cp">&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</span>
</span><span class="line"><span class="cp">&lt;!DOCTYPE plist PUBLIC &quot;-//Apple//DTD PLIST 1.0//EN&quot; &quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot;&gt;</span>
</span><span class="line"><span class="nt">&lt;plist</span> <span class="na">version=</span><span class="s">&quot;1.0&quot;</span><span class="nt">&gt;</span>
</span><span class="line"><span class="nt">&lt;dict&gt;</span>
</span><span class="line">        <span class="nt">&lt;key&gt;</span>Label<span class="nt">&lt;/key&gt;</span>
</span><span class="line">        <span class="nt">&lt;string&gt;</span>de.instant-thinking.update_datestamp_shortcut<span class="nt">&lt;/string&gt;</span>
</span><span class="line">        <span class="nt">&lt;key&gt;</span>ProgramArguments<span class="nt">&lt;/key&gt;</span>
</span><span class="line">        <span class="nt">&lt;array&gt;</span>
</span><span class="line">        <span class="nt">&lt;string&gt;</span>/Users/dennis/bin/update_datestamp_shortcut.sh<span class="nt">&lt;/string&gt;</span>
</span><span class="line">        <span class="nt">&lt;/array&gt;</span>
</span><span class="line">        <span class="nt">&lt;key&gt;</span>StartCalendarInterval<span class="nt">&lt;/key&gt;</span>
</span><span class="line">        <span class="nt">&lt;dict&gt;</span>
</span><span class="line">                <span class="nt">&lt;key&gt;</span>Hour<span class="nt">&lt;/key&gt;</span>
</span><span class="line">                <span class="nt">&lt;integer&gt;</span>0<span class="nt">&lt;/integer&gt;</span>
</span><span class="line">                <span class="nt">&lt;key&gt;</span>Minute<span class="nt">&lt;/key&gt;</span>
</span><span class="line">                <span class="nt">&lt;integer&gt;</span>1<span class="nt">&lt;/integer&gt;</span>
</span><span class="line">        <span class="nt">&lt;/dict&gt;</span>
</span><span class="line"><span class="nt">&lt;/dict&gt;</span>
</span><span class="line"><span class="nt">&lt;/plist&gt;</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Der LaunchAgend wird dann noch mit <code>launchctl load de.instant-thinking.update_datestamp_shortcut.plist</code> aktiviert. Ab da wird jeden Tag das aktuelle Datum in die Textersetzung für <code>dds</code> geschrieben und kann von dort aus benutzt werden.</p>

<p>Das läuft nun schon viele Wochen und Monate vollkommen fehlerfrei und ermöglicht es mir <em>endlich</em> auch auf dem iPhone vollkommen ohne Reibungshitze durch Tastaturswitch oder sonstigen Humbug, das aktuelle Datum im bevorzugten Format zu erzeugen.</p>

<p>(via: <a href="https://talk.automators.fm/t/insert-date-or-date-time-at-insertion-point/14021">talk.automators.fm</a>)</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>sehr, sehr, sehr, sehr, sehr…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>und es scheint auch unter MacOS und Windows zu laufen, direkt mal notieren…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn3">
      <p><a href="https://www.urbandictionary.com/define.php?term=IMHO">IMHO</a>, <a href="https://www.urbandictionary.com/define.php?term=ymmv">YMMV</a>…<a href="#fnref:fn3" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn4">
      <p>Bei einer Tastatur für die rasche <a href="https://apps.apple.com/de/app/giphy-the-gif-search-engine/id974748812">Suche nach einem passenden GIF</a> ist das natürlich eine <em>ganz</em> andere Sache…<a href="#fnref:fn4" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn5">
      <p>Der Link führt zu einem Repo, in dem das Tool nicht mehr <code>shortcuts</code>, sondern <code>shortcut</code> heißt, weil Apple die erstere Benennung für ein eigenes Tool benutzt hat. In dem geht es aber nicht um die Textbaustein-<em>Shortcuts</em>, sondern um die <a href="https://support.apple.com/de-de/guide/shortcuts-mac/apdf22b0444c/mac">Kurzbefehl</a>-<em>Shortcuts</em>. In den folgenden Code-Schnipseln wird aber <code>shortcuts</code> für die Textbaustein-<em>Shortcuts</em> benutzt, denn der Mac mini läuft unter einem eher älteren MacOS, da gibt es das Tool für die Kurzbefehl-<em>Shortcuts</em> noch nicht. Es ist alles etwas kompliziert, ihr werdet das aber sicher schaffen…<a href="#fnref:fn5" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[QuickLinks vom 10. April bis zum 03. Dezember]]></title>
    <link href="https://instant-thinking.de/2024/12/04/quicklinks-vom-10-april-bis-zum-03-dezember"/>
    <updated>2024-12-04T08:00:00+01:00</updated>
    <id>https://instant-thinking.de/2024/12/04/quicklinks-vom-10-april-bis-zum-03-dezember</id>
    <content type="html"><![CDATA[<p>Meine <a href="http://pinboard.in/u:der_dennis">pinboard.in-Links</a> vom 10. April bis zum 03. Dezember:</p>

<ul>
  <li><a href="https://www.pronotes.app/">ProNotes</a> - is an Apple Notes extension that makes your favourite note-taking app even more enjoyable to use.</li>
  <li><a href="https://linkstack.org/">LinkStack</a> - is a highly customizable link sharing platform and self-hosted open-source Linktree alternative with an intuitive, easy to use user interface.</li>
  <li><a href="https://github.com/jarun/nnn">nnn (n³) </a> - is a full-featured terminal file manager. It’s tiny, nearly 0-config and incredibly fast. It is designed to be unobtrusive with smart workflows to match the trains of thought. nnn can analyze disk usage, batch rename, launch apps and pick files. The plugin repository has tons of plugins to extend the capabilities further e.g. live previews, (un)mount disks, find &amp; list, file/dir diff, upload files.</li>
  <li><a href="https://www.sumatrapdfreader.org/free-pdf-reader">Sumatra PDF</a> - is a PDF, eBook , comic book, DjVu, XPS, CHM and image viewer for Windows. It is fast, small, packed with features, customizable and free.</li>
  <li><a href="https://wezfurlong.org/wezterm/">WezTerm </a> - is a powerful cross-platform terminal emulator and multiplexer featuring tabs and windows on local and remote hosts, with native mouse and searchable scrollback, ligatures, color emojis, hyperlinks and more</li>
  <li><a href="https://hledger.org/">hledger</a> - is a fast, friendly, robust, plain text accounting software</li>
  <li><a href="https://bigboxcollection.com/">Big Box Collection</a> - is a website of a guy named Benjamin where he puts on 3D models textured with high-resolution scans of his game boxes. It is a great trip down memory lane if you are somewhat into retro gaming.</li>
  <li><a href="https://ternus.github.io/nsaproductgenerator/">The NSA Product Generator</a> - is inspired by the dump of NSA’s TAO product catalog, containing weirdly-codenamed products beyond the wildest paranoid’s dreams. Hit refresh to get a new one!</li>
  <li><a href="https://organize.readthedocs.io">organize</a> -  is a command line, open-source alternative to apps like Hazel (macOS) or File Juggler (Windows). People use this for: Sorting and tagging pictures into various folder structures based on EXIF data, sorting and renaming PDF invoices based on file content, removing incomplete downloads from their ~/Downloads, cleaning up their ~/Desktop from unused files, freeing up disk space by removing duplicates, automating various business processes and many more</li>
  <li><a href="https://n10.app/">N₁₀</a> - is an Attention Management App for Mac. It helps you do the thing you want to do. For all of us who get stuck, feel overwhelmed, lose track of time, forget what we’re working on, or could just use a little help concentrating.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[14. Hochzeitstag]]></title>
    <link href="https://instant-thinking.de/2024/04/30/hochzeitstag"/>
    <updated>2024-04-30T12:00:00+02:00</updated>
    <id>https://instant-thinking.de/2024/04/30/hochzeitstag</id>
    <content type="html"><![CDATA[<p>Heute vor vierzehn Jahren haben Kathi und ich geheiratet.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg"><img src="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg" width="400" class="center" alt="" /></a></p>

<p>Ich wünsche der besten Ehefrau der Welt und mir eine wundervolle Elfenbeinhochzeit<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> und freue mich auf das nächste Jahr im aufregenden Hafen der Ehe.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Es gibt wirklich wunderliche <a href="http://www.birda.de/Hochzeitstage.html">Listen</a> im Internet…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[QuickLinks vom 25. Mai bis zum 03. April]]></title>
    <link href="https://instant-thinking.de/2024/04/22/quicklinks-vom-25-mai-bis-zum-03-april"/>
    <updated>2024-04-22T21:00:00+02:00</updated>
    <id>https://instant-thinking.de/2024/04/22/quicklinks-vom-25-mai-bis-zum-03-april</id>
    <content type="html"><![CDATA[<p>Meine <a href="http://pinboard.in/u:der_dennis">pinboard.in-Links</a> vom 25. Mai bis zum 03. April:</p>

<ul>
  <li><a href="https://github.com/kopia/kopia">Kopia</a> - is a cross-platform backup tool for Windows, macOS &amp; Linux with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication. CLI and GUI included.</li>
  <li><a href="https://github.com/tomnomnom/gron">gron</a> - transforms JSON into discrete assignments to make it easier to grep for what you want and see the absolute ‘path’ to it. It eases the exploration of APIs that return large blobs of JSON but have terrible documentation.</li>
  <li><a href="https://jqlang.github.io/jq/">jq</a> - is like sed for JSON data - you can use it to slice and filter and map and transform structured data with the same ease that sed, awk, grep and friends let you play with text.</li>
  <li><a href="https://github.com/tfaehse/DashcamCleaner">DashcamCleaner</a> - allows you to automatically censor faces and number plates on dashcam footage.</li>
  <li><a href="https://gitlab.com/edouardklein/falsisign">Falsisign</a> - makes it look like a PDF has been hand signed and scanned.</li>
  <li><a href="http://eradman.com/entrproject/">entr</a> - stands for Event Notify Test Runner and is a utility for running arbitrary commands when files change. Uses kqueue(2) or inotify(7) to avoid polling.  entr was written to facilitate rapid feedback on the command line.</li>
  <li><a href="https://betterdisplay.pro/">BetterDisplay</a> - is a truly wonderful tool! It lets you convert your displays to fully scalable screens, manage display configuration overrides, allows brightness and color control, provides XDR/HDR brightness upscaling (extra brightness beyond 100% for compatible displays with Apple Silicon Macs), full dimming to black, helps you create and manage virtual screens for your Mac, create Picture in Picture windows of your displays and gives you a host of other features to manage your display’s settings easily from the menu bar. It can even disconnect/reconnect displays on-the-fly!</li>
  <li><a href="https://secrets.app/">Secrets</a> - is a Password Manager for iOS and macOS.</li>
  <li><a href="https://jless.io/">jless</a> - is a command-line JSON viewer designed for reading, exploring, and searching through JSON data.</li>
  <li><a href="https://superkey.app/">Superkey</a> - is a simple and powerful keyboard enhancement on macOS. It matches what you type, and clicks it ― all with the keyboard and anywhere on the screen. Navigate your screen without a mouse or trackpad.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[10]]></title>
    <link href="https://instant-thinking.de/2024/03/27/10"/>
    <updated>2024-03-27T10:00:00+01:00</updated>
    <id>https://instant-thinking.de/2024/03/27/10</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2014/03/27/nina-ist-da/">vor zehn Jahren kam Nina auf die Welt</a>. Das erste ganze Jahrzehnt mit dem Kind ist voll und es hat großen Wert darauf gelegt, dass dieser Umstand hier erwähnt wird<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2024-03-27-ninas-locken-pic.jpg"><img src="https://instant-thinking.de/images/2024-03-27-ninas-locken-pic.jpg" width="" class="center" alt="" /></a></p>

<p>Das Kapitel Grundschule liegt nun wirklich sehr in den letzten Zügen. Mit, ob der Anmeldezahlen,  unverschämtem Glück<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> und ausgezeichneten Noten wurde Nina auf derselben Schule wie ihr Bruder angenommen und erleichtert damit die Familienlogistik auf absehbare Zeit mit hoher Wahrscheinlichkeit <em>erheblich</em>. Wir sind sehr dankbar.</p>

<p>Darüberhinaus ist sie in einer Showtanzgruppe unterwegs und flippt durchs Trampolin wie eine Irre. <em>Impressive, most impressive.</em></p>

<p>Gehe weiter so unbeirrt deinen Weg du tollstes Tochterkind, happy happy Birthday von deinen Eltern und deinem Bruder. Wir haben dich unglaublich lieb.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Desweiteren wurde eine Übereinkunft getroffen, dass ab sofort jeweils die halben Jahrzehnte dieselbe Würdigung erfahren. So sei es, liebe Tochter, so sei es.<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Und ganz vielleicht auch durch einen guten Eindruck, den <em>eventuell</em> der große Bruder hinterlassen konnte…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[13]]></title>
    <link href="https://instant-thinking.de/2024/01/26/13"/>
    <updated>2024-01-26T08:01:00+01:00</updated>
    <id>https://instant-thinking.de/2024/01/26/13</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2011/01/26/linus-ist-da/">vor dreizehn Jahren</a> kam Linus auf die Welt.</p>

<p>Das ist keine Übung, ab heute haben wir einen Teenager im Haus.</p>

<p>Der ist mittlerweile sehr häufig, sehr gerne in seinem Zimmer und schläft an Wochenenden tatsächlich manchmal<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> länger als seine Eltern. Zeichen und Wunder im Alltag. Man muss nur genau hingucken und gelegentlich mal in Ruhe ein gutes Jahrzehnt abwarten, dann finden sich manche Dinge ganz von selbst.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2023-10-09-linus-surfbretter.jpg"><img src="https://instant-thinking.de/images/2023-10-09-linus-surfbretter.jpg" width="" class="center" alt="" /></a></p>

<p>Auf dem Foto sehen wir den Jungen im Urlaub vor einem Haufen Surfbretter, kurz vor der Abfahrt zum Strand. Das hatte ihm auch gut gefallen. Dazu kommen nach wie vor die Pfadfinder, die Trompete und mittlerweile auch Schauspiel an seiner Schule, so ganz schlimm Langeweile wird also auch im nächsten Lebensjahr eher nicht aufkommen.</p>

<p>Heute wird aber erst einmal gefeiert: Allesalles Gute &amp; Liebe zu deinem dreizehnten Geburtstag lieber Linus!</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Aber nicht häufig…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Dateien und Passworte aus git entfernen]]></title>
    <link href="https://instant-thinking.de/2023/05/17/dateien-und-passworte-aus-git-entfernen"/>
    <updated>2023-05-17T13:00:00+02:00</updated>
    <id>https://instant-thinking.de/2023/05/17/dateien-und-passworte-aus-git-entfernen</id>
    <content type="html"><![CDATA[<p>Der <a href="https://instant-thinking.de/2023/04/24/passwort-fuer-imapfilter-aus-der-macos-keychain-holen/">Post über das Nutzen der macOS Keychain für die Passworte in der imapfilter config</a> hatte einen recht unerquicklichen Hintergrund: Ich habe froh und glücklich an Konfiguration und Regeln für <a href="https://github.com/lefcha/imapfilter">imapfilter</a> geschraubt, ohne daran zu denken, dass Passworte in Klartextdateien eine Doofe Idee™ sind. Die <code>config.lua</code> befindet sich außerdem in meinem dotfile repo und ich habe so einige Commits auf diese Datei gesammelt. Wie kann man das nun wieder alles loswerden<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>, ohne alles zu verlieren?</p>

<p>Das kommt so häufig vor<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup>, dass git dafür<sup id="fnref:fn3"><a href="#fn:fn3" rel="footnote">3</a></sup> ein passendes Kommando namens <a href="https://git-scm.com/docs/git-filter-branch"><code>git-filter-branch</code></a> hat. Die Doku beginnt direkt mit dieser erheiternden Warnung:</p>

<blockquote><p>git filter-branch has a plethora of pitfalls that can produce non-obvious manglings of the intended history rewrite (and can leave you with little time to investigate such problems since it has such abysmal performance). These safety and performance issues cannot be backward compatibly fixed and as such, its use is not recommended. Please use an alternative history filtering tool such as git filter-repo. If you still need to use git filter-branch, please carefully read SAFETY (and PERFORMANCE) to learn about the land mines of filter-branch, and then vigilantly avoid as many of the hazards listed there as reasonably possible.</p></blockquote>

<p><em>Plethora of pitfalls</em>, <em>abysmal performance</em>, <em>land mines</em>… Haha, das will man dann eigentlich lieber nicht benutzen. Für die allerallermeisten Anwendungsfälle ist offenbar <a href="https://rtyley.github.io/bfg-repo-cleaner/">BFG</a><sup id="fnref:fn4"><a href="#fn:fn4" rel="footnote">4</a></sup> am allerallereinfachsten zu benutzen. Mindestens trifft das auf das Entfernen von Dateien zu, wie ich hier lernen konnte.</p>

<h2 id="installation">Installation</h2>

<p>Dank <a href="https://brew.sh/">homebrew</a> ist man unter einem einigermaßen aktuellem macOS nach einem <code>brew install bfg</code> schon einsatzbereit und muss sich mit Java und anderem Ungemach überhaupt nicht befassen<sup id="fnref:fn5"><a href="#fn:fn5" rel="footnote">5</a></sup>.</p>

<h2 id="backup">Backup</h2>

<p>Es empfiehlt sich<sup id="fnref:fn6"><a href="#fn:fn6" rel="footnote">6</a></sup> ein Backup anzulegen, bevor man zu Werke geht. <code>git clone --mirror git@some.origin/reponame reponame-backup.git</code> sollte völlig ausreichen.</p>

<h2 id="repo-aufrumen">Repo aufräumen</h2>

<p>Das ist ein wichtiger Teil: BFG erwartet, dass man das Repo in einem aktuell sauberen Zustand vorliegen hat, also alle geheimen Geheimnisse in <code>HEAD</code> beseitigt sind. In meinem Fall habe ich also die <code>config.lua</code> aus meinem <code>.imapfilter</code>-Verzeichnis in meinem <code>.dotfiles</code> Repo entfernt und die viel bessere <code>config.lua.example</code> erstellt. Dann ein Commit und wir können im nächsten Schritt an das Entfernen der Datei aus der History gehen.</p>

<h2 id="datei-aus-history-entfernen">Datei aus History entfernen</h2>

<p>In meinem Falle war das Problem mit einem <code>bfg --delete-files config.lua</code> so gut wie aus der Welt geschafft. BFG geht zu Werke, berichtet,<sup id="fnref:fn7"><a href="#fn:fn7" rel="footnote">7</a></sup> was alles getan wurde und sagt Bescheid, dass nun noch die physischen Dateien gelöscht werden müssen. Das klappt dann per <code>git reflog expire --expire=now --all &amp;&amp; git gc --prune=now --aggressive</code>.</p>

<h2 id="neue-history-verteilen">Neue History verteilen</h2>

<p>Weil ich in meinem <em>echten</em> Repo gearbeitet habe, habe ich die neue History per <code>git push --force</code> in meine Remotes verteilt.</p>

<p>Obacht: Solange es noch Repos gibt, die die alte Wahrheit beinhalten ist die Datei bzw. das geheime Geheimnis noch in der Welt. Insbesondere bei mehreren Usern ist daher Kommunikation vonnöten, um die anderen Repos mit dem neuen Stand zu versorgen.</p>

<p>Am besten ist es, wie immer, <em>vorher</em> zu überlegen, ob es nicht eine gute Idee wäre, Usernamen und Passworte aus verteilten Repositories herauszuhalten. In den folgenden via-Links ist auch noch einmal notiert, wie man einzelne Strings entfernt, das hatte ich hier bislang noch nicht ausprobiert, es liest sich aber auch sehr geradeaus.</p>

<h2 id="passworte-erneuern-schlssel-widerrufen">Passworte erneuern, Schlüssel widerrufen</h2>

<p>Sollte schon irgendeines der geheimen Geheimnisse öffentlich geworden sein, kann man das Passwort oder den Schlüssel als verloren betrachten und sollte <em>jetzt sofort</em> aktiv werden und ein neues Passwort vergeben bzw. einen neuen Schlüssel erstellen und den alten widerrufen.</p>

<h2 id="das-problem-zuknfigt-schneller-bemerken">Das Problem zukünfigt schneller bemerken</h2>

<p>Es ist eine gute Idee, auch eher kleine, persönliche aber <em>public</em> Repos durch so etwas wie <a href="https://www.gitguardian.com">GitGuardian</a> monitoren zu lassen, ein kostenloser Account reicht dafür total aus. Dann bekommt man Bescheid, sobald irgendetwas, das wie ein potentielles Risiko aussieht, im Repo auftaucht.</p>

<p>(via: <a href="https://medium.com/@vs28031996/remove-git-history-with-bfg-repo-cleaner-866808826eeaA">Vinay Sharma</a>, <a href="https://dev.to/toureholder/removing-sensitive-data-from-your-git-history-with-bfg-4ni4">Touré Holder</a> und <a href="https://fabianlee.org/2019/03/24/git-bfg-for-removing-secrets-from-entire-git-history/">Fabian Lee</a>)</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Und auch mal wieder zu GitHub pushen…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Menschen, so sind wir…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn3">
      <p>Und für sehr viele andere Dinge…<a href="#fnref:fn3" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn4">
      <p>Nein, nicht diese <a href="https://doom.fandom.com/wiki/BFG9000">BFG</a>…<a href="#fnref:fn4" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn5">
      <p><a href="https://www.urbandictionary.com/define.php?term=ymmv">YMMV</a>…<a href="#fnref:fn5" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn6">
      <p>Wie eigentlich sehr häufig in der IT…<a href="#fnref:fn6" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn7">
      <p>Im Home-Verzeichnis werden auch entsprechende Logs geschrieben…<a href="#fnref:fn7" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[QuickLinks vom 28. Oktober bis zum 26. April]]></title>
    <link href="https://instant-thinking.de/2023/05/09/quicklinks-vom-28-oktober-bis-zum-26-april"/>
    <updated>2023-05-09T14:00:00+02:00</updated>
    <id>https://instant-thinking.de/2023/05/09/quicklinks-vom-28-oktober-bis-zum-26-april</id>
    <content type="html"><![CDATA[<p>Meine <a href="http://pinboard.in/u:der_dennis">pinboard.in-Links</a> vom 28. Oktober bis zum 26. April:</p>

<ul>
  <li><a href="https://github.com/bb-Ricardo/fritzinfluxdb">fritzinfluxdb</a> - is a tool written in python to fetch data from a FritzBox router and writes it to InfluxDB. It is equal capable as fritzcollectd and directly writing to InfluxDB.</li>
  <li><a href="https://www.dendron.so/">Dendron</a> - is an open-source, local-first, markdown-based, note-taking tool. It’s a personal knowledge management solution (PKM) built specifically for developers and integrates natively with IDEs like VS Code and VSCodium.</li>
  <li><a href="https://hidock.app/">HiDock</a> - is an app that lets you set different Dock settings for different display configurations.</li>
  <li><a href="https://handmirror.app/">Hand Mirror</a> - is a macOS app that lives in your menu bar, and when you click on it you get a view from your camera.</li>
  <li><a href="https://github.com/pvtom/s10m">s10m</a> - is an E3/DC S10 Modbus to MQTT connector. This software module connects an E3/DC S10 home power station with a MQTT broker. It uses the Modbus interface of the S10 device.</li>
  <li><a href="https://github.com/catppuccin">Catppuccin</a> - is a community-driven pastel theme that aims to be the middle ground between low and high contrast themes. It consists of 4 soothing warm flavors with 26 eye-candy colors each, perfect for coding, designing, and much more!</li>
  <li><a href="https://github.com/romkatv/zsh4humans">zsh4humans</a> - is a turnkey configuration for Zsh that aims to work really well out of the box. It combines the best Zsh plugins into a coherent whole that feels like a finished product rather than a DIY starter kit.</li>
  <li><a href="https://moa.party/">Moa</a> - is open source server code that enables cross-posting between networks such as Mastodon, Twitter, and other networks. The main server runs at https://moa.party, and is maintained as a public utility.</li>
  <li><a href="https://jsoncrack.com">JSON Crack</a> - seamlessly visualizes your JSON data instantly into graphs.</li>
  <li><a href="https://moonlight-stream.org/">Moonlight</a> - is an open source implementation of NVIDIA’s GameStream protocol. We implemented the protocol used by the NVIDIA Shield and wrote a set of 3rd party clients. You can stream your collection of PC games from your GameStream-compatible PC to any supported device and play them remotely. Moonlight is perfect for gaming on the go without sacrificing the graphics and game selection available on PC.</li>
</ul>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[13. Hochzeitstag]]></title>
    <link href="https://instant-thinking.de/2023/04/30/hochzeitstag"/>
    <updated>2023-04-30T12:00:00+02:00</updated>
    <id>https://instant-thinking.de/2023/04/30/hochzeitstag</id>
    <content type="html"><![CDATA[<p>Heute vor dreizehn Jahren haben Kathi und ich geheiratet.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg"><img src="https://instant-thinking.de/images/kathi_dennis_hochzeitsshooting_kissing.jpg" width="400" class="center" alt="" /></a></p>

<p>Ich wünsche der besten Ehefrau der Welt und mir eine wundervolle Veilchenhochzeit<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup> und freue mich auf das nächste Jahr im aufregenden Hafen der Ehe.</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Es gibt wirklich wunderliche <a href="http://www.birda.de/Hochzeitstage.html">Listen</a> im Internet…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Passwort für imapfilter aus der macOS Keychain holen]]></title>
    <link href="https://instant-thinking.de/2023/04/24/passwort-fuer-imapfilter-aus-der-macos-keychain-holen"/>
    <updated>2023-04-24T10:15:00+02:00</updated>
    <id>https://instant-thinking.de/2023/04/24/passwort-fuer-imapfilter-aus-der-macos-keychain-holen</id>
    <content type="html"><![CDATA[<p>Unter macOS gibt es einen eingebauten Passwortmanager, den <a href="https://support.apple.com/de-de/guide/keychain-access/kyca1083/mac">Schlüsselbund</a> bzw. die Keychain<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>. Und mit <a href="https://ss64.com/osx/security.html"><code>security</code></a> kann man die auch von der Kommandozeile aus benutzen.</p>

<h2 id="passworte-auf-der-shell-unter-macos">Passworte auf der Shell unter macOS</h2>

<p>So kann man die Standard-Keychain aufschließen:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Keychain entsperren </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>security -v unlock-keychain
</span><span class="line">unlock-keychain
</span><span class="line">password to unlock default:
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Und so ein Passwort hinzufügen, hier ist es ein IMAP-Passwort:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Passwort hinzufügen </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>security add-internet-password -a <span class="s2">&quot;someone@icloud.com&quot;</span> -s icloudimap -w <span class="s2">&quot;TOPSECRET&quot;</span> -r <span class="s1">&#39;htps&#39;</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p><a href="https://stackoverflow.com/a/73224135/1970617">Sehr wichtig ist dabei</a>, dass man mit <code>-r</code> ein Protokoll mitgibt<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup>, sonst klappt das mit dem Hinzufügen gar nicht.</p>

<p>Den neuen Eintrag kann man sich dann auch in der GUI-Keychain angucken:</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2023-04-21-keychain-icloudimap.png"><img src="https://instant-thinking.de/images/2023-04-21-keychain-icloudimap.png" width="" class="center" alt="" /></a></p>

<p>Das Passwort des Eintrags  mit <code>security</code> auch auf der Shell wieder auszulesen ist dank dem Paramater <code>-w</code><sup id="fnref:fn3"><a href="#fn:fn3" rel="footnote">3</a></sup> für das <code>find-internet-password</code> Subkommando ganz einfach<sup id="fnref:fn4"><a href="#fn:fn4" rel="footnote">4</a></sup>:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Passwort auslesen </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>security find-internet-password -w -s <span class="s2">&quot;icloudimap&quot;</span>
</span><span class="line">TOPSECRET
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Ganz dummerweise gibt es keinen entsprechenden Parameter für den Usernamen. Hier muss man sich mit etwas Schnipselei an die Gesamtausgabe begeben und nur die<code>acct</code>-Zeile betrachten<sup id="fnref:fn5"><a href="#fn:fn5" rel="footnote">5</a></sup>:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Usernamen per grep und cut rausschnipseln </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>security find-internet-password -s <span class="s2">&quot;icloudimap&quot;</span> | grep <span class="s2">&quot;acct&quot;</span> | cut -d <span class="s2">&quot;=&quot;</span> -f 2
</span><span class="line"><span class="s2">&quot;someone@icloud.com&quot;</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<h2 id="passwort-in-imapfilter-verwenden">Passwort in imapfilter verwenden</h2>

<p>Super. Klasse. Was macht man nun damit? Zum Beispiel kann man auf einem <em>eh da</em> Mac mini einen eigenen <a href="https://github.com/lefcha/imapfilter">imapfilter</a> laufen lassen, um die eher schwachbrüstigen Filterfunktionen<sup id="fnref:fn6"><a href="#fn:fn6" rel="footnote">6</a></sup> von <a href="https://www.icloud.com/mail">iCloudmail</a> <em>deutlich</em> zu verbessern. Und mit diesem Vorgehen muss man das Passwort dann nicht im Klartext in einer Textdatei rumliegen haben. Passworte im Klartext sind eine Doofe Idee™.</p>

<p>Der Loginteil für ein iCloud-Mail Konto schaut dann aus wie folgt:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>iCloud Logindaten in der config.lua von imapfilter </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
<span class="line-number">12</span>
<span class="line-number">13</span>
<span class="line-number">14</span>
<span class="line-number">15</span>
<span class="line-number">16</span>
</pre></td><td class="code"><pre><code class="lua"><span class="line"><span class="c1">-- Get the iCloud IMAP username from the keychain (removing surrounding quotes and the newline)</span>
</span><span class="line"><span class="n">status</span><span class="p">,</span> <span class="n">user</span> <span class="o">=</span> <span class="n">pipe_from</span><span class="p">(</span><span class="s1">&#39;</span><span class="s">security find-internet-password -s &quot;icloudimap&quot; | grep &quot;acct&quot; | cut -d &quot;=&quot; -f 2&#39;</span><span class="p">)</span>
</span><span class="line"><span class="n">user</span> <span class="o">=</span> <span class="nb">string.gsub</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="s1">&#39;</span><span class="s">&quot;&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="s">&#39;</span><span class="p">)</span>
</span><span class="line"><span class="n">user</span> <span class="o">=</span> <span class="nb">string.gsub</span><span class="p">(</span><span class="n">user</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="s">&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="c1">-- Get the iCloud IMAP password from the keychain (removing the newline)</span>
</span><span class="line"><span class="n">status</span><span class="p">,</span> <span class="n">passwd</span> <span class="o">=</span> <span class="n">pipe_from</span><span class="p">(</span><span class="s1">&#39;</span><span class="s">security find-internet-password -w -s &quot;icloudimap&quot;&#39;</span><span class="p">)</span>
</span><span class="line"><span class="n">passwd</span> <span class="o">=</span> <span class="nb">string.gsub</span><span class="p">(</span><span class="n">passwd</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="s">&quot;</span><span class="p">)</span>
</span><span class="line">
</span><span class="line"><span class="c1">-- iCloud connection parameters</span>
</span><span class="line"><span class="n">icloud</span> <span class="o">=</span> <span class="n">IMAP</span> <span class="p">{</span>
</span><span class="line"><span class="n">server</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="s">imap.mail.me.com&#39;</span><span class="p">,</span>
</span><span class="line"><span class="n">username</span> <span class="o">=</span> <span class="n">user</span><span class="p">,</span>
</span><span class="line"><span class="n">password</span> <span class="o">=</span> <span class="n">passwd</span><span class="p">,</span>
</span><span class="line"><span class="n">ssl</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="s">tls1&#39;</span><span class="p">,</span>
</span><span class="line"><span class="p">}</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Wie das Suffix der Datei schon nahelegt ist das hier im Prinzip ein <a href="https://www.lua.org/home.html">Lua</a>-Programm. Die Bash-Einzeiler von oben werden per <code>pipe_from</code> Funktion eins zu eins übernommen um Username und Passwort zu bekommen. Beim Passwort wird in Zeile 8 noch der hier überflüssige<sup id="fnref:fn7"><a href="#fn:fn7" rel="footnote">7</a></sup> Zeilenumbruch entfernt. Der ist nicht Teil des Passworts, das klappt sonst eher schlecht mit dem Login.</p>

<p>Beim Usernamen müssen vor dem Entfernen des Zeilenumbruchs in Zeile 4 außerdem in Zeile 3 die Anführungszeichen entfernt werden. Das ginge vielleicht auch irgendwie durch <em>escapen</em> der einfachen Anführungszeichen von <code>tr</code> in der zweiten Zeile aber ich habe mich hier für den Weg des geringsten Wiederstandes entschieden und entferne die Anführungszeichen ebenfalls per  <code>gsub</code> in Lua. So läuft das jetzt super. Einige Beispielregeln finden sich auch <a href="https://github.com/derdennis/dotfiles/blob/9272b94255d0eb478878af34aa1f7b84f8567126/imapfilter/.imapfilter/config.lua.example">hier</a>, noch mehr und <em>viel</em> ausführlichere Beispiele <a href="https://github.com/lefcha/imapfilter/blob/e6372b88e09a4d1c573b57270de6b40846825a8b/samples/config.lua">hier</a> sowie <a href="https://github.com/lefcha/imapfilter/blob/e6372b88e09a4d1c573b57270de6b40846825a8b/samples/extend.lua">dort</a>.</p>

<p>Einige andere<sup id="fnref:fn8"><a href="#fn:fn8" rel="footnote">8</a></sup> Vorgehensweisen um an ein Passwort für <code>imapfilter</code> zu kommen finden sich auch <a href="https://sourceforge.net/p/isync/isync/ci/760bfa2cc66d30d6bb6272d55f82874c8fb0c0ae/tree/src/mbsyncrc.sample">in dieser Beispielconfig</a>.</p>

<p>Das ganze läuft bei mir nun seit vielen Monden in einem <code>tmux</code> pane vor sich hin<sup id="fnref:fn9"><a href="#fn:fn9" rel="footnote">9</a></sup>:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>imapfilter alle 5 Minuten ausführen </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="c">#!/bin/sh</span>
</span><span class="line"><span class="k">while </span><span class="nb">true</span>
</span><span class="line"><span class="k">do</span>
</span><span class="line"><span class="k">    </span>date
</span><span class="line">    imapfilter
</span><span class="line">    sleep 300
</span><span class="line"><span class="k">done</span>
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Das ergibt dann solche Ausgaben:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>imapfilter Ausgabe  </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line">Sa 25 Mar 2023 08:29:42 CET
</span><span class="line">6 messages, 0 recent, 1 unseen, in someone@icloud.com@imap.mail.me.com/INBOX.
</span><span class="line">1 messages moved from someone@icloud.com@imap.mail.me.com/INBOX to someone@icloud.com@imap.mail.me.com/Lists/Verbraucherinformationen.
</span><span class="line">Sa 25 Mar 2023 08:34:55 CET
</span><span class="line">5 messages, 0 recent, 0 unseen, in someone@icloud.com@imap.mail.me.com/INBOX.
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Alles in allem ist <code>imapfilter</code> sehr zum feinstreifigen durchsieben und filtern von allen Postfächern geeignet, die selbst keine derartigen Funktionen mitbringen. Anstelle eines Mac minis kann natürlich so gut wie alles benutzt werden, was <em>eh da</em> ist. Nicht mal antike Raspberry Pis sollten hier irgendeine Art von Load verspüren.</p>

<p>(via: <a href="https://github.com/lefcha/imapfilter/issues/98">diesem imapfilter GitHub issue</a>)</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Ich bleibe mal beim englischen Begriff…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Auch wenn man es eigentlich gar nicht braucht, bzw. ein anderes…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn3">
      <p><code>-w</code>  Display only the password on stdout<a href="#fnref:fn3" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn4">
      <p>Allerdings wird nach dem Passwort auch ein Zeilenumbruch ausgegeben, das wird später noch wichtig werden…<a href="#fnref:fn4" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn5">
      <p>Hier wird der Username allerdings in Anführungszeichen ausgegeben und ebenfalls mit einem Zeilenumbruch abgeschlossen. Die Anführungzeichen könnte man mit einer weiteren Pipe und <code>tr -d '"'</code> entsorgen. In der eigentlichen Verwendung mit <code>ìmapfilter</code>führte das aber zu Problemen und musste anders gelöst werden, immer ist was…<a href="#fnref:fn5" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn6">
      <p>Ernsthaft, das war in Googlemail <em>viel</em> besser…<a href="#fnref:fn6" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn7">
      <p>Auf der Shell hübsch, hier falsch…<a href="#fnref:fn7" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn8">
      <p>Eher für Linux gedachte…<a href="#fnref:fn8" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn9">
      <p>Ja, das gehört mal auf einen LaunchAgent umgestellt…<a href="#fnref:fn9" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Seiten aus vielen PDF-Dateien zählen]]></title>
    <link href="https://instant-thinking.de/2023/04/18/seiten-aus-vielen-pdf-dateien-zahlen"/>
    <updated>2023-04-18T15:00:00+02:00</updated>
    <id>https://instant-thinking.de/2023/04/18/seiten-aus-vielen-pdf-dateien-zahlen</id>
    <content type="html"><![CDATA[<p><a href="https://www.tiktok.com/@linneasky/video/7183648458673360133">Excuse me, wir haben 2023</a>.</p>

<p>Aber trotzdem musste ich, aus durch und durch unerfreulichen Gründen<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>, eine ganze Menge PDFs aus einer ganzen Menge Verzeichnisse ausdrucken<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup>. Und ich war mir überhaupt nicht sicher, ob denn die Tinte im <a href="https://support.hp.com/de-de/product/hp-deskjet-3050a-e-all-in-one-printer-series-j611/4311836">uralten Tintenstrahler</a> noch ausreicht, ich neue kaufen muss, oder ob ich doch endlich mal einen <a href="https://www.theverge.com/23642073/best-printer-2023-brother-laser-wi-fi-its-fine">Laserdrucker</a> erwerbe. <em>Wie viele Seiten das wohl sind?</em> frug ich mich…</p>

<p>Weil ich ganz wenig Lust hatte, das alles von Hand zu zählen, fand ich ziemlich schnell <a href="https://superuser.com/questions/403672/how-to-count-pages-in-multiple-pdf-files">diesen superuser-Thread</a>. Allerdings geht es da um viele PDFs in einem einzigen Verzeichnis. Ich hatte ein Verzeichnis mit vielen Unterverzeichnissen, das ganze sah ungfefähr so aus:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Verzeichnisstruktur </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span>tree -d Steuern<span class="se">\ </span>2021/
</span><span class="line">Steuern<span class="se">\ </span>2021/
</span><span class="line">├── Haushaltsnahe<span class="se">\ </span>Dienstleistungen
</span><span class="line">├── Kinderbetreuung
</span><span class="line">├── Spenden
</span><span class="line">├── Versicherungen
</span><span class="line">└── Werbungskosten
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Und dann aber noch ein paar mehr Verzeichnisse und da drin jeweils viele PDFs…</p>

<p>Glücklicherweise war die Vorlage aber nur vor dem Semikolon für das Shell-Globbing <sup id="fnref:fn3"><a href="#fn:fn3" rel="footnote">3</a></sup> anzupassen: Anstelle des <code>for i in *.pdf;</code> für das Durchzählen aller Seiten aller PDFs im aktuellen Verzeichnis benutzt man dann <code>for i in ./**/*.pdf;</code> um alle PDFs in allen Unterverzeichnissen zu erwischen.</p>

<p>Dann konnte ich so nach allen Seitenzahlen einzeln gucken:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Die Seitenzahl aller PDFs einzeln ausgeben </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
<span class="line-number">3</span>
<span class="line-number">4</span>
<span class="line-number">5</span>
<span class="line-number">6</span>
<span class="line-number">7</span>
<span class="line-number">8</span>
<span class="line-number">9</span>
<span class="line-number">10</span>
<span class="line-number">11</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span><span class="k">for </span>i in ./**/*.pdf; <span class="k">do </span><span class="nb">echo</span> <span class="nv">$i</span> <span class="o">&amp;&amp;</span> pdfinfo <span class="s2">&quot;$i&quot;</span> | grep <span class="s2">&quot;^Pages:&quot;</span>; <span class="k">done</span>
</span><span class="line">./Haushaltsnahe Dienstleistungen/2021-10-19-Schmitz Haustechnik-Rechnung.pdf
</span><span class="line">Pages:           1
</span><span class="line">./Haushaltsnahe Dienstleistungen/2021-10-25-Fugentechnik Schorsch-Rechnung.pdf
</span><span class="line">Pages:           1
</span><span class="line">./Kinderbetreuung/2022-01-03-Jugendamt-Bescheid Elternbeiträge.pdf
</span><span class="line">Pages:           3
</span><span class="line">./Werbungskosten/2021-08-06-Heise-Rechnung ct 2021.pdf
</span><span class="line">Pages:           1
</span><span class="line">./Werbungskosten/2021-09-08-telekom-festnetzrechnung-September-2021.pdf
</span><span class="line">Pages:           2
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>Und so ein <em>grand total</em> ausgeben:</p>

<div class="bogus-wrapper"><notextile><figure class="code"><figcaption><span>Die Summe aller Seiten aller PDFs ausgeben </span></figcaption>
 <div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class="line-number">1</span>
<span class="line-number">2</span>
</pre></td><td class="code"><pre><code class="bash"><span class="line"><span class="nv">$ </span> <span class="k">for </span>i in ./**/*.pdf; <span class="k">do </span>pdfinfo <span class="s2">&quot;$i&quot;</span> | grep <span class="s2">&quot;^Pages:&quot;</span>; <span class="k">done</span> | awk <span class="s1">&#39;{s+=$2} END {print s}&#39;</span>
</span><span class="line">169
</span></code></pre></td></tr></table></div></figure></notextile></div>

<p>169 Seiten, <em>seufz</em>… Schlussendlich habe ich dann, schon wieder, neue Tinte gekauft. Die kann ich jetzt aber immerhin absetzen. Ha, <a href="https://www.youtube.com/watch?v=tO5sxLapAts">Profit</a>!</p>

<p>(via: <a href="https://superuser.com/questions/403672/how-to-count-pages-in-multiple-pdf-files">superuser</a>)</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Es müssen Steuern erklärt werden…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Ebenfalls so gar nicht erfreulich, musste aus Gründen aber sein…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn3">
      <p>Man braucht nur eine aktuelle Shell (bash ab 4.0 oder zsh ab irgendwas) und aktiviertes <a href="https://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html">globstar</a> <code>shopt</code>…<a href="#fnref:fn3" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[9]]></title>
    <link href="https://instant-thinking.de/2023/03/27/9"/>
    <updated>2023-03-27T10:00:00+02:00</updated>
    <id>https://instant-thinking.de/2023/03/27/9</id>
    <content type="html"><![CDATA[<p>Heute <a href="http://instant-thinking.de/2014/03/27/nina-ist-da/">vor neun Jahren kam Nina auf die Welt</a>. Jetzt haben wir schon fast ein Jahrzehnt mit dem Kind verbracht. Da können wir uns wirklich glücklich schätzen.</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2023-03-27-nina-bday-pic.jpg"><img src="https://instant-thinking.de/images/2023-03-27-nina-bday-pic.jpg" width="" class="center" alt="" /></a></p>

<p>Nina geht mit großen Schritten auf die letzte Runde der Grundschule zu und meistert das bislang alles komplett ausgezeichnet. Seit ungefähr einem Jahr hat sie außerdem ein Faible für das Skateboard entwickelt und auch hier läuft es gut und es macht großen Spaß, ihre Fortschritte zu begleiten und zu bewundern.</p>

<p>Habe einen tollen neunten Geburtstag liebe Tochter, happy happy Birthday von deinen Eltern und deinem Bruder. Wir haben dich unfassbar lieb.</p>

]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[2022 in VDSL-Zahlen]]></title>
    <link href="https://instant-thinking.de/2023/03/16/2022-in-vdsl-zahlen"/>
    <updated>2023-03-16T15:50:00+01:00</updated>
    <id>https://instant-thinking.de/2023/03/16/2022-in-vdsl-zahlen</id>
    <content type="html"><![CDATA[<p>Wie schon in den letzten Jahren (<a href="https://instant-thinking.de/2017/01/09/2016-in-vdsl-zahlen/">2016</a>, <a href="https://instant-thinking.de/2018/01/02/2017-in-vdsl-zahlen/">2017</a>, <a href="https://instant-thinking.de/2019/01/02/2018-in-vdsl-zahlen">2018</a>, <a href="https://instant-thinking.de/2020/01/02/2019-in-vdsl-zahlen/">2019</a> <a href="https://instant-thinking.de/2021/01/04/2020-in-vdsl-zahlen/">2020</a> und <a href="https://instant-thinking.de/2022/05/19/2021-in-vdsl-zahlen/">2021</a>) wurde auch das Jahr 2022 dank der Anregung von <a href="https://twitter.com/ohne_a">Michel</a> bandbreitentechnisch vermessen. Und es ist noch nicht mal Mai! Die Spitzenreiter sind wie immer jeweils in <strong>fett</strong> ausgezeichnet<sup id="fnref:fn1"><a href="#fn:fn1" rel="footnote">1</a></sup>.</p>

<table>
  <thead>
    <tr>
      <th><strong>Monat</strong></th>
      <th><strong>Upload (GB)</strong></th>
      <th><strong>Download (GB)</strong></th>
      <th><strong>Gesamt (GB)</strong></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Januar</td>
      <td>186,35</td>
      <td><strong>937</strong></td>
      <td><strong>1.123</strong></td>
    </tr>
    <tr>
      <td>Februar</td>
      <td>164,89</td>
      <td>706,69</td>
      <td>872</td>
    </tr>
    <tr>
      <td>März</td>
      <td>133,78</td>
      <td>654,72</td>
      <td>789</td>
    </tr>
    <tr>
      <td>April</td>
      <td>161,29</td>
      <td>728,02</td>
      <td>889</td>
    </tr>
    <tr>
      <td>Mai</td>
      <td>173,79</td>
      <td>710,4</td>
      <td>884</td>
    </tr>
    <tr>
      <td>Juni</td>
      <td>165,59</td>
      <td>560,52</td>
      <td>726</td>
    </tr>
    <tr>
      <td>Juli</td>
      <td>188,33</td>
      <td>579,95</td>
      <td>768</td>
    </tr>
    <tr>
      <td>August</td>
      <td>267,97</td>
      <td>699,58</td>
      <td>968</td>
    </tr>
    <tr>
      <td>September</td>
      <td>230,16</td>
      <td>729,79</td>
      <td>960</td>
    </tr>
    <tr>
      <td>Oktober</td>
      <td>279,78</td>
      <td>759,5</td>
      <td>1.039</td>
    </tr>
    <tr>
      <td>November</td>
      <td>282,77</td>
      <td>717,68</td>
      <td>1.000</td>
    </tr>
    <tr>
      <td>Dezember</td>
      <td><strong>324</strong></td>
      <td>786,46</td>
      <td>1.110</td>
    </tr>
    <tr>
      <td><strong>2022</strong></td>
      <td> </td>
      <td> </td>
      <td><strong>11.129</strong></td>
    </tr>
  </tbody>
</table>

<p><a class="fancybox" href="https://instant-thinking.de/images/2023-03-04-up-und-download-2022.png"><img src="https://instant-thinking.de/images/2023-03-04-up-und-download-2022.png" width="" class="center" alt="" /></a></p>

<p>Alles relativ stetig, im Sommer wird weniger übertragen als im Winter, das passt alles so weit, da sind keine großen Überraschungen dabei.</p>

<p>Alle Werte wurden wieder in Handarbeit aus den Mails der Fritzbox kopiert und in eine Tabelle eingetragen, die automatische Erfassung der Zählerwerte via <a href="https://github.com/westfeld/fritz-speed">Fritz Speed</a> hat erneut nicht stattgefunden, der Punkt steht auf der ToDo, das wird schon noch mal werden.</p>

<p>Aus Spaß habe ich mir mal die Entwicklung der gesamten<sup id="fnref:fn2"><a href="#fn:fn2" rel="footnote">2</a></sup> Übertragungsmenge über die Jahre angesehen:</p>

<p><a class="fancybox" href="https://instant-thinking.de/images/2023-03-04-gigabyte-pro-jahr.png"><img src="https://instant-thinking.de/images/2023-03-04-gigabyte-pro-jahr.png" width="" class="center" alt="" /></a></p>

<p>Ich kann echt nicht sagen, warum in den Jahren 2019 und 2020 weniger übertragen wurde, als 2018, den generellen Trend haben die Jahre aber nicht gebrochen. 2021 war eine sehr deutliche Steigerung zu sehen, erstmalig über 10 Terabyte. In diesem Jahr dann nochmals eine moderate Steigerung auf knapp über 11 Terabyte und jetzt können wir mal schauen, wohin uns 2023 dieses Jahr so bringen wird.</p>

<p>(via: <a href="https://pixelscheucher.de/2016-in-vdsl-zahlen/">Pixelscheucher</a>)</p>

<div class="footnotes">
  <ol>
    <li id="fn:fn1">
      <p>Diese Markdown-Tabellen sind dank <a href="http://tableflipapp.com">TableFlip</a> <em>echt</em> flugs erstellt…<a href="#fnref:fn1" rev="footnote">&#8617;</a></p>
    </li>
    <li id="fn:fn2">
      <p>Upload und Download…<a href="#fnref:fn2" rev="footnote">&#8617;</a></p>
    </li>
  </ol>
</div>
]]></content>
  </entry>
  
</feed>
