Typically, what's nicer is the absence of other features that interfere with the important ones.
For example, Prolog isn't a general purpose functional or imperative language: you can assert, retract and query facts in the automatically managed database, risking only incorrect formulas, inefficiencies and non-monotonicity accidents, but not express functions, types, loops, etc. which could have far more general bugs.
Meaningless toy examples have the problem that they can appear to make sense, planting the seeds of terrible ideas.
If in a course example Dog extends Animal, it can be an arbitrary demonstration of language mechanisms (with an uncontroversial is-a relationship) but even in that case it is implicitly suggested that it is a good or "normal" design, implying an alarmingly complex program that has good reasons to deal with those two types.
Such a program is usually not described for brevity, giving the false impression that it exists: if the problem were analyzed with any diligence, usually Dog would appear a completely pointless complication.
More or less, this is the https://en.wikipedia.org/wiki/Lie-to-children debate. It'd be nice to always be able to learn the best known things up front, it's not usually a particularly practical approach to learning a complex field.
I.e. planting a terrible idea is alright so long as by the end the terrible idea was able to be replaced down the line in less time than trying to learn everything "correctly" from the get go. The latter part is where I felt the class failed, it held on to bad idea through the end instead of quickly replacing it with the "next level" of conceptual thinking.
The problem is that treating the incorrect simplification as good can be very tempting for teachers.
For example, in an introductory physics course teaching Newtonian dynamics without the brutal complications of special relativity and general relativity is fine because it doesn't take much to explain that it is an approximation and it is good enough for "everyday" situations. Students are aware that a better model is available: worst case, they try to get away with not using it.
On the other hand in an introductory programming course teaching that if you have Animals in the program the dog instances "should" belong to a Dog subtype is logically consistent and elegant; the only opposing force is the abstract and uncool engineering principle of keeping software simple, and many teachers are dogmatic and enthusiastic.
Everything seems drastically simpler after you've already learned it vs when you're trying to learn everything about it for the first time. Hell, even explaining what the difference between a class and a struct is in C++ ends up going into weeds about public/private that makes many people who just learned what variables were a few weeks ago, let alone trying to teach them what different attributes of classes do by comparing best practices of their usages.
I.e. they aren't trying to say what is elegant yet, they are just trying to get people to understand what the building blocks of classes they can compare are even supposed to do so they can get to comparing when you'd do different ones.
But there are bad teachers and they tend to be bad regardless of the example chosen.
Canada might be able to do that, but do also remember that the USA's president keeps talking about making Canada into just another state.
There's a big risk that everyone says "I want to be in the country that wins the next war. Therefore, China." and this then becomes a self-fulfilling prophecy because all (or enough of) the talent made the same choice.
Delusional rockstar engineers might really have this kind of opinion of their LLMs and their colleagues.
With less sarcasm, how bad is Microsoft as a workplace? The source of this kind of naively arrogant proclamation can be anything from a single rotten apple, to a critical mass of unchecked idiots in the same business unit, to normal for the company culture, to a top-down mandate.
And hardware raytracing is on the same trajectory as hardware rasterization: devs finding ways to repurpose it, leading to pressure for more general APIs, which enable further repurposing, until hardware raytracing evolves into a flexible hardware accelerated facility for indexing, reordering, etc.
It is unreasonable to expect to run the same graphics code on desktop GPUs and mobile ones: mobile applications have to render something less expensive that doesn't exceed the limited capabilities of a low-power device with slow memory.
The different, separate engine variants for mobile and desktop users, on the other hand, can be based on the same graphics API; they'll just use different features from it in addition to having different algorithms and architecture.
> they'll just use different features from it in addition to having different algorithms and architecture.
...so you'll have different code paths for desktop and mobile anyway. The same can be achieved with a Vulkan vs VulkanES split which would overlap for maybe 50..70% of the core API, but significantly differ in the rest (like resource binding).
But they don't actually differ, see the "no graphics API" blog post we're all commenting on :) The primary difference between mobile & desktop is performance, not feature set (ignoring for a minute the problem of outdated drivers).
And beyond that if you look at historical trends, mobile is and always has been just "desktop from 5-7 years ago". An API split that makes sense now will stop making sense rather quickly.
Different features/architecture is precisely the issue with mobile, be it due to hardware constraints or due to lack in deiver support. Render passes were only bolted into Vulkan because of mobile tiler GPUs, they never made any sense for desktop GPUs and only made Vulkan worse for desktop graphics development.
And this is the reason why mobile and desktop should be separate graphics APIs. Mobile is holding desktop back not just feature wise, it also fucks up the API.
You don't need a "proper" random selection: if your points are sorted deterministically and not too adversarially, any reasonably unbiased selection (e.g. every Nth point) is pseudorandom.
Why do you think the mentioned "color-centric" image processing operations deserve a specialized file format, rather than building and using a transient index in memory when it is useful? Do you have some special use case in mind?
Any interactive application, for instance, can be expected to render the image to the screen (repeatedly); any GPU use for texture mapping needs pixels sorted by location, regardless of whether pixel values are palette indices or explicit colours; many image processing tasks, like segmentation and drawing, need efficient access to pixels at arbitrary locations or near already processed locations.
Thanks for asking, C2PM isn’t meant to replace raster formats it serves as an intermediate format for workflows where users repeatedly operate on color groups (palette swaps, region recoloring, mask generation, etc).
In a standard image, every color swap requires rescanning all pixels.
In C2PM, the color to pixel index is already stored, so repeated swaps or multi-color operations become O(1) per color instead of O(P) per operation.
It’s designed for tools where color groups matter more than spatial order, not for real-time display or GPU textures.
Weapons and violence in Jane Austen's novels include characters hunting with shotguns and (remotely implied) armed Navy ships.
Nothing comparable to treating a mobile suit like an extension of the body, or killing people, or both at the same time (e.g. the "duel" between Char Aznable and Kycilia Zabi).
That's why I decided to allow arbitrary order within the file. In this way you can group notes by instruments and the parser will deal with reordering them.
I also plan to create a flag for the CLI tool that reorders the lines within the mtxt file in such way, that notes are grouped by instruments.
For example, Prolog isn't a general purpose functional or imperative language: you can assert, retract and query facts in the automatically managed database, risking only incorrect formulas, inefficiencies and non-monotonicity accidents, but not express functions, types, loops, etc. which could have far more general bugs.
reply