TypeScript […] only adds syntax, and doesn’t re-write it.
I believe enum
, const enum
, and decorators would like to have a word with you.
TypeScript […] only adds syntax, and doesn’t re-write it.
I believe enum
, const enum
, and decorators would like to have a word with you.
Swift also uses backticks and Rust has a dumb one in the form of r
. Still much better than introducing a async
as a new keyword in a minor version of a language and breaking a bunch of libraries.
Rust is verbose, but C++ might still take the cake with its standard library templates. Especially when using fully-qualified type names…
auto a = ::std::make_shared<::std::basic_string<char, ::std::char_traits<char>, MyAllocator<char>>>();
A reference-counted shared pointer to a string of unspecified character encoding and using a non-default memory allocator.
This means either them or more junior developers will be brought in as glorified prompt engineers.
Oh, sweet summer child. It’s not going to be junior developers; they still have self-worth. An un(der)paid intern or outsourced contractors, however? They’re fine working for scraps and no health insurance.
Might be. It is definitely a thing, though.
When I used to work for a large American corporation that sold products to consumers, they took it extremely seriously and breaking it would result in disciplinary action. It probably had something to do with advertisement laws, but it also easily could have just been because it makes the company look very bad.
one place even asked people to write fake reviews on Trustpilot/job sites
That sounds unethical, to say the least. Did they verify if you actually did it, or just “suggest” you do?
Corporations drill it deep into your head that you do not positively promote your own products or negatively review competitor products without both making it clear that you (1) work for $Corp; and (2) are sharing your own, personal opinion.
Giving the benefit of the doubt to Plex, they suck at training employees about social media policies.
I’m totally sure it was an accident. I’m sure we’ve all made the mistake of opening Шет_Рцссу.mp4.exe
after receiving it as an email attachment from Elmo. /s
Joke aside, that’s some pretty impressive incompetence. Not once. Not twice. Multiple times. The guy ran infostealer malware multiple times over the course of multiple years.
plus these are benches too it looks like
This part is the most surprising. For something meant to go in urban areas, where’s the hostile architecture? No railings between seats? No spikes?
JavaScript was a mistake, but this is one of the few things they did correctly. Implicitly importing everything from a package into the current scope makes it difficult to follow where variables or functions come from, and it’s prone to cause problems when two packages export the same identifier.
If you’re an absolute masochist, there’s always a workaround. Against all best practices, you can use the deprecated with statement. Or, you can Object.assign()
the packages into the global object like a monster. Or if you’re using node, you can use the node:vm
module to create a new V8 context with its own global object of your choosing.
If the passwords were properly salted, it wouldn’t. But if they’re not salted, helloooooo rainbow tables. Or the world’s greatest crossword puzzle, like that one Adobe accidentally made. Maybe even both!
And then lost the reflog by rm -rf
ing the project and cloning it again.
I actually jumped ship a while back. I agree that Plex is a business and they do deserve to get paid for development and infrastructure costs, but it’s the blatant enshitification that I have a big issue with.
They chose to lock a previously-free feature behind a paywall for everybody and asked for even more money to get it back. The less shitty alternative would have been to ask only the users who needed to use the relays to purchase a Plex Pass. Or, if they wanted to make it seem like a positive thing, they could have made the new subscription into an “enhanced quality” remote streaming experience that enabled higher bitrates over relays.
They gave their users the middle finger by picking the most transparently greedy option that they could get away with justifying.
Fair enough, although that actually has worse optics IMO. It goes from “this costs us money, so pay us” to “we need money, so we’re creating an artificial reason for you to pay us”
The self-hosted servers use UPnP and NAT-PMP to automatically forward the port used for media streaming.
Very, apparently.
They use UPnP and NAT-PMP1 to have clients directly stream the media from users’ own self-hosted servers. It costs them almost nothing in bandwidth to do that.
Software costs money how would they continue to developed it if not getting paid?
Apparently a hot take as evidenced the downvotes on my other comments here, but by adding things people want instead of taking away things people already have and charging more for it.
They don’t even have the excuse that they need to pay for the bandwidth costs of relaying video from servers to clients. Video is streamed directly from the user’s self-hosted server, using UPnP or NAT-PMP to make the server accessible from outside the local network.
And this isn’t a new feature they’re adding. Remote streaming was already implemented and generally available to users.
I don’t discount there being a cost in maintaining code over time, but it’s not as though they have to spend any significant employee time on improving it. They already support UPnP and NAT-PMP to have the clients connect directly to the self-hosted servers.
It would be nice if they added NAT hole punching on top of that, but it’s evidently good enough to work as-is in its current form. If they’re not even running relays to support more tricky networks (which the linked support article has no mention of), keeping this feature free costs them literally nothing extra.
No, it’s still wrong.
We have ways to do NAT traversal and hole punching on consumer routers. Failing that, UPnP and port forwarding exist. Or, god forbid, IPv6.
In the rare case that literally none of those are an option, they would have to use TURN to relay between an intermediary. That is a reasonable case to ask the user to pay for their bandwidth usage, but they don’t have to be greedy fuckers by making everyone pay for it.
This is enshittification and corporate greed. Nothing more, nothing less.
Not the other commenter, but they likely meant stability with respect to device drivers. The kernel is great at not degrading with a high uptime, but there’s consumer stuff that’s just perpetually unimplemented, buggy, or minimally-functional:
None of this is the kernel maintainers fault, of course. The underlying issue is the usual one of shitty corporations refusing to publish documentation and/or strategically abusing the legal system to stifle reverse engineering for interoperability.
std::string
doesn’t have a template type for the allocator. You are stuck using the verbosebasic_string
type if you need a special allocator.But, of course, nobody sane would write that by hand every time. They would use a typedef, like how
std::string
is just a typedef forstd::basic_string<char, std::char_traits<char>, std::allocator<char>>
. Regardless, the C++ standard library is insanely verbose when you start dropping down into template types and using features at an intermediate level. SFINAE in older versions of C++ was mindfuck on the best of days, for example.Don’t get me wrong, though. I’m not saying Rust is much better. Its saving grace is its type inference in
let
expressions. Without it, chaining functional operations on iterators would be an unfathomable hellscape ofCollect<Skip<Map<vec::Iter<Item = &'a str>>>>