gooLego: Google’s software building blocks

Google Inc.
Image via Wikipedia

Over the past few years, Google has open sourced several projects that provide some commonly used building blocks in any large software project. Some of them I was aware of since when they were launched (like protobufs), while others I discovered only recently. I couldn’t find any location where all the projects were listed together and combing through Google Code looking for them was painful, so I’m putting together a list myself. Hope some of you find it useful.

  • protobufs: Platform agnostic messages. Critical for any distributed system. Note that protobufs only provide message serialization/deserialization (for various languages). An important missing piece is an RPC framework built on top of them. There are several projects attempting to build one using protobufs, but none of them are robust or mature enough for production use.
  • style guide: The importance of a style guide is probably understated. It is not about what is the “right” style — it is about consistency. While people may have different opinions, if everyone follows the same style, the code becomes much more readable and maintainable. Google maintains style guides for C++ and Python.
  • config flags: Another important building block for all command line programs.
  • logging: Self-evident. Google’s logging library supports various log levels and other useful macros.
  • core dumper: A very nifty library — it allows you to dump core from within a running application. Extremely useful for debugging production systems.
  • perftools: An extremely useful library for measuring and monitoring performance of programs. By simply linking against perftools, your application gets a much better malloc, heap checking, visual CPU profile of various routines (via graphviz), visualization of memory usage etc.
  • googlemock: A framework to quickly build mock objects — useful for testing.
  • googletest: Google’s C++ unit testing framework, built on top of xUnit. Integrates well with googlemock.

Of course, this is not an exhaustive list. There are numerous other open source projects from Google, some of them probably much more bigger and visible than the ones listed above — such as Wave, Go, GWT etc. If there’s a project that is a software building block that I missed out, do chime in the comments below.

Enhanced by Zemanta

Google (Contacts, Mail, Talk) confusion

Image representing Google Talk as depicted in ...
Image via CrunchBase

When Gmail first introduced the ability to import Contacts, I prompty exported my addressbook from KAddressbook. And then I mostly forgot about it, until recently. In the meantime, Google happily kept adding “suggested” contacts to my addressbook.

I decided to revisit my Google Contacts after reading some blog posts about new functionality. Sure enough, Contacts now even has its own URL (google.com/contacts). I figured this was a good time to clean out the contact and start from scratch with a clean list not polluted by the automatic suggested contacts. So I went ahead and deleted all the contacts and re-imported them from my desktop address book.

Surprisingly, there are weird interactions between my Google Contacts, and my Google Talk buddy list. A lot of people on my buddy list silently disappeared, without any kind of message or confirmation from either GMail, Talk or Contacts. And since then, my attempts to add back all the deleted buddies has failed miserably. Every time I add someone to my list, they show up just fine, but if I log out and log back in, they are usually not there.

What is even worse, this behavior is non-determinstic. Some additions persist across multiple sessions, while others are more ephemeral. I still don’t know exactly what the interaction between these three properties is, but it is very confusing. Google should clarify this more — what exactly is the impact of modifying my Contacts on things like Google Talk etc?

Reblog this post [with Zemanta]

GAFYD slowness

I have been using Google Apps For Your Domain (GAFYD) for my floatingsun.net email for a while now (earlier I was using the email setup at my hosting provider, but moved away because of the lack of adequate spam filtering). In the beginning, it was just a joy and everything was nice and peachy.

Google Apps

However, over time, the service has been gradually deteriorating. Since the past few weeks I have noticed a significant increase in latency. Meaning that if I open mail.google.com side-by-side with mail.google.com/a/floatingsun.net, my “regular” gmail account loads up much, much faster than my floatingsun.net account. This despite the fact that my regular gmail account has at least 100x the messages on my floatingsun.net account. And in fact, there have been several occassions in the recent past where it doesn’t load at all, or fails with a server error.

Not to mention that IMAP access has been horrendous recently. Throughout the day, email takes forever to open in my IMAP client (it opens up relatively faster on the web interface) and I get frequent disconnections from the server.

I don’t mean to beat up on Google. I must admit that I am on the free plan, so I really have no reason to complain. But gmail is also free. I have a feeling Google is deliberately imposing some kind of quality-of-service differentiation between paid Google Apps accounts vs free ones. I am keeping an eye on the status dashboard — it says no issues but my IMAP is still flaky. Is anyone else seeing poor performance on free GAFYD accounts?

uBoggle is a featured application!


[[http://uboggle.appspot.com|uBoggle]] is now appearing as the **featured application** on the [[http://appengine.google.com|Google AppEngine]] [[http://appgallery.appspot.com|Application Gallery]]. Thank you for your votes, and thanks to the appgallery editors!

And I have a screenshot for proof and posterity :)

uBoggle is the featured application on App Gallery

uBoggle is the featured application on App Gallery