HN user

frogulis

671 karma

Software-maker and walk-taker

frogulis.net

Posts24
Comments176
View on HN
www.davetech.co.uk 1mo ago

Daves Compendium of Level Select Screens

frogulis
2pts0
www.filfre.net 1mo ago

The CRPG Renaissance, Part 1: Fallout

frogulis
2pts0
oliviamarstall.substack.com 3mo ago

Why Meter Is Not Essential to Poetry

frogulis
9pts0
robertcharboneau.substack.com 3mo ago

Why Use Meter in Poetry?

frogulis
6pts0
jonathan-frere.com 4mo ago

Pushing and Pulling: Three reactivity algorithms

frogulis
128pts21
www.youtube.com 6mo ago

Playable Quotes for Game Boy Games [video]

frogulis
1pts0
www.newyorker.com 1y ago

The new literalism plaguing today’s movies

frogulis
231pts442
frogulis.net 2y ago

Timegen: Time-Based Procedural Animation

frogulis
2pts0
news.ycombinator.com 2y ago

Ask HN: Wikipedia articles that made you say "wow "?

frogulis
16pts18
en.wikipedia.org 2y ago

Hector (Cloud)

frogulis
1pts0
www.epa.gov 2y ago

Lead Poisoning: A Historical Perspective (1985)

frogulis
1pts0
pluralistic.net 2y ago

"If buying isn't owning, piracy isn't stealing"

frogulis
193pts45
www.paulgraham.com 2y ago

The Submarine (2005)

frogulis
2pts0
shin.itch.io 2y ago

Elden Ring GB

frogulis
4pts0
resobscura.blogspot.com 2y ago

Seven Weeks to Venice: History Through Isochronic Maps

frogulis
2pts0
www.ncbi.nlm.nih.gov 2y ago

Histocompatibility and Reproduction: Lessons from the Anglerfish

frogulis
2pts0
photo.stackexchange.com 3y ago

Is it fundamentally possible to capture an orthographic image of the real world?

frogulis
2pts0
frogulis.net 3y ago

Making a “Dollhouse” from Thief Levels

frogulis
2pts0
imois.in 3y ago

Travle

frogulis
2pts0
www.lesswrong.com 3y ago

Evaluability (and Cheap Holiday Shopping)

frogulis
1pts0
p3d.in 3y ago

System Shock 2 Complete Map Textured

frogulis
3pts0
web.archive.org 3y ago

Hunts' Guide to Michigan's Upper Peninsula

frogulis
4pts1
www.worldwidewords.org 3y ago

World Wide Words: Aliment (2012)

frogulis
1pts0
www.steves-workshop.co.uk 4y ago

Aerial Photography (c. 2006)

frogulis
27pts3

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).

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.

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`

Chest Fridge (2009) 4 months ago

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.

Chest Fridge (2009) 4 months ago

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.

Chest Fridge (2009) 4 months ago

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 :)

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.

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.

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.