JWT Decoder Jun 23, 2026

JWT "Stateless" Is a Half-Truth — The Microservices Patterns That Account for the Other Half

JWTs are "stateless" — but deciding whether to trust the claims may require state, and confusing the two leads to architectural mistakes. Here's the microservices JWT validation dilemma (every service validates vs gateway-validates-services-trust), why encoding authorization roles in JWTs creates a stale-claims window problem, why the aud claim validation is commonly skipped (and why that's a vulnerability), and the mTLS + JWT separation of concerns that modern service meshes use.

Base64 Encoder/Decoder Jun 23, 2026

Base64 Makes Data 33% Larger — Here's the Exact Math and When That Overhead Actually Matters

Base64 makes data 33% larger — exactly, not approximately, because encoding 6 bits per character while binary uses 8 bits per byte produces a 4/3 size ratio as a direct mathematical consequence. Here's why that overhead is negligible for tokens and small images but significant for large file APIs, the common JSON-Base64-embedded-file pattern and its alternatives, and what validation steps most Base64 decoding code skips for untrusted input.

UUID Generator Jun 23, 2026

Reading a UUID: What the Hex Characters Actually Encode — and Why v1 Exposes Your Server's MAC Address

A UUID looks random but encodes information depending on its version: v1 embeds the creation timestamp and the generating machine's MAC address (recoverable by anyone who sees the UUID); v4 is genuinely random (122 random bits); v5 is deterministically computed from a namespace and name; v7 is timestamp-ordered with random low bits. Here's what each segment of a UUID actually contains, why v1 is a privacy risk in public-facing contexts, and when UUIDs shouldn't be used as security tokens.

URL Encoder/Decoder Jun 22, 2026

URL Encoding Context: Why a URL Inside Another URL, in HTML, and in a Shell Command All Need Different Treatment

A URL that works in a browser can fail in curl, JSON, or as a query parameter — because each context has different rules about which characters need encoding. Here's why "just URL-encode it" is underspecified without knowing the context, the encoding-within-encoding problem (a URL as a value inside another URL), why & needs HTML entity encoding in href attributes but not JSON, and the + vs %20 space ambiguity.

Bcrypt Generator Jun 22, 2026

bcrypt Work Factors Double With Each Increment — Here's How to Choose the Right One and Upgrade Existing Hashes

bcrypt's work factor doubles hashing time for every increment — work factor 10 is ~100ms, work factor 12 is ~400ms, work factor 14 is ~1.6 seconds. This exponential relationship is the design feature, not a side effect: when hardware gets faster, incrementing the work factor by 1 restores the original time cost. Here's how to choose the right factor, the opportunistic re-hash strategy for upgrading existing hashes without forcing logout, and how to read the work factor from a stored bcrypt hash string.

HTML Entities Jun 22, 2026

In UTF-8, Most HTML Entities Are Unnecessary — But These Five Still Are

HTML entities were invented to survive character encoding translation before UTF-8 was universal. In today's UTF-8 world, é and é are identical — but five entities (&, <, >, ", ') remain essential because they escape characters that have structural meaning in HTML, not encoding meaning. Here's which entities are legacy, which remain necessary, and why   is a special case that's about rendering behavior rather than encoding.

Timestamp Converter Jun 22, 2026

Unix Timestamps: Why 1970, What Happens Before It, and Why 2038 Still Matters for Some Systems

Unix timestamp 0 is January 1, 1970 — chosen somewhat arbitrarily by early Unix developers and now inherited by virtually every language, database, and API. Here's why negative timestamps (pre-1970) work in some systems and break in others, the Y2K38 problem's detailed mechanics (which embedded systems are still at risk), and why JavaScript's 13-digit millisecond timestamps cause a constant source of "date showing as 1970" bugs.

Hash Generator Jun 21, 2026

SHA-3 Exists Alongside SHA-2, Not Instead of It — The Architecture, Length Extension Vulnerability, and 2024 Usage Guide

SHA-3 was developed alongside SHA-2 — not because SHA-2 was broken, but as a precautionary hedge using a completely different design. SHA-2 uses Merkle-Damgård construction; SHA-3 uses a sponge construction. Here's the architectural difference, why Merkle-Damgård is vulnerable to length extension attacks (and how HMAC fixes it), why SHA-3 is immune to this by design, and a 2024 guide to which hash function to use for what purpose.

Random String Generator Jun 21, 2026

Random Strings for Test Data vs Security Tokens: The Difference That's Invisible in the Output

Generating a random string and generating a *secure* random string can look identical — but only one is safe as a session token or API key. Here's how CSPRNGs differ from standard PRNGs (Mersenne Twister can be fully reconstructed from 624 outputs), how alphabet choice affects entropy per character, why test data often needs structured fake data rather than random strings, and why "always use a CSPRNG" is often the simplest safe policy.

Cron Explainer Jun 19, 2026

Cron Doesn't Know What Timezone You Mean — The Server Timezone, Database Desync, and Kubernetes TimeZone Fix

A cron job at "0 9 * * *" doesn't run at 9 AM — it runs at 9 AM in whatever timezone the server is configured for, which may not match the timezone you're thinking in, your users' timezone, or your database's timestamp timezone. Here's the server timezone hidden dependency, why "send at 8 AM" is ambiguous without specifying a timezone, the database timestamp desync pattern, and the Kubernetes timeZone field that finally makes cron timezone-aware.

JSON Diff Jun 19, 2026

JSON Structural Diff Fundamentals: Why Key Order Doesn't Matter, Null Isn't "Missing," and Arrays Can Cascade

{"a":1,"b":2} and {"b":2,"a":1} represent identical data per the JSON spec — but a text-based diff would show them as completely different. Here's how structural diffing handles key-order (unordered per spec), numeric representation differences (1 vs 1.0), the genuine structural difference between null and a missing key, and why array reordering can cascade into multiple "changes" under positional comparison.

Color Converter Jun 18, 2026

Why the Same Color Looks Different on a MacBook vs a Standard Monitor — Color Spaces, P3, and oklch

P3 displays (iPhone, MacBook Pro) can show colors that are impossible to display on standard sRGB monitors — and designers working on P3 screens routinely create colors that look different (less vivid) for much of their audience. Here's what "color space" actually means (gamut + encoding), why the same RGB value looks different on sRGB vs P3 displays, how CSS Color Level 4's color() function handles wide gamut, and why oklch is replacing HSL for building perceptually consistent color systems.