Protocol Buffers - Google's data interchange format

Protocol Buffers - Google's data interchange format

Copyright 2008 Google Inc.

https://developers.google.com/protocol-buffers/

Overview

Protocol Buffers (a.k.a., protobuf) are Google's language-neutral, platform-neutral, extensible mechanism for serializing structured data. You can find protobuf's documentation on the Google Developers site.

This README file contains protobuf installation instructions. To install protobuf, you need to install the protocol compiler (used to compile .proto files) and the protobuf runtime for your chosen programming language.

Protocol Compiler Installation

The protocol compiler is written in C++. If you are using C++, please follow the C++ Installation Instructions to install protoc along with the C++ runtime.

For non-C++ users, the simplest way to install the protocol compiler is to download a pre-built binary from our release page:

https://github.com/protocolbuffers/protobuf/releases

In the downloads section of each release, you can find pre-built binaries in zip packages: protoc-$VERSION-$PLATFORM.zip. It contains the protoc binary as well as a set of standard .proto files distributed along with protobuf.

If you are looking for an old version that is not available in the release page, check out the maven repo here:

https://repo1.maven.org/maven2/com/google/protobuf/protoc/

These pre-built binaries are only provided for released versions. If you want to use the github master version at HEAD, or you need to modify protobuf code, or you are using C++, it's recommended to build your own protoc binary from source.

If you would like to build protoc binary from source, see the C++ Installation Instructions.

Protobuf Runtime Installation

Protobuf supports several different programming languages. For each programming language, you can find instructions in the corresponding source directory about how to install protobuf runtime for that specific language:

Language Source
C++ (include C++ runtime and protoc) src
Java java
Python python
Objective-C objectivec
C# csharp
JavaScript js
Ruby ruby
Go protocolbuffers/protobuf-go
PHP php
Dart dart-lang/protobuf

Quick Start

The best way to learn how to use protobuf is to follow the tutorials in our developer guide:

https://developers.google.com/protocol-buffers/docs/tutorials

If you want to learn from code examples, take a look at the examples in the examples directory.

Documentation

The complete documentation for Protocol Buffers is available via the web at:

https://developers.google.com/protocol-buffers/

Owner
Protocol Buffers
A language-neutral, platform-neutral extensible mechanism for serializing structured data.
Protocol Buffers
Comments
  • Missing value/null support for scalar value types in proto 3

    Missing value/null support for scalar value types in proto 3

    From the protobuf wire format we can tell whether a specific field exists or not. And in protobuf 2 generated code, all fields have a "HasXXX" method to tell whether the field exists or not in code. However in proto 3, we lost that ability. E.g. now we can't tell if a int32 field is missing, or has a value of 0 (default for int32 type).

    In many scenario, we need the ability to differentiate missing vs default value (basically nullable support for scalar types).

    Feng suggest workarounds:

    1. Use a wrapper message, such as google.protobuf.Int32Value. In proto3, message fields still have has-bits.
    2. Use an oneof. For example: message Test1 { oneof a_oneof { int32 a = 1; } } then you can check test.getAOneofCase().

    However, this requires change the message definition, which is a no go if you need to keep the message compatible while upgrade from proto2 to proto 3.

    We need to add back the support to detect whether a scalar type field exist or not.

    More discussion here: https://groups.google.com/forum/#!topic/protobuf/6eJKPXXoJ88

  • python: use relative imports in generated modules

    python: use relative imports in generated modules

    I have a package foo that looks like this:

    .
    ├── data
    │   ├── a.proto
    │   └── b.proto
    └── generated
        ├── a_pb2.py
        ├── b_pb2.py
        └── __init__.py
    
    # a.proto
    package foo;
    
    # b.proto
    import "a.proto";
    
    package foo;
    

    Generate the code: protoc -I ./data --python_out=generated data/a.proto data/b.proto. Here is the failure:

    Python 3.5.1 (default, Mar  3 2016, 09:29:07) 
    [GCC 5.3.0] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from generated import b_pb2
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/home/corentih/repro/generated/b_pb2.py", line 16, in <module>
        import a_pb2
    ImportError: No module named 'a_pb2'
    

    This is beacuse the generated code looks like this:

    import a_pb2
    

    If the import was relative it would actually work:

    from . import a_pb2
    
  • Investigate support for Unity

    Investigate support for Unity

    quoting @jskeet: "There's suspicion the current version of C# protobufs won't work with Unity, but we can add another build target for that later when we find a need - we can create a new minor version of the NuGet package for that with no problems.

    My experience with the "old" protobuf-csharp-port is that Unity on iOS has various issues, so I think we'll want to investigate them pretty thoroughly before trying to support it anyway - and we may need to conditionally compile out some features. We'll see... but I'd like to avoid having Unity support block a dotnetcore release."

    also see #638

  • Unable to install google-protobuf gem on JRuby

    Unable to install google-protobuf gem on JRuby

    The glcoud-ruby project has an issue opened by a user (GoogleCloudPlatform/gcloud-ruby#712) that is unable to install the latest version due to the dependencies on the grpc and google-protobuf gems not installing on jruby. I am not able to get the google-protobuf gem to install using versions 9.1.1.0 or 9.0.0.0.

    Here is the install on mac:

    $ ruby -v
    jruby 9.1.1.0 (2.3.0) 2016-05-19 fe84e89 Java HotSpot(TM) 64-Bit Server VM 25.91-b14 on 1.8.0_91-b14 +jit [darwin-x86_64]
    
    $ gem install --ignore-dependencies google-protobuf -v 3.0.0.alpha.5.0.5.1
    Building native extensions.  This could take a while...
    ERROR:  Error installing google-protobuf:
        ERROR: Failed to build gem native extension.
    
        current directory: /Users/blowmage/.gem/repos/jruby-9.1.1.0-grpc/gems/google-protobuf-3.0.0.alpha.5.0.5.1/ext/google/protobuf_c
    /Users/blowmage/.rubies/jruby-9.1.1.0/bin/jruby -r ./siteconf20160524-43044-1fuqmwb.rb extconf.rb
    NotImplementedError: C extensions are not supported
        <top> at /Users/blowmage/.rubies/jruby-9.1.1.0/lib/ruby/stdlib/mkmf.rb:1
      require at org/jruby/RubyKernel.java:944
       (root) at /Users/blowmage/.rubies/jruby-9.1.1.0/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:1
        <top> at extconf.rb:3
    
    extconf failed, exit code 1
    
    Gem files will remain installed in /Users/blowmage/.gem/repos/jruby-9.1.1.0-grpc/gems/google-protobuf-3.0.0.alpha.5.0.5.1 for inspection.
    Results logged to /Users/blowmage/.gem/repos/jruby-9.1.1.0-grpc/extensions/universal-java-1.8/2.3.0/google-protobuf-3.0.0.alpha.5.0.5.1/gem_make.out
    

    Here is the install on linux:

    $ ./bin/jruby -v
    jruby 9.1.1.0 (2.3.0) 2016-05-19 fe84e89 OpenJDK 64-Bit Server VM 24.95-b01 on 1.7.0_95-b00 +jit [linux-x86_64]
    
    $ ./bin/jruby -S gem install --ignore-dependencies google-protobuf -v 3.0.0.alpha.5.0.5.1
    Building native extensions.  This could take a while...
    ERROR:  Error installing google-protobuf:
        ERROR: Failed to build gem native extension.
    
        current directory: /home/vagrant/.rvm/gems/ruby-2.3.0/gems/google-protobuf-3.0.0.alpha.5.0.5.1/ext/google/protobuf_c
    /home/vagrant/jruby-9.1.1.0/bin/jruby -r ./siteconf20160524-3528-jeg3gw.rb extconf.rb
    NotImplementedError: C extensions are not supported
        <top> at /home/vagrant/jruby-9.1.1.0/lib/ruby/stdlib/mkmf.rb:1
      require at org/jruby/RubyKernel.java:944
       (root) at /home/vagrant/jruby-9.1.1.0/lib/ruby/stdlib/rubygems/core_ext/kernel_require.rb:1
        <top> at extconf.rb:3
    
    extconf failed, exit code 1
    
    Gem files will remain installed in /home/vagrant/.rvm/gems/ruby-2.3.0/gems/google-protobuf-3.0.0.alpha.5.0.5.1 for inspection.
    Results logged to /home/vagrant/.rvm/gems/ruby-2.3.0/extensions/universal-java-1.7/2.3.0/google-protobuf-3.0.0.alpha.5.0.5.1/gem_make.out
    
  • [CSharp] Allow Span<byte>-based parsing in CodedInputStream

    [CSharp] Allow Span-based parsing in CodedInputStream

    IMO C# protobuf implementation could strongly benefit performance-wise from allowing some unsafe code.

    Background

    First of all I am not saying that unsafe should be enabled in every build/every platform, having 100% managed library is always a nice feature. All I am suggesting is again some conditional feature on some platform.

    However there is a trend to move towards unsafe mixing we can observe in .NET Core. For example a lot of .NET Core libraries use unsafe code due to need to interop with different kind of unmanaged libraries or just to handle AOT compiled code.

    API change

    Today CodedInputStream works in two modes: streaming with byte[] buffer and with a fixed buffer.

    It would be really nice to be able to provide byte * and length to CodedInputStream constructor.

    Alternatively we could create an UnmanagedCodedInputStream which would work on unmanaged memory.

    This would require to abstracting CodedInputStream as an interface

    Affected APIs

    Async API #3166 makes absolutely no sense for UnmanagedCodedInputStream because it assumes everything have been already read.

    Benefits

    1. It's extremely useful for interop (See scenario 1)
    2. It can work with stackalloc (See scenario 2)
    3. It allows even quicker deserialization we can quicker deserialize byte * to for example fixed-size primitive types by pointer dereference. (Endiannes might be a problem here)

    Scenarios

    Scenario 1. NoSQL Database

    User is using native NoSQL database (for example RocksDB/LevelDB) and is using protobuf for data persistence. Database returns native allocated pointer with buffer. Instead of copying entire buffer to the memory user can deserialize record straight from the returned memory native memory and then free the pointer. Very little GC is involved and there is practically no overhead.

    Scenario 2. Stackalloc-ated buffers

    For performance reasons to decrease heap allocations and allocate buffer on stack. This scenario can be alternatively handled by Buffer Pooling, however stackalloc seems to be more efficient.

    Affected by

    https://github.com/dotnet/corefxlab/blob/master/docs/specs/span.md - this work in progress improvement can allow to achieve the same goals in a managed way by providing some platform improvements.

  • proto3 and unknown fields

    proto3 and unknown fields

    I know that unknown fields have been removed from proto3, but I am trying to get an explanation about why this change was made and if there is any way to replicate that behavior in proto3.

    Thanks so much.

    referred from golang/protobuf#25

  • Change C# reflection to avoid using expression trees

    Change C# reflection to avoid using expression trees

    This should work on Unity, Mono and .NET 3.5 as far as I'm aware. It won't work on platforms where reflection itself is prohibited, but that's a non-starter basically.

    Creating a PR to start with, but I'd like to test it in other environments before merging. Once this is in, we can look at potentially officially supporting .NET 3.5 and Unity (#644).

  • Add CodedInputReader and CodedOutputWriter

    Add CodedInputReader and CodedOutputWriter

    This is very WIP/rough. I had to create a new ISpanMessage<T> interface, and some areas do not have full support for it yet (they are throwing NotSupportException right now).

    Nothing has been done on the code gen side. The way the reader and writer are used compared to the streams is almost identitical so code gen changes should be minimal.

    Perf numbers:

    WriteToByteArray and ParseFromByteArray both allocate the byte array. This matches how serialization from gRPC works today.

    WriteToBufferWriter writes to an IBufferWriter<byte> and doesn't allocate at all. For a small message CodedOutputWriter is slower than CodedOutputStream. It is faster for medium/large messages. Still some tuning to be done.

    ParseFromReadOnlySequence reads from a sequence. Its allocations are related to creating the message and whatever strings exist on the message. Using CodedInputReader is consistently faster than CodedInputStream.

    |                    Method |     Mean |     Error |    StdDev |   Median | Gen 0/1k Op | Gen 1/1k Op | Gen 2/1k Op | Allocated Memory/Op |
    |-------------------------- |---------:|----------:|----------:|---------:|------------:|------------:|------------:|--------------------:|
    |          WriteToByteArray | 377.5 ns | 11.210 ns | 32.876 ns | 370.3 ns |      0.0682 |           - |           - |               288 B |
    |        ParseFromByteArray | 385.2 ns |  8.280 ns | 23.624 ns | 377.5 ns |      0.2666 |           - |           - |              1120 B |
    |       WriteToBufferWriter | 294.0 ns |  3.658 ns |  3.421 ns | 293.6 ns |           - |           - |           - |                   - |
    | ParseFromReadOnlySequence | 338.6 ns |  6.696 ns | 10.621 ns | 336.0 ns |      0.1903 |           - |           - |               800 B |
    

    @jskeet @davidfowl @JunTaoLuo @jtattermusch

  • [Python] Release 4.21.0 broke multiple Google Cloud client libraries (

    [Python] Release 4.21.0 broke multiple Google Cloud client libraries ("TypeError: Descriptors cannot not be created directly.")

    Example error for the google-cloud-logging==3.1.1 library using protobuf==4.21.0:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
      File "/usr/local/lib/python3.10/site-packages/google/cloud/logging/__init__.py", line 18, in <module>
        from google.cloud.logging_v2 import __version__
      File "/usr/local/lib/python3.10/site-packages/google/cloud/logging_v2/__init__.py", line 25, in <module>
        from google.cloud.logging_v2.client import Client
      File "/usr/local/lib/python3.10/site-packages/google/cloud/logging_v2/client.py", line 25, in <module>
        from google.cloud.logging_v2._helpers import _add_defaults_to_filter
      File "/usr/local/lib/python3.10/site-packages/google/cloud/logging_v2/_helpers.py", line 25, in <module>
        from google.cloud.logging_v2.entries import LogEntry
      File "/usr/local/lib/python3.10/site-packages/google/cloud/logging_v2/entries.py", line 31, in <module>
        import google.cloud.audit.audit_log_pb2  # noqa: F401
      File "/usr/local/lib/python3.10/site-packages/google/cloud/audit/audit_log_pb2.py", line 62, in <module>
        _descriptor.FieldDescriptor(
      File "/usr/local/lib/python3.10/site-packages/google/protobuf/descriptor.py", line 560, in __new__
        _message.Message._CheckCalledFromGeneratedFile()
    TypeError: Descriptors cannot not be created directly.
    If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
    If you cannot immediately regenerate your protos, some other possible workarounds are:
     1. Downgrade the protobuf package to 3.20.x or lower.
     2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
    
    More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates
    

    Note that this works fine with the previous protobuf==3.20.1 release.

    To reproduce:

    docker run -it python:3.10 /bin/bash
    # Within the Docker container:
    pip3 install google-cloud-logging==3.1.1 protobuf==4.21.0
    python3 -c "import google.cloud.logging"
    
  • Segmentation Fault (Segfault) on the ruby gem

    Segmentation Fault (Segfault) on the ruby gem

    Hello there,

    The following segmentation fault pops up upon running

    ruby -e 'require "google/cloud/trace"'

    inside of a Docker container based on ruby:2.5-alpine (alpine 3.7.0)

    Gemfile.lock (partial)

        google-cloud-core (1.2.0)
          google-cloud-env (~> 1.0)
        google-cloud-env (1.0.1)
          faraday (~> 0.11)
        google-cloud-trace (0.31.0)
          google-cloud-core (~> 1.2)
          google-gax (~> 1.0)
          stackdriver-core (~> 1.3)
        google-gax (1.0.1)
          google-protobuf (~> 3.2)
          googleapis-common-protos (>= 1.3.5, < 2.0)
          googleauth (~> 0.6.2)
          grpc (>= 1.7.2, < 2.0)
          rly (~> 0.2.3)
        google-protobuf (3.5.1.2)
        googleapis-common-protos (1.3.7)
          google-protobuf (~> 3.0)
          googleapis-common-protos-types (~> 1.0)
          grpc (~> 1.0)
        googleapis-common-protos-types (1.0.1)
          google-protobuf (~> 3.0)
        googleauth (0.6.2)
          faraday (~> 0.12)
          jwt (>= 1.4, < 3.0)
          logging (~> 2.0)
          memoist (~> 0.12)
          multi_json (~> 1.11)
          os (~> 0.9)
          signet (~> 0.7)
        grpc (1.10.0)
          google-protobuf (~> 3.1)
          googleapis-common-protos-types (~> 1.0.0)
          googleauth (>= 0.5.1, < 0.7)
    

    Ruby Segfault Dump

    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15: [BUG] Segmentation fault at 0x0000000000016e16
    ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-musl]
    
    -- Control frame information -----------------------------------------------
    c:0039 p:---- s:0240 e:000239 CFUNC  :msgclass
    c:0038 p:0022 s:0236 e:000235 CLASS  /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15
    c:0037 p:0007 s:0233 e:000232 CLASS  /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:14
    c:0036 p:0033 s:0230 E:001380 TOP    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:13 [FINISH]
    c:0035 p:---- s:0227 e:000226 CFUNC  :require
    c:0034 p:0110 s:0222 e:000221 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0033 p:0013 s:0210 e:000209 TOP    /usr/local/bundle/gems/googleapis-common-protos-types-1.0.1/lib/google/rpc/status_pb.rb:6 [FINISH]
    c:0032 p:---- s:0207 e:000206 CFUNC  :require
    c:0031 p:0110 s:0202 e:000201 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0030 p:0013 s:0190 e:000189 TOP    /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/google_rpc_status_utils.rb:16 [FINISH]
    c:0029 p:---- s:0187 e:000186 CFUNC  :require
    c:0028 p:0110 s:0182 e:000181 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0027 p:0013 s:0170 e:000169 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/grpc.rb:31 [FINISH]
    c:0026 p:---- s:0167 e:000166 CFUNC  :require
    c:0025 p:0110 s:0162 e:000161 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0024 p:0013 s:0150 e:000149 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/errors.rb:32 [FINISH]
    c:0023 p:---- s:0147 e:000146 CFUNC  :require
    c:0022 p:0110 s:0142 e:000141 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0021 p:0013 s:0130 e:000129 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/api_callable.rb:32 [FINISH]
    c:0020 p:---- s:0127 e:000126 CFUNC  :require
    c:0019 p:0110 s:0122 e:000121 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0018 p:0006 s:0110 e:000109 TOP    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax.rb:30 [FINISH]
    c:0017 p:---- s:0107 e:000106 CFUNC  :require
    c:0016 p:0110 s:0102 e:000101 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0015 p:0020 s:0090 e:000089 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1/trace_service_client.rb:28 [FINISH]
    c:0014 p:---- s:0087 e:000086 CFUNC  :require
    c:0013 p:0110 s:0082 e:000081 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0012 p:0006 s:0070 e:000069 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1.rb:16 [FINISH]
    c:0011 p:---- s:0067 e:000066 CFUNC  :require
    c:0010 p:0110 s:0062 e:000061 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0009 p:0020 s:0050 e:000049 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/service.rb:18 [FINISH]
    c:0008 p:---- s:0047 e:000046 CFUNC  :require
    c:0007 p:0110 s:0042 e:000041 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59
    c:0006 p:0062 s:0030 e:000029 TOP    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace.rb:24 [FINISH]
    c:0005 p:---- s:0027 e:000026 CFUNC  :require
    c:0004 p:0091 s:0022 e:000021 RESCUE /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135
    c:0003 p:0376 s:0018 e:000017 METHOD /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39
    c:0002 p:0006 s:0006 e:000005 EVAL   -e:1 [FINISH]
    c:0001 p:0000 s:0003 E:000d00 (none) [FINISH]
    
    -- Ruby level backtrace information ----------------------------------------
    -e:1:in `<main>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:39:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `rescue in require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:135:in `require'
    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace.rb:24:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/service.rb:18:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1.rb:16:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/v1/trace_service_client.rb:28:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax.rb:30:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/api_callable.rb:32:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/errors.rb:32:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-gax-1.0.1/lib/google/gax/grpc.rb:31:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/google_rpc_status_utils.rb:16:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/googleapis-common-protos-types-1.0.1/lib/google/rpc/status_pb.rb:6:in `<top (required)>'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb:59:in `require'
    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:13:in `<top (required)>'
    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:14:in `<module:Google>'
    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15:in `<module:Protobuf>'
    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/any_pb.rb:15:in `msgclass'
    
    -- Machine register context ------------------------------------------------
     RIP: 0x0000000000016e16 RBP: 0x00007ffda9865780 RSP: 0x00007ffda9865738
     RAX: 0x000000000000000a RBX: 0x000055d0f91e09c0 RCX: 0x0000000000000008
     RDX: 0x0000000000000001 RDI: 0x00007ffda9865740 RSI: 0x00007ffda986574e
      R8: 0x0000000000000003  R9: 0xffffffffffffffff R10: 0x0000000000000000
     R11: 0x000055d0f92be2c0 R12: 0x0000000000000000 R13: 0x0000000000000002
     R14: 0x00007ffda98657e8 R15: 0x000055d0f91e09c0 EFL: 0x0000000000010246
    
    -- Other runtime information -----------------------------------------------
    
    * Loaded script: -e
    
    * Loaded features:
    
        0 enumerator.so
        1 thread.rb
        2 rational.so
        3 complex.so
        4 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
        5 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
        6 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/rbconfig.rb
        7 /usr/local/lib/ruby/2.5.0/rubygems/compatibility.rb
        8 /usr/local/lib/ruby/2.5.0/rubygems/defaults.rb
        9 /usr/local/lib/ruby/2.5.0/rubygems/deprecate.rb
       10 /usr/local/lib/ruby/2.5.0/rubygems/errors.rb
       11 /usr/local/lib/ruby/2.5.0/rubygems/version.rb
       12 /usr/local/lib/ruby/2.5.0/rubygems/requirement.rb
       13 /usr/local/lib/ruby/2.5.0/rubygems/platform.rb
       14 /usr/local/lib/ruby/2.5.0/rubygems/basic_specification.rb
       15 /usr/local/lib/ruby/2.5.0/rubygems/stub_specification.rb
       16 /usr/local/lib/ruby/2.5.0/rubygems/util/list.rb
       17 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
       18 /usr/local/lib/ruby/2.5.0/uri/rfc2396_parser.rb
       19 /usr/local/lib/ruby/2.5.0/uri/rfc3986_parser.rb
       20 /usr/local/lib/ruby/2.5.0/uri/common.rb
       21 /usr/local/lib/ruby/2.5.0/uri/generic.rb
       22 /usr/local/lib/ruby/2.5.0/uri/ftp.rb
       23 /usr/local/lib/ruby/2.5.0/uri/http.rb
       24 /usr/local/lib/ruby/2.5.0/uri/https.rb
       25 /usr/local/lib/ruby/2.5.0/uri/ldap.rb
       26 /usr/local/lib/ruby/2.5.0/uri/ldaps.rb
       27 /usr/local/lib/ruby/2.5.0/uri/mailto.rb
       28 /usr/local/lib/ruby/2.5.0/uri.rb
       29 /usr/local/lib/ruby/2.5.0/rubygems/specification.rb
       30 /usr/local/lib/ruby/2.5.0/rubygems/exceptions.rb
       31 /usr/local/lib/ruby/2.5.0/rubygems/dependency.rb
       32 /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_gem.rb
       33 /usr/local/lib/ruby/2.5.0/monitor.rb
       34 /usr/local/lib/ruby/2.5.0/rubygems/core_ext/kernel_require.rb
       35 /usr/local/lib/ruby/2.5.0/rubygems.rb
       36 /usr/local/lib/ruby/2.5.0/rubygems/path_support.rb
       37 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/version.rb
       38 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/core_ext/name_error.rb
       39 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/levenshtein.rb
       40 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/jaro_winkler.rb
       41 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checker.rb
       42 /usr/local/lib/ruby/2.5.0/delegate.rb
       43 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
       44 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
       45 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/name_error_checkers.rb
       46 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/method_name_checker.rb
       47 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/key_error_checker.rb
       48 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/spell_checkers/null_checker.rb
       49 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean/formatters/plain_formatter.rb
       50 /usr/local/lib/ruby/gems/2.5.0/gems/did_you_mean-1.2.0/lib/did_you_mean.rb
       51 /usr/local/lib/ruby/2.5.0/rubygems/bundler_version_finder.rb
       52 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/config.rb
       53 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/core/version.rb
       54 /usr/local/lib/ruby/2.5.0/cgi/core.rb
       55 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
       56 /usr/local/lib/ruby/2.5.0/cgi/util.rb
       57 /usr/local/lib/ruby/2.5.0/cgi/cookie.rb
       58 /usr/local/lib/ruby/2.5.0/cgi.rb
       59 /usr/local/lib/ruby/2.5.0/set.rb
       60 /usr/local/lib/ruby/2.5.0/forwardable/impl.rb
       61 /usr/local/lib/ruby/2.5.0/forwardable.rb
       62 /usr/local/lib/ruby/2.5.0/timeout.rb
       63 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/utils.rb
       64 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/options.rb
       65 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/connection.rb
       66 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/rack_builder.rb
       67 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/parameters.rb
       68 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/middleware.rb
       69 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/adapter.rb
       70 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/request.rb
       71 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/response.rb
       72 /usr/local/bundle/gems/multipart-post-2.0.0/lib/composite_io.rb
       73 /usr/local/bundle/gems/multipart-post-2.0.0/lib/parts.rb
       74 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/upload_io.rb
       75 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/error.rb
       76 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/autoload.rb
       77 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday.rb
       78 /usr/local/lib/ruby/2.5.0/json/version.rb
       79 /usr/local/lib/ruby/2.5.0/ostruct.rb
       80 /usr/local/lib/ruby/2.5.0/json/generic_object.rb
       81 /usr/local/lib/ruby/2.5.0/json/common.rb
       82 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
       83 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
       84 /usr/local/lib/ruby/2.5.0/json/ext.rb
       85 /usr/local/lib/ruby/2.5.0/json.rb
       86 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/request/url_encoded.rb
       87 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
       88 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
       89 /usr/local/lib/ruby/2.5.0/socket.rb
       90 /usr/local/lib/ruby/2.5.0/net/protocol.rb
       91 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
       92 /usr/local/lib/ruby/2.5.0/net/http/exceptions.rb
       93 /usr/local/lib/ruby/2.5.0/net/http/header.rb
       94 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
       95 /usr/local/lib/ruby/2.5.0/net/http/generic_request.rb
       96 /usr/local/lib/ruby/2.5.0/net/http/request.rb
       97 /usr/local/lib/ruby/2.5.0/net/http/requests.rb
       98 /usr/local/lib/ruby/2.5.0/net/http/response.rb
       99 /usr/local/lib/ruby/2.5.0/net/http/responses.rb
      100 /usr/local/lib/ruby/2.5.0/net/http/proxy_delta.rb
      101 /usr/local/lib/ruby/2.5.0/net/http/backward.rb
      102 /usr/local/lib/ruby/2.5.0/net/http.rb
      103 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
      104 /usr/local/lib/ruby/2.5.0/digest.rb
      105 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
      106 /usr/local/lib/ruby/2.5.0/openssl/bn.rb
      107 /usr/local/lib/ruby/2.5.0/openssl/pkey.rb
      108 /usr/local/lib/ruby/2.5.0/openssl/cipher.rb
      109 /usr/local/lib/ruby/2.5.0/openssl/config.rb
      110 /usr/local/lib/ruby/2.5.0/openssl/digest.rb
      111 /usr/local/lib/ruby/2.5.0/openssl/x509.rb
      112 /usr/local/lib/ruby/2.5.0/openssl/buffering.rb
      113 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
      114 /usr/local/lib/ruby/2.5.0/openssl/ssl.rb
      115 /usr/local/lib/ruby/2.5.0/openssl/pkcs5.rb
      116 /usr/local/lib/ruby/2.5.0/openssl.rb
      117 /usr/local/lib/ruby/2.5.0/net/https.rb
      118 /usr/local/bundle/gems/faraday-0.12.2/lib/faraday/adapter/net_http.rb
      119 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google/cloud/env.rb
      120 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google/cloud/env/version.rb
      121 /usr/local/bundle/gems/google-cloud-env-1.0.1/lib/google-cloud-env.rb
      122 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud.rb
      123 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/version.rb
      124 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/idna/pure.rb
      125 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/idna.rb
      126 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/domain.rb
      127 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/version.rb
      128 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/errors.rb
      129 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/rule.rb
      130 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix/list.rb
      131 /usr/local/bundle/gems/public_suffix-3.0.2/lib/public_suffix.rb
      132 /usr/local/bundle/gems/addressable-2.5.2/lib/addressable/uri.rb
      133 /usr/local/bundle/gems/signet-0.8.1/lib/signet/version.rb
      134 /usr/local/bundle/gems/signet-0.8.1/lib/signet.rb
      135 /usr/local/bundle/gems/signet-0.8.1/lib/signet/errors.rb
      136 /usr/local/lib/ruby/2.5.0/base64.rb
      137 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/options.rb
      138 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/version.rb
      139 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/adapter_error.rb
      140 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/parse_error.rb
      141 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json/options_cache.rb
      142 /usr/local/bundle/gems/multi_json-1.13.1/lib/multi_json.rb
      143 /usr/local/bundle/gems/signet-0.8.1/lib/signet/oauth_2.rb
      144 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/json.rb
      145 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/error.rb
      146 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/verify.rb
      147 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt/decode.rb
      148 /usr/local/bundle/gems/jwt-1.5.6/lib/jwt.rb
      149 /usr/local/bundle/gems/signet-0.8.1/lib/signet/oauth_2/client.rb
      150 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/signet.rb
      151 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist/version.rb
      152 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist/core_ext/singleton_class.rb
      153 /usr/local/bundle/gems/memoist-0.16.0/lib/memoist.rb
      154 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/compute_engine.rb
      155 /usr/local/lib/ruby/2.5.0/psych/versions.rb
      156 /usr/local/lib/ruby/2.5.0/psych/exception.rb
      157 /usr/local/lib/ruby/2.5.0/psych/syntax_error.rb
      158 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
      159 /usr/local/lib/ruby/2.5.0/psych/omap.rb
      160 /usr/local/lib/ruby/2.5.0/psych/set.rb
      161 /usr/local/lib/ruby/2.5.0/psych/class_loader.rb
      162 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
      163 /usr/local/lib/ruby/2.5.0/psych/scalar_scanner.rb
      164 /usr/local/lib/ruby/2.5.0/psych/nodes/node.rb
      165 /usr/local/lib/ruby/2.5.0/psych/nodes/stream.rb
      166 /usr/local/lib/ruby/2.5.0/psych/nodes/document.rb
      167 /usr/local/lib/ruby/2.5.0/psych/nodes/sequence.rb
      168 /usr/local/lib/ruby/2.5.0/psych/nodes/scalar.rb
      169 /usr/local/lib/ruby/2.5.0/psych/nodes/mapping.rb
      170 /usr/local/lib/ruby/2.5.0/psych/nodes/alias.rb
      171 /usr/local/lib/ruby/2.5.0/psych/nodes.rb
      172 /usr/local/lib/ruby/2.5.0/psych/streaming.rb
      173 /usr/local/lib/ruby/2.5.0/psych/visitors/visitor.rb
      174 /usr/local/lib/ruby/2.5.0/psych/visitors/to_ruby.rb
      175 /usr/local/lib/ruby/2.5.0/psych/visitors/emitter.rb
      176 /usr/local/lib/ruby/2.5.0/psych/handler.rb
      177 /usr/local/lib/ruby/2.5.0/psych/tree_builder.rb
      178 /usr/local/lib/ruby/2.5.0/psych/visitors/yaml_tree.rb
      179 /usr/local/lib/ruby/2.5.0/psych/json/ruby_events.rb
      180 /usr/local/lib/ruby/2.5.0/psych/visitors/json_tree.rb
      181 /usr/local/lib/ruby/2.5.0/psych/visitors/depth_first.rb
      182 /usr/local/lib/ruby/2.5.0/psych/visitors.rb
      183 /usr/local/lib/ruby/2.5.0/psych/parser.rb
      184 /usr/local/lib/ruby/2.5.0/psych/coder.rb
      185 /usr/local/lib/ruby/2.5.0/psych/core_ext.rb
      186 /usr/local/lib/ruby/2.5.0/psych/stream.rb
      187 /usr/local/lib/ruby/2.5.0/psych/json/yaml_events.rb
      188 /usr/local/lib/ruby/2.5.0/psych/json/tree_builder.rb
      189 /usr/local/lib/ruby/2.5.0/psych/json/stream.rb
      190 /usr/local/lib/ruby/2.5.0/psych/handlers/document_stream.rb
      191 /usr/local/lib/ruby/2.5.0/psych.rb
      192 /usr/local/lib/ruby/2.5.0/yaml.rb
      193 /usr/local/bundle/gems/os-0.9.6/lib/os.rb
      194 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/credentials_loader.rb
      195 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/service_account.rb
      196 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/scope_util.rb
      197 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/user_refresh.rb
      198 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/default_credentials.rb
      199 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/application_default.rb
      200 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/client_id.rb
      201 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/credentials.rb
      202 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/user_authorizer.rb
      203 /usr/local/lib/ruby/2.5.0/securerandom.rb
      204 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth/web_user_authorizer.rb
      205 /usr/local/bundle/gems/googleauth-0.6.2/lib/googleauth.rb
      206 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google-cloud-trace.rb
      207 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/version.rb
      208 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/credentials.rb
      209 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/label_key.rb
      210 /usr/local/bundle/gems/stackdriver-core-1.3.0/lib/stackdriver/core/async_actor.rb
      211 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/async_reporter.rb
      212 /usr/local/bundle/gems/stackdriver-core-1.3.0/lib/stackdriver/core/trace_context.rb
      213 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/middleware.rb
      214 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/notifications.rb
      215 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/project.rb
      216 /usr/local/bundle/gems/google-cloud-trace-0.31.0/lib/google/cloud/trace/result_set.rb
      217 /usr/local/lib/ruby/2.5.0/English.rb
      218 /usr/local/bundle/gems/google-cloud-core-1.2.0/lib/google/cloud/errors.rb
      219 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
      220 /usr/local/lib/ruby/2.5.0/pathname.rb
      221 /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
      222 /usr/local/lib/ruby/2.5.0/date.rb
      223 /usr/local/lib/ruby/2.5.0/time.rb
      224 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
      225 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/grpc.rb
      226 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/errors.rb
      227 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/logconfig.rb
      228 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/notifier.rb
      229 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/version.rb
      230 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/core/time_consts.rb
      231 /usr/local/lib/ruby/2.5.0/weakref.rb
      232 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/bidi_call.rb
      233 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/active_call.rb
      234 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/client_stub.rb
      235 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/rpc_desc.rb
      236 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/service.rb
      237 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/rpc_server.rb
      238 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/interceptor_registry.rb
      239 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/generic/interceptors.rb
      240 /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc.rb
      241 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/message_exts.rb
      242 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
      243 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf/repeated_field.rb
      244 /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/protobuf.rb
    
    * Process memory map:
    
    55d0f7453000-55d0f7454000 r-xp 00000000 08:06 154456                     /usr/local/bin/ruby
    55d0f7653000-55d0f7654000 r--p 00000000 08:06 154456                     /usr/local/bin/ruby
    55d0f7654000-55d0f7655000 rw-p 00001000 08:06 154456                     /usr/local/bin/ruby
    55d0f89e8000-55d0f9987000 rw-p 00000000 00:00 0                          [heap]
    7f6c3bcb9000-7f6c3bd1a000 rw-p 00000000 00:00 0
    7f6c3bd1a000-7f6c3bf70000 r-xp 00000000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
    7f6c3bf70000-7f6c3bf78000 r--p 00056000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
    7f6c3bf78000-7f6c3bf7a000 rw-p 0005e000 08:06 5929343                    /usr/local/bundle/gems/google-protobuf-3.5.1.2-x86_64-linux/lib/google/2.5/protobuf_c.so
    7f6c3bf7a000-7f6c3c169000 rw-p 00000000 00:00 0
    7f6c3c169000-7f6c3c5af000 r-xp 00000000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
    7f6c3c5af000-7f6c3c5c4000 r--p 00246000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
    7f6c3c5c4000-7f6c3c5cb000 rw-p 0025b000 08:06 10524010                   /usr/local/bundle/gems/grpc-1.10.0-x86_64-linux/src/ruby/lib/grpc/2.5/grpc_c.so
    7f6c3c5cb000-7f6c3c5d0000 rw-p 00000000 00:00 0
    7f6c3c5d0000-7f6c3c803000 r-xp 00000000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
    7f6c3c803000-7f6c3c804000 r--p 00033000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
    7f6c3c804000-7f6c3c805000 rw-p 00034000 08:06 155330                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/date_core.so
    7f6c3c805000-7f6c3c806000 rw-p 00000000 00:00 0
    7f6c3c806000-7f6c3ca0d000 r-xp 00000000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
    7f6c3ca0d000-7f6c3ca0e000 r--p 00007000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
    7f6c3ca0e000-7f6c3ca0f000 rw-p 00008000 08:06 155416                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/pathname.so
    7f6c3ca0f000-7f6c3cc15000 r-xp 00000000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
    7f6c3cc15000-7f6c3cc16000 r--p 00006000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
    7f6c3cc16000-7f6c3cc17000 rw-p 00007000 08:06 155429                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/strscan.so
    7f6c3cc17000-7f6c3ce30000 r-xp 00000000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
    7f6c3ce30000-7f6c3ce31000 r--p 00019000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
    7f6c3ce31000-7f6c3ce32000 rw-p 0001a000 08:06 154434                     /usr/lib/libyaml-0.so.2.0.5
    7f6c3ce32000-7f6c3d037000 r-xp 00000000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
    7f6c3d037000-7f6c3d038000 r--p 00005000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
    7f6c3d038000-7f6c3d039000 rw-p 00006000 08:06 155417                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/psych.so
    7f6c3d039000-7f6c3d239000 r-xp 00000000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
    7f6c3d239000-7f6c3d23a000 r--p 00000000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
    7f6c3d23a000-7f6c3d23b000 rw-p 00001000 08:06 155407                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/nonblock.so
    7f6c3d23b000-7f6c3d43e000 r-xp 00000000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
    7f6c3d43e000-7f6c3d43f000 r--p 00003000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
    7f6c3d43f000-7f6c3d440000 rw-p 00004000 08:06 155338                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/digest.so
    7f6c3d440000-7f6c3d7bf000 r-xp 00000000 08:06 9849394                    /lib/libcrypto.so.42.0.0
    7f6c3d7bf000-7f6c3d7dc000 r--p 0017f000 08:06 9849394                    /lib/libcrypto.so.42.0.0
    7f6c3d7dc000-7f6c3d7e2000 rw-p 0019c000 08:06 9849394                    /lib/libcrypto.so.42.0.0
    7f6c3d7e2000-7f6c3d7e6000 rw-p 00000000 00:00 0
    7f6c3d7e6000-7f6c3da2a000 r-xp 00000000 08:06 9849396                    /lib/libssl.so.44.0.1
    7f6c3da2a000-7f6c3da2e000 r--p 00044000 08:06 9849396                    /lib/libssl.so.44.0.1
    7f6c3da2e000-7f6c3da32000 rw-p 00048000 08:06 9849396                    /lib/libssl.so.44.0.1
    7f6c3da32000-7f6c3dc86000 r-xp 00000000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
    7f6c3dc86000-7f6c3dc8a000 r--p 00054000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
    7f6c3dc8a000-7f6c3dc8b000 rw-p 00058000 08:06 155415                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/openssl.so
    7f6c3dc8b000-7f6c3de8d000 r-xp 00000000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
    7f6c3de8d000-7f6c3de8e000 r--p 00002000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
    7f6c3de8e000-7f6c3de8f000 rw-p 00003000 08:06 155399                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/windows_31j.so
    7f6c3de8f000-7f6c3e0a4000 r-xp 00000000 08:06 9849398                    /lib/libz.so.1.2.11
    7f6c3e0a4000-7f6c3e0a5000 r--p 00015000 08:06 9849398                    /lib/libz.so.1.2.11
    7f6c3e0a5000-7f6c3e0a6000 rw-p 00016000 08:06 9849398                    /lib/libz.so.1.2.11
    7f6c3e0a6000-7f6c3e2b7000 r-xp 00000000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
    7f6c3e2b7000-7f6c3e2b8000 r--p 00011000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
    7f6c3e2b8000-7f6c3e2b9000 rw-p 00012000 08:06 155431                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/zlib.so
    7f6c3e2b9000-7f6c3e4ba000 r-xp 00000000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
    7f6c3e4ba000-7f6c3e4bb000 r--p 00001000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
    7f6c3e4bb000-7f6c3e4bc000 rw-p 00002000 08:06 155408                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/io/wait.so
    7f6c3e4bc000-7f6c3e6e8000 r-xp 00000000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
    7f6c3e6e8000-7f6c3e6e9000 r--p 0002c000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
    7f6c3e6e9000-7f6c3e6ea000 rw-p 0002d000 08:06 155427                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/socket.so
    7f6c3e6ea000-7f6c3e8f3000 r-xp 00000000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
    7f6c3e8f3000-7f6c3e8f4000 r--p 00009000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
    7f6c3e8f4000-7f6c3e8f5000 rw-p 0000a000 08:06 155411                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/generator.so
    7f6c3e8f5000-7f6c3eafa000 r-xp 00000000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
    7f6c3eafa000-7f6c3eafb000 r--p 00005000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
    7f6c3eafb000-7f6c3eafc000 rw-p 00006000 08:06 155412                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/json/ext/parser.so
    7f6c3eafc000-7f6c3ecfe000 r-xp 00000000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
    7f6c3ecfe000-7f6c3ecff000 r--p 00002000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
    7f6c3ecff000-7f6c3ed00000 rw-p 00003000 08:06 155327                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/cgi/escape.so
    7f6c3ed00000-7f6c3ef08000 r-xp 00000000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
    7f6c3ef08000-7f6c3ef09000 r--p 00008000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
    7f6c3ef09000-7f6c3ef0a000 rw-p 00009000 08:06 155428                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/stringio.so
    7f6c3ef0a000-7f6c3f10c000 r-xp 00000000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
    7f6c3f10c000-7f6c3f10d000 r--p 00002000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
    7f6c3f10d000-7f6c3f10e000 rw-p 00003000 08:06 155386                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/trans/transdb.so
    7f6c3f10e000-7f6c3f30f000 r-xp 00000000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
    7f6c3f30f000-7f6c3f310000 r--p 00001000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
    7f6c3f310000-7f6c3f311000 rw-p 00002000 08:06 155343                     /usr/local/lib/ruby/2.5.0/x86_64-linux-musl/enc/encdb.so
    7f6c3f311000-7f6c3f824000 r-xp 00000000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
    7f6c3f824000-7f6c3f82c000 r--p 00313000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
    7f6c3f82c000-7f6c3f82d000 rw-p 0031b000 08:06 154493                     /usr/local/lib/libruby.so.2.5.1
    7f6c3f82d000-7f6c3f83b000 rw-p 00000000 00:00 0
    7f6c3f83b000-7f6c3f8c4000 r-xp 00000000 08:06 154211                     /lib/ld-musl-x86_64.so.1
    7f6c3f8d2000-7f6c3f916000 rw-p 00000000 00:00 0
    7f6c3f916000-7f6c3f9ba000 rw-p 00000000 00:00 0
    7f6c3f9ba000-7f6c3f9bb000 r--s 00000000 08:06 9723329                    /etc/localtime
    7f6c3f9bb000-7f6c3f9bd000 ---p 00000000 00:00 0
    7f6c3f9bd000-7f6c3fac3000 rw-p 00000000 00:00 0
    7f6c3fac3000-7f6c3fac4000 r--p 00088000 08:06 154211                     /lib/ld-musl-x86_64.so.1
    7f6c3fac4000-7f6c3fac5000 rw-p 00089000 08:06 154211                     /lib/ld-musl-x86_64.so.1
    7f6c3fac5000-7f6c3fac8000 rw-p 00000000 00:00 0
    7ffda984e000-7ffda986f000 rw-p 00000000 00:00 0                          [stack]
    7ffda99f5000-7ffda99f8000 r--p 00000000 00:00 0                          [vvar]
    7ffda99f8000-7ffda99fa000 r-xp 00000000 00:00 0                          [vdso]
    ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
    
    
    [NOTE]
    You may have encountered a bug in the Ruby interpreter or extension libraries.
    Bug reports are welcome.
    For details: http://www.ruby-lang.org/bugreport.html
    
    Aborted (core dumped)
    
  • Allow defining constant values to be added

    Allow defining constant values to be added

    We are using protobuf through gRPC and would like to include in the message definition a value which is provided in the .proto file and not by the program. For example, something like that:

    message SessionRequest {
        string version = 1 [constant="0.1.0"];
    }
    

    The purpose of such version is to make debugging easier: if communication fails, we can log the versions and use that to debug further.

  • How to define object from 3rd party library in .proto file?

    How to define object from 3rd party library in .proto file?

    How can I define an object from 3rd party library in .proto file ?

    ex - I have a use case where the input object Patient of method storePatient is coming from a library and I need not to define it in .proto file.

    syntax = 'proto3';
    
    package com.example;
    
    service StorageController {
      rpc storePatient(Patient) returns (ResponseStatus) { };
    }
    
    message ResponseStatus {
      int64 code = 1;
      string message = 2;
    }
    

    here, the Patient object should be coming from hl7 3rd party library as below

    import org.hl7.fhir.r4.model.Patient;
    

    Patient is a very complex object and I can't define all its fields like below in .proto file. so this is not the answer I am looking for.

    message Patient {
      string patientName = 2;
      int64 patientAge = 3;
      // Many Many fields and also has nested properties
    }
    

    How can I use Patient object from 3rd party library in .proto file?

  • Google.protobuf.BoolValue generates different variable type in auto generated code.

    Google.protobuf.BoolValue generates different variable type in auto generated code.

    I have a .proto file for my messages in which I have a variable of type google.protobuf.BoolValue.

    When I compiled it using protoc, I got an autogenerated file(.cs), in which the field is mapped to a variable of type FieldCodec<bool?>.

    When my colleague did the same, he got an autogenerated file(.cs), in which the field is mapped to a variable of type Google.Protobuf.WellKnownTypes.BoolValue.

    I see that these two are different types, say one is BoolValue and other is bool?.

    Can anyone please explain me why this difference.

  • fix warning in zlib when building with emscripten

    fix warning in zlib when building with emscripten

    Fixes the following error in zlib when building with emscripten:

    external/zlib/adler32.c:63:15: error: a function definition without a prototype is deprecated in all versions of C and is not supported in C2x [-Werror,-Wdeprecated-non-prototype]
    uLong ZEXPORT adler32_z(adler, buf, len)
                  ^
    

    You can find the working branch that builds protoc with emscripten here: https://github.com/archpaleus/protobuf/tree/emscripten

  • well_known_types is deprecated and suggests using :descriptor_proto_srcs, which does not exist

    well_known_types is deprecated and suggests using :descriptor_proto_srcs, which does not exist

    What version of protobuf and what language are you using? Version: v21.12 Language: Python

    What did you do? Steps to reproduce the behavior:

    1. Try to build a thing that depends on @com_google_proto//:well_known_types after updating to v21.12
    2. Get WARNING message depends on deprecated target '@com_google_protobuf//:well_known_protos': Prefer :well_known_type_protos instead.
    3. Look in BUILD.bazel to see that this "Prefer" is an incomplete message, and the full message in the comment says
      # DEPRECATED: Prefer :well_known_type_protos for the Well-Known Types
      # (https://developers.google.com/protocol-buffers/docs/reference/google.protobuf)
      # or :descriptor_proto(_srcs) for descriptor.proto (source), or
      # :compiler_plugin_proto for compiler/plugin.proto.
      
    4. Try using variations of those to no avail.
    5. Look in BUILD.bazel again, and see that there is no :descriptor_proto_srcs target (I see it in the main branch, but not in 21.12)

    What did you expect to see Some option that will work in the context where deps=["@com_google_protobuf//:well_known_types"] previously worked, without a deprecation warning. With :descriptor_proto_srcs the problem is the missing target. With the other three options as deps, there is a lengthy error message that I am not confident doesn't include NDA information so cannot include here. It seems reasonably clear that the issue is not including srcs, since that's the only difference between deps=[":well_known_types"] and deps=[the three that exist].

    What did you see instead? No combination of the suggested alternatives will build that target.

    My current workaround is to simply patch out the deprecation tag and continue to use :well_known_types for now.

A new way of working with Protocol Buffers.

Buf All documentation is hosted at https://buf.build. Please head over there for more details. Goal Buf’s long-term goal is to enable schema-driven de

Jan 1, 2023
A Protocol Buffers compiler that generates optimized marshaling & unmarshaling Go code for ProtoBuf APIv2

vtprotobuf, the Vitess Protocol Buffers compiler This repository provides the protoc-gen-go-vtproto plug-in for protoc, which is used by Vitess to gen

Jan 1, 2023
A plugin of protoc that for using a service of Protocol Buffers as http.Handler definition

protoc-gen-gohttp protoc-gen-gohttp is a plugin of protoc that for using a service of Protocol Buffers as http.Handler definition. The generated inter

Dec 9, 2021
Estudos com Golang, GRPC e Protocol Buffers

Golang, GRPC e Protocol Buffers Estudos com Golang, GRPC e Protocol Buffers Projeto feito para fins de estudos. Para rodar basta seguir os passos abai

Feb 10, 2022
This is a golang C2 + Implant that communicates via Protocol Buffers (aka. protobufs).

Br4vo6ix DISCLAIMER: This tool is for educational, competition, and training purposes only. I am in no way responsible for any abuse of this tool This

Nov 9, 2022
wire protocol for multiplexing connections or streams into a single connection, based on a subset of the SSH Connection Protocol

qmux qmux is a wire protocol for multiplexing connections or streams into a single connection. It is based on the SSH Connection Protocol, which is th

Dec 26, 2022
A simple tool to convert socket5 proxy protocol to http proxy protocol

Socket5 to HTTP 这是一个超简单的 Socket5 代理转换成 HTTP 代理的小工具。 如何安装? Golang 用户 # Required Go 1.17+ go install github.com/mritd/s2h@master Docker 用户 docker pull m

Jan 2, 2023
A yaml data-driven testing format together with golang testing library

Specified Yaml data-driven testing Specified is a yaml data format for data-driven testing. This enforces separation between feature being tested the

Jan 9, 2022
Golang binary for data exfiltration with ICMP protocol
Golang binary for data exfiltration with ICMP protocol

QueenSono ICMP Data Exfiltration A Golang Package for Data Exfiltration with ICMP protocol. QueenSono tool only relies on the fact that ICMP protocol

Jan 3, 2023
IPIP.net officially supported IP database ipdb format parsing library

IPIP.net officially supported IP database ipdb format parsing library

Dec 27, 2022
Fetches one or more DNS zones via AXFR and dumps in Unix hosts format for local use

axfr2hosts About axfr2hosts is a tool meant to do a DNS zone transfer in a form of AXFR transaction of one or more zones towards a single DNS server a

Aug 9, 2022
Microservice on IPv4: 3000 port without database. Upon request, returns the source JSON in the desired format
Microservice on IPv4: 3000 port without database. Upon request, returns the source JSON in the desired format

?? Этапы V1.0 Микросервис на IPv4:3000 порту без базы данных. По запросу возвращ

Dec 22, 2021
A simple command-line tool to manage ADRs in markdown format

Architecture Decision Records A simple command-line tool to manage ADRs in markdown format. Usage adr init [path] Initialize the ADR path and create a

Feb 10, 2022
Jswhois - Whois lookup results in json format

jswhois -- whois lookup results in json format jswhois(1) is a tool to look up a

Nov 30, 2022
Data Connector is a Google Sheets Add-on that lets you import (and export) data to/from Google Sheets

Data Connector Data Connector is a Google Sheets Add-on that lets you import (and export) data to/from Google Sheets. Our roadmap: Connect to JSON/XML

Jul 30, 2022
Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed.

arp Package arp implements the ARP protocol, as described in RFC 826. MIT Licensed. Portions of this code are taken from the Go standard library. The

Dec 20, 2022
Gmqtt is a flexible, high-performance MQTT broker library that fully implements the MQTT protocol V3.1.1 and V5 in golang

中文文档 Gmqtt News: MQTT V5 is now supported. But due to those new features in v5, there area lots of breaking changes. If you have any migration problem

Jan 5, 2023
A TCP Server Framework with graceful shutdown, custom protocol.

xtcp A TCP Server Framework with graceful shutdown,custom protocol. Usage Define your protocol format: Before create server and client, you need defin

Dec 7, 2022
Go library for writing standalone Map/Reduce jobs or for use with Hadoop's streaming protocol

dmrgo is a Go library for writing map/reduce jobs. It can be used with Hadoop's streaming protocol, but also includes a standalone map/reduce impleme

Nov 27, 2022