Posted:


All of the videos, slides, and other materials used during our first "Powered by YouTube" developer event are now online and available for mass consumption:

http://sites.google.com/site/poweredbyyoutube

We had ~100 developers come and hang out with us at YouTube HQ. It was a full day, with talks ranging from best practices to the history of scaling up YouTube infrastructure and, of course, cookies, lunch and t-shirts. There were also some good discussions in our Office Hours lounge. If you're interested, the one-sheet Code Labs we had for working with the Data APIs in JSON and PHP are also available online.



Thanks to everyone for coming out, learning about the APIs, and sharing your feedback and questions with us. Special thanks goes to Slide, Qik, Animoto, Gaia Online, and Helio for speaking about their experiences working with our APIs and even walking through some code snippets.

As a bonus, here's a bunch of us (Jochen, Jeff, myself) with Steve Mesa, the top poster in our discussion forum :)

Posted:


Code reviews are the rule at Google -- peer review reduces bugs, increases code quality, reduces maintenance cost, opens up team communication, and helps get the job done right the first time.

Like many open source developers, Google engineers used to rely on mail and textual diffs when doing code reviews. That made code reviews a drag. Mondrian, a web based code review tool, made the process much more efficient by presenting the diffs and comments right in our browser. Mondrian inspired the open source project Review Board, and led to Rietveld, and now the new code review tools are available on Google Code's Project Hosting.

Reviewing code in your project is simple: browse any source file or diff, double click on a source line to add comments, then publish your comments along with a general comment and score for the revision.
You can see code reviews in action on the code.google.com support project. So why are you still reading this? Learn how to use code reviews and don't forget to let us know what you think.

Posted:


The Calendar team was the first to launch its Google Data API back in 2006, and in that proud tradition, we're excited to offer an additional way for developers to read from, and write to Google Calendar: the CalDAV protocol. (CalDAV — an extension of WebDAV — is an evolving, open standard for calendar synchronization.)

So far we've focused on Apple's iCal 3.0 as a first working example of 2-way Google Calendar sync over CalDAV.* But we're calling all current and prospective CalDAV developers to help us firm up the implementation, and make it play nice with other popular CalDAV-friendly clients.

For information on how Google Calendar data maps to the CalDAV protocol, please check out our CalDAV developer's guide. And of course, don't hesitate to hurl feedback in the general direction of our Google Group.

* Disclaimer: during this developer-focused release, and in light of known issues, we strongly suggest that you restrict Google Calendar <> iCal 3.0 synchronization to test accounts only.

Posted:


Today, we're opening registration for Google Developer Days in the UK, France, Germany and Spain.
For those of you in other parts of Europe and India, you might be interested in these other upcoming Google Developer Days. We haven't opened registration for them yet, but we wanted to give you a heads up they're coming:
  • Bangalore, India (Oct 11)
  • Milan, Italy (Oct 21)
  • Prague, Czech (Oct 24)
  • Moscow, Russia (Oct 28)
(Please note Google Developer Day Czech Republic is now on October 24th.)

We'll be there to discuss our APIs and developer tools, diving into topics around App Engine, OpenSocial, Android, and much more. There will also be ample time for mingling with fellow developers and Google engineers. We hope you can join us for these events.

Posted:


The Google Code team is pleased to announce the availability of content licenses for projects hosted on code.google.com. Projects owners may now select from either the Creative Commons Attribution license or the Creative Commons Attribution-Share Alike license to indicate the terms under which their non-source code materials may be distributed.



While this may seem like a minor change, it reflects the continued evolution of our mission to support best practices in open source software development.  As the open web increasingly relies on protocols and formats that reach beyond source code, we encourage authors to apply an explicit copyright license to the data, documentation, and related media that complements their work.

Please join us in the project hosting discussion group if you have any questions.

Posted:


We get a lot of feedback on Google Code and one of the biggest requests have been for feeds (as you can see in issue 8, issue 131, or issue 190). Therefore, I'm happy to announce that we now have Atom feed available for you to track issues, downloads, Subversion changes, and Wiki updates.

