Artikel für Entwickler

Erklärungen zu Kodierungsformaten, zur Arbeit mit JSON und zu weiteren Themen, die für Entwickler nützlich sind, mit Links zu den passenden Online-Tools von tulzy.

Kodierung

Base64: wozu Kodierung dient und wie sie funktioniert

Wie Base64 binäre Daten in ASCII-Text verwandelt und wann das wirklich gebraucht wird.

Base32: der Unterschied zu Base64 und wann es praktischer ist

Das case-insensitive Alphabet von Base32 und Fälle, in denen es praktischer ist als Base64.

URL Encode/Decode: Percent-Encoding in Links

Wie Sonderzeichen in Adressen und Query-Parametern zu %XX-Sequenzen werden.

HTML Entities: Sonderzeichen sicher auf einer Seite ausgeben

Warum die Zeichen < > & escapt werden müssen und wie das kaputtes Markup verhindert.

JWT: Aufbau eines Tokens und was „Dekodieren" eines JWT bedeutet

Header, Payload und Signature eines JWT — und warum Dekodieren nicht dasselbe ist wie Signaturprüfung.

Unicode Escape: was \uXXXX-Sequenzen bedeuten

Woher Sequenzen wie \u0041 in JSON und JS-Strings kommen und was sie bedeuten.

ROT13 und die Caesar-Verschlüsselung: einfache Zeichensubstitution

Warum eine Verschiebung um 13 Buchstaben ROT13 selbstinvers macht und wozu man es heute noch nutzt.

Punycode: wie internationalisierte Domains im DNS funktionieren

Wie eine Domain mit nicht-lateinischen Zeichen zu einer ASCII-Form mit dem Präfix xn-- wird.

Morsecode: wie Text zu Punkten und Strichen wird

Das Prinzip der Kodierung von Buchstaben als Punkte und Striche, und wo Morsecode heute noch genutzt wird.

Data URI: wann Bilder direkt in den Code einbetten

Wie ein Data-URI den Inhalt einer Datei direkt in HTML oder CSS einbettet, und wann sich das lohnt.

Gzip + Base64: Daten komprimieren für die Übertragung als Text

Warum komprimierte Binärdaten zusätzlich Base64-kodiert werden, bevor sie in ein Textfeld kommen.

XML Entities: Zeichen in XML-Dokumenten escapen

Die fünf Pflicht-Entities von XML, ohne die das Dokument beim Parsen bricht.

JSON

JSON Formatter: Formatieren, Minifizieren und Validieren

Formatieren für Lesbarkeit, Minifizieren für Größe, Validieren für Korrektheit — drei verschiedene JSON-Aufgaben.

JSONPath: JSON-Daten abfragen ohne manuelles Parsen

Wie JSONPath erlaubt, benötigte Werte aus einem großen JSON mit einem einzigen Ausdruck herauszuholen statt manuell zu durchlaufen.

JSON Diff: wie sich struktureller Vergleich von Textvergleich unterscheidet

Warum die Schlüsselreihenfolge den Vergleich zweier JSON-Dokumente nicht beeinflussen sollte.

JSON Schema: die Struktur von JSON beschreiben und prüfen

Wie JSON Schema erlaubt, automatisch zu prüfen, ob Daten einem erwarteten Vertrag entsprechen.

JSON Flatten: eine verschachtelte Struktur in eine flache Liste verwandeln

Wie tief verschachteltes JSON zu einer flachen Liste von Schlüsseln wie user.address.city wird.

JSON Sort Keys: warum Objektschlüssel sortieren

Warum die JSON-Schlüsselreihenfolge nicht festgelegt ist, Sortierung in der Praxis aber trotzdem nützlich bleibt.

JSON Repair: warum JSON kaputtgeht und wie man es repariert

Häufige Ursachen für „kaputtes" JSON und was eine automatische Reparatur kann und nicht kann.

Mock JSON Generator: wozu Fake-Daten gut sind

Wie Mock-Daten erlauben, mit der UI-Entwicklung zu beginnen, bevor das Backend fertig ist.

JSON ↔ YAML/CSV/XML/TOML: wann und warum konvertieren

Welche Daten bei der Umwandlung von JSON in CSV verloren gehen und warum YAML und TOML für Konfigurationsdateien beliebt sind.

Text

Case Converter: warum es unterschiedliche Namensstile gibt

Warum in einem Projekt Variablen in camelCase, Dateien aber in kebab-case geschrieben werden, und woher diese Regeln stammen.

Text Diff: wie Algorithmen den Unterschied zwischen zwei Texten finden

Wie ein Diff-Algorithmus die minimale Menge an Änderungen zwischen zwei Textversionen findet.

Reguläre Ausdrücke: Grundsyntax und typische Muster

