>

instant-thinking.de

just enough to get you started and leave you confused

14. Hochzeitstag

| Kommentare

Heute vor vierzehn Jahren haben Kathi und ich geheiratet.

Ich wünsche der besten Ehefrau der Welt und mir eine wundervolle Elfenbeinhochzeit1 und freue mich auf das nächste Jahr im aufregenden Hafen der Ehe.

  1. Es gibt wirklich wunderliche Listen im Internet…

QuickLinks vom 25. Mai bis zum 03. April

| Kommentare

Meine pinboard.in-Links vom 25. Mai bis zum 03. April:

  • Kopia - is a cross-platform backup tool for Windows, macOS & Linux with fast, incremental backups, client-side end-to-end encryption, compression and data deduplication. CLI and GUI included.
  • gron - 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.
  • jq - 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.
  • DashcamCleaner - allows you to automatically censor faces and number plates on dashcam footage.
  • Falsisign - makes it look like a PDF has been hand signed and scanned.
  • entr - 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.
  • BetterDisplay - 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!
  • Secrets - is a Password Manager for iOS and macOS.
  • jless - is a command-line JSON viewer designed for reading, exploring, and searching through JSON data.
  • Superkey - 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.

10

| Kommentare

Heute vor zehn Jahren kam Nina auf die Welt. Das erste ganze Jahrzehnt mit dem Kind ist voll und es hat großen Wert darauf gelegt, dass dieser Umstand hier erwähnt wird1.

Das Kapitel Grundschule liegt nun wirklich sehr in den letzten Zügen. Mit, ob der Anmeldezahlen, unverschämtem Glück2 und ausgezeichneten Noten wurde Nina auf derselben Schule wie ihr Bruder angenommen und erleichtert damit die Familienlogistik auf absehbare Zeit mit hoher Wahrscheinlichkeit erheblich. Wir sind sehr dankbar.

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

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

  1. Desweiteren wurde eine Übereinkunft getroffen, dass ab sofort jeweils die halben Jahrzehnte dieselbe Würdigung erfahren. So sei es, liebe Tochter, so sei es.

  2. Und ganz vielleicht auch durch einen guten Eindruck, den eventuell der große Bruder hinterlassen konnte…

13

| Kommentare

Heute vor dreizehn Jahren kam Linus auf die Welt.

Das ist keine Übung, ab heute haben wir einen Teenager im Haus.

Der ist mittlerweile sehr häufig, sehr gerne in seinem Zimmer und schläft an Wochenenden tatsächlich manchmal1 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.

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.

Heute wird aber erst einmal gefeiert: Allesalles Gute & Liebe zu deinem dreizehnten Geburtstag lieber Linus!

  1. Aber nicht häufig…

Dateien und Passworte aus git entfernen

| Kommentare

Der Post über das Nutzen der macOS Keychain für die Passworte in der imapfilter config hatte einen recht unerquicklichen Hintergrund: Ich habe froh und glücklich an Konfiguration und Regeln für imapfilter geschraubt, ohne daran zu denken, dass Passworte in Klartextdateien eine Doofe Idee™ sind. Die config.lua 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 loswerden1, ohne alles zu verlieren?

Das kommt so häufig vor2, dass git dafür3 ein passendes Kommando namens git-filter-branch hat. Die Doku beginnt direkt mit dieser erheiternden Warnung:

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.

Plethora of pitfalls, abysmal performance, land mines… Haha, das will man dann eigentlich lieber nicht benutzen. Für die allerallermeisten Anwendungsfälle ist offenbar BFG4 am allerallereinfachsten zu benutzen. Mindestens trifft das auf das Entfernen von Dateien zu, wie ich hier lernen konnte.

Installation

Dank homebrew ist man unter einem einigermaßen aktuellem macOS nach einem brew install bfg schon einsatzbereit und muss sich mit Java und anderem Ungemach überhaupt nicht befassen5.

Backup

Es empfiehlt sich6 ein Backup anzulegen, bevor man zu Werke geht. git clone --mirror git@some.origin/reponame reponame-backup.git sollte völlig ausreichen.

Repo aufräumen

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

Datei aus History entfernen

In meinem Falle war das Problem mit einem bfg --delete-files config.lua so gut wie aus der Welt geschafft. BFG geht zu Werke, berichtet,7 was alles getan wurde und sagt Bescheid, dass nun noch die physischen Dateien gelöscht werden müssen. Das klappt dann per git reflog expire --expire=now --all && git gc --prune=now --aggressive.

Neue History verteilen

Weil ich in meinem echten Repo gearbeitet habe, habe ich die neue History per git push --force in meine Remotes verteilt.

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.

Am besten ist es, wie immer, vorher 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.

Passworte erneuern, Schlüssel widerrufen

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

Das Problem zukünfigt schneller bemerken

Es ist eine gute Idee, auch eher kleine, persönliche aber public Repos durch so etwas wie GitGuardian 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.

