Maybe people mean GenAI. Back then, AI meant stuff like computer algebra systems like Macsyma which produce deterministic, provably correct results. I'm totally OK with that kind of AI. What I don't like are probabilistic text generators getting shoved into absolutely everything.
Many language learning books used to come with audio media. I'm old enough to own a few that came with cassette tapes.
Books are still worthwhile IMO, if only because they provide a bit of structure to one's learning. With free resources it's way too easy to become paralyzed by choice.
I am old enough to remember them. Comparably, you got maybe 4 hours of media - meaning sentences from the book being read and short boring dialogs. You cant compare it to what is currently available. It is like comparing a puddle of mud to Atlantic Ocean. And I mean it in a positive way - those audio tapes were almost nothing comparably.
Beyond projects like Dreaming Spanish, you have around infinite amount of French, Italian, Spanish or German Youtube about whatever topic you want to. There are even dedicated playlists for total beginners you can start to consume with zero knowledge. You have thousands of shows on Netflix in foreign language with various difficulty - some actually suitable for beginners. Some you have already seen in own language, so you can understand them more easily.
For major languages, there are dozens if not hundreds of podcasts with simplified news, "for beginner" discussions. Some of them are useable with literally miniscule amount of knowledge.
To me, the cool (and uncommon in other languages' standard libraries) part about C++ ranges is that they reify pipelines so that you can cut and paste them into variables, like so:
auto get_ids(std::span<const Widget> data)
{
auto pipeline = filter(&Widget::alive) | transform(&Widget::id);
auto sink = to<std::vector>();
return data | pipeline | sink;
}
> The websites I run generally have a honeypot page which is linked in the headers and disallowed to everyone in the robots.txt, and if an IP visits that page, they get added to a blocklist which simply drops their connections without response for 24 hours.
Also, x86 has an instruction that multiplies two 32-bit registers and stores the 64-bit result in two 32-bit registers. So you get the result of the division in the register with the high part of the multiplication result, and don't need to do a shift.
Indeed; quoting from my winning entry [1] that same year:
> This program celebrates the close connection between obfuscation and conciseness, by implementing the most concise language known, Binary Lambda Calculus (BLC).
> The submission implements the universal machine in the most concise manner conceivable.