Wilkommen!

Ich bin Martin HĂ€cker, ein Softwareentwickler mit mehr als 20 Jahren Erfahrung. Ich kann bei allen Aspekten der professionellen Softwareentwicklung unterstĂŒtzen.

In meinem Blog geht es um Software, Liquid Democracy, Go / Baduk / Weiqi, Kochen, Chor-Singen, Bouldern, Billiard, Gleitschirmfliegen, Kiten, Jonglieren und eben alles was mich interessiert. Schau dich um, benutze meinen Code und abonniere meinen Feed, um mein Blog bequem in einem Reader zu lesen.

WĂ€hrend meine Webseite zweisprachig ist, sind meine Blog-Posts in der Regel einsprachig deutsch oder englisch.

Neueste EintrÀge:

A Nix'le in a BĂŒchse und a goldigs Warteweile

written by Martin HĂ€cker on

Das Nix Hasenloch 
 ist ein schwĂ€bisches Sprichwort und passt gar nicht so schlecht fĂŒr die vielen schlechten Wortwitze die sich automatisch ergeben, wenn man anfĂ€ngt, sich in das Nix Projekt einzuarbeiten.

ZunĂ€chst mal die Karotte mit der ich mich ködern ließ:

  • Deklarative Konfiguration von Software-Builds, System-Konfigurationen, und wenn man möchte auch Deployments z.B. in Kubernetes und was man sonst gerne möchte
  • Ein funktionaler Paket-Manager, das heißt: Jede Software kann ihre eigenen AbhĂ€ngigkeiten in der passenden Version haben. Wenn ich mal ein Tool in der Version von vor 10 Jahren brauche - einfach zusĂ€tzlich installieren, ohne dass dadurch etwas gestört wird. Wenn ich mal eine neuere Version von etwas brauche als die aktuelle Distribution anbietet: Einfach installieren, ohne dass dadurch etwas gestört wird.
  • Rollback: Systemkonfiguration hat etwas kaputt gemacht? Einfach RĂŒckgĂ€ngig machen.
  • Update auf eine neue Version des Betriebssystems: Man kriegt fehlermeldungen fĂŒr alle Konfigurationen die man vorgenommen hat die jetzt umbenannt wurden oder anders funktionieren. đŸ€Ż
  • Reproduzierbarkeit: VollstĂ€ndige Erfassung der Inputs und Ablegen derselben in einem Lock-File.
  • Eine riesige Community, die beste Praktiken zum Betrieb von Linux (und mehr) Systemen in die grĂ¶ĂŸte Software-Bibliothek kodiert, die wir bisher gesehen haben.

Was sollte man da nicht mögen?

Auf MacOs gibt es mit nix-darwin ein Projekt mit dem man die System-Konfiguration deklarativ vornehmen kann - und auch homebrew (was sonst so gut wie gar nicht reproduzierbar ist) unter Kontrolle kriegt. Und wenn man möchte, verwaltet es einem auch die dotfiles.

Es gibt allerdings einen gewaltigen Nachteil: Das Ganze ist echt komplex und kompliziert. Und die Dokumentation ist nicht schlecht, aber könnte deutlich besser sein.

Wenn man diese HĂŒrde ĂŒberwindet, wird man mit einer erstaunlich kompakten und sehr schnell anzuwendenden System-Konfiguration belohnt. Damit kann man zum Beispiel auf einem Mac ein vollstĂ€ndig konfiguriertes System-Image fĂŒr einen Raspberry Pi erstellen. Dann noch flaschen, starten und lĂ€uft! Oder auf meinem Mac Bauen, und via ssh auf dem RasPi deployen, ohne dort irgendwas zu machen was dessen CPU stresst.

Ich habe inzwischen angefangen, meine Rechner damit zu verwalten und konfigurieren.

Nix ist vielleicht nichts fĂŒr dich



 aber wenn Du ein bisschen nerdig bist, und gerne auf der Kommandozeile lebst, infrastruktur as Code magst oder lernen magst und DevOps fĂŒr dich eh normal ist. Dann könnte Nix auch fĂŒr dich genau das richtige sein.

Wie lernt man Nix am besten?

