What I think about...
I enjoyed blogging until around 2020, but these days I no longer have the time for it. Since I use AI to learn about new technologies, algorithms and other dev topics, I pipe the interesting results into this blog. AI-generated posts are marked. I use Claude and Gemma. Translations are AI-generated as well.
Da Trigramm-Algorithmus: Fuzzy Matching ohne Zauberei
A Trigramm is nur drei aufeinanderfolgende Zeichen, und die Trigramm-Mengen von zwoa Strings zu vergleichn gibt dir an schnellen, tippfehlertoleranten Ähnlichkeitswert zwischn 0…
A eigenen Data-Fetching-Hook in React bauen
Jede React-Codebasis sammelt irgendwann a Dutzend fost identische -Blöcke an, de Daten holn, den Ladezustand tracken und Fehler behandeln. Dieses Muster in oan einzigen wiederve…
CSS Container Queries: A praktischer Leitfodn
Media Queries beantworten nur oane Frog: Wie groß is da Viewport? Des is bei de meisten Komponenten de falsche Frog, weil's a Card, a Sidebar-Widget oda a Produktkachl wurscht i…
Wia da Virtual DOM wirklich funktioniert
"Da Virtual DOM mocht React schnö" is a von de Sätz, de jeder nachplappert, ohne ihn wirklich erklärn zum kinna. Des is ka Zauberei, und es is nicht amoi imma schneller, ois dir…
Web Workers für rechenintensive Aufgaben vastehn
JavaScript lauft auf oam einzigen Thread, des heißt, a rechenintensive Aufgabe - an riesigen JSON-Brocken parsn, a Bild skaliern, an Pfadfindungs-Algorithmus laufn lassn - block…
Debouncing und Throttling: Hochfrequente Events in JavaScript zähmen
Jeder Frontend-Entwickler rennt irgendwann gegn dieselbe Wand: a Scroll-Handler, der hunderte Moi pro Sekunde feuert, a Suchfeld, des bei jedem Tastenanschlag an Netzwerk-Reques…
A einfaches Kommandozeilen-Tool in Node.js schreibn
De meisten internen CLI-Tools brauchn ka Framework. A Skript, des a Charge Dateien umbenennt, a interne API aufruaft oda a repetitive -Sequenz einpackt, kann a einzelne Node-Dat…
Web-Accessibility-Grundlagen: ARIA ohne Rätselraten
Der häufigste ARIA-Fehler is ned, des falsche Attribut zu nehmen - es is, überhaupt zu ARIA zu greifen, wenn a natives HTML-Element das Problem gratis glöst hätt. ARIA (Accessib…
A praktischer Leitfodn zu Git-Branching-Strategien
De meisten Teams wählen ka Branching-Strategie - sie erben, wos die Gründer-Entwickler grod gmacht hom, und es verhärtet si, bevor wer fragt, ob's zur tatsächlichen Teamgröße un…
A einfache State Machine in TypeScript bauen
Wennst scho amoi a Komponente mit , , und ois separate Booleans gschriebn host, hast wahrscheinlich a an Bug ausgliefert, wo zwoa davon gleichzeitig true woarn und die UI an Spi…
Reflows und Repaints: Warum si deine Seitn ruckelig anfühlt
Du misst die Höhe von an Element mit , nutzt sie, um die Breite von an ondern zu setzen, liest die Breite wieda aus und setzt die Höhe von an dritten - und irgendwie versenkt di…
HTTP-Caching-Header vastehn
De meisten Performance-Probleme, de Leit mit am CDN oda ana Caching-Schicht lösn wolln, wern eigentlich gratis von drei HTTP-Headern glöst, wenn sie richtig gsetzt sand, und de…
A praktischer Leitfodn zur API-Paginierung
Gib olle Zeiln von ana wachsenden Tabelle in oaner einzigen Antwort zruck, und du host a Feature gbaut, des in da Entwicklung super funktioniert und in Produktion an dem Tag zam…
Datenbank-Connection-Pooling vastehn
A Datenbankverbindung aufzumachen is teuer: a TCP-Handshake, Authentifizierung, manchmoi TLS-Aushandlung - üblicherweise Zehner von Millisekunden, bevor überhaupt a Query lauft.…
Deine erste GitHub Action schreibn
De meisten Teams fangen mit GitHub Actions o, indem's an Workflow aus am ondern Repo einekopiern und hoffen, dass er no passt. Des geht gut, bis zu dem Tag, wo's ned mehr geht,…
Den JavaScript Event Loop vastehn
JavaScript lauft auf oam einzigen Thread und schafft's trotzdem, Tausende gleichzeitige Netzwerkanfragen, Timer und UI-Events ohne Blockieren zum bearbeiten. Da Event Loop is de…
Memory Leaks in Node.js debuggn
A Node-Prozess, der über Stunden oda Tage langsam im Speicherverbrauch klettert und dann irgendwann vom Container-Orchestrator wegn OOM abgschossn wird, is oane der frustrierend…
A praktischer Leitfodn zu Semantic Versioning
in ana schaut präzise aus, aber des Caret ändert seine Bedeutung, je nachdem ob da Maintainer auf da ondern Seitn die Regeln, auf denen's aufbaut, tatsächlich befolgt hot. Seman…
Big-O-Notation, erklärt mit echtem Code
Die Big-O-Notation wird mit abstrakten Beispielen glehrt - Arrays aus Ganzzahlen sortiern, ausgeglichene Bäume durchsuchn - und dann still und leise fallen glassn, sobois Leit e…
Feature Toggling mit umgebungsbasierter Config
Die einfachste Art, a halbfertiges Feature in Produktion zu bringen, ohne es zum Offenlegn, is a die am häufigsten schlecht neu erfundene: a Boolean, aus da Config glesn, in am…
A Rate-Limiter-Middleware in Express bauen
A ungeschützter API-Endpoint is a Einladung: oa Client-Skript, des spinnt, oa Retry-Schleifn ohne Backoff, oa Scraper, und dein Server verbringt seine ganze Zeit damit, dieselbe…
Content Security Policy (CSP) vastehn
Content Security Policy is a Browser-Feature, des einschränkt, vo wo a Seitn Skripte, Styles, Bilder und ondere Ressourcen lodn darf - und es is oans von de wenigen Abwehrmechan…
A einfache Job-Queue mit Redis bauen
A Willkommens-E-Mail schicken, a hochgladenes Bild skaliern, an PDF-Bericht generiern - nix davon soit in dem HTTP-Request passiern, der's ausglöst hot. Mit ana Job-Queue gibst…
Des Repository-Muster: Vor- und Nachteile, und wann ma's weglassn soit
Des Repository-Muster wird in vüle Backend-Tutorials standardmäßig empfohlen, gleich neben Dependency Injection, ois wär's offensichtlich falsch, es wegzulassn. Is es ned. Es is…
Datenbank-Transaktionen und Isolationslevel erklärt
"Pack es einfach in a Transaktion" is a gängiger Rat, aber a Transaktion alloa garantiert ned, dass zwoa nebenläufige Operationen si ned gegenseitig auf die Zehen steign - des h…
Retry-Strategien: Exponential Backoff und Jitter
A Netzwerkaufruf scheitert. Die offensichtliche Lösung is "einfach nochamoi probiern" - aber naiv zu wiederholn is, wia aus am kurzen Wackler a kompletter Ausfall wird, weil jed…
A sanfte Einführung in WebSockets
HTTP is Request-Response: Da Client frogt, da Server antwortet, und die Verbindung hot ihre Schuldigkeit tan. Des Modell bricht zam, sobois da Server dem Client wos sogn muass,…
Async Iteratoren und Generatoren in JavaScript
-Schleifn gehn über Arrays und ondere Iterables Wert für Wert. mocht des Gleiche, wenn jeder Wert Zeit zum Erzeugen braucht - paginierte API-Ergebnisse lesn, a große Datei strea…
Memoization in JavaScript, über useMemo hinaus
Memoization cacht das Ergebnis von an Funktionsaufruf, abgelegt nach seinen Argumenten, sodass a erneuter Aufruf mit denselben Argumenten den gecachten Wert zruckgibt, statt die…
A einfaches Pub/Sub-System in Node.js bauen
Publish/Subscribe entkoppelt den Code, der a Event erzeugt, von dem Code, der drauf reagiert - da Publisher woaß ned und is a wurscht, wer zuhört, und de Subscriber wissn ned un…
Des CAP-Theorem, erklärt mit echten Beispielen
Jeder Anbieter verteilter Datenbanken behauptet, schnell, konsistent und immer verfügbar zu sei. Des CAP-Theorem is der Grund, warum du bei dem Versprechen misstrauisch sei soit…
A praktischer Leitfodn zur JWT-Authentifizierung
JSON Web Tokens wern in vüle neichn Backends standardmäßig gewählt, oft ohne dass wer innehoit und prüft, ob a Token wirklich die richtige Wahl is, oda wos an dem Tag passiert,…
Event Sourcing vs. klassisches CRUD
A klassische CRUD-Tabelle sogt dir den aktuellen Zustand von ana Zeiln und nix darüber, wia sie dorthin kummen is. Event Sourcing dreht des um: Es speichert jede Änderung, de je…
Structured Logging: Warum printf-Debugging ned skaliert
funktioniert wunderbar, bis du zehn Server, tausend Logzeilen pro Sekunde und an Vorfall host, wo du jeden Request von oam Kunden üba drei Services in de letzten zwanzig Minuten…
CORS endlich einmal und fia olle Moi vastehn
CORS-Fehler tauchn in da Konsole zum schlimmstn Zeitpunkt auf, sogn fost nix Nützlichs dazu, wia ma's behebt, und wern "glöst", indem ma von Stack Overflow einekopiert, ohne das…
Rate-Limiting-Algorithmen: Token Bucket vs. Sliding Window
Jede öffentliche API braucht irgendwann Rate Limiting, und der Algorithmus, den du nimmst, entscheidet, ob "100 Requests pro Minute" tatsächlich bedeutet, wia's klingt. Zwoa Ans…
Des N+1-Query-Problem und wia ma's vameidet
A Seitn, de 50 Blogposts mit dem Nama vom jeweiligen Autor listet, fühlt si in da Entwicklung mit a poar Testzeilen sofort an, und fällt dann in Produktion zamm, sobois echte Da…
Git Rebase vs. Merge: Wann nimmt ma wos
und bringen beide die Änderungen von deim Feature-Branch auf , und genau diese oberflächliche Ähnlichkeit is der Grund, warum Leit sie durcheinanderbringen und entweda mit am ve…
Sichere, idempotente Datenbank-Migrationen schreibn
A Migration, de im Staging erfolgreich glaufen is und dann in Produktion auf halbm Weg scheitert, lasst di in da schlimmstmöglichen Lage zruck: a Schema, des weder die oide noch…
Wia Datenbank-Indizes wirklich funktionieren
"Füg einfach an Index hinzu" is der häufigste Datenbank-Rat, und a der am häufigsten falsch angwendete - auf langsame Queries gworfn, ohne zu vastehn, wos der Index tatsächlich…
Optimistisches vs. pessimistisches Locking in Datenbanken
Zwoa Requests lesn dieselbe Zeiln, beide berechnen aus dem Gelesenen an neichn Wert und beide schreibn ihn zruck - der zwoate Schreibvorgang überschreibt den ersten still und le…
Des Circuit-Breaker-Muster für belastbare Services
Wenn a nachgelagerter Service zu scheitern anfangt, is die naive Reaktion - jeden Request, wia er einekummt, weiter wiederholn - genau der falsche Zug. Jede Wiederholung is a we…
Feature Flags: A praktischer Leitfodn
A Feature Flag is a Bedingung um a Stückl Code herum, mit der ma den Code ein- oda ausschoitn kann - für olle, für a Teilmenge vo Nutzern oda schrittweise - ohne a neichs Deploy…
TypeScript Generics vastehn
Generics san des Feature, über des Leit stolpern, grod nachdem's mit den einfachen TypeScript-Typen vertraut worn san - und dann, sobois's klickt, zu oam der meistgenutzten Werk…
An LRU-Cache von Grund auf bauen
A LRU-Cache (least-recently-used) hoit a feste Anzoi an Einträgen und, wenn er voll is und a neicher Eintrag dazukommen soi, schmeißt er den Eintrag raus, der am längsten ned an…
Idempotency Keys in REST-APIs
A Client schickt a Zahlungsanfrage, des Netzwerk läuft in a Timeout, bevor die Antwort zruckkummt, und da Client probiert's - verständlicherweise - nochamoi. Wenn dein -Endpoint…
Python3: Dateien mit gleichen Namen umbenennen
Wer schnell und bequem seine Dateien von an Dateisystem, des Groß-/Kleinschreibung respektiert, auf a Dateisystem schiabn/kopiern mecht, des des ned respektiert, kann des Skript…
Mailmanagement / Spam Protection
I hass SPAM. Ma siehgt's vermutlich an da Anzoi an Blogposts (ma kunnt fost moana, da ganze Blog bezieht si nur aufs Thema Spam). Inzwischen hob i aber a relativ perfekte Möglic…
De Bedeutung von barrierefreiem Webdesign: A Tor zu Inklusivität und Benutzerfreundlichkeit
In ana Wöt, de immer stärker von digitalen Technologien gprägt is, is die Zugänglichkeit von Websites und Anwendungen für olle Nutzer von entscheidender Bedeutung. Barrierefreie…
De unsichtbare Bedrohung: XSRF - Wenn des Web gegn di orbeitet
In ana Wöt, wo unsere persönlichen Informationen und Online-Aktivitäten immer mehr an Bedeutung gwinnan, is die Sicherheit im Cyberspace von entscheidender Bedeutung. A Bedrohun…
Brute-Force-Angriffe erkennen
Im Rahmen von an samstägigen Kaffeehaus-Aufenthalt und da Info von meim Provider OVH, dass grod a DDOS-Angriff auf mein vServer stattfindet, hob i ma amoi a poar Gedanken gmacht…
React Native - Wos is des?
Bevor ma richtig losleg'n, mecht i da erstmoi an Witz erzöhn: Woaßt eh, warum Entwickler so gern mit React Native arbeiten? Weil's dabei zwoa Fliagn mit ana Klappn daschlogn kin…
JavaScript this Keyword
In da Wöt vo da Webentwicklung is Javascript oane vo de am häufigsten valwendeten Programmiersprochn. Trotz ihrer Beliebtheit gibt's aber a poar schwierige Konzepte, mit denen E…
Dependency Injection
In da Wöt vo da Softwareentwicklung gibt's vüle Konzepte, de essentiell sand, um robuste, skalierbare und leicht wartbare Anwendungen zu erstöin. Oans von denen Konzepten, des i…
De Macht vom Method Chaining in C#: A Leitfodn für effizienten Code
In da Wöt vo da Softwareentwicklung is Effizienz a Schlüsselkonzept. Effizienter Code is ned nur leichter zu lesn und zu wartn, sondern trägt a dazu bei, die Produktivität zu st…
Scriptable: Kontaktlinsen-Status checken
A klans Scriptable-Widget zum Tracken vom aktuellen Kontaktlinsen- und Kontaktlinsenbehälter-Status. Weil i imma wieda vagiss, nach 30-40 Tog meine Kontaktlinsen zum wechseln (o…
Marlin Firmware für SKR Mini E3 V3
Vielleicht mecht si da oane oda ondere an Ärger spoan, de Marlin Bugfix Version 2.1.X für an Creality Ender 5 söba zum kompilieren bzw. konfigurieren. Es kann teilweise zum Narr…
Autosort: Schnö und einfach Bilder und Videos sortiern
Des is da Nachfolger vom do vorgstöiten Skript: GoPro & Fotos: Automatisch umbenennen und kopiern
Promises
A Konzept, des für vüle Entwickler zuerst schwer zum Vastehn is: Promises.
JavaScript - Generatoren
JavaScript-Generatoren sand a leistungsfähige Funktionstechnik, de JavaScript-Entwicklern zur Verfügung steht. Generatoren ermöglichen es, asynchrone Funktionen auf a sauberere…
JavaScript Closures
A Closure entsteht, wenn a Funktion auf a Variable oda Funktion außahoib vo ihrem eigenen Scope zugreift. Im Grunde is a Closure a Funktion, de si an de Werte erinnert, de im um…
GoPro-Fotos automatisch umbenennen und kopiern
Es gibt a neichere und bessere Version do: Autosort - Schnö und einfach Bilder und Videos sortiern
C# Delegates
A Delegate is a Art Zeiger auf a Methode oda a Gruppe vo Methoden, de aufgrufn wern kinnan, ohne dass du Details über die zugrunde liegenden Implementierungen kennen muasst. Del…
Auto-Backup zu Amazon S3
I bin in letzter Zeit sehr kritisch worn, wos die Sicherheit von meine Backups angeht. Grod a, weil i mit meim V-Server (auf dem unter Ondrem a de Webseitn ghostet wird) relativ…
Udemy-Autoenroll-Skript für Tampermonkey
Auf myDealz gibt's regelmäßig Threads, wo kostenlose Udemy-Kurse aufglistet wern. Wannst di amoi für an Kurs ogmöldet host, kannst eam - solang a online is - jederzeit ofoahn.
JavaScript Object Notation mit SQL
Datenbanken eignen si wunderbar zum strukturierten Speichern von Daten. Manchmoi kann's aber vorkemman, dass des aus diversen Gründen ned reicht und ma stattdessen komplexere Da…
Null-Conditional-Operator
Da "Null-Conditional-Operator" is a Feature, des mit C 6.0 eingführt wurde und Entwicklern ermöglicht, sicherer mit Nullwerten umzugehn. Es is a einfacher Operator, der an optio…
E-Mail-Adressen validiern
A (zugegebenermaßen: a von mir) oft valwendete Methode, um si vor E-Mail-Spam zu schützn, is, bei ana Registrierung einfach koa valide Mailadresse anzugebn. Unsagbar oft hob i m…
MySQL: NULL ois 0 ausgeben
Für a klans Projekt hob i die Werte von ana Spoitn in MySQL summieren und nach de summierten Werte sortieren miassn. So wos wia
Alpha-Go
Wer si für KI interessiert und a leicht vadaulichs, fost scho wia im Kino aufbereitetes Thema suacht, soi si unbedingt de Doku zum Alpha-Go-Match eine ziagn. Total sehenswert, O…
Simultanschach
Ois großer Schochfan bin i natürlich a Abonnent vom GM Huschenbeth. Spannend hob i sei 40k-Special gfunden, wo er simultan gegn mehrere Abonnenten spüt. Leider scheitert er am A…
NASA-Höhendaten visualisiern
A klans Snippet zum Visualisiern von de NASA-Höhendaten. De Daten gibt's do: https://lpdaac.usgs.gov/products/srtmgl3v003/
youtube-dl: MP3 schnö downloadn
Seit a poar Zeit nutz i scho des wunderbare Tool youtube-dl. Wer's ned kennt: Domit kann ma von vüle Seiten Videos/Musik etc. owalodn. Da Funktionsumfang is vüfoitig, i brauch a…
Brute-Force-Protection
Brute-Force-Angriffe auf Webanwendungen sand grod bei größeren Webseitn mit vüle Nutzern a ernsthaftes Problem. Dabei versucht a Angreifer entweder mit zufälligen Nutzername-und…
Nagelneichs MacBook schoit si einfach aus
A klane Gschicht über Apple, oda des schlechteste und frustrierendste Kauferlebnis, des i je ghobt hob. Vielleicht hüft's ja am oan oda ondern Nutzer weiter. I teil den Vorfall…
Autopush - Einfach gänderte Dateien hochlodn
I hob ma zur Vereinfachung vom Webdesign/Webdevelopment-Workflow a klans Autopush-Skript gschriebn. Des Skript überwacht an bestimmten Ordner und olle seine Unterordner auf Ände…
CentOS - Server-Essentials
Ab und zu muass i mein CentOS-Server neu aufsetzn (entweder weil wieda irgendwos schiefglaufn is oda weil mir des befriedigende Gfühl von am neichn, sauberen System foit) und wo…
Fire on enter
A klans Javascript/jQuery-Snippet, des a Aktion auslöst, sobald in am Feld da Enter-Button druckt wird.
Dee Version vom Programm OS X Sierra installieren kann ned verifiziert wern
Heit hob i mein oidn Mac an an Freind weitergeben wolln, und ois gwissenhafter Nutzer wird davor natürlich ois auf Null zruckgsetzt. Also schnö via
Einfaches Imageresize + Caching
Ab und zu kummt's vor, dass a bereits existierendes Bild in ana ondern Größe braucht wird. Dann kann ma entweder mit Photoshop für jede Version vom Bild a individuell zugschnitt…
Simple Template Engine
Für a etwas größeres Projekt hob i a einfache TemplateEngine gsucht. I wollt ned sowohl für meine serverseitigen ois a meine clientseitigen Skripte imma wieda den söbn Code schr…
Sekunden in Tage, Stunden, Minuten, Sekunden umrechnen
Bei am aktuellen Projekt, an dem i heit in da Fruah gsessn bin, hob i a bissl Kopfweh ghobt, an Sekundenwert in Tage, Stunden, Minuten und Sekunden umzurechnen. Eigentlich simpe…
Timemachine -5058
Worst-Case-Szenario: Des Backup spinnt. Normalerweise sichere i IT-Projekte zwoafach. Mei Cronjob lauft automatisch täglich um 24:00 und erstöt a lokales Backup von meim localho…
Scrollblur
Ois "Designfreak" suach i natürlich imma nach geeigneter Inspiration, und wos bietet si do besser o, ois ab und zu auf de Webseitn von de großen Agenturen vorbeizschaun; so land…
Javascript Snippets
Do sammel i a poar JavaScript-Snippets. A Liste, de im Lauf da Zeit sicha no erweitert wird :)
Bash Snippets
A poar nützliche oda unsinnige Bash-Snippets, de ma öfter amoi braucht. Vül Spaß damit.
Trau kaum Scan, den du ned söba gfälscht host
A durchaus interessanter Vortrag, der an (recht lustigen, dramatischen) Bug von de Xerox-Kopierer zeigt. Kurz gsogt geht's drum, dass Xerox-Kopierer ähnliche Bildausschnitt cach…
SPAM-Protection-Methoden Nr. 2: Timing is olles
Im Rahmen vo da Reihe "SPAM protection methods" geht's weiter mit Teil 2 und dem ominösen Titel "Timing is olles". Dem liegt die Überlegung zu Grunde, dass Nutzer, wenn's a Webf…
SPAM-Protection-Methoden Nr. 3: Timing is wiedamoi olles
A bei da Seitnnavigation kann ma den Geschwindigkeitsunterschied zwischn Bot und echtem Nutzer relativ guat ausnutzn. Während a Nutzer normalerweise a poar Sekunden auf da Seitn…
HTTP Range Request mit PHP valorbeitn
Manchmoi wolln mia ned die gesamte Datei vom Server lodn, sondern nur an bestimmten Ausschnitt (Range) von da Datei. Mia mechtn also a Startbyte und a Endbyte definiern und olle…
SPAM-Protection-Methoden Nr. 1: Honeypot
A leidiges Thema seit Anbeginn vom Internet is SPAM (na, ned des Dosenfleisch, des gibt's länger ois des Internet). An ana gelangweilten Wochenende hob i mir amoi a poar Gedanke…
Javascript Promises
Seit Juni 2015 sand Promises mit ES6 a in Javascript ankemman und kinnan do nativ gnutzt wern. Vielleicht geht's einigen do so wia ma am Anfang und sie wissn ned so recht, wofür…
SPAM vameidn mit qmail
SPAM. Olle hassn eam, koaner kann eam (ernsthaft) vameidn. Um die Inbox aber einigermaßen aufgräumt zu hoitn, gibt's a recht komfortable Lösung: Temporäre E-Mail-Adressen! temp-…
PHP Snippets
Manchmoi muass ma schnö a poar Variablen tauschn, und irgendwann hob i mi gfrogt, ob des ned a ohne temp-Variable geht. Seitdem is des mei Best Practice: . Probier's aus, du Zni…
OpenGeoDB-Hürdn
Für a aktuelles Projekt hob i a Liste mit olle Postleitzahlen in Deitschland inkl. zugehöriger Städtenamen braucht. Es gilt zwoar "Je mehr Daten, desto besser" ;-) aber des woar…