(via: Vinay Sharma, Touré Holder und Fabian Lee)

  1. Und auch mal wieder zu GitHub pushen…

  2. Menschen, so sind wir…

  3. Und für sehr viele andere Dinge…

  4. Nein, nicht diese BFG

  5. YMMV

  6. Wie eigentlich sehr häufig in der IT…

  7. Im Home-Verzeichnis werden auch entsprechende Logs geschrieben…

QuickLinks vom 28. Oktober bis zum 26. April

| Kommentare

Meine pinboard.in-Links vom 28. Oktober bis zum 26. April:

  • fritzinfluxdb - 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.
  • Dendron - 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.
  • HiDock - is an app that lets you set different Dock settings for different display configurations.
  • Hand Mirror - is a macOS app that lives in your menu bar, and when you click on it you get a view from your camera.
  • s10m - 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.
  • Catppuccin - 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!
  • zsh4humans - 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.
  • Moa - 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.
  • JSON Crack - seamlessly visualizes your JSON data instantly into graphs.
  • Moonlight - 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.

13. Hochzeitstag

| Kommentare

Heute vor dreizehn Jahren haben Kathi und ich geheiratet.

Ich wünsche der besten Ehefrau der Welt und mir eine wundervolle Veilchenhochzeit1 und freue mich auf das nächste Jahr im aufregenden Hafen der Ehe.

  1. Es gibt wirklich wunderliche Listen im Internet…

Passwort für imapfilter aus der macOS Keychain holen

| Kommentare

Unter macOS gibt es einen eingebauten Passwortmanager, den Schlüsselbund bzw. die Keychain1. Und mit security kann man die auch von der Kommandozeile aus benutzen.

Passworte auf der Shell unter macOS

So kann man die Standard-Keychain aufschließen:

Keychain entsperren
1
2
3
$ security -v unlock-keychain
unlock-keychain
password to unlock default:

Und so ein Passwort hinzufügen, hier ist es ein IMAP-Passwort:

Passwort hinzufügen
1
$ security add-internet-password -a "someone@icloud.com" -s icloudimap -w "TOPSECRET" -r 'htps'

Sehr wichtig ist dabei, dass man mit -r ein Protokoll mitgibt2, sonst klappt das mit dem Hinzufügen gar nicht.

Den neuen Eintrag kann man sich dann auch in der GUI-Keychain angucken:

Das Passwort des Eintrags mit security auch auf der Shell wieder auszulesen ist dank dem Paramater -w3 für das find-internet-password Subkommando ganz einfach4:

Passwort auslesen
1
2
$ security find-internet-password -w -s "icloudimap"
TOPSECRET

Ganz dummerweise gibt es keinen entsprechenden Parameter für den Usernamen. Hier muss man sich mit etwas Schnipselei an die Gesamtausgabe begeben und nur dieacct-Zeile betrachten5:

Usernamen per grep und cut rausschnipseln
1
2
$ security find-internet-password -s "icloudimap" | grep "acct" | cut -d "=" -f 2
"someone@icloud.com"

Passwort in imapfilter verwenden

Super. Klasse. Was macht man nun damit? Zum Beispiel kann man auf einem eh da Mac mini einen eigenen imapfilter laufen lassen, um die eher schwachbrüstigen Filterfunktionen6 von iCloudmail deutlich 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™.

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

iCloud Logindaten in der config.lua von imapfilter
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Get the iCloud IMAP username from the keychain (removing surrounding quotes and the newline)
status, user = pipe_from('security find-internet-password -s "icloudimap" | grep "acct" | cut -d "=" -f 2')
user = string.gsub(user, '"', '')
user = string.gsub(user, "\n", "")

-- Get the iCloud IMAP password from the keychain (removing the newline)
status, passwd = pipe_from('security find-internet-password -w -s "icloudimap"')
passwd = string.gsub(passwd, "\n", "")

-- iCloud connection parameters
icloud = IMAP {
server = 'imap.mail.me.com',
username = user,
password = passwd,
ssl = 'tls1',
}

Wie das Suffix der Datei schon nahelegt ist das hier im Prinzip ein Lua-Programm. Die Bash-Einzeiler von oben werden per pipe_from Funktion eins zu eins übernommen um Username und Passwort zu bekommen. Beim Passwort wird in Zeile 8 noch der hier überflüssige7 Zeilenumbruch entfernt. Der ist nicht Teil des Passworts, das klappt sonst eher schlecht mit dem Login.

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 escapen der einfachen Anführungszeichen von tr in der zweiten Zeile aber ich habe mich hier für den Weg des geringsten Wiederstandes entschieden und entferne die Anführungszeichen ebenfalls per gsub in Lua. So läuft das jetzt super. Einige Beispielregeln finden sich auch hier, noch mehr und viel ausführlichere Beispiele hier sowie dort.

Einige andere8 Vorgehensweisen um an ein Passwort für imapfilter zu kommen finden sich auch in dieser Beispielconfig.

Das ganze läuft bei mir nun seit vielen Monden in einem tmux pane vor sich hin9:

imapfilter alle 5 Minuten ausführen
1
2
3
4
5
6
7
#!/bin/sh
while true
do
    date
    imapfilter
    sleep 300
done

Das ergibt dann solche Ausgaben:

imapfilter Ausgabe
1
2
3
4
5
Sa 25 Mar 2023 08:29:42 CET
6 messages, 0 recent, 1 unseen, in someone@icloud.com@imap.mail.me.com/INBOX.
1 messages moved from someone@icloud.com@imap.mail.me.com/INBOX to someone@icloud.com@imap.mail.me.com/Lists/Verbraucherinformationen.
Sa 25 Mar 2023 08:34:55 CET
5 messages, 0 recent, 0 unseen, in someone@icloud.com@imap.mail.me.com/INBOX.

Alles in allem ist imapfilter 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 eh da ist. Nicht mal antike Raspberry Pis sollten hier irgendeine Art von Load verspüren.

(via: diesem imapfilter GitHub issue)

  1. Ich bleibe mal beim englischen Begriff…

  2. Auch wenn man es eigentlich gar nicht braucht, bzw. ein anderes…

  3. -w Display only the password on stdout

  4. Allerdings wird nach dem Passwort auch ein Zeilenumbruch ausgegeben, das wird später noch wichtig werden…

  5. 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 tr -d '"' entsorgen. In der eigentlichen Verwendung mit ìmapfilterführte das aber zu Problemen und musste anders gelöst werden, immer ist was…

  6. Ernsthaft, das war in Googlemail viel besser…

  7. Auf der Shell hübsch, hier falsch…

  8. Eher für Linux gedachte…

  9. Ja, das gehört mal auf einen LaunchAgent umgestellt…

Seiten aus vielen PDF-Dateien zählen

| Kommentare

Excuse me, wir haben 2023.

Aber trotzdem musste ich, aus durch und durch unerfreulichen Gründen1, eine ganze Menge PDFs aus einer ganzen Menge Verzeichnisse ausdrucken2. Und ich war mir überhaupt nicht sicher, ob denn die Tinte im uralten Tintenstrahler noch ausreicht, ich neue kaufen muss, oder ob ich doch endlich mal einen Laserdrucker erwerbe. Wie viele Seiten das wohl sind? frug ich mich…

Weil ich ganz wenig Lust hatte, das alles von Hand zu zählen, fand ich ziemlich schnell diesen superuser-Thread. 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:

Verzeichnisstruktur
1
2
3
4
5
6
7
$ tree -d Steuern\ 2021/
Steuern\ 2021/
├── Haushaltsnahe\ Dienstleistungen
├── Kinderbetreuung
├── Spenden
├── Versicherungen
└── Werbungskosten

Und dann aber noch ein paar mehr Verzeichnisse und da drin jeweils viele PDFs…

Glücklicherweise war die Vorlage aber nur vor dem Semikolon für das Shell-Globbing 3 anzupassen: Anstelle des for i in *.pdf; für das Durchzählen aller Seiten aller PDFs im aktuellen Verzeichnis benutzt man dann for i in ./**/*.pdf; um alle PDFs in allen Unterverzeichnissen zu erwischen.

Dann konnte ich so nach allen Seitenzahlen einzeln gucken:

Die Seitenzahl aller PDFs einzeln ausgeben
1
2
3
4
5
6
7
8
9
10
11
$ for i in ./**/*.pdf; do echo $i && pdfinfo "$i" | grep "^Pages:"; done
./Haushaltsnahe Dienstleistungen/2021-10-19-Schmitz Haustechnik-Rechnung.pdf
Pages:           1
./Haushaltsnahe Dienstleistungen/2021-10-25-Fugentechnik Schorsch-Rechnung.pdf
Pages:           1
./Kinderbetreuung/2022-01-03-Jugendamt-Bescheid Elternbeiträge.pdf
Pages:           3
./Werbungskosten/2021-08-06-Heise-Rechnung ct 2021.pdf
Pages:           1
./Werbungskosten/2021-09-08-telekom-festnetzrechnung-September-2021.pdf
Pages:           2

Und so ein grand total ausgeben:

Die Summe aller Seiten aller PDFs ausgeben
1
2
$  for i in ./**/*.pdf; do pdfinfo "$i" | grep "^Pages:"; done | awk '{s+=$2} END {print s}'
169

169 Seiten, seufz… Schlussendlich habe ich dann, schon wieder, neue Tinte gekauft. Die kann ich jetzt aber immerhin absetzen. Ha, Profit!

(via: superuser)

  1. Es müssen Steuern erklärt werden…

  2. Ebenfalls so gar nicht erfreulich, musste aus Gründen aber sein…

  3. Man braucht nur eine aktuelle Shell (bash ab 4.0 oder zsh ab irgendwas) und aktiviertes globstar shopt

9

| Kommentare

Heute vor neun Jahren kam Nina auf die Welt. Jetzt haben wir schon fast ein Jahrzehnt mit dem Kind verbracht. Da können wir uns wirklich glücklich schätzen.

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.

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