Web performance, file and document workflows, text tooling and developer utilities
Daniel is a front-end developer who writes about the things that pass through a working day: image and file formats, web performance, text and data wrangling, and the document workflows — signatures, PDFs, conversions — that sit between a file and the person waiting for it. He likes explaining technical trade-offs without the jargon, and says where a rule stops being technical and becomes legal.
Expertise
Web performance
File formats
PDF & documents
Text processing
Developer tooling
Track record
—Writing since 2016
—172 guides published on Allin
—57 of them on web
—620 sources cited
—from 154 distinct publishers
—Publishing on Allin since May 13, 2025
How Daniel works
Daniel starts from the specification — the format's own standard, the browser's documented behaviour — and checks it against the file in front of him rather than against the claim in a blog post. When a limit turns out to be legal rather than technical, he says which of the two he is describing.
Articles by Daniel Okonkwo
Start here
Ranked by how many pages of this site link to them, not by traffic.
A spreadsheet file stores both the formula and the last answer Excel computed. Stripping the formula leaves the stored answer — and leaves a blank wherever the file never carried one.
Deduplication compares whole rows exactly, cell type included. Five identical-looking rows came out as three, because one held a number, one a string and one a string with a leading space.
Three nines sounds like a promise until you divide it into minutes. What 99.9 % buys per year, per month, per week and per day; why the measurement window matters far more than the extra nine; and the two different months this tool uses for the same slug.
Measured on the resizer itself: Fill is a centre crop with no focal point, and a portrait photo loses 38.9 percent off the top for an X-sized banner. Plus the current published dimensions, each with the date it was checked.
The generator's random source audited line by line, what SAE actually removes, why transition mode gives most of it back, and the thing every guest-network guide leaves out.
A JPEG can carry six separate metadata blocks, not one. We built a file holding all of them — coordinates, camera serial, a hidden thumbnail, XMP, IPTC, a comment — pushed it through the cleaner, and read the output byte by byte to see what survived.
Entropy prices one attack: offline guessing against a stolen hash. Above roughly 90 bits the number stops deciding anything — and the meter on this site under-reported a random 20-character password in 300 draws out of 300.
0800 is not “eight o'clock” and not “08:00” — it is “zero eight hundred”, with a zone letter on the end. The four digits, the spoken form, midnight at 0000, the argument about 2400, and the reason 12-hour notation cannot settle noon.
Golden hour runs from +6° to −4° of solar elevation and blue hour from −4° to −6°, which is why it lasts forty minutes at the equator, over an hour at mid-latitudes, and above 72.6° in June does not happen at all. The thresholds this calculator uses, checked against its own output.
Blur and pixelation are reversible — not by undoing the maths, but by guessing forwards. Against this tool's own blur and pixelate modes, a recovery attack returned the hidden value at rank 1 of 10,000. Both modes have since been removed. Here is what is left, and why it cannot be attacked the same way.
One structural difference explains everything else: TAR does not compress, it only stacks; ZIP compresses each file on its own. Measured on 60 small source files, that is the difference between 1,809 bytes and 14,686.
Four extensions, three of them the same box with different lids. Rename an XLSX to .zip and it opens — that single fact explains the whole family, and explains why XLS, which does not, is the one still causing trouble.
Measured, not asserted: 90 short real phrases across six languages, none declined and 68 right — 76%, falling to 64% under sixteen letters. Four of the wrong answers came back at 100% confidence.
Numbering a tidy document is trivial. The cases that bite are a page turned sideways, a Letter sheet among A4 ones, a print file with bleed, and a document that already prints its own number. All four were tested: on the first three the number lands exactly where you asked, and the fourth is not detected at all.
A PDF carries its metadata twice, in two stores that can tell different stories, and neither of them is the whole story. Here is what is actually in the file, what clearing it removes, and the two things that survive every wipe.
01/02/2026 is 1 February in most of Europe and 2 January in the United States, and nothing in the string says which. ISO 8601 fixes that, sorts as text, and stops being ISO 8601 in four specific places that RFC 3339 rejects.
How to tell a sound secret-key generator from an unsound one, using this one as a worked example: which random source it calls, how to compute the entropy yourself, and what actually breaks the day you rotate the key.
Numbering starts at 1 and cannot be set to 0, the alignment is spaces rather than zeros, and the remover undoes eight of the eleven separators without touching the indentation. What it still cannot do is tell your numbers from its own.
Three encodings, one visible difference: %20 or +. The builder's form mode matches URLSearchParams byte for byte on seventeen values — but give it a base URL with a fragment and every parameter lands inside the hash, where no server sees it.
A PDF stores glyphs at coordinates — not lines, not paragraphs, not a reading order. Extraction rebuilds the text from those positions, which is why two columns come out interleaved, a table loses its cells, and a scan gives you nothing at all. Measured by running the tool.
Scaling until the loudest sample hits a ceiling barely changes how loud something sounds. Measuring in LUFS does. This tool measures — in two passes, correctly — and then prints a result it never verified, which on ordinary material can be well over a decibel adrift.
One ffmpeg command, no encoder, and a result whose video stream is byte-for-byte the one you started with — verified by checksum. Plus why the file barely shrinks, and the difference between a silent track and no track at all.
Four real stylesheets run through the minifier, measured raw and after gzip. Stripping every space saved 48, 103, 104 and 147 compressed bytes; stripping comments saved 57, 1 358, 2 420 and 1 042. Plus the five inputs this minifier breaks.
One emoji is 1 character, or 7, or 11, or 25, depending on who is counting. Which one your form, your database and your SMS gateway mean — and a one-paste test that tells you which you are facing.