Repository navigation
fix(posts): corrections from the final cold reads - #7
Merged
Merged
Conversation
The previous commit derived 2047 as the size of a length range and then overcorrected, telling the reader that reading it as 2^11 - 1 was an incidental resemblance. It is not incidental. The answers fill every length from 2 up to the ceiling, so the count is ceiling - 1, and the ceiling is by construction the first power of two at or above n. A count of 2^k - 1 therefore falls out every time. The original intuition had the right number; what it had wrong was the mechanism, since no per-level binary choice is involved. Checked by running the search at n = 5, 9, 17 and 1025, which give 7, 15, 31 and 2047 answers against ceilings of 8, 16, 32 and 2048, each covering every length from 2 to its own ceiling exactly once. Those smaller figures are now in the post. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Two cold reads of the published text, one senior-SRE and one crypto, returned FIX FIRST on all four. The checkable findings were verified by running the challenge solver and by Minh confirming facts the sources never recorded. Most were real. Merklision. Three claims were wrong: - "Most lengths do not survive" the padding check. All 1024 survive - they have to, or the total cannot reach 2047. The step is a guard, not a filter. - Rule two was described as worth about ten collisions, inherited from the original. Appending repeatedly cascades, so every length from 1026 to 2048 collides: 1023, not ten. The "twenty against 2020" framing the post was built on was never the real situation. - The n=5 worked example counted four collisions and silently skipped length 7. It is five. Where 2047 comes from is now derived rather than asserted. Each row yields a contiguous band of lengths up to its own ceiling, the eleven bands tile 2 to 2048 without overlap, and the counts halve down the tree: 1024 + 512 + ... + 1. So 2^11 - 1 is a geometric sum with one term per row - not the coincidence the previous commit claimed, and not the per-level binary choice originally assumed. The second diagram now shows the tiling instead of restating the arithmetic. The homelab posts. The worst was a mechanism error: a port forward is a translation rule, not a listener on the modem. The listeners are the machines behind it, most of which are the author's own and do get patched - so "four listeners, none of them yours, on ISP firmware" was false three ways. The real argument is stronger: one reachable service per forward, some on appliance firmware that will never be updated. Minh supplied the reason forwarding was not an option at all: Vietnamese residential lines sit behind CGNAT with no public address. Dynamic DNS does not rescue that, which the post now says, because it is the answer people reach for. The decision was made before the security argument entered it, and the post no longer pretends otherwise. Also corrected: the hub has two listeners, not one, since Algo leaves SSH running; WireGuard silence hides the service identity, not the port; Chrome Remote Desktop relays when it cannot get direct; the cost comparison cannot be made at all without the licence's billing period; Algo builds a road-warrior server, so reaching the LAN needs a peer at home routing for the subnet, which the diagram asserted and the prose never established. Mining: the nodes ran on bare metal, which is the condition under which containers remove passthrough rather than moving it down a layer. A6000 and 3090 share a die, not a core count, and the virtualisation is gated behind a licence. The device plugin advertises and allocates; NVIDIA's container runtime injects. The ethermine payout-floor sentence implied revenue in a post that records none. Ownership is now explicit in both places it was ambiguous. The hardware, the network and the cloud accounts were all Minh's. The hostAliases workaround was against a mining-pool DNS rule he had written himself on his own network - which is why it stays in: defeating his own detection in a minute with a stock Kubernetes field is the evidence for the companion post telling defenders to watch utilisation rather than names. Cryptojacking: "four GPUs per VM" was wrong when written. An inference credential does not meet the code-execution bar the post sets one paragraph earlier, so the example now points at the platform around it. "Cannot be made profitable" is downgraded to the impression it is. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Merklision: the current gist solver yields 2048 collisions, one per length from 1 to 2048, not 2047. The 2020 solver harvested rewrite rows only inside the padding branch, so the unpadded final pair, whose rewrite is the one-element answer, was never collected. The post now derives 2048 as twelve tiling bands, explains the missing one, drops the claim that a one-element answer needs a preimage, and says the author was not competing in 2020. Stale "twenty against 2020" framing removed from the summary, TL;DR and closing. Five dollars: the security argument leads again, as in the original, with CGNAT as the second and decisive reason on this line. The camera and the LAN-routing peer are hypothetical, as the original had them. "Most flats in Vietnam" narrowed to the author's own line. Mining: hostAliases bullet removed. Ethermine chosen because its floor suited a small hashrate, not because it was the lowest. Phoenix Miner's fee is 0.65 percent. Both the 3060 and the 3080 were bought for this. Cryptojacking: hostAliases anecdote removed, heading restored to the original's joke, EIP-1559 was days away, not weeks. Sources: teamkhunglong.github.io/_posts and gist af8e19e2, both revisions. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #6, which merged before these landed. The four posts are live with the errors below.
Two cold reads of the published text returned FIX FIRST on all four. Every count was then re-checked against the original sources: the old blog at
teamkhunglong/teamkhunglong.github.io, and both revisions of the merklision gist.Merklision
Where 2047 came from is now explained rather than asserted: the first revision of the solver harvested a row's rewrite only inside the padding branch, and the final pair (two elements, even) never pads, so its rewrite, the one-element answer, was never collected. The same-day tidy of the gist moved the harvest out of the branch and was never re-run. The twelve bands tile 1 to 2048 and sum to
2^11; the2^11 - 1in the original was that series minus the dropped term. "About five teams solved it" restores the original's hedge.Five dollars instead of an open port
A port forward is a translation rule, not a listener on the modem, and the exposed services are the machines behind it, some on appliance firmware nobody patches. That argument leads, as it did in the original. CGNAT is the second reason and, on Minh's line, the decisive one; the "most flats in Vietnam" generalisation is gone. The camera and the LAN-routing peer are hypothetical, as the original had them, and the prose no longer implies forwards that never existed.
Also: the hub has two listeners, not one, because Algo leaves SSH running; WireGuard's silence hides the service identity, not the port; the TeamViewer comparison cannot be made without the licence's billing period.
Mining ETH in a homelab
The nodes ran bare metal. A6000 and 3090 share a die, not a core count, and the virtualisation is gated behind a licence. The device plugin advertises and allocates; NVIDIA's container runtime injects. Both the 3060 and the 3080 were bought for this. Ethermine was chosen because its floor suited a small hashrate, not because it was the lowest. Phoenix Miner's fee is 0.65 percent, T-Rex's one percent.
The
hostAliasesbullet is removed from this post and the anecdote from the companion post. The original line read as dodging someone else's DNS admin, and Minh chose to drop it rather than re-frame it.The economics that make cryptojacking work
"Four GPUs per VM" was wrong when written. An inference credential does not meet the code-execution bar the post sets one paragraph earlier, and the defensive bullet now says so. "Cannot be made profitable" is downgraded to the impression it was. EIP-1559 was days away, not weeks. The heading is the original's joke again.
Verification
hugo --minify -Dclean with the theme submodule present,content/ASCII, zero hex in any post, both Merklision SVGs render in light and dark, cold read of the rewritten post by a fresh subagent with its findings applied, current gist solver re-run: 2048 collisions, lengths 1 to 2048, each once.🤖 Generated with Claude Code