Was mir beim Lernen von Nix gefehlt hat, wÀre eine Leitlinie gewesen, in welcher Reihenfolge ich mich an die vielen Features von Nix heran tasten sollte. Eine Reihenfolge, die sicherstellt, das die Lernkurve zu jedem Zeitpunkt ertrÀglich bleibt. Und besonders wichtig: Die Sicherstellt, das zu jedem Zeitpunkt sichtbar ist wie cool und wertvoll diese Technologie ist. Sonst lÀuft man Gefahr, ob der steilen Lernkurve abzuspringen.

Das hÀtte ich gerne gehabt: Wenn du anfÀngst Nix zu lernen, dann am besten in dieser Reihenfolge:

1. Schritt: Installieren, ohne was bestehendes kaputt zu machen

Zuerst sollte man Nix neben dem aktuellen OS installieren. Der Standard ist der Determinate Installer, aber ich mag das Lix Projekt lieber, da es schneller ist. Alternativ ist auch der Nix-Docker-Container super um es mal auszuprobieren. Wenn man möchte, kann man Nix (auf Linux) auch einfach in einen Ordner installieren und so verwenden (siehe "Single-User Mode"). Das wĂŒrde ich aber nur fĂŒr ein paar Experimente empfehlen. Sowohl der Determinate als auch der Lix-Installer haben sehr gute Uninstaller die das Projekt auch wieder komplett entfernen können.

2. Schritt: Imperativ verwenden

Nix erlaubt es jederzeit ein Paket zu benutzen, ohne es zu installieren. Das ist eine Konsequenz davon wie der Paket-Manager aufgebaut ist. Ein Paket kann 'im /nix/store/ sein' - ohne das es aktiv ist. Und der Befehl nix run nixpkgs#fzf startet es dann einfach - ohne es zu installieren. Alternativ gibt es auch nix shell nixpkgs#fzf. Damit erhĂ€llt man eine Shell, in der fzf installiert ist. Schließt man die Shell, ist es auch wieder weg. 😳

Dass ist der Hammer, weil man so Pakete ohne Reue ausprobieren kann. Ohne Sorgen, dass doch noch irgendwelche AbhÀngigkeiten evtl. auf dem System herum gurken und man vergessen könnte ein Experiment wieder zu entfernen. Und das beste: Auch spÀter wird man dieses Feature die ganze Zeit verwenden.

Vorsicht vor nix-env und nix profile - das ist das Äquivalent zu dem wie man mit homebrew und anderen Paketmanagern Pakete installieren wĂŒrde. Diese sollte man so selten wie möglich verwenden. Besser ist


3. Schritt: Entwicklungsumgebungen shell.nix

Das, was nix shell nixpkgs#fzf macht, kann man auch in eine Datei schreiben, und damit einfach in ein Repo mit einchecken. Schon hat man Deklarativ die ganzen Tools im Repo dokumentiert, die man braucht um mit einem Projekt zu arbeiten. Bonus: Ich kann fĂŒr jedes Projekt eigene Versionen der AbhĂ€ngigkeiten haben (wenn ich das brauche). Python-Virtual-Envs auf Steroiden!

Hier ein Beispiel:

{
  pkgs ? import <nixpkgs> { },
}:
pkgs.mkShell {
  buildInputs = with pkgs; [
    # Add your build inputs here
    pkgs.python313
    pkgs.uv
  ];
  env = {
    UV_PYTHON = pkgs.python313;
    UV_DOWNLOAD_PYTHON = "never";
  };
}

Wenn man das mit nix-shell aufruft, dann hat man diese Python-Version zur Hand. uv verwendet diese und lĂ€dt selber keine Python-Versionen herunter. Nice! Extra nice: mit nix-shell --pure hat man eine Shell in der nur das sichtbar ist was in dem shell.nix steht, und man kriegt Fehler fĂŒr alles was man verwendet und in der shell.nix vergessen hat. đŸ€Ż

Bonus: Direnv verwenden um automatisch die shell.nix und das .env zu laden. Dazu zoxide um schnell in der Shell zwischen vielen Projekten hin und zu springen. Eine richtig geniale Entwicklungsumgebung.

Ich empfehle erst mal eine weile auf diesem Niveau zu bleiben, denn das ist schon ziemlich cool!

