Words, precision
and power.
The details behind text processing, encoding, and document formats.
✦ AI-powered — understands natural language
Why `"abc" is "abc"` Is True But `"hello world" is "hello world"` Might Not Be — String Interning, Ropes, and Concatenation Complexity
Why Quicksort Fails When Data Doesn't Fit in RAM — External Merge Sort, Timsort, and Database Sort Optimisation
When data exceeds RAM, the bottleneck shifts from CPU comparisons to disk I/O — and quicksort's cache-friendly random access pattern becomes a liability while merge sort's sequential access pattern becomes an asset. Here's external merge sort's two-phase approach, why Timsort sorts nearly-sorted real-world data in close to O(n), how database query planners use B-tree index order to avoid explicit sort steps, and why `LC_ALL=C sort` produces different output than locale-aware sort on the same data.
PCR Duplicates, Git's Content Hashing, and Cross-Language Plagiarism — How "Duplicate" Means Something Different in Every Technical Domain
PCR duplicates in DNA sequencing aren't defined by identical sequence text — they're defined by identical mapping position, because sequencing errors mean true duplicates may differ by a single base. Here's how Git's content-addressable storage deduplicates by exact SHA hash, why CMS media libraries need perceptual hashing to catch visually-identical-but-byte-different logo uploads, and why cross-lingual plagiarism detection requires semantic embeddings rather than text matching.
The 300-Year Unbreakable Cipher That Got Broken — Vigenère, Enigma, and What Every "Unbreakable" Cipher Has in Common
The Vigenère cipher was unbreakable for 300 years — until the Kasiski test revealed that repeated keywords create periodic patterns detectable by measuring distances between repeated ciphertext sequences. Enigma failed not through mathematical weakness but through operator protocol flaws (predictable message formats, the reflector's no-self-encryption constraint). The one-time pad is provably unbreakable but impractical. Here's what each historical failure teaches about what "secure" actually means.
Why a Single Timing Error Can Corrupt an Entire Morse Message — and How Operators and Algorithms Recover
Morse code encodes information entirely in time ratios — and a single timing error can corrupt every character from that point forward because there are no explicit character boundaries, only inferred ones from timing. Here's how experienced operators resynchronise using context, prosign patterns, and message structure; how automated decoders use Hidden Markov Models and Viterbi algorithms; and why CW Morse can communicate at -10 dB SNR where voice needs +10 dB.
Why Lorem Ipsum Leaks Into Production — Placeholder Text in Design Systems, Empty States, and API Docs
Lorem Ipsum serves different functions in design mockups vs component library documentation — and confusing them produces staging environments and production pages with Latin placeholder text that leaks through QA. Here's why CSS placeholder (form input hint text) and design placeholder text are completely different things, why empty states designed with Lorem Ipsum data are never properly designed for the zero-data case, and why API documentation should use example.com email addresses not Lorem Ipsum values.
How Character Frequency Reveals Who Wrote a Text — Stylometry, Forensic Linguistics, and What It Detects in AI Writing
Stylometry identifies authorship from writing statistics — function words (the, in, upon, of) are largely unconscious style choices that persist across topics, making them better authorship signals than content words. Here's the Federalist Papers attribution case, character n-grams for below-word-level fingerprinting, what character frequency reveals about AI-generated text (more even vocabulary distribution, different punctuation patterns), and how byte frequency identifies text encoding.
camelCase vs snake_case Isn't a Style Choice in APIs — It's a Contract, and Changing It Breaks Your Consumers
camelCase in JSON APIs is a contract, not a preference — switching to snake_case between API versions is a breaking change even if field semantics are identical. Here's how case style encodes mutability (SCREAMING_SNAKE_CASE signals constant), why kebab-case is limited to CSS/HTML/URLs (the hyphen is a subtraction operator in real languages), and the one-boundary transformation pattern that keeps database snake_case, API camelCase, and frontend TypeScript aligned without chaos.
AI-Generated Content Has a Whitespace Fingerprint — Why Normalisation Matters Before Publishing or Processing
AI-generated content carries whitespace patterns — double-line-spacing from training data, inconsistent bullet markers, occasional zero-width Unicode characters — that cause rendering issues when pasted into CMSs. Here's how to normalise whitespace before LLM input (reducing tokens and improving output), why whitespace sensitivity in text diff changes what differences are shown, and the specific Word document whitespace artifacts (non-breaking hyphens, soft hyphens, figure spaces) that appear on export.
The "238 wpm" Average Reading Speed Describes No One Precisely — What Reading Time Estimates Actually Mean
The 238 wpm reading speed used in "8 minute read" estimates comes from a 2019 meta-analysis of college students reading non-fiction prose — it doesn't apply to technical documentation (75-150 wpm), fiction (300-400 wpm), or scanning (700+ wpm). Here's the speed-comprehension trade-off that makes speed reading programs ineffective, how Medium adjusts reading time for images, and why word count reading time estimates are calibrated for English and overestimate reading speed for German while underestimating it for Chinese characters.
CSS text-overflow: ellipsis Hides Text — It Doesn't Remove It: When to Truncate at Display vs Data Layer
CSS text-overflow: ellipsis hides overflowing text but leaves the full content in the DOM — search engines read it, screen readers may announce it, and selecting the text copies the full string. Server-side truncation actually shortens the content before it reaches the client. Here's when each is appropriate, multi-line -webkit-line-clamp, the semantically superior details/summary alternative, and why meta descriptions should be written for readability not display-limit truncation.
When Text Reversal Is a Real Algorithm Tool — Log Analysis, Palindromes, and Why Python's [::-1] Isn't Always Safe
Python's [::-1] reverses code points, not grapheme clusters — reversing "café" with a combining accent produces an accent attached to the wrong character. Here's text reversal beyond visual effects: stack-based reversal in algorithms, line reversal with the Unix tac command for log analysis (most recent first), correct Unicode-aware palindrome detection, and why word-order reversal is used for RTL localization testing before real Arabic/Hebrew text is available.
Why Git Merge Conflicts Occur Exactly Where They Do — Three-Way Merge, diff3, and Semantic Conflicts
Three-way merge — Git's algorithm for combining two branches — uses a third input (the common ancestor) to determine who changed what, enabling automatic combination when edits don't overlap. Here's why merge conflicts occur exactly where they do (both sides changed the same region), the diff3 conflict format that shows the base alongside ours/theirs, why "no merge conflicts" doesn't mean the code is correct (semantic conflicts), and why "ours" and "theirs" flip meaning between git merge and git rebase.