syntheweave
Joined 4 years ago
Joined 4 years ago
For example, if I have a video game where there's collision against the walls, I can understand this as potentially colliding against "multiple things simultaneously", since I'm likely to describe the scene as a composite of bounding boxes, polygons, etc.
But to get an answer for what to do in response when I contact a wall, I have to come up with an algorithm that tests all the relevant shapes or volumes.
The concurrency bug that appears when doing this in a naive way is that I test one, give an answer to that, then modify the answer when testing the others. That can lead to losing information and "popping through" a wall. And the direction in which I pop through depends on which one is tested first.
The conventional gamedev solution to that is to define down the solution set so that it no longer matters which order I test the walls in: with axis aligned boxes, I can say "move only the X axis first, then move only the Y axis". Now there is a fixed order, and a built-in bias to favor one or the other axis. But this is enough for the gameplay of your average platforming game.
The generalization on that is to describe it as a constraint optimization problem: there are some number of potential solutions, and they can be ranked relative to the "unimpeded movement" heuristic, which is usually desirable when clipping around walls. That solution set is then filtered down through the collision tests, and the top ranked one becomes the answer for that timestep.
Problems of this nature come up with resource allocation, scheduling, etc. Some kind of coordinating mechanism is needed, and OS kernels tend to shoulder a lot of the burden for this.
It's different from real-time in that real-time is a specification of what kind of performance constraint you are solving for, vs allowing any kind of performance outcome that returns acceptable concurrent answers.
Later, we were successfully marketed "Wonder Bread" as a clean(as in sanitary) and convenient product, and that set another standard, one sold to housewives. It was basically applying the same strategy that built McDonald's in its early years. At the time of Wonder Bread's introduction, many adults could still recall when products were being sold "from the cracker barrel", mixed homogenously and exposed to pests. All the early packaged foods, including the canned stuff and the sliced bread, were establishing a new norm of the manufacturer guaranteeing freshness to a sell-by date. It was PB&J on sliced bread for lunch and macaroni and cheese for dinner that got a lot of the US through the Depression years.
Continental Europe was simply less interested in this genre of bread - they had competition from other varieties of grain, and different kinds of bread dishes.
If the LLM gives a solid three-star "fast food" education, that is actually considerably better than letting it all fall on the shoulders of the babysitters that currently serve in many classrooms.
So the workflow I end up using for digital inks is: Open both programs, sketch in Krita, copy-paste the vector data into Inkscape, stroke->path, then use tweak tool to sculpt the lines. This adds line weight in seconds-to-minutes. Alternately, I can apply path effects instead of stroke->path, if I want a more programmatic design. If I want to paint, I can copy-paste the shape back into Krita.
And I think that's most of the disconnect in the UI, which the devs have gradually gotten over by adding shadow XML data in the SVG to support Inkscape features while always presenting a rendered result.
Still, the drawing tools aren't consistent about the units they use yet. There is a lot of stuff there, and some of it is just papercuts.
The appeal of Forth is mostly in a principled sense of, if you want Forth to be your interface, you have to build your own Forth, because Forth does as little as possible to structure you. And building your own Forth is not impractical; that's the whole point. It's wonderful as an exercise and can be productive in the right context.
But any highly developed or standardized Forth system gradually converges on being "just another platform." And once it's just another platform, it's an annoying dependency, and you end up demanding more structure for it to help tame the complexity, so the Forthiness habitually erodes.
But this article happened back in 2009, too. I remember it. I may have been part of the problem. It's a signal of an economy that is displacing and reallocating workspaces.
But the only worthwhile analysis is basically "too bad, disruption is happening". Total car/truck sales went into a steep dive in 2020, made a marginal recovery the next year, and then declined again in 2022. The back-to-office coercion only had partial success - commercial real estate is still sinking in many markets. Meanwhile, e-bike sales got red-hot and everyone suddenly discovered Youtube urbanism. California governor Gavin Newsom made a trip to visit BYD recently, and their buses are being trialed in a few cities. You can even pin a lot of the global instability on energy changes - Russia was a big oil/gas exporter, and they seem to have driven everyone away from them at this point.
But this structure is also rather unrelated to the real productivity of the economy - the creatively destructive portion of American business always has something to say about it. If those companies want their labor to be cheaper and less frequently disrupted, they have to go cause grief for one of these rentier businesses, socialize some things and cut into some monopoly inaction or low standards. But they only reach that conclusion by letting the economy get into a highly unstable position first.
And this theme of memory basically holds true through the end of the "Fourth" Generation: games on console were assumed to be memory-starved, and advancements within those generations occurred through larger ROM enabling larger and more animated sprites, more graphically distinct "worlds," full soundtracks and scripted cutscenes. In 1988, the year of the great DRAM shortage, more of the games released used smaller ROM space, and it caused a notable regression back to technically simpler productions.
When you get to the Playstation/Saturn/N64 the approaches diverge quite a bit because the bottlenecks shift according to which platform you talk about. Memory is still a major consideration, but data streaming can be either relatively easy(N64) or a considerable engineering problem(everyone else), while the inverse is the case with data storage capacity. It's easier to discuss specific platforms as stable entities from that era onwards, since there's a cleaner separation of computing resources from game content.
There's a lot of "but wait, there's more" in what's happening around AI.