4. Schritt: Mehr Tooling um besser mit Nix klar zu kommen

  • Pakete findet man am besten ĂŒber die Webseite search.nixos.org - aber ich mag eigentlich in der shell suchen. nix run nixpkgs#nh search ut1999 funktioniert besser als alles was ich sonst bisher getestet habe.
  • Anzeigen was gerade installiert ist und wieso ist aufgrund der Architektur von nix gar nicht so einfach. nix run nixpkgs#nix-tree aproximiert das und gibt einen guten ĂŒberblick darĂŒber was man auf dem System hat.
  • nom - der Nix-Output-Monitor nix run nixpkgs#nix-output-monitor macht den output von lĂ€ngeren nix builds viel informativer und spannender. Verwenden kann man das so: nix run $something |& nix run nixpkgs#nix-output-monitor
  • nix store gc um alles zu löschen, was man mal testweise runtergeladen hat und nicht mehr auf der Platte braucht. (Einer Der Nachteile von Nix: Es verbraucht schnell viel Plattenplatz).

5. Schritt: Tief in das Hasenloch fallen

Jetzt gibt es verschiedene Sachen die man sich anschauen könnte

Grundlegende Funktionen und Einstellungen des Terminals

written by Martin HĂ€cker on

Der Terminal-Emulator ist ein zentrales Werkzeug, mit dem wir Entwickler mit unseren Rechnern interagieren. Jedes bisschen Wissen und jede Effizienz, die du hier gewinnst, zahlt sich in kĂŒrzester Zeit hundertfach aus.

NatĂŒrlich gibt es viele Terminals, wie iTerm2, Alacritty oder Kitty. Aber ich finde, diese solltest du nur verwenden, wenn sie deinen Workflow wirklich verbessern. Und dafĂŒr musst du zuerst wissen, was Apple standardmĂ€ĂŸig mitliefert.

Das Schöne am Terminal ist, dass du unglaublich wenig anpassen musst, da es von Haus aus sehr gut funktioniert.

Ich nutze das eingebaute Terminal von macOS mit nur zwei (!) Konfigurationsanpassungen.

Wortweise Löschen

Wortweise Löschen

Die erste wirklich wichtige Anpassung fĂŒr mich ist, dass ⌄-⌫ (Alt-Delete) als Standard-Keybinding gesetzt wird, damit wortweise nach links gelöscht wird. Damit passt du das Terminal an den Mac-Standard an, der in fast allen anderen Programmen ebenfalls funktioniert.

So geht's:

  1. Terminal → Einstellungen öffnen (⌘-,).
  2. Auf der linken Seite alle Profile auswÀhlen, damit alle Einstellungen gleichzeitig bearbeitet werden.
  3. Auf der rechten Seite → "Tastatur" auswĂ€hlen.
  4. Einen neuen Shortcut hinzufĂŒgen.
  5. Die Felder wie im Screenshot ausfĂŒllen. \027 steht fĂŒr ⌃-w (ctrl-w), den Standard-Shortcut fĂŒr wortweises Löschen in der Shell.

Ausgabe navigieren, selektieren und löschen

Die nÀchst-wichtigsten Shortcuts sind:

  • ⌘-N / ⌘-T / ⌘-W: Alles Standard, aber trotzdem meine meistbenutzten Shortcuts.
  • ⌘-↑ und ⌘-↓: Zum Anfang des vorherigen bzw. nĂ€chsten ausgefĂŒhrten Befehls springen. Das ist super praktisch, um schnell nachzusehen, was die vorherigen Kommandos waren.
  • ⌘-Shift-↑ und ⌘-Shift-↓: Wie oben, aber selektiert zusĂ€tzlich. Damit kannst du schnell einen Befehl und dessen Ausgabe kopieren. Das ist super praktisch, um Anleitungen zu schreiben oder einem Kollegen zu zeigen, wie etwas gemacht wurde.
  • ⌘-L: Löscht nur die Ausgabe des letzten Kommandos. Sehr praktisch, um ein nicht mehr benötigtes Shell-Experiment zu entfernen – besonders bei Fehlern mit viel Output. Oft nutze ich das, wenn ich zuerst eine Hilfe anzeige und dann darunter verschiedene Experimente ausfĂŒhre, um die richtigen Flags zu finden. (Genauer: ⌘-L löscht vom Ende bis zur aktuellen Selektion und funktioniert daher hervorragend mit ⌘-↑.)
  • ⌘-K: Terminal löschen. Die nukleare Option – sie löscht alles im aktuellen Terminal. Großer Nachteil: Was weg ist, ist weg. Also nicht benutzen, wenn du den Output noch brauchst. Dennoch ist dies einer meiner am hĂ€ufigsten benutzten Shortcuts.

Unbegrenzter Puffer

Unbegrenzter Puffer

Die zweite Anpassung, die ich vornehme, ist, den Scrollback-Puffer auf unbegrenzt zu stellen, damit ich die Ausgabe von langen Kommandos nicht verliere. Das geht so:

  1. Terminal → Einstellungen öffnen (⌘-,).
  2. Wie zuvor alle Profile auswÀhlen.
  3. Auf der rechten Seite → "Fenster" → "Zeilenpuffer" auf „auf den verfĂŒgbaren Speicher begrenzen“ stellen.

Fazit

Mit diesen Shortcuts kannst du ultraschnell zwischen den letzten Kommandos navigieren, deren Ausgabe selektieren (und kopieren) oder löschen.

Diese Anpassungen und Shortcuts sind fĂŒr mich auch einer der HauptgrĂŒnde, warum ich die eingebauten Terminals in IDEs nicht gerne benutze. Denn dort funktionieren sie oftmals nicht gut.

Viele dieser Einstellungen und Shortcuts gibt es auch auf der Ebene der Shell. Der Vorteil, sie ĂŒber das Terminal zu konfigurieren, ist, dass diese Shortcuts auch auf anderen Servern oder in Docker- bzw. Kubernetes-Containern funktionieren.

Ich hoffe, diese Tipps helfen dir, das Terminal noch besser zu nutzen.

Kennst du weitere nĂŒtzliche Shortcuts oder Einstellungen, die ich nicht erwĂ€hnt habe? Hast du Fragen zu den vorgestellten Tipps? Lass es mich wissen!

Happy Shelling!

Wie kann KI beim Lernen mit Blooms-Taxonomie unterstĂŒtzen?

written by Martin HĂ€cker on

Blooms Taxonomie

Nachem ich jetzt lange ĂŒber Blooms Taxonomie und was die Ebenen im Detail bedeuten geschrieben habe, kann ich jetzt endlich zu dem kommen, was mir eigentlich am Herzen liegt:

Mein ganzes Leben lang haben andere die Ebenen von Blooms Taxonomie verwendet um zu beurteilen wie gut ich etwas verstanden habe - aber man kann diesen Spieß auch umdrehen, und das wissen um diese Ebenen des VerstĂ€ndnisses nutzen um selbst besser zu lernen! (Ehrlich gesagt, bin ich ziemlich angepisst das mir das nicht von Vorne herein genau dafĂŒr erklĂ€rt und beigebracht wurde)

Wie funktioniert das? Wenn Mensch ohne Plan lernt, dann neigen wir dazu uns zunÀchst auf den unteren Ebenen zu bewegen. Denn das ist (vermeintlich) einfacher und erscheint logisch. Aber aus der Forschung wissen wir, dass sich von vorne herein auf Fragen der 4. und 5. Ebene (also Analysieren und Bewerten) zu konzentrieren, nicht nur schneller, sondern auch tieferes VerstÀndnis bringt.

Warum? Weil sich die Art und Weise verĂ€ndert mit der wir uns mit dem Lern-Material beschĂ€ftigen. Auswendig Lernen ist ja nicht verzichtbar. Man muss sich die Fakten ja merken. Aber das passiert auch, wenn man sie Analysiert und Bewertet - ABER - wir kriegen die Analyse und Bewertung gratis dazu. (Wohlgemerkt, fĂŒr etwas mehr Kognitive Anstrengung, aber Entspannung ist ja nicht das Ziel.)

Und das ist der Clou. Gleicher Zeiteinsatz, aber tieferes VerstÀndnis.

đŸ€Ż

Jetzt ist natĂŒrlich nicht jeder mit der FĂ€higkeit geboren, sich selbst einfach so Fragen auf der 4. und 5. Ebene zu stellen. Aber das ist auch gar nicht nötig. Denn KI kann dabei prima helfen.

Chat-GPT hat ein sehr gutes VerstÀndnis von Blooms-Modell und kann endlos fragen auf Bloom Level 4 und 5 zu jedem Thema generieren. Die sind nicht immer perfekt, es reicht aber, um sich darauf einzustimmnen wie solche Fragen aussehen und effizient selbst zu solchen Fragen zu kommen.

Und das ist fĂŒr mich ein gamechanger, und super sinnvoller Einsatz von KI.

Hier mal ein Auszug aus einem Chat mit Chat-GPT. Das ist sicher nicht perfekt, aber ein starker Anfang. Chapeau, Chat-GPT!

Weitere BeitrÀge