Starting to cleanup, organize files, and make it look like a real project.
diff --git a/samples/cmdline/buzz.py b/samples/cmdline/buzz.py
new file mode 100644
index 0000000..9a0a909
--- /dev/null
+++ b/samples/cmdline/buzz.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python2.4
+# -*- coding: utf-8 -*-
+#
+# Copyright 2010 Google Inc. All Rights Reserved.
+
+"""One-line documentation for discovery module.
+
+A detailed description of discovery.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+# TODO
+# - Add normalize_ that converts max-results into MaxResults
+#
+# - Each 'resource' should be its own object accessible
+#   from the service object returned from discovery.
+#
+# - Methods can either execute immediately or return 
+#   RestRequest objects which can be batched. 
+#
+# - 'Body' parameter for non-GET requests 
+#
+# - 2.x and 3.x compatible
+
+# JS also has the idea of a TransportRequest and a Transport.
+# The Transport has a doRequest() method that takes a request
+# and a callback function.
+# 
+
+
+# Discovery doc notes
+# - Which parameters are optional vs mandatory
+# - Is pattern a regex?
+# - Inconsistent naming max-results vs userId
+
+
+from apiclient.discovery import build
+
+import httplib2
+import simplejson
+import re
+
+import oauth2 as oauth
+
+def oauth_wrap(consumer, token, http):
+    """
+    Args:
+       http - An instance of httplib2.Http
+           or something that acts like it.
+
+    Returns:
+       A modified instance of http that was passed in.
+      
+    Example:
+
+      h = httplib2.Http()
+      h = oauth_wrap(h)
+
+    Grumble. You can't create a new OAuth
+    subclass of httplib2.Authenication because
+    it never gets passed the absolute URI, which is
+    needed for signing. So instead we have to overload
+    'request' with a closure that adds in the 
+    Authorization header and then calls the original version
+    of 'request()'.
+    """
+    request_orig = http.request
+    signer = oauth.SignatureMethod_HMAC_SHA1()
+
+    def new_request(uri, method="GET", body=None, headers=None, redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None):
+      """Modify the request headers to add the appropriate
+      Authorization header."""
+      req = oauth.Request.from_consumer_and_token(
+          consumer, token, http_method=method, http_url=uri)
+      req.sign_request(signer, consumer, token)
+      if headers == None:
+        headers = {}
+      headers.update(req.to_header())
+      headers['user-agent'] = 'jcgregorio-test-client'
+      return request_orig(uri, method, body, headers, redirections, connection_type)
+
+    http.request = new_request
+    return http
+
+def get_wrapped_http():
+  f = open("oauth_token.dat", "r")
+  oauth_params = simplejson.loads(f.read())
+
+  consumer = oauth.Consumer(oauth_params['consumer_key'], oauth_params['consumer_secret'])
+  token = oauth.Token(oauth_params['oauth_token'], oauth_params['oauth_token_secret'])
+
+  # Create a simple monkeypatch for httplib2.Http.request 
+  # just adds in the oauth authorization header and then calls
+  # the original request().
+  http = httplib2.Http()
+  return oauth_wrap(consumer, token, http)
+
+
+def main():
+  http = get_wrapped_http()
+  p = build("buzz", "v1", http = http)
+  activities = p.activities()
+  activitylist = activities.list(scope='@self', userId='@me')
+  print activitylist['items'][0]['title']
+  activities.insert(userId='@me', body={
+    'title': 'Testing insert',
+    'object': {
+      'content': u'Just a short note to show that insert is working. ☄', 
+      'type': 'note'}
+    }
+  )
+
+if __name__ == '__main__':
+  main()