Funny date to be announced, but never the less. On my 29th birthday, Google announced Open-Sourcing the almost ubiquitous Protocol Buffers. Protocol Buffers is simply put a way to store data, and to convert this data between internal data structures, which in Google´s sense must be extremely optimized, to string data like readable files, RPC buffers, etc. And we need it in C++, Python, Java and more.

In daily “programming” life, Protocol Buffers are primarily used as extensible and easy to debug data structures. Since we can convert the data. Any kind of data into files in a whim, it´s easy to test any kind of operation on it.

E.g. we have a model:

message SearchReqest {
  required uint64 request_id = 1;  // resuest message id use for message tracking.
  optional uint64 requestor_id = 2;  // requestor id is the HashTable ID of the one who want´s the answer.
  required uint64 searching_for_id = 3;  // we want to find this id.
}

message SearchResponse {
  required uint64 request_id;  // Same as in SearchRequest.
  optional uint32 ip_of_owner;  // int encoded IPv4 f the owner IF FOUND.
  optional string error_msg;  // error message if it failed.
}

(Example is taken from my Master Thesis, Titled “Consistent Lookup in Distributed Hash Tables”) In this case we can make a hash table given a node setup, and just make a large set of search requests, some node setup data (e.g. node connections, node status etc.), and expected response output. Perfect for debugging, and already contains methods for protocol transfer (ASCII variants, binary formats etc.)

If you are interested, go to http://code.google.com/p/protobuf/ and take a look.