Your "tilting at the windmill" phrasing is interesting. I don't get the sense from your tone otherwise that you disapprove of it or think it's pointless.
HN user
frogulis
Software-maker and walk-taker
frogulis.net
This explosion of optionality types is (the most important) topic of Rich Hickey's "Maybe Not" talk. I recommend it!
The short version is: the shape of a type is inherent to the type itself, but the optionality of its members is dependent on the situation. A type system that solves this problem separates these concepts to allow for this distinction.
I _suspect_ it's possible to implement something like that in typescript but I haven't tried it myself (and I doubt it's very ergonomic).
Perhaps the beginning of a new vowel harmony phenomenon in English
Wonderful to see Durak mentioned. I learned it in its Vietnamese form (Tấn) and introduced it to friends in Australia where it was a big hit. We eventually settled on calling it "Dickhead" or "Dumbarse" which seems like an appropriately Australian interpretation of the source material :thinking:
From my experience, the reason CORS is hard to understand is that it's somehow inverted from the default "shape" of security in web dev.
We easily form the intuition of the client being a by-default untrusted entity, and checking whether it has the privilege of accessing this data, where the server is the arbiter of that access.
CORS is so inherently different to that, and while the information is easily available, it requires a short but careful read to grok the idea -- which a dev tunnel-visioning towards getting their application code written may not wish to slow down for.
Went looking for that article out of curiosity. For what it's worth, I think the original commenter expressed a fair opinion politely, but the "author has issues" commenter was unnecessarily unpleasant. Neither of those should prevent you from writing how you want!
If you've got the ability to play the original, it still held up fantastically when I last played it properly (2-odd years ago).
I tried emulating it a few years before that when I didn't have any workable screen for my PS2 and that was not so good. A game that pushed the original hardware to its limit also pushed the emulator past its limit. Might be better with more powerful hardware than mine?
However, I've heard the remake is perfectly good, and surely easier to play with modern PC hardware!
I wrote a response to this, but then I realised I was responding to the claim that modern media was more derivative, rather than what you actually said, which was that modern media is more _meta_.
Can you go into that a little more? Do you have specific examples that make you sad?
The first example that comes to my mind is the show Community, which I really enjoy, and which doesn't make me sad at all.
P.S. an article I linked to in my original response was https://www.filfre.net/2025/01/the-crpg-renaissance-part-1-f... which I mentioned as it talks about a historical standout in the genre but puts it in the context of the copycats and the schlock. It's now irrelevant to my comment, but I'd like to link to it anyway.
Deployment is pain specially on commodity VPS.
Oh? Why is that?
that foo which accepts a bar, frobnicates its internal state, and emits a mutated baz
Tangential, but that reminds of the Haskell "hoogle" tool which allows searching for functions _by type_ across a large database of libraries, even by abstract types. So you might wonder "hmm what's that function that has a type structure like `t a -> (a -> t b) -> t b`?" and it'll happily tell you that it's monad `bind`
Boy that unc/uncer looks tantalisingly close to modern German uns/unser. Wiktionary seems to have it descending from a different PIE root, n̥s vs n̥h -- I'm not at all familiar with PIE though.
Even if you put a gun to Bill Gates' head, signing over all his wealth to you would still require a lengthy process, not just handing over some keys.
A friend suggested a bottom-hinged door like that on a garbage chute, though well sealed, and as wide as the fridge, so the sides of the door don't get in the way of storing long objects in the fridge.
That's what makes me think they've simply mixed up horizontal and vertical, because you can't (conveniently) store things on top of a chest fridge, but you can store things on top of a vertical fridge. Basically I think they've got a coherent point if you swap vertical and horizontal throughout their whole comment.
They seem to have mixed up horizontal and vertical, and if they did, then my reading is that they're saying the cost of the extra floor space (and the loss of the "shelf" space on top of the fridge) when using a chest fridge makes the economics unfavourable for people in dense urban areas, even with the energy savings.
At least, I'm hoping that's what they meant. If they really meant horizontal and vertical in the way they used it then I've got no idea either.
Gorgeous photos. One point of feedback: I went to your shop to view prints, and while it was nice to see them "in situ", I couldn't see the actual images because of how they small they were in frame!
I really enjoyed your post and was surprised to see it not posted here. I guess now I can leave the comment I wasn't able to leave on lobste.rs :)
The format made for good lunchtime reading -- the care you put into making it easily readable shows. Are the illustrations actually hand-drawn? Looking forward to the next part(s) that you hinted at!
My current company uses Angular, and uses it reasonably well. Prior to working there, I'd never used Angular, so I feel well-equipped to comment on this.
We've also recently absorbed a vanilla(-ish) JS codebase largely developed by one dev which provides a point of comparison.
Angular has plenty of boilerplate and idiosyncrasy, but it being opinionated and "pattern-y" has advantages when you want devs who infrequently touch it to be able to jump in and make changes with some level of consistency.
Additionally -- and this is anecdotal, but I suspect it's a common part of working with a plain JS codebase -- tracking the flow of data through the Angular application is usually soooo much more straightforward, even when it involves navigating through many layers and files. The Angular codebase only has N types of things, and they tend to relate to each other in the same ways, and they're often quite explicit (such as explicitly defined component element names in HTML templates). In contrast the JS app has whatever it has built up with very few constraints keeping it consistent. Obviously that could be improved with discipline and structure, but reducing that requirement is one of the things a framework gets you.
I can't comment too much on React as my one experience working in a proper React codebase was in a team who were largely as clueless as me :)
At least for me on mobile with a dark mode address bar, it's usually quite hard to see it.
This site will often have a thin black bar along the top of the page as a mark of commemoration for someone noteworthy who has recently died.
Funny that I could guess that the link would be to that CGP Grey video :D
Adam Something has a video responding to it that's worth watching too: https://www.youtube.com/watch?v=oafm733nI6U
Driving in Melbourne -- I won't generalise to the wider Australia -- is often much the same.
Comparing to the experience of being a passenger on a bike in Saigon, the level of cooperation there is way higher, possibly due to a sort of necessity. I had this feeling while observing traffic there, that, while the latency and throughput of the roads during high traffic times are still kinda awful, at least for bikes there's a slow continuous progress that simply wouldn't exist without cooperation.
Funnily enough, my experience driving in Los Angeles was distinctly not terrible. Traffic was usually good enough to drive in, though there was very little regard for the speed limit on the freeways! I suspect I may have just been lucky to miss the worst of the traffic.
First class functions and iterators are probably examples of what they mean, in terms of language features that obsolete (GoF) design patterns
It occurred to me at some point that what many "fine" foods have in common is fermentation. Tea, coffee, chocolate, cheese, alcohol, cured meats, dry aged meats, others I can't think of right now. Makes sense, as the complex biological processes are of course going to lead to the culinary complexity and variety that is necessary for connoisseurship.
Is there any reason today to use RSS over Atom? Atom sounds like it has all the advantages, except maybe compatibility with some old or stubborn clients?
Tangential question: what's an "armory gym"? Google gives me a specific gym (in Australia) called "The Armoury".
My read is: it's saying that if your executive compensation (etc.) is capped to a portion of the cost of care, and if your execs want to be paid more (etc.), then the required change is for the cost of care to increase.
Nothing special about the 20% proportion, just that it's proportional to a number which results in perverse incentives.
Which is funny, because my mind filled in the word "social media" and I thought it was a fair point, until I got to the word "Cable".
I found the thesis of this article difficult to nail down
By the sounds of it, the author would be okay with that!
Been a while since I've watched/read it, but I remember the ideas in Maybe Not being quite interesting.
To me, the really important idea wasn't a criticism of static types in general.
Instead it was the idea that static typing in most (all?) mainstream implementations conflates concepts that should be separate, specifically the shape of the information that we have (e.g. what fields of what types), and whether a particular bit of information is available and required (e.g. nullability).
He contends that the former belongs in our usual "type definition", whereas the latter relates instead to a given context. For example, my PassportForm type always has a date-of-birth field in its _shape_, but whether it's statically required/present to exist depends on whether we're at a HTTP API boundary, an internal domain function boundary, writing into a database.
It sounded like that kind of "nullability masking" was intended as a feature of Spec, but I don't get the impression it was ever implemented.