Words, precision
and power.
The details behind text processing, encoding, and document formats.
✦ AI-powered — understands natural language
Your List Still Has Duplicates After Removing Duplicates
ROT13 Isn't Weak Encryption — It Isn't Encryption
ROT13 provides no security and that's the design. It makes text unreadable by accident and trivially readable on purpose — a different problem from secrecy entirely.
Why E Is One Dot: Morse Code as Data Compression
E is a single dot because E is the most common letter in English. Morse code is variable-length encoding, invented a century before Huffman proved it optimal.
Your Layout Was Tested Against the Easiest Possible Content
Lorem ipsum tests one scenario: medium-length, well-behaved text. Real content is empty, enormous, or an unbreakable 42-character German compound. Test for those.
Word Boundaries and Lookarounds: Precise Find & Replace
Replacing "id" also hits valid, hidden and width. Word boundaries, lookarounds and lazy quantifiers are the three patterns that make find-and-replace precise.
Finding Invisible Characters: Debugging Encoding With Counts
Zero-width spaces, byte order marks, smart quotes and mojibake are invisible on screen and obvious in a character count. Here's how to find and fix them.
Why ALL CAPS Is Harder to Read Than You Think
All-caps text is slower to read, breaks screen reader pronunciation, and reads as shouting. Here's the typography behind why, and when capitals are still the right choice.
Why Your Reading Time Estimate Is Wrong — Reading Speed Research, Word Count Inconsistency, and Character Limits That Actually Matter
The "238 wpm average reading speed" is a median for typical adult prose — the same reader might halve their speed on technical documentation with unfamiliar terminology, and skimming reaches 450-700 wpm with substantially lower comprehension. Here's why domain expertise speeds up reading of specialist content, why the same essay shows different word counts in different tools (hyphenated compounds, URL handling), the LLM token-to-word ratio that matters for API cost estimation, and why Flesch-Kincaid scores miss vocabulary familiarity and conceptual complexity entirely.
Zero-Width Characters Are Used to Watermark Leaked Documents and Bypass Spam Filters — Here's the Full Invisible Unicode Taxonomy
Zero-width spaces and zero-width non-joiners are used to watermark confidential documents — each recipient gets a unique binary pattern embedded invisibly, allowing leaks to be traced back to the specific recipient. Here's the full taxonomy of invisible Unicode characters (U+200B zero-width space, U+00A0 non-breaking space, directional controls), why Python's str.strip() doesn't remove non-breaking spaces, and how invisible characters are used to bypass content filters by breaking exact-match pattern recognition.
Hierarchical vs Flat URL Structure, Taxonomy Collisions, and Multilingual Slug Design — The Slug Decisions That Last Forever
Slug architecture for content series, taxonomies, and multilingual sites involves permanent commitments — a slug embedded in inbound links can never be silently changed. Here's the hierarchical vs flat URL structure trade-off (hierarchy embeds category in URL, making recategorisation cost real), how category/tag slug collisions form when the same term appears in both taxonomies, author slug edge cases at scale (departures, pen names, duplicates), and why path-prefix multilingual URL structure beats subdomains for authority consolidation.
CSS text-overflow: ellipsis Doesn't Remove Text — The Four Truncation Layers and MySQL's Silent Data Loss Bug
CSS text-overflow: ellipsis hides text from view but leaves it in the DOM — search engines index it, screen readers may announce it, and Find in Page finds it. That's correct for display truncation but completely wrong for data-level truncation. Here's the four truncation layers (CSS, JavaScript, API, database) and when each is correct, MySQL's silent truncation that discards characters without error in default mode, and why meta description truncation should use word boundaries rather than character counts.
Reversing Text Is Harder Than It Looks — Unicode Bidirectional Algorithm, Grapheme Clusters, and the Trojan Source Attack
Reversing Arabic text character-by-character produces nonsensical output — Arabic is stored in logical reading order and reversed by a rendering engine, so reversing code points produces different words backward, not mirrored text. Here's how Unicode's bidirectional algorithm assigns direction to each character, why emoji sequences need grapheme cluster reversal rather than code-point reversal, and how the Trojan Source vulnerability exploited RLO (Right-to-Left Override) control characters to hide malicious code in source file reviews.
Why Git Diff Shows the Same Change Differently Than Other Tools — Myers Algorithm, Patience Diff, and Semantic Diffing
The Myers diff algorithm (used by git diff) finds the minimum edit sequence with fewest edit groups — not just minimum edits — because multiple minimum-edit solutions exist and some are far more readable than others. Here's why patience diff wins for code by anchoring on unique lines first, how AST-based semantic diffing represents a renamed variable as one change instead of N lines, and why diff3 merge conflict markers (showing the common ancestor alongside both conflicting versions) make conflicts easier to resolve.