@aracnus that's another thing I dislike in Python. There are at least four ways to solve all this. And even more alternatives that don't work (anymore).
I try to keep all my software as simple as possible. Software architecture, UX and in features. But I often fail at that.
Simple is hard. It's probably the hardest of all software things. "Just pull in a library", "just add a layer of abstraction", "just make it configurable", "I'll think about that later", are just a few of the pitfalls.
Simple is hard. But, I believe, also the most important feature of software.
I started a blogpost a few times, but it keeps getting too angry and too easy to mistake for critique on the entire fediverse, easily sounding destructive. I did not manage to make it constructive. I guess my frustrations are too much in the way.
I'd rather leave it at that, than put something out there that might harm the great work of mods, admins and devs.
@josep@anildash I built exactly that with flockingbird. It got blocked, banned, pitchforks were raised, threats posted to my and some volunteers DMs and a lot of outrage and anger vented.
Believe me, there are some very strong bullies here on the fediverse that will use outraged mobs to push anything they dislike off the fediverse. Not just from their own part, but pushed from as large a fediverse as possible.
@phiofx@dansup I think it's important to be vigilant and careful. To err on the safe side when information is lacking.
So I think what @dansup does is good.
But I also believe in science and evidence. That, if Threads proves not to be the threat, or proves its users behave (any instance, really), that then the actual facts and data are at least considered.
@dansup will you be reviewing your consideration when you have data?
E.g. the amount of your users that manually unblock. Or amount of interactions with threads? Or when you have a statistical significant amount of "reports" or "flags" over various domains, incl Threads?
@mdk@freemo Python could have the Ruby way where iterators are modules (shared behavior) that's mixed in. Or java, where it's an interface. Or the rust way where .iter() turns anything that wants to, into an actual Iterator.
If the reasons are 'technical limitations' it only strengthens my point that Python is doing a poor job here.
@freemo@mdk it hardly makes theoretical difference.
But the ergonomics and the communication are very different.
Ergonomics: Many other methods in python act 'on the thing' (str.capitalize() etc). So it's inconsistent. Chaining isn't possible: thelist.map().filter().sort().reduce() vs reduce(sort(filter(map(thelist))). Gets worse with multiline lambdas.
Comms: custom classes can have iterator methods implemented (ie a custom .sort()) But they cannot introduce global methods.
@freemo I was referring to that. The insanity being that they are global functions and not something you call on a iterator like every other language has.
I'm truly baffled by how insane the `map/reduce/filter` iterator API for #Python is. Most languages, even JavaScript, have some sort of "other_list = the_list.map().filter()" API. Except Python (and PHP?).
Now, I can imagine that a language that primarily deals with string manipulation or DOM management or so, to have a crappy API for handling large lists of data. But python's entire success comes from "handleing large lists of data", yet the tools to do so are infuriating.
ยซnews focuses mainly on exceptional events. It doesn't help you to fundamentally to understand the world. And it makes you cynical and anxiousยป
I have been following this advice for two years. And it's made me calmer *and* better informed. Not about "Kardashians" but about stuff that matters to me.