I've seen a lot of discussions in the last week about the Web Environment Integrity proposal. Quite predictably from the moment it got called things like "DRM for the web", people have been arguing passionately against it on HN, Github issues, etc. The basic claims seem to be that it's going to turn the web into a walled garden, kill ad blockers, kill all small browsers, kill all small operating systems, kill accessibility tools like screen readers, etc. The Web Environment Integrity proposal...| Juho Snellman's Weblog
In articles and discussions about monorepos, there's one frequently alleged key benefit: atomic commits across the whole tree let you make changes to both a library's implementation and the clients in a single commit. Many authors even go as far to claim that this is the only benefit of monorepos. I like monorepos, but that particular claim makes no sense! It's not how you'd actually make backwards incompatible changes, such as interface refactorings, in a large monorepo. Instead the process ...| Juho Snellman's Weblog
This blog post describes the level generator for my puzzle game Linjat. The post is standalone, but might be a bit easier to digest if you play through a few levels. The source code is available; anything discussed below is in src/main.cc. A rough outline of this post: Linjat is a logic game of covering all the numbers and dots on a grid with lines. The puzzles are procedurally generated by a combination of a solver, a generator, and an optimizer. The solver tries to solve puzzles the way a h...| Juho Snellman's Weblog
There was a bit of discussion on HN about data representations in dynamic languages, and specifically having values that are either pointers or immediate data, with the two cases being distinguished by use of tag bits in the pointer value: If there's one takeway/point of interest that I'd recommend looking at, it's the novel way that Ruby shares a pointer value between actual pointers to memory and special "immediate" values that simply occupy the pointer value itself [1]. This is usual in Li...| Juho Snellman's Weblog
Game downloads on PS4 have a reputation of being very slow, with many people reporting downloads being an order of magnitude faster on Steam or Xbox. This had long been on my list of things to look into, but at a pretty low priority. After all, the PS4 operating system is based on a reasonably modern FreeBSD (9.0), so there should not be any crippling issues in the TCP stack. The implication is that the problem is something boring, like an inadequately dimensioned CDN. But then I heard that p...| Juho Snellman's Weblog
A coworker was experiencing a strange problem with their Internet connection at home. Large downloads from most sites worked fine. The exception was that downloads from a Amazon S3 would get up to a good speed (500Mbps), stall completely for a few seconds, restart for a while, stall again, and eventually hang completely. The problem seemed to be specific to S3, downloads from generic AWS VMs were ok. What could be going on? It shouldn't be a problem with the ISP, or anything south of that: af...| Juho Snellman's Weblog
A while back, I got a bug report for json-to-multicsv. The user was getting the following error for any input file, including the one used as an example in the documentation: , or } expected while parsing object/hash, at character offset 2 (before "n") The full facts of the matter were: The JSON parser was failing on the third character of the file. That was also the end of the first line in the file. (I.e. the first line of the JSON file contained just the opening bracket). The user was runn...| Juho Snellman's Weblog
In which I go digging into source archives from 40-50 years ago, to figure out why we use XXX to mark dodgy code.| www.snellman.net
Invalid blog post id| www.snellman.net
A lot of people think LLMs are expensive to operate. That was true a couple of years ago, but these people haven't updated their views after an approximately 1000x reduction in prices over two years.| www.snellman.net
Optimizing a breadth-first search of an implicit graph for secondary storage, and memory use in general.| www.snellman.net