Ich möchte hier einmal beschreiben, wie wir Probleme früher ressourcenschonend, effizient und mit einem Wissensgewinn als Bonus gelöst haben und werde zeigen, dass das auch heute noch möglich ist.
In einer Zeit, in der AI / LLM / ML in alles mögliche hineingepumpt wird, wo es nicht hingehürt, wo allenthalben Warnungen vor dem Platzen der KI-Bubble ungehört verhallen, wo es immer noch Leute gibt, die Vibe-Coding als Fortschritt ansehen, wo Leute dafür gepriesen werden, dass sie "Code" durch KI erstellen lassen, anstelle ihnen zu erklären, dass es möglich ist, Bücher zu lesen, aus denen sie lernen, selbstbestimmt Probleme zu lösen - in einer solchen Zeit wollte ich nie leben.
Oder wie ich früher sehr oft und auch heute noch ab und zu sage: "Daf+r haben wir das Internet nicht erfunden!"
Die Unix-Philosophie lässt sich auf folgende drei einfachen Regeln eindampfen:
Leider ist es kein neuer Trend, dass ständig hinter allem hergerannt wird, das neu aussieht. So war es damals auch mit der Sprache Python: Es gab (und gibt) Leute, die der Meinung sind, dass es damit endlich eine Möglichkeit gab, Aufgaben zu automatisieren. Das sind alles Leute, die nichts lernen wollen: Wir waren Jahrzehnte davor in der Lage, Abläufe zu automatisieren: wir nutzten die Shells, die in jedem Betriebssystem seit den Siebzigern existieren.
Dasselbe geschah davor mit Objektorientierung: Smalltalk hatte dieses Konzept und seine Nützlichkeit hervorragend demonstriert. Statt sich aber damit zu beschäftigen und dort einzusetzen, wo diese Konzepte einen messbaren Nutzen versprachen verdrehte und kastrierte man diese Konzepte beinahe bis zur Unkenntlichkeit und flanschte sie an alle Sprachen, die nicht bei drei auf den Bäumen waren. Ein wunderbares Beispiel dafür ist C++. Genau dasselbe wiederholte sich mit funktionalen Sprachen: LISP zeigte, wie es geht. Auch hier wiederholte sich dasselbe Schema F: Auch hier wieder wurden die grundlegenden Konzepte so lange verdreht, bis sie nur mehr Karikaturen der zugrundeliegenden Ideen waren und dann in andere Sprachen hineingestampft, in die sie nicht hineinpassen. Das Hasso-Plattner-Institut missbraucht sogar Studenten, indem seine Dozenten funktionale Programmierung anhand von C++ lehren. Aber auch hier ist eben die Mittelmäßigkeit zu Hause - was will man erwarten: Mit diesem Namen ist schließlich auch SAP verbunden. Und Mittelmäßigkeit zeichnet sich eben unter anderem durch das Befolgen der Regel aus: "Wenn ich nur einen Hammer habe, sieht jedes Problem aus wie ein Nagel!"
So, dass war der Teil mit dem Rant - zurück zum eigentlichen Thema. Man hat ein Problem, das man lösen möchte. Meins war (zugegebenermaßen aus zu viel freier Zeit geboren) folgendes: Man hat lange Jahre die erfolgreichste Science-Fiction-Serie der Welt gelesen und war auch immer von den Einbänden fasziniert. Man möchte diese Einbände für seinen Bildschirmhintergrund verwenden, allerdings existieren sie nicht in der dazu notwendigen hohen Auflösung. Also kommt man auf die Idee, eine Collage anzufertigen, will dies aber nicht von Hand machen. Dadurch kommt man zu einer Liste von Anforderungen:
Was wird eigentlich benötigt?
Zunächst zur Erzeugung eines Bildes:
ppmmake rgb:ff/80/80 1920 1200 >back.pam
Laden von Bildern
anytopnm '<path>/<source_file>.<suffix>' >source.pnm
Kombinieren von Bildern:
pamcomp -xoff=-100 -yoff=-100 source.pnm back.pam >intermediary.pam
Metadaten bestimmen:
WIDTH=$(pamfile source.pam|cut -d ',' -f 2|cut -d ' ' -f 2)
HEIGHT=$(pamfile source.pam|cut -d ',' -f 2|cut -d ' ' -f 4)
Zufallswert in einem vorgegebenen Bereich $MAX erzeugen:
RAND=$(($(dd if=/dev/urandom count=1 2> /dev/null | cksum | cut -d' ' -f1) % $MAX))
Über alle Bilder in einem Verzeichnis in zufälliger Reihenfolge iterieren
#!/bin/bash -
SAVEIFS=$IFS
IFS=$'\n'; set -f
for i in `find "$1" -maxdepth 1 \( -iname '*.jpg' -o -iname '*.png' -o -iname '*.webm' \) -type f | shuf`
do
# do something usefil here!
done
IFS=$SAVEIFS; set +f
Bilder skalieren:
pamscale -width "$ONESWIDTH" "/tmp/${ONEFILESTEM}.pnm" >"/tmp/S${ONEFILESTEM}.pnm"
Weichzeichner erzeugen...
pamgauss 27 27 -sigma=13 -maximize -tupletype=GRAYSCALE | pamtopnm >/tmp/gauss.pgm
und nutzen:
pnmconvol -nooffset -normalize /tmp/gauss.pgm "/tmp/S${ONEFILESTEM}.pnm" >convolved.pam
Ungefilterten Randbereich entfernen:
pnmcut -croptop=13 -cropleft=13 -cropbottom=13 -cropright=13 convolved.pam >"/tmp/B${ONEFILESTEM}.pnm"
Kombiniert man das geschickt, entsteht damit genau eine solche Collage, wie wir sie uns eingangs gewünscht haben. Das funktioniert ohne Internet, ohne Ressourcenverschwendung, ohne Skriptspracheninterpreter, ohne Laufzeitumgebung, ohne Compilieraufwand. Nur Bordmittel und der Wille, sich mit den bestehenden Werkzeugen auseinanderzusetzen und zu lernen!
GeoJson Stadtplan-Generator
10.04.2021
Ich habe mich wieder einmal mit dem Generieren von Testdaten beschäfigt - dieses Mal sollte es eine Karte eines urbanen Gebietes, sozusagen ein Stadtplan sein.
WeiterlesenAndroid Basteln C und C++ Chaos Datenbanken Docker dWb+ ESP Wifi Garten Geo Go GUI Hardware Java Jupyter JupyterBinder Komponenten Links Linux Markdown Markup Music Numerik OpenSource PKI-X.509-CA Präsentationen Python QBrowser Rants Raspi Revisited Security Software-Test sQLshell TeleGrafana Verschiedenes Video Virtualisierung Windows Upcoming...
Asymmetrische KryptographieIch habe mich mit der Idee schon länger getragen: Nochmal einen Rundumschlag zu asymmetrischer Kryptographie zu machen. Dabei werde ich mich auf Demonstrationen der einzelnen Konzepte und Operationen mit Beispielcode konzentrieren und zu jedem der vorgestellten Konzepte mehr oder weniger ausführlich bezüglich der Einsatzszenarien und Vor- und Nachteile Stellung beziehen
WeiterlesenIch bitte um Entschuldigung für den denglischen Titel dieses Artikels. Ich habe vor vielen Jahren eine interessante Bibliothek gefunden, die noch aus meiner Arbeit am Institut für Neuroinformatik der TU Ilmenau heraus motiviert war.
WeiterlesenÜber Mastodon bin ich auf dieses Konzert gestoßen - und ich war sehr froh darüber!
WeiterlesenManche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.
Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.
Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...
PS: Meine öffentlichen Codeberg-Repositories findet man hier.