HNHacker News
TopNewBestAskShowJobs

vanderZwan

19,433 karma · joined February 4, 2013

submissionscomments
vanderZwan··on We're not done with point clouds
Especially your soul, I bet.
vanderZwan··on Ordinary Abundance
> In Jenner’s century it killed an estimated four hundred thousand Europeans a year.

I don't think that number is correct…

https://ourworldindata.org/smallpox#all-charts

vanderZwan··on We're not done with point clouds
I think they meant it in the sense of coming back to the topic yet again after talking about it fairly exhaustively in an earlier blog post.
vanderZwan··on Tail-call optimization in C is relatively recent (2025)
Thanks to both of you for explaining, I thought Java and JavaScript would have similar behavior here and did not know .intern() had to be manually invoked in the former.

Just to clarify where I started from: JS has the notion of String Primitives and String Objects[0], and concatenating two string primitives results in another string primitive. It's as if it always calls .intern(). Except, since from a user perspective there is no option to not intern it, JS implementations are free to do optimizations that don't seem available to Java. Like avoiding heap allocation for provably short-lived strings in the first place, and not interning them if they are never compared (I don't actually know if it does those optimizations, but I imagine it shouldn't be too hard to prove these things with many short functions).

[0] https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

vanderZwan··on Tail-call optimization in C is relatively recent (2025)
> requiring more instructions for string access

Wait, why would interned immutable strings require more instructions when doing regular string access? You can still point to the start of a zero-terminated C-string, it just requires storing extra metadata like lenght and a string hash somewhere. Which can be done at the negative indices of said pointer.

Or do you refer to the extra rolling-hash pass needed when concatenating two strings to verify if it would result in an already-interned one? Because yes, that's one extra rolling hast pass over the appended string the first time a string is constructed, but after that doing so again likely saves memory and construction time, because any concatenation that would result in an already interned string would avoid actual memory allocation and copying of the string's characters.

Plus string comparisons become cheap O(1) pointer comparisons this way, which is really nice in many use-cases.

And that's not even considering more advanced tricks like interning short strings in the 64-bit word of the pointer to the string itself, relying on the fact that modern memory allocators never return an address with the lsb set, so it can be used to flag it as such[0].

[0] https://squoze.org/

vanderZwan··on Parametron: 50s Japanese computer that uses neither transistors nor vacuum tubes
I don't know much about other quantum computers, so maybe this is a common feature of them, but isn't another interesting thing about this design that it would do reversible computing, making it potentially very low in energy consumption? Or is that what "adiabatic" is a shorthand for in this context?
vanderZwan··on Squeak 6.1
Bootstrapping a Forth in assembly is probably a better option, two birds with one stone.
vanderZwan··on Squeak 6.1
> If you're an unc with a background in Ruby or that era of webdev

Millennials catching strays I see.

vanderZwan··on Squeak 6.1
> Btw, almost all of Javascript's good parts come from Smalltalk.

That's E and Self erasure.

vanderZwan··on Mars Bar from 1991 found – and it's 20g bigger than today's
As your link points out, in Dutch this is also known as "komkommertijd" ("cucumber time"), and in German as "Sauregurkenzeit", ("pickled cucumber time").

The funny thing is that apparently "cucumber time" also existed as an expression in English for a while in the 18th century. One suggested etymological origin for the Dutch "komkommertijd" was as a loan work from the English around the same period, except ttat it survived after the English stopped using it. According to some sources cited on the Dutch wiki page the expression was mainly used by German tailors in London.

[0] https://nl.wikipedia.org/wiki/Komkommertijd

vanderZwan··on Taxi drivers rarely die of Alzheimer's
I do wonder if you can truly control for it in this case, or if doing so doesn't in and of itself introduce a survivar bias that masks a reversal of causality. That is: could the taxi drivers who are already predisposed to have a lower chance of developing Alzheimer for other reasons also be the ones who are more likely to live to be older than the average taxi driver?
vanderZwan··on Assembly Hall of Shame
Also came up with the original ..cantor.dust.. binary visualization tool, which is a tool I never used directly but Chris' presentation of it in 2012 is still one of the coolest talks I've ever seen.

[0] https://github.com/Battelle/cantordust

[1] https://www.youtube.com/watch?v=4bM3Gut1hIk

vanderZwan··on Painting with Gaussians
That's because Gaussian splats are ellipses without any texture of their own (more or less), missing any detail that an actual brush stroke would have. Because the ellipses are so elongated in the finer details it feels like layered brush-strokes, but in the coarse background the "flatness" of the splats dominates. Compare to my stippling notebook[0], an even more simplified image filter (it's "just" tiled circles) with a similar "problem". Turn on the fake vignetting or tilt-shifting, and really turn it up for a similar effect.

If the goal is to create a paintlery illusion then there are undoubtedly ways to mitigate this lack of texture though.

[0] https://observablehq.com/@jobleonard/a-fast-colored-stipple-...

vanderZwan··on Painting with Gaussians
I am very much looking forward to see the results of trying it out, regardless of whether it works in practice! (negative results are also educational after all)

And thank you for looking into the accessibility issue regarding links!

vanderZwan··on Painting with Gaussians
> Each layer is more translucent and specific than the one below it, augmenting the existing structure that's already been built up.

So interestingly, one distinguishing difference between oil paintings and acrylic paintings is that the former has more translucency, whereas the latter can be more easily layered on in a way that covers up the lower layers. This is what, according to one of my mentors in art school who was a painter, allows oil paintings to copy the feeling of real skin so well: it allows a painter who mastered the medium to create a similar subsurface scattering effect. That's also another reason why paintings in real life can look so different than images on a screen, aside from the much greater gamut than even the best color screens we have and the actual surface texture of the paint strokes. The downside is that any mistakes made on deeper layers will come through in higher layers. Especially if you paint using the techniques used by the old masters.

Anyway, this suggests your gaussian splats essentially are closer to "oil painting"-like. Makes me wonder if you could also encode this subsurface scattering and texture somehow, so that viewing the splats in 3D would recreate some of that missing effect of looking at a real painting!

Also, on the other end of the spectrum: do you think the algorithm could be modified to create SVG output? Then it might be useful as an artistic "upscaling" filter too.

(Also, speaking as someone with protanomaly, I'm guessing the links have some kind of turquise or light teal color to them, but it is effectively bright gray to me. And since they have almost the same brightness perception as the white text I genuinely cannot tell where the links are (except when the text calls them out). Since this is likely to affect anywhere between 5% to 10% of all men visiting your blog that might be worth changing.)

vanderZwan··on Painting with Gaussians
As someone with an arts degree (not in painting though, but still) it feels really really weird to see how that animation builds up the image. It feels less random than the old "simulated annealing with vector shapes" techniques, ending up somewhere that feels both similar and extremely far removed from how a human would do it at the same.

It's like… the way a trained human would paint feels kind of like how MSB radix sort makes an array look more ordered, going from crude to refined. The way your algorithm builds up an i|age feels like I'm looking at a radix sort that alternates between a stable MSB and LSB radix sort, which is weird as heck. It's fascinating, really.

vanderZwan··on Xbox goes down. You can't play games you own on disc
So where do either of you lie on the "human rights vs property rights" spectrum? Because that's the real discussion to be had here. To quote Cory Doctorow:

> But when it comes to a "post-politics that is neither right nor left," the definition I turn to most often comes from science fiction writer Steven Brust, who once told me:

> "Left" and "right" have had the same meaning since the French Revolution. If you want to know if someone is on the left or the right, ask them, "What is more important: human rights or property rights?" If they say "Property rights are a human right," then they are on the right.

> That's it. That's the crux. If you think that property rights are a tool for achieving human rights, then you're on the left. You might support the right of farmers to block attempts to expropriate them via eminent domain in order to build a data center, or the right of people to not have their homes or devices searched by cops, or a library's right to own and archive digital books, even if the publishers insist that ebooks are never "sold," merely "licensed."

https://pluralistic.net/2026/07/08/wilhoitian/#human-rights-...

vanderZwan··on More German than many Germans
> Most people complain about the rules in Germany, but I like them. It means someone, or a group of people, sat down and thought about that specific thing and decided on a standard for everyone. When you have to do something, you don't feel lost, because you can just look it up. You don't have to find someone who knows.

Somewhere in the afterlife, Max Weber proudly sheds a tear of happiness while whispering "this guy gets it", hahaha (of course his whole philosophy depends on the rules being as fair as possible, and also that they are enforced uniformly and fairly, but let's not get too lost in the weeds here).

Anyway, lovely article and congrats on finding a place where you feel home!

vanderZwan··on How the words we teach English language learners changed
The author mentions various categories grew or shrank, but always in percentages. Since the list also grew from 2300 to 2800 words that feels like it might distort things a bit: in absolute word count, a category that shrank by 1% lost fewer words than a category that grew by 1% would have gained, no?

Having said that, the categories that shrank all did so by a big enough percentage to also shrink in absolute number of words, so at least that isn't a problem.

vanderZwan··on Diátaxis
Oh like that. I was thinking of situations where "reference" just directly links to the API keyword index, e.g. the P5 docs[0], putting a redundant extra page between that would annoy me too.

[0] https://processing.org/reference

vanderZwan··on Diátaxis
I'm genuinely confused about what one would expect under "reference" that isn't effectively API-shaped (in the context of software). Like, I've never consciously thought of this before but I can't remember a time that they haven't effectively been synonyms in my mind when I'm navigatig documentation.
vanderZwan··on A Texture Lookup Approach to Bézier Curve Evaluation on the GPU (JCGT)
You know, I see that Cem Yuksel is one of the authors, and he is one of those names that keeps popping up in the weirdest places whenever I look up something random that involves graphics and the maths behind it (especially when splines are involved). Is he like one of those "experts know he's a big deal in his niche but non-experts never heard about him" kind of guys?

EDIT: I remember now that the first time I came across his work was over 15 years ago when I was trying to interpolate between two vector shapes, and always had to deal with twists between them. I ended up reading a paper by him showing the fix for Catmull-Rom splines[0]. Ever since I've sounded like mad-man for complaining that 3b1b should have used "centripetal parameterization" for manim, haha, because it also often has these twists when interpolating.

[0] https://www.cemyuksel.com/research/catmullrom_param/

vanderZwan··on CodePen 2.0
As I said in the other comment: jsgist, precisely because it's so bare-bones. The data is stored either in a shareable URL parameter, or in a gist if you give it access to you GH account. Everything else is a minimal PWA in a static html file that makes hosting of it super-cheap, so I don't have to worry about greggman pulling it down.

Anyway, the main uses case I see for these playground sites are:

1) small hand-crafted replications of suspected browser CSS bugs or the like, and testing possible workarounds. That often involves sending them to other members in the team (because I use Linux and Android, two colleagues in the team use Windows, and two using Apple products)

2) trying out some idea for how to make a particular component. Which is effectively almost the same as above, since that needs to be tested across browsers.

So I don't need bells and whistles beyond a simple text editor with code folding. That might not apply to everyone else.

Also, the exact same line of thought applies to js benchmarking sites, which is why I use jsbenchit (which is jsgist but for benchmarks). It also seems to be one of the few benchmarking sites without spurious de-opts of JS code, or noise from GCs triggered by the website itself in the middle of a benchmarking run.

[0] https://jsgist.org/, https://github.com/greggman/jsgist/

[1] https://jsbenchit.org/, https://github.com/greggman/jsbenchit/

vanderZwan··on CodePen 2.0
This is why I switched to jsgist[0] years ago and haven't looked back since. It's very sparse, but it has also avoided feature creep as a result, and since the output is stored as a gist on my GH account I don't have to worry about losing it if the site ever goes down either.

(also, the sister site jsbenchit[1] has been one of the more reliable microbenchmarking tools among the various sites I've tried - most end up triggering deopts or introducing "noise" in a way that makes the output less reliable)

[0] https://jsgist.org/

[1] https://jsbenchit.org/

vanderZwan··on Ron Gilbert started production on Thimbleweed Park 2
> The constant 4th wall breaking is just bad

IMO Ron Gilbert's biggest weakness as a writer is mainly that he has a tendency to use fourth wall breaking for everything, including the final plot twist in most of his games. It was there in his originally planned ending for The Secret of Monkey Island. That ending sort of came back as the actual ending of Monkey Island 2. Then Monkey Island 3, which didn't involve Gilbert, soft-retconned the previous game's ending, then three games later Ron Gilbert came back for Return to Monkey Island and basically retconned everything to use the original ending he planned for the first game!

And I think the main problem with it is that it tends to make the writing feel like the author doesn't dare to admit that they love the world that they created. It's kind of like how some teenagers discover sarcasm and use it everywhere because it makes them feel more "mature" than younger kids who don't understand it yet, without realizing it actually makes it very obvious to everyone else that they are masking their insecurities by acting "edgy".

To me, Gilbert's tendency for 4th wall breaking often ends up feeling similar, like the story is trying to be self-deprecating to mask insecurities about its own writing (and also, it just feels like a total cop-out to avoid writing a ending that ties all the absurd plot threads together into a satisfying pay-off).

Thimbleweed Park had that problem for me, and it kind of soured me on the ending.

Now, I don't want to suggest that the meta stuff is inherently bad. In fact, the ending of Return to Monkey Island actually was pretty satisfying to me. Mainly because of Elaine. At some point there is a very blatantly fourth-wall breaking dialogue you have with her, but unlike other times it feels more like an honest reflection on nostalgia for old adventure series, its stale tropes, how that represents growing older and having to accept that things change or be stunted forever. And it comes back at the ending in a way that makes it very clear that the implied message is "yeah it's all make-belief nonsense, it has flaws, and it's also fine to admit that you love it anyway". You're Guybrush Threepwood with a loving wife who keeps you grounded despite yourself, and the fourth wall breaking doesn't take that away. It's meta but it's sincere meta.

So I guess Gilbert's a fine writer as long as he manages to keep the fourth wall breaking grounded in sincerity. Return to Monkey Island came out five years after Thimbleweed Park, so maybe Thimbleweed Park 2 will have a similar nuance to it. I hope it does.

vanderZwan··on A Texture Lookup Approach to Bézier Curve Evaluation on the GPU (JCGT)
I never heard of the Seiler interpolation algorithm mentioned in the paper before, but the way it uses extra additions and subtractions up-front to turn six interpolations into only three reminds me a bit of the Karatsuba algorithm for multiplication[0]. I wonder if that was an inspiration for it?

Also makes me wonder if this will have uses outside of graphics? Bézier curves are used in other contexts too, aren't they?

[0] https://en.wikipedia.org/wiki/Karatsuba_algorithm

vanderZwan··on A Texture Lookup Approach to Bézier Curve Evaluation on the GPU (JCGT)
This builds on that paper, apparently:

> Yuksel [2024] explained how Seiler interpolation can be used to evaluate polynomial curves, including B´ezier curves, and noted that GPU linear interpolation could be used for the initial linear interpolation steps, with the remaining interpolations done in shader code.

> In this paper, we present the details of evaluating Bézier curves using hardware-accelerated linear texture interpolation and show how to perform all interpolations on the hardware, using both the de Casteljau algorithm and Seiler interpolation. We also compare performance and accuracy against curves evaluated as polynomials in shader code.

vanderZwan··on Schools are adding pepper-spraying drones to help combat active shooters
I fail to understand why this should make the lack of US action on gun control any more justifiable.

Per your linked article:

> But then comes the adjustment the viral chart skips entirely: when Ritchie controls for population, expressing both figures as rates per 100,000 people, the picture shifts. "Gun deaths in the US are now slightly larger than European heat death rates," she wrote.

> I think this comparison is a bit silly," she wrote, "but sympathize with the overall sentiment." Fewer gun deaths in America would not make European heat deaths acceptable, or vice versa. What the data is actually showing, she argued, is something simpler: status quo bias. "Both places take the status quo as a given"—a high-mortality situation in one domain that each society would never accept in another.

vanderZwan··on A digestion of the Jacobian conjecture counterexample
> While this is an extremely quick verification, the construction presented in this fashion appears like a massive miracle. The polynomial {F} has degree seven, so a priori the Jacobian {\mathrm{det} DF} ought to be a polynomial in three variables of degree as large as {3 \times 6 = 18}, so the fact that all non-constant coefficients of this polynomial vanish looks like a massive cancellation involving {\binom{18+3}{3}-1 = 1329} coefficients, which is much larger than the {\binom{7+3}{3} = 120} degrees of freedom for a generic degree seven polynomial of three variables. So finding such a polynomial looks highly unlikely to be located by brute force.

Sounds like the most interesting part would be learning what approaches the LLM did use to see if that's reusable elsewhere. I'm guessing that's what the rest of the article is about? Because I also couldn't follow the maths any more.

vanderZwan··on Incremental – A library for incremental computations
So I remember having physics homework a quarter century ago at university where we had to use Excel to determine a static electric potential field, by defining all cells in the grid as "the average value of the four surrounding cells", except the edge cells and source/sink cells which would get actual concrete values.

I distinctly remember being amazed that it would just iterate until it reached equilibrium (maybe we had to change some setting somewhere first though, I never really used Excel before or after that). I think you could change a value mid-iteration, and the grid would just continue on with the previously calculated cell values, instead of start over from scratch. That's basically "weakly connected", isn't it?

(anyway, the real challenge is to find a practical use for Excel's hidden fractal powers https://www.youtube.com/watch?v=b-Fa6HtvGtQ)

← PreviousPage 4 of 34Next →