Wie man einen regulären Ausdruck liest und wie sich gieriges von faulem Matching unterscheidet.

Zeilen sortieren und Duplikate entfernen: wozu das gut ist

Warum eine numerische Sortierung, die „10" vor „9" setzt, ein Fehler ist, und wie man das vermeidet.

String Escape: warum derselbe Text unterschiedlich escaped werden muss

Warum dasselbe Anführungszeichen in einem JS-String, in JSON und in einem Shell-Befehl unterschiedlich escaped wird.

CRLF gegen LF: warum Zeilenendezeichen immer noch wichtig sind

Warum eine unter Windows geschriebene Datei in Git unter Linux als „komplett geändert" angezeigt werden kann.

Zeichen und Wörter zählen: warum das nicht immer trivial ist

Warum ein Emoji oder ein Zeichen mit Akzent als mehrere Zeichen auf einmal zählen kann.

Lorem Ipsum: woher der Platzhaltertext stammt und wozu er dient

Warum Designer absichtlich „bedeutungslosen" Text statt echtem Inhalt in Entwürfen verwenden.

Slugify: beliebigen Text in eine URL verwandeln

Wie ein Titel wie „Hallo, Welt!" zu einer URL-tauglichen Zeichenkette wie hallo-welt wird.

Markdown: warum einfache Textsyntax komplexe Editoren geschlagen hat

Warum Entwickler Dokumentation lieber in Markdown als in einem Rich-Text-Editor schreiben.

Leerzeichen und unsichtbare Zeichen: die versteckte Ursache seltsamer Bugs

Warum zwei scheinbar identische Strings wegen eines unsichtbaren Zeichens nicht übereinstimmen können.

Text Reverse: warum „Text umkehren" schwieriger ist, als es klingt

Warum eine naive String-Umkehrung ein Emoji in unbrauchbare Bytes verwandeln kann.

Text-Häufigkeitsanalyse: warum man zählt, wie oft sich Wörter wiederholen

Wie die Buchstabenhäufigkeit in einem Geheimtext hilft, die einfachsten Substitutionschiffren zu knacken.

Hashes/Krypto

Hash Generator: worin sich MD5, SHA-1 und SHA-256 unterscheiden

Warum MD5 immer noch zur Überprüfung der Dateiintegrität verwendet wird, aber nicht für Passwörter.

Checksum Verifier: wie man prüft, ob eine Datei nicht beschädigt ist

Warum eine übereinstimmende Prüfsumme die Integrität einer Datei bestätigt, aber nicht, wer sie erstellt hat.

HMAC: wie sich ein Hash mit Schlüssel von einem gewöhnlichen Hash unterscheidet

Warum ein einfacher SHA-256 nicht vor Manipulation einer Nachricht schützt, HMAC aber schon.

Bcrypt: warum Passwörter langsam gehasht werden, nicht schnell

Warum ein schneller SHA-256 eine schlechte Wahl für Passwörter ist, und ein langsamer bcrypt die richtige.

UUID: wie Kennungen erzeugt werden, die sich fast nie wiederholen

Warum UUID v4 unabhängig auf Millionen von Maschinen ohne Kollisionsrisiko erzeugt werden kann.

Passwortgenerator: was ein Passwort wirklich stark macht

Warum ein langes Passwort aus Wörterbuchwörtern stärker ist als ein kurzes mit Symbolen und Zahlen.

AES: wie symmetrische Verschlüsselung funktioniert

Warum bei AES derselbe Schlüssel Daten verschlüsselt und entschlüsselt, und wie sich das von asymmetrischer Verschlüsselung unterscheidet.

Argon2: warum dieser Algorithmus den Passwort-Hashing-Wettbewerb gewann

Wie Argon2 besser vor Angriffen mit Grafikkarten schützt als ältere Passwort-Hashing-Algorithmen.

Scrypt: warum der Algorithmus so viel Speicher braucht

Warum scrypt absichtlich viel Speicher benötigt, um das Knacken auf ASIC-Geräten zu erschweren.

TOTP: wie Einmalcodes in Authenticator-Apps funktionieren

Warum der Code in Google Authenticator ohne Internet funktioniert und sich nur über die Zeit mit dem Server synchronisiert.

PBKDF2: der älteste Standard zur Schlüsselstreckung

Warum die empfohlene Anzahl der PBKDF2-Iterationen jedes Jahr wächst.

X.509: was in einem SSL-Zertifikat steckt

Was der Browser im Zertifikat einer Website genau prüft, bevor er das grüne Schloss anzeigt.

PGP: wie Verschlüsselung mit öffentlichem und privatem Schlüssel funktioniert

Warum man einen öffentlichen PGP-Schlüssel frei teilen kann, den privaten aber niemals.

Zeit/Zahlen

Unix-Zeit: warum Computer die Zeit ab 1970 zählen

Warum der 1. Januar 1970 zum Bezugspunkt der Zeit für die meisten Computersysteme wurde.

Cron-Ausdrücke: wie man einen Aufgabenzeitplan entschlüsselt

Wie man einen Ausdruck wie */15 * * * * entschlüsselt und genau weiß, wann die Aufgabe ausgeführt wird.

Zahlensysteme: wozu Binär-, Oktal- und Hexadezimalsystem gebraucht werden

Warum die Farbe #FF5733 in CSS mit hexadezimalen statt dezimalen Ziffern geschrieben wird.

Bitweise Operationen: wie AND, OR und XOR auf Bit-Ebene funktionieren

Wie sich bitweises AND von logischem AND unterscheidet, und wozu man überhaupt einzelne Bits einer Zahl manipuliert.

Datumsdifferenz: warum das Zählen von Tagen komplizierter ist, als es scheint

Warum eine naive Subtraktion von Daten wegen Schaltjahren ein falsches Ergebnis liefern kann.

Altersberechnung: warum es nicht einfach eine Subtraktion von Jahren ist

Warum das einfache Subtrahieren der Geburtsjahre ein um eins zu hohes Alter ergeben kann.

Zeitzonen: warum UTC nicht dasselbe ist wie GMT

Warum sich UTC nie zweimal im Jahr ändert, die Londoner Zeit (GMT/BST) aber schon.

Dauerrechner: wie man Stunden, Minuten und Sekunden korrekt addiert

Warum beim Addieren von Minuten und Sekunden der Rest wie bei der Dezimaladdition in die nächste Stelle übertragen werden muss.

ISO 8601 Duration: wie man eine Dauer im Standardformat schreibt

Warum PT1H30M „1 Stunde 30 Minuten" bedeutet, nicht „1 Minute 30 Stunden".

Kalenderwoche: warum verschiedene Länder Wochen unterschiedlich zählen

Warum der 1. Januar nach ISO 8601 manchmal zur Woche 52 oder 53 des Vorjahres gehört.

Römische Zahlen: wie ein System ohne Null und Stellenwert funktioniert

Warum IV für 4 steht und nicht für 6, und wie die Subtraktionsregel bei römischen Zahlen funktioniert.

IEEE 754: warum 0.1 + 0.2 im Code nicht gleich 0.3 ist

Warum fast jede Programmiersprache für 0.1 + 0.2 den Wert 0.30000000000000004 ausgibt.

Zahl in Worten: wozu Ziffern in Text umwandeln

Warum Bankdokumente einen Betrag sowohl in Ziffern als auch in Worten schreiben.

Webentwicklung

HEX, RGB, HSL: warum es so viele Arten gibt, eine Farbe zu schreiben

Warum Designer beim manuellen Auswählen eines Farbtons oft HSL statt HEX bevorzugen.

CSS-Minifizierung: was aus der Datei tatsächlich entfernt wird und warum

Warum minifiziertes CSS im Browser exakt gleich funktioniert, obwohl es für Menschen unlesbar wird.

JavaScript-Minifizierung: der Unterschied zwischen Minifizieren und Obfuskieren

Warum minifizierter Code bei Bedarf immer noch lesbar ist, obfuskierter Code dagegen nicht.

HTML-Minifizierung: warum Leerraum im Markup überhaupt eine Rolle spielt

Warum das Entfernen von Leerraum in <pre> oder einem Textarea das Aussehen der Seite zerstören kann, im Gegensatz zu fast überall sonst.

CSS-Verläufe: wie sich linear von radial und conic unterscheidet

Warum sich conic-gradient für Kreisdiagramme eignet, während radial-gradient einen Lichtfleck-Effekt erzeugt.

Der Luhn-Algorithmus: wie eine Kartennummer auf Korrektheit geprüft wird

Warum eine Kartennummer, die die Luhn-Prüfung besteht, nicht bedeutet, dass diese Karte wirklich existiert.

IBAN: wie eine internationale Bankkontonummer aufgebaut ist

Warum die ersten beiden Buchstaben einer IBAN ein Ländercode sind, nicht Teil der Kontonummer selbst.

QR-Codes: wie ein Link in ein Quadrat aus Pixeln passt

Warum ein QR-Code mit einem Logo in der Mitte trotzdem scannbar bleibt, obwohl ein Teil des Musters verdeckt ist.

Barcodes: wie sich Code 128 von EAN-13 unterscheidet

Warum Produkte im Ladenregal fast immer EAN-13 statt Code 128 verwenden.

Placeholder-Bilder: warum Platzhalterbilder während der Entwicklung wichtig sind

Warum Entwickler während des Layout-Aufbaus absichtlich graue Kästen statt echter Fotos einsetzen.