
Prototool – A Swiss Army Knife for Protocol Buffers - _mway
https://github.com/uber/prototool
======
throwaway84742
In another decade or so the world might replicate half of the very nice
internal tools Google has.

Suggestion for a project: make a tool that, given a proto description and a
file that contains concatenated proto messages stored as binary strings (sort
of like RecordIO at Google) lets you run simple SQL queries on the data and
extract a subset of the fields from messages matching a predicate, and maybe
even do simple aggregations. That was pretty handy. I really wish Google would
open source some or most of this stuff. It’s not like keeping it closed source
creates any kind of insurmountable competitive advantage, especially compared
to the advantages that would accrue from broader adoption of protobufs.

~~~
puzzle
Other tools and features that don't exist outside:

\- a tee loadbalancer for gRPC, forwarding the same requests to both A and B
backend pools, but only returning results from A. I don't think Envoy has
this, but it should.

\- load balancing dashboards showing traffic between frontends and backends

\- load balancer support for dynamic sharding

\- gnubbyd under ChromeOS:
[https://groups.google.com/a/chromium.org/forum/m/#!msg/chrom...](https://groups.google.com/a/chromium.org/forum/m/#!msg/chromium-
hterm/LuDVJ67Q4BE/vKoY0j_RBKQJ) (I think most of this is doable these days,
but the initial setup requires a Linux system)

\- Kubernetes: server-specific custom hyperlinks on dashboards (e.g. links to
POD_IP:PORT/stats, /debug, etc. for each individual pod you are looking at)

\- Kubernetes: multiple Docker images in the same container or pod. E.g. the
first container could be your code, while the second one might be data or the
JVM runtime, etc., without having to bundle them together or doing costly
copies in init containers.

\- Kubernetes: canaries and automatic rollbacks

~~~
akhilcacharya
Should you really be detailing the functionality of internal tools like this?

~~~
QuercusMax
None of this is particularly secret. Any intern who worked at Google would
have access to all this info.

(Source: I'm a SWE at an Alphabet company)

~~~
kyrra
interns still sign NDAs.

------
adam_gyroscope
We built
[https://github.com/GyroscopeHQ/grpcat](https://github.com/GyroscopeHQ/grpcat)
at my company, which takes text-format protos as input and sends them to a
gRPC endpoint. Looking at Prototool I think I should just merge the
functionality into Prototool. This is cool!

------
kodablah
Says "Handle installation of protoc [...] behind the scenes in a platform-
independent manner without any work on the part of the user", doesn't support
Windows yet [0]. Granted, as pre-1.0 I should probably read the features as
goals.

0 -
[https://github.com/uber/prototool/issues/9](https://github.com/uber/prototool/issues/9)

------
flippmoke
Here are some other great tools that is quite useful with protobufs, one in
C++ and one in pure javascript.

[https://github.com/mapbox/protozero](https://github.com/mapbox/protozero)

[https://github.com/mapbox/pbf](https://github.com/mapbox/pbf)

------
grizzles
danby - grpc for the browser :: is looking for testers
[https://github.com/ericbets/danby](https://github.com/ericbets/danby) There
are two upcoming features. The first one is streaming support. The second is a
callback API template that mirrors the grpc node API exactly. Or you will have
the choice to stick with the current promise API. It's not a priority for us
at the moment but adding a simple load balancer that distributed traffic
randomly across a set of servers would be a ~5 line patch.

------
hurricaneSlider
Always wished there was a tool for protobuf which could test whether a changes
to any .proto files were backwards compatible and if not raise an error

------
ris
Yet another tool trying to "manage" "packages" on my machine!

------
mabynogy
I can't use something with a CoC.

~~~
n42
Why not?

~~~
mabynogy
It's a political tool. It means they are into politics.

~~~
zrail
Everything involves politics. At least they're being explicit about it.

~~~
mabynogy
No: physics, maths, cooking...

~~~
zrail
Oh please. Things involving more than one human invariably involve politics.
Academics are just as susceptible as anything else, probably more so.

Cooking, if there is more than one person involved in preparing and eating the
food, will involve politics.

~~~
mabynogy
No. You're mixing social interactions and politics. Politics is about power
(who is the boss).

~~~
zrail
Alright, I suppose that's one way to frame it.

Why is a document describing the standards for social interaction that
contributors pledge to live up to bad? Open source has been and continues to
be rife with social interactions that are bad for individual contributors and
for the project as a whole. CoCs strive to head that off and document a
process for when people seem to violate their pledge.

~~~
mabynogy
You should read it. It includes words that are politically connoted. Those
words can easily be leveraged by people who are in that domain.

It's not about common sense. You don't need to tell people to be polite (and
you shouldn't). If someone isn't everybody will notice it.

~~~
zrail
> You don't need to tell people to be polite (and you shouldn't). If someone
> isn't everybody will notice it.

Unless it's done in private. If someone is a jerk to me in private (over email
or Slack or whatever), what do I do?

If I'm contributing to a project without a CoC and someone is a jerk to me,
I'm much more likely to just contribute to a different project, or start my
own fork, or just stop contributing to open source entirely.

Projects with CoCs have a stated procedure in place for dealing with abusive
contributors. That's what the whole thing is about. Of course you shouldn't
have to tell people to be polite, but that's not how the real world works.
There are jerks everywhere, and more often than not they're going to express
that in private.

~~~
mabynogy
I always reply to offensive people. Someone who is offensive has no arguments.
Saying him he is offensive is often enough. If there is a public (like here)
people will understand who is insulting who.

You're looking for a way to be less implicated. It's because you're accustomed
to live in systems based on laws and rules.

People aren't bad. Most are kind and they don't want to harm anonybody. The
bad guys are very few (like 1% or 0.1%) and as they are few they should be
handled case by case. Building a complicated system of rules for them will
just bother the "not-bad" majority.

