It really didn’t. It caused a subset of people already predisposed to such things to become harder stance on it and it expanded that insanity by making it a political talking point; but it is *not* a whole generation, it’s likely 30% of one country; and, over time, hopefully less.
The best way to keep immunocompromised and people who literally can’t take vaccines safe is by having so much herd immunity that the likelihood they a virulent load of a virus cannot get to those people.
A great way to get herd immunity is through mass vaccination.
Except herd immunity for COVID isn’t feasible or even possible. It mutates too much, the vaccines don’t confer effective enough immunity, etc.
It’s unfortunate, but it’s the reality of this disease. I’m not immunocompromised, but I still modify my behavior to try and protect myself: mask on planes, avoid certain situations, etc.
Yeah I love that about living in a European City. I don't even own a car and haven't driven one for 8 years now. I hope I'll never need one again. There's stores, restaurants, a laundromat all within 2 minutes walk. The subway is 5-10 minutes (3 different lines with different walking times)
Additionally I spend so much less on transport and no longer waste time driving. When I'm riding public transport I can read stuff. I don't see any negatives.
I didn’t read the comment you replied to in that way. I read it as, edge cases can be gnarly and the most thorough of documentation and process will never capture them all.
It’s just the truth, tribal knowledge comes from experience in the trenches and what a new hire could take weeks to discern from perfect documentation and old timer may know off the cuff.
That’s the reality of enterprise software. Especially in big tech where scale is massive and theoretical solutions aren’t always the best choice for “reasons”.
I guess I'll take the bait. I thought this was going to be a page or collection of things that reduces the total amount of load, but really it's just a collection of opinionated alternative software.
I thought it might be "get away from one monoculture with harmful activities with a better option", but it's not that either, really?
I mean, some of these are fine, but for mosts of these, I don't see a reason for the alternative choices?
Like, if you're using AnyDesk, you're probably using it for a reason and that reason won't allow Chrome Remote Desktop, TightVNC or anything else.
If you're using MySQL or PostgreSQL, you've already made that choice on purpose. If you're using Terraform, that's a choice you made. If you're using Ruby, you definitely already know about Python - and probably hate it, honestly.
There's no defenses in the article, it's just an opinionated list without the opinion part.
Just for fun, how often do regular-sized companies that deal in regular-sized traffic need Protobuf to accomplish their goals in the first place, compared to JSON or even XML with basic string marshalling?
I dunno, are you sure you can manually write correct de/serializaiton for JSON and XML so strings, floats and integer formats correctly get parsed between JavaScript, Java, Python, Go, Rust, C++ and any other languages?
Do you want to maintain that and debug that? Do you want to do all of that without help of a compiler enforcing the schema and failing compiles/CI when someone accidentally changes the schema?
Because you get all of that with protobuf if you use them appropriately.
You can of course build all of this yourself... and maybe it'll even be as efficient, performant and supported. Maybe.
That would make sense if protobuf was complex, bloated, slow. But it's not, so the question should be why not use it, unless you are doing browser stuff.
I am curious about what kind of friction you encountered. Were you generating ad-hoc protobuf messages?
Assuming you were using Protobufs as they are usually used, meaning under generated code, I saw no difference between using it in Javascript and any other language in my experience. The wire format is beyond your concern. At least it is no more of your concern than it is in any other environment.
There are a number of different generator implementations for Javascript/Typescript. Some of them have some peculiar design choices. Is that where you found issue? I would certainly agree with that, but others aren't so bad. That doesn't really have anything to do with the browser, though. You'd have the same problem using protobufs under Node.js.
Well, protobuf allows to generate easy to use code for parsing defined data and service stubs for many languages and is one of the faster and less bandwidth wasting options
> Yes, it can be done with JSON and OpenApi, yet it’s not mandatory.
It is not mandatory for Protobuf either. You can construct a protobuf message with an implied structure just as you can with JSON. It does not violate the spec.
Protobuf ultimately gets the nod because it has better tooling (which isn't to be taken as praise towards Protobuf's tooling, but OpenAPI is worse).
Besides the other comments already here about code gen & contracts, a bigger one for me to step away from json/xml is binary serialization.
It sounds weird, and its totally dependent on your use case, but binary serialization can make a giant difference.
For me, I work with 3D data which is primarily (but not only) tightly packed arrays of floats & ints. I have a bunch of options available:
1. JSON/XML, readable, easy to work with, relatively bulky (but not as bad as people think if you compress) but no random access, and slow floating point parsing, great extensibility.
2. JSON/XML + base64, OK to work with, quite bulky, no random access, faster parsing, but no structure, extensible.
3. Manual binary serialization: hard to work with, OK size (esp compressed), random access if you put in the effort, optimal parsing, not extensible unless you put in a lot of effort.
4. Flatbuffers/protobuf/capn-proto/etc: easy to work with, great size (esp compressed), random access, close-to-optimal parsing, extensible.
Basically if you care about performance, you would really like to just have control of the binary layout of your data, but you generally don't want to design extensibility and random access yourself, so you end up sacrificing explicit layout (and so some performance) by choosing a convenient lib.
We are a very regularly sized company, but our 3D data spans hundreds of terabytes.
(also, no, there is no general purpose 3D format available to do this work, gltf and friends are great but have a small range of usecases)
This was the norm many years ago, I worked on a simulation software which existed long before Protobuf was even an apple in it's authors eyes. The whole thing was on a server architecture with a Java (later ported to Qt) GUI and a C++ core. The solver periodically sent data in a custom binary format over TCP for vector fields and things.
You're making assumptions about what kind of software people write. For a Hacker News degenerate, everything in the world revolves around bean-counting B2B SaaS CRUD crap, but it doesn't mean it's all there is to the world, right? You would be shocked how much networked computer software (not everything is a website) exists that is NOT a CRUD "app."
Statistically, a lot of people who post on HN and cling to new or advanced tech *do* just write CRUD apps with a little special sauce, it’s part of what makes vibe coding and many of the frameworks we use so appealing.
I’m not ignoring that other things exist and are even very common; and I was agreeing with the person that’s a useful case.
I’ve also worked for various companies where protobuf has been suggested as a way to solve a political/organizational issue, not a code or platform issue.
In most languages protobuf is eaiser because it generates the boilerplate. And protobuf is cross language so even if you are working in javascript where json is native protobuf is still faster because the other side can be whatever and you are not spending their time parsing.
In most languages I’ve worked in, there is no boiler plate for json either, and barely any for XML. You make a data class of some sort and it “just works”.
Not having that functionality is a weakness of a language or its support tools at this point, to me.
Protobuf is fantastic because it separates the definition from the language. When you make changes, you recompile your definitions to native code and you can be sure it will stay compatible with other languages and implementations.
You mean like WSDL, OpenAPI and every other schema definition format?
Well I agree. Contract-first is great. You provide your clients with the specs and let them generate their own bindings. And as a client they're great too because I can also easily generate a mock server implementation that I can use in tests.
It's not just about traffic. IoT devices (or any other low-powered devices for that matter) also like protobuf because of its comparatively high efficiency.
You're "literally surrounded" by cafes built into the first floor of your apartment complex? Because that's what I was very clearly talking about. Not shops within walking distance.
(I didn't ask and don't care if you think your cheap meal's "very delicious," by the way. That's not the main indicator of quality. Many Americans would call a Big Mac "very delicious.")
Where do you live that this is so bizarre? Multi story buildings with retail space on the bottom and residential space at the top are very common in cities.
> I didn't ask and don't care if you think your cheap meal's "very delicious," by the way. That's not the main indicator of quality. Many Americans would call a Big Mac "very delicious."
What’s the point of this? This is just needlessly rude.
> You shouldn’t ignore a problem when you’re in a position to help.
is incompatible with
> not put emotional investment into it
I'll only help because I care (maybe it's the person, the larger goal, etc). To me, everything behind the experience that I call "care" is an emotional one. If I don't care, then that means it doesn't matter to me, which literally means there's no emotional response/motivation to do it. Is this odd?
Even in startups, sometimes you’ve just got to let the consequences of the things you’ve warned about happen.
I’ve lost too much sleep and fought too many battles and lost too much clout over the years trying to make sure bad things didn’t happen. “Nobody could have foreseen this” is still said, even if there’s a ton of evidence, recommendations, pleading, etc, to keep it from happening.
Yeah, I’m sure it happens everywhere. And I’m no expert, I worked in state government, fed R&D, big tech and a startup and I feel like the big tech environment was a lot more of the “I need an audience to make my point” in a big staff or strategy meeting vs the small swarms where we just need to get this thing working environment. But it depends on the startup and depends on the people. I’m sure the same goes for teams in big tech but I assume the politics plays more in survival there.
reply