As an example, you can take a look at feeds for Google Web Toolkit:

For the SVN changes feed you can add '?path=/path/' to the end of the url to filter the changes by path -- for example, '?path=/trunk/' or '?path=/wiki/'. Simply substitute 'google-web-toolkit' for your project to see your feeds.

As always, if you have any feedback please do not hesitate to let us know.

Posted:


Michael Marcus and Rui Ma, two recent graduates from a masters program at NYU, join us to discuss Gears on Rails, their open source framework that makes it easier than ever to take a Rails code-base offline.

We start out discussing the genesis of the project and what it is trying to do. The sweet spot is building a Rails application that can handle local interactions without having to drop down to Gears JavaScript APIs themselves.

First you install the Gears on Rails plugin via:
ruby script /plugin install http://gearsonrails.googlecode.com/svn/trunk/acts_as_local
Then you can create a Rails controller and tell it that it is local via acts_as_local :except=>['hello'].

Now you can create an action in the controller by creating a method that uses an API that looks Rails-like:
def create_local
'
post = Post.build(params("post"));
Post.create_local(post);
window.location.reload( false );
'
end
In that string, the framework is actually building on Jester, a "JavaScript client for REST APIs that uses Rails conventions". Rui explained how they built out the local versions of the calls.

This means that your architecture revolves around REST calls, and when you are offline they all occur on local data that can sync up later. The synchronization is done for you automatically.

Thanks to Michael and Rui for taking the time to discuss their project with us, and thank you for reading.

Listen to the audio interview directly (or subscribe via iTunes).

Posted:


Software engineers who work with huge code bases always wish searching thousands lines of code and navigating through the file and code structures was easier. They may use powerful IDEs for the local sources on their development workstations, but until recently they have been unable to efficiently browse huge amounts of the open source code in repositories and archives on the Internet. The latest Google Code Search updates add a few features that improve code browsing and searching. The first one is Code Outline which shows you the structure of code written Java, C, C++, C#, Python, JavaScript and Pascal. You can find it under a new "Outline" tab next to the existing "Files" tab.
The second feature we added allows you to click on include and import statements in Java, C, C++ and Python code and jump directly to the included file, if it is in the same package. In the case where the included file comes from a third-party library or, say, from Linux headers, a search is performed for the included file in the indexed code base.


But what if the include list is too large and you can't guess where a class or method is defined? To help we added two new search operators, class: and function: which allow you to restrict your regular expression to the names of classes and functions only. Together with the package: operator and new radio button "Search in ..." that restricts search to the files from the specified package, these are powerful ways to find exactly what you are looking for. Compare the results of searching for "Shell" in the whole code base with the results of searching for class:Shell inside SWT.

We continue improving Code Search and look forward for your feedback at our discussion group.

Posted:


You can easily render 2D bar codes, known as QR Codes, with the Google Chart API, along with pie charts and bar graphs. If you haven't seen a QR Code before, you are looking at one on the right hand side (To see more, do an image search for "QR Code".)

QR Codes are a popular type of two-dimensional barcode. You can encode URLs, contact information, etc. into a black-and-white image like the one on the right. A QR-Code-enabled device can later scan the image and read back the original text. Learn more about QR Codes from Google Print Ads. If you don't have a reader Google also offers a QR Code decoder library: Zebra Crossing (ZXing).

This is how you can creating these with the Google Chart API:

Simply, there is a new chart type, qr, with attributes to tell the service what to produce:
cht=qr
chl=<text>
choe=<output>
<text> is text for the QR code. This must be url-encoded in UTF8. Note the space between hello and world is written as %20 in the following example.
<output> optionally specifies how the text is encoded into bytes in the QR Code. If this is not specified the default of UTF-8 is used. Available options are: Shift_JIS, UTF-8, or ISO-8859-1.

For the details, please read the full documentation.

Posted:


We are trying an experiment, putting up Code Review in a variety of formats, from text to audio (iTunes) and video.



After a great trip to Brazil and Mexico for the Google Developer Day events (Europe in September and October) I am back at it.

There has been some great news in the last week or so, shall we take a peak?

The GData team announced OAuth support around the horn. OAuth is:
An open protocol to allow secure API authentication in a simple and standard method from desktop and web applications.
And, now you can use the standard to access Google services. This is great, as you can write your applications to the one standard, and have it work across various back-ends.

There was some great news that Google, Yahoo!, and Adobe participated in. We have improved Flash indexing working with Adobe's Searchable SWF library, and some smart algorithms. We can now add URLs that are part of the SWF to the pipeline, and can fire off events to grab more data. This is another improved step (we could grok text in the SWF before) and we hope to see many more as we get better at indexing richer and more varied content on the Web.

There were some good open source releases too:

Kenton Varda discussed the release of Protocol Buffers, a core piece of Google infrastructure as we optimize working with structured data.

We also open sourced the Browser Sync code to see if a community wants to come together to continue to support it.

Testing is tough, and we saw two interesting releases that sit in very different realms of the testing world.

Firstly, the Selenium team produced Selenium Ice a great new way to drive Internet Explorer as you test your Web applications.

Secondly, if you are a C++ developer and you like testing, you may be interested to take a peak at the Google Testing library for C++ that we released.

The GData teams have also come up with a couple more releases to go along with the big OAuth announcement.

The first lies with Google Calendar. You can access your GCal data through GData, but what if you just want a nice visualization of the calendar on your website?

CalVis does just that. You get to customize the look and feel, and the library does the rest.

If you are building rich mashups and happen to access multiple Google services, we have tried to make the UI cleaner for your users. You can now add multiple scopes for both AuthSub and OAuth.

Here is a sample AuthSub URL; Note the space delimited scope:
https://www.google.com/accounts/AuthSubRequest?
next=http://localhost/authsub
&scope=http://www.google.com/calendar/feeds%20
http://picasaweb.google.com/data
&secure=1
&session=1
Mrinal Wadhwa flex-ed his muscles to add Gears support to Flex applications via a nice simple library. If you are building Flex applications and want access to the growing Gears components, check it out.

Yesterday was a very Web "3D" day. We released Lively a 3D virtual experience that is the newest addition to Google Labs. It lets you create an avatar and rooms to hang out in. I also saw that Vivaty launched, and some are talking about how virtual worlds are hot in the Valley.

Lively has GTalk integration, and we just released Google talk for iPhone just in time for the new iPhone 3G launch at the end of the week. I will probably head down to one of the Apple Stores and upgrade myself!

As always, thanks for reading, listening, or watching, and let us know if there is anything that you would like to see.

Posted:


One of the core pieces of infrastructure at Google is something called Protocol Buffers. We are really pleased to be open sourcing the system, but what are these buffers?
Protocol buffers are a flexible, efficient, automated mechanism for serializing structured data – think XML, but smaller, faster, and simpler. You define how you want your data to be structured once, then you can use special generated source code to easily write and read your structured data to and from a variety of data streams and using a variety of languages. You can even update your data structure without breaking deployed programs that are compiled against the "old" format
It is probably best to take a peak at some code behind this. The first thing you need to do is define a message type, which can look like the following .proto file:
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;

enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}

message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}

repeated PhoneNumber phone = 4;
}
There is detailed documentation on this language for you to learn more.

Once you have defined a message type, you run a protocol buffer compiler on the file to create data access classes for your platform of choice (Java, C++, Python in this release).

Then you can easily work with the data, for example in C++:
Person person;
person.set_name("John Doe");
person.set_id(1234);
person.set_email("jdoe@example.com");
fstream output("myfile", ios::out | ios::binary);
person.SerializeToOstream(&output);
We sat down with Kenton Varda, a software engineer who worked on the open source effort, to get his take on Protocol Buffers, how we ended up with them, how they compare to other solutions, and more: