Friday, November 6, 2009

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Dev channel has been updated to for all platforms (Windows, Mac, and Linux). The focus on this release has been feature polish, stability improvement, and extensions work.

  • Significant bookmark bar improvements.
  • [r29163, r29299] Audio playing improvements in video/audio tags. (Issues: 23974, 20945, 17703)
  • [r29261] Fix international keyboard handling (alt-gr, ctrl+f). (Issues: 10846, 2215, 21471)
  • [r29657] ~ now works in the Omnibox to expand to home directories. (Issue: 18200)
  • [r29857] Fix conflicts between accelerator keys and HTML DOM accesskeys. (Issue: 21624)
  • [r29903] Inactive pinned tabs on linux throb when the title changes. (Issue: 25308)
  • Text drawn over rounded corners (including buttons) is no longer blurry. This affected a variety of sites, including Google Calendar and Google Reader.
  • As an experiment, we've changed the way clicking in the omnibox works. Leave a comment on the bug if it bothers you.

  • Lots of work to polish and stabilize the browser and page action APIs:
    • [r29556] Add badge text color API. Also change color APIs from ARGB to RGBA (breaking change, sorry!) (Issues: 24635, 24644, 25215)
    • [r29152, r29785] Browser actions (buttons, popups) are now implemented. (Issue: 23882, 23897)
    • [r29997] Add support for tab-specific state to browser actions. Also, fix the bug where only the first call to setIcon() works. (Issues: 24669,24472)
    • [r30346] Constrain browser action popups to a min/max size. Also fix some glitches in popup sizing. (Issue 25214)
    • [r30499] Use a better signature for the new page actions API (chrome.pageAction.* instead of chrome.pageActions.*). This is technically a breaking change, but hopefully not too many people had gotten around to using the new API yet. (Issue 25833)
  • [r29665] Remove toolstrips on linux. They were causing lots of crashes and are going away soon anyway. (Issue 25106)
  • [r29911] Add chrome.extension.sendRequest() -- a simpler way to do content script messaging. (Issue 23865)
  • [r30341] Add new event chrome.tabs.onStatusChange. This makes the common case of wanting to know when tabs load much easier. (Issue 21729)
  • Other miscellaneous cleanup:
    • [r29498] Correctly handle reloading in the task manager (Issue 18693)
    • [r29555] Fix bug where content scripts did not always apply to first page load (Issue 11547)
    • [r29714, r29922, r29935, r30219] Various cleanup for the extension management page (Issues 12119, 25509, 25471)
    • [r30091] Improve install UI on mac (Issue 19654)
    • [r30312] Filter out hidden files when loading and packing extensions (Issue 23004)
    • [r30326] Copy chrome.extension.getTabContentses() to chrome.extension.getExtensionTabs(). Nobody liked the old name. (Issue 21433)
    • [r30384] Use the puzzle piece as the default extension icon. (Issue 25906)
    • [r30481] Hide the theme install bubble a little earlier. It was overlapping with the install dialog on linux. (Issue 26130)

Known Issues:
  • [r26861] - Autocomplete/ select box values are not being correctly populated in Linux. As a work around you can use the up/down arrow keys to view the current selection.
  • [r26600] - Task bar icon in Windows does not update/ display correctly.

More details about additional changes are available in the svn log of all revisions.

You can find out about getting on the Dev channel here:

If you find new issues, please let us know by filing a bug at

Anthony Laforge
Google Chrome Program Manager

[Gd] Announcing the Worldwide Ning Appathon Competition

| More

OpenSocial API Blog: Announcing the Worldwide Ning Appathon Competition

Let the games begin! At last night's Ning Appathon kickoff event at the Ning offices in Palo Alto, Ning started a week-long worldwide app development competition for the recently launched Ning Apps platform.

WHAT: The Ning Appathon is a week-long OpenSocial development competition with prizes for both original and ported applications. Judges include Ning Chairman and Co-founder Marc Andreessen, Wired magazine Editor-in-Chief Chris Anderson and Managing Director of building43 Robert Scoble.

WHERE: The competition is open to participants worldwide. Visit the Ning Developer Network for details and Ning Apps documentation.

WHEN: The competition began at our kickoff event on November 5th. All entries must be submitted via by 10 p.m. Pacific on Thursday, November 12th.

PRIZES: The Grand Prize for Best Original App is $5,000 (US). The Grand Prize for Best Ported App is $4,000 (US). Two Original App and Ported App finalists (four total) will each receive $500 (US). All six winners will also receive prominent editorial placement in the Ning Apps directory.

Please visit the Ning Developer Network for more information. Good luck!

Posted by Kyle Ford, Director of Partner Design & Development, Ning

Thursday, November 5, 2009

[Gd] ADC 2 Round 2 Voting Open

| More

Android Developers Blog: ADC 2 Round 2 Voting Open

The results from ADC 2 Round 1 are now tabulated and verified. With the top 200 applications identified, it's time to begin the final round judging. Be sure to download the ADC 2 judging application, or update your existing application, and help us select the final winners!

For the final round, both users and a Google-selected panel of industry judges will provide votes to determine the final winners. Prizes will be distributed to the top 3 entrants in each of the 10 categories, and the top 3 overall entrants will receive additional prizes. Please see our reference page for full challenge information.

Your vote is critical! We will keep voting open until we have received sufficient votes for all of the applications. We encourage you to download the ADC 2 judging application and evaluate entrants for yourself.

Download Android Developer Challenge 2:


[Gd] Audrey Roy Wins the App Engine + Twilio Developer Contest

| More

Google App Engine Blog: Audrey Roy Wins the App Engine + Twilio Developer Contest

Audrey Roy

Congratulations to Audrey Roy -- her "Price It By Phone" application won the Google App Engine + Twilio developer contest that ran from September 21st to October 4th. Audrey will receive $1000 in Google App Engine credit, and a Dell Netbook from Twilio.

Audrey hacked together her contest submission in under 48 hours after going to an art museum and discovering that the $60 box she wanted was only $37 on She used the Amazon Product Advertising API to look up the best used and new prices for books by ISBN number, using any touch tone phone.

Look up book prices by calling (877) 265-8137. Enter the book's 10-digit ISBN number after the prompt. The voice will tell you's lowest new and used prices for the book. Then, to see the list of books that you've already price-checked, with links to their Amazon detail pages, enter your phone number at

You can find an interview of Audrey on Twilio's blog.

Thank you to everyone who participated in the contest.

Twilio runs weekly developer contests to encourage developers to explore the many use cases, technologies, and industries where voice applications can provide useful solutions. They announce a new category each Monday along with the previous week's winner. This week's category is "Twilio for Salesforce, with Appirio" and the deadline is midnight on November 19th.

Questions? Drop us a line at

Guest Post by Danielle Morrill, Director of Marketing, Twilio

[Gd] Stable Channel Update

| More

Google Chrome Releases: Stable Channel Update

The stable channel has been updated to, and includes the following security and stability fixes:
  • Resolved a history issue that affected going back from queries in Google Maps. (Issue: 21353)
  • Fixed issue with Adobe Acrobat Reader 9.2, where no content would be displayed. (Issue: 24883)
  • Fixed an infinite loop in acc decoding. (Webkit Issue: 27239)
  • Fixed a top crasher. (Issue: 22205)
  • Fix issues where setInterval sometimes eating 100% CPU. (Issue: 25892)
Security Fixes:

CVE-2009-XXXX  User not warned for some file types that can execute JavaScript

The user was not warned about certain possibly dangerous file types such as SVG, MHT and XML files. In some browsers, JavaScript can execute within these types of files. Because the JavaScript runs in the local context, it may be able to access local resources.

More info:
(This issue will be made public once a majority of users are up to date with the fix.)

Severity: Medium
Credit: Inferno of

  • A victim would need to visit a page under an attacker's control.
  • The victim would furthermore need to open a malicious file.

CVE-2009-XXXX  Possible memory corruption in the Gears plugin

A malicious site could use the Gears SQL API to put SQL metadata into a bad state, which could cause a subsequent memory corruption. This may lead to a Gears plugin crash or possibly arbitrary code execution.

More info:
(This issue will be made public once a majority of users are up to date with the fix.)

Severity: High
Credit: This issue was found by the Google Chrome security team.

  • A victim would need to visit a page under an attacker's control.
  • The victim would furthermore need to "click-through" the Gears dialog confirming that they trust the attacker's evil page.

[Gd] Introducing Closure Tools

| More

Google Code Blog: Introducing Closure Tools

Millions of Google users worldwide use JavaScript-intensive applications such as Gmail, Google Docs, and Google Maps. Like developers everywhere, Googlers want great web apps to be easier to create, so we've built many tools to help us develop these (and many other) apps. We're happy to announce the open sourcing of these tools, and proud to make them available to the web development community.

Closure Compiler
Closure Compiler is a JavaScript optimizer that compiles web apps down into compact, high-performance JavaScript code. The compiler removes dead code, then rewrites and minimizes what's left so that it will run fast on browsers' JavaScript engines. The compiler also checks syntax, variable references, and types, and warns about other common JavaScript pitfalls. These checks and optimizations help you write apps that are less buggy and easier to maintain. You can use the compiler with Closure Inspector, a Firebug extension that makes debugging the obfuscated code almost as easy as debugging the human-readable source.

Because JavaScript developers are a diverse bunch, we've set up a number of ways to run the Closure Compiler. We've open-sourced a command-line tool. We've created a web application that accepts your code for compilation through a text box or a RESTful API. We are also offering a Firefox extension that you can use with Page Speed to conveniently see the performance benefits for your web pages.

Closure Library
Closure Library is a broad, well-tested, modular, and cross-browser JavaScript library. Web developers can pull just what they need from a wide set of reusable UI widgets and controls, as well as lower-level utilities for the DOM, server communication, animation, data structures, unit testing, rich-text editing, and much, much more. (Seriously. Check the docs.)

JavaScript lacks a standard class library like the STL or JDK. At Google, Closure Library serves as our "standard JavaScript library" for creating large, complex web applications. It's purposely server-agnostic and intended for use with the Closure Compiler. You can make your project big and complex (with namespacing and type checking), yet small and fast over the wire (with compilation). The Closure Library provides clean utilities for common tasks so that you spend your time writing your app rather than writing utilities and browser abstractions.

Closure Templates
Closure Templates grew out of a desire for web templates that are precompiled to efficient JavaScript.  Closure Templates have a simple syntax that is natural for programmers.  Unlike traditional templating systems, you can think of Closure Templates as small components that you compose to form your user interface, instead of having to create one big template per page.

Closure Templates are implemented for both JavaScript and Java, so you can use the same templates both on the server and client side.

Closure Compiler, Closure Library, Closure Templates, and Closure Inspector all started as 20% projects and hundreds of Googlers have contributed thousands of patches. Today, each Closure Tool has grown to be a key part of the JavaScript infrastructure behind web apps at Google.  That's why we're particularly excited (and humbled) to open source them to encourage and support web development outside Google. We want to hear what you think, but more importantly, we want to see what you make. So have at it and have fun!

By the Closure Tools team

Wednesday, November 4, 2009

[Gd] Upcoming US Events with Google Wave Presentations

| More

Google Wave Developer Blog: Upcoming US Events with Google Wave Presentations

Similiar to the Google Wave European tour, we're stopping by several developer events in the states:

  • LISA 2009
    • Nov. 1-6, 2009, in Baltimore MD
    • Nov. 4 (today!) - "Google Wave Federation Protocol" with Joe Gregorio
  • SF Java User Group
    • Nov. 10, 2009, in San Francisco, CA
    • "Google Wave APIs: Now & Beyond" with Marcel Prasetya
  • Dreamforce
    • Nov. 17-20, 2009, in San Francisco, CA
    • Nov. 19 - "Ready to Ride the Google Wave?" with Dan Peterson
  • Massachusetts GTUG Wave Hackathon
    • Nov. 21, 2009, in Boston, MA

All of these events are still open for registration - so grab a seat while you still can. See you there!

Posted by Pamela Fox, Developer Relations


[Gd] Dev Channel Updated with UI improvements for Mac

| More

Google Chrome Releases: Dev Channel Updated with UI improvements for Mac

This release is Mac OS X only and includes a number of UI improvements.


  • [r30050] Use new renderer process for cross-site links with rel=noreferrer and target=_blank (Issue: 24447).
  • [r29848] Video/audio tags now support data:// protocol (Issue: 24357).


More details about additional changes are available in the svn log of all revisions.

You can find out about getting on the Dev channel here:

If you find new issues, please let us know by filing a bug at

Orit Mazor
Google Chrome Technical Program Manager


[Gd] Final Decommission Notice for the Legacy YouTube API

| More

YouTube API Blog: Final Decommission Notice for the Legacy YouTube API

It's been several years since we've released the Google Data-based YouTube API, and in that time we've been encouraging developers who used the legacy YouTube API to upgrade before we pull the metaphoric plug on that older version. At this point, all but a handful of holdouts have upgraded, and as of November 11, 2009, the legacy YouTube API will cease operation.

If you're using one of our YouTube API client libraries, then you're definitely making use of the modern Google Data YouTube API. If you're manually making HTTP requests to a URL whose hostname contains, then you're also good to go. If you think you might still be using the legacy YouTube API but aren't sure, take a look at some of the example legacy API calls in this migration guide. If it turns out that you are still using the older API, then the migration guide will give you the information you need to upgrade – and be sure to do so before November 11!

[Gd] New insights into web application performance

| More

Google Web Toolkit Blog: New insights into web application performance

I've sometimes thought that optimizing web applications is as much a science as dowsing. (No offense intended, dowsers of the world — but you have to admit it's a hard thing to explain even when it does work out.) Even when you are completely willing to invest time and energy into optimizing an application, how do you actually go about it?

Our team, along with everyone else in the world who cares about web application performance, has had to essentially guess at where time goes inside the browser. We've spent countless hours debating each others' wild-eyed speculations as to the true sources of latency afflicting a wide variety of applications. Indeed, web apps can be slow for all sorts of opaque and unintuitive reasons. Don't be fooled into thinking that bloated, slow JavaScript is the only culprit. We've seen pathological situations in which a few seemingly insignificant CSS tweaks can improve performance by a factor of 5 or more. Another dark gem: rearranging a mere few lines of JavaScript that were inadvertently calling DOM-related methods in an unfortunate sequence (which caused multiple redundant layouts) turned a life-negating 5 second operation into a sprightly 50 millisecond blink of an eye. That one took 5 days to find the offending 4 lines of JavaScript and then about 3 seconds to actually make the code change. #nowiamwaybehindingooglereader

We couldn't take it anymore. We decided we had to find a way to transform the witchcraft of optimizing web apps into a legitimate engineering task, once and for all.

My team began working on a series of changes to WebKit and Chrome to collect precise metrics on where time is, in fact, going within the browser. When, exactly, does layout occur? How long does each layout take? Can layout happen synchronously while my JavaScript is executing, or is it deferred? How much time is spent on CSS selector matching? How long does parsing (versus executing) JavaScript take? Does the process of actually painting pixels on the screen take much time? We instrumented the browser way deep down inside to produce a stream of such metrics, being very careful to keep observer effects to a minimum.

Happily, we've managed to land these changes into both WebKit and Chrome over the last several weeks. Soon you'll see the first examples of tools that make these metrics available to web developers using WebKit-based browsers. Of course, we have a lot more instrumentation planned, but the ball is really rolling now thanks to lots of help from the friendly folks on the WebKit and Chrome teams (especially Pavel Feldman and Timothy Hatcher). We've gained many new insights, some of which I mentioned in my Measure in Milliseconds talk at Google I/O earlier this year. When you see these metrics yourself for your own web apps, you'll likely be surprised — and you'll almost certainly wonder how anyone tried to write high-performance code without this sort of insight. Be sure to keep an eye on the Chrome Dev Channel and the WebKit nightly builds for new Inspector features based on our work.


[Gd] New personalization features in Google Friend Connect

| More

Google Code Blog: New personalization features in Google Friend Connect

Today, we're excited to announce several new features for Google Friend Connect that make it possible for website owners to get to know their users, encourage users to get to know each other, and match their site content (including Google ads) to visitors' interests. Check out the Google Social Web Blog for an overview of these new features.

We also want to point out that there are APIs for developers who want to play with the interests data programmatically. With the new interest data described on the Social Web Blog, developers can write custom polls and access the interests data directly. Friend Connect provides API level access to both individual interests information as well as aggregate information for all users of a site. Interests information can be added programmatically for the signed-in user or via the poll gadget, and it can be accessed via both the JavaScript API and the OpenSocial REST API. The Guitar Universe example site should give you an idea of some of the things that are possible with this new launch.

As always, feel free to ask technical questions related to the Friend Connect APIs in the developer forum.

By Mussie Shore, Product Manager, Google Friend Connect

[Gd] New personalization features in Google Friend Connect

| More

Official Google Webmaster Central Blog: New personalization features in Google Friend Connect

Webmaster Level: All

Just a few weeks ago, we made Google Friend Connect a lot easier to use by dramatically simplifying the setup process. Today, we're excited to announce several new features that make it possible for website owners to get to know their users, encourage users to get to know each other, and match their site content (including Google ads) to visitors' interests.

To learn more about these new features, check out the Google Social Web Blog.
Posted by Mussie Shore, Product Manager, Google Friend Connect

Tuesday, November 3, 2009

[Gd] Discover v2009: Getting ideas with TargetingIdeaService

| More

AdWords API Blog: Discover v2009: Getting ideas with TargetingIdeaService

As we announced recently, KeywordToolService and SiteSuggestionService were among the services deprecated to make way for their v2009 successors. In designing their new replacement, we sought to create a unified experience similar to our other v2009 services. The new TargetingIdeaService combines queries for both keywords and placements into one service with a common method to retrieve TargetingIdeas. In this blog post, we will discuss querying the new service for ideas to aid you in shaping your campaign and how you would go about migrating from v13.

Similar to our other new services, the TargetingIdeaService uses a get method along with a selector to query for both keywords and placements. There are currently two types of requests that can be made - ideas and stats. We will discuss querying for ideas here and save stats for a future blog post.

There are 4 main parameters of the selector which are used for querying ideas:

  • requestType - the request type equal to IDEAS or STATS.
  • ideaType - the type of idea to get equal to KEYWORD or PLACEMENT.
  • searchParameters - contains both the seed parameters as well as filters to apply to the results, which are specific to the ideaType.
  • requestedAttributeTypes - narrows the attributes returned to only those requested, which are specific to the searchParameters and ideaType.

Using these 4 parameters, you will have a vast degree of customization for your results. Each of these parameters and their limitations is best described in the TargetingIdeaSelector documentation page. We will now walk through a few examples on how you would replicate v13's functionality, and how you can improve upon it with v2009.

Replicating KeywordToolService.getKeywordVariations

In v13, you would typically retrieve a list of keyword variations from the getKeywordVariations method. Below is a snippet of code which replicates the basic functionality of this method.

    Keyword keyword = new Keyword();
    keyword.setText("cheap airline tickets");

    LanguageTarget language = new LanguageTarget();

    CountryTarget country = new CountryTarget();

    TargetingIdeaSelector selector = new TargetingIdeaSelector();
    selector.setSearchParameters(new SearchParameter[] {
      new RelatedToKeywordSearchParameter(null, new Keyword[] {keyword}),
      new LanguageTargetSearchParameter(null, new LanguageTarget[] {language}),
      new CountryTargetSearchParameter(null, new CountryTarget[] {country})});
    selector.setPaging(new Paging(0, 6));

The results you get back may resemble keywords like:

    cheap airline tickets/EXACT
    cheap airline tickets/BROAD
    cheap airline tickets/PHRASE
    airline tickets/BROAD
    airline tickets/EXACT
    airline tickets/PHRASE

As you can see, since the results were not filtered, they weren't that great. You can improve the results by specifying additional search parameters in the selector:

    // Using the same keyword from above, filter by removing the original
    // keyword, by keeping the same match type, and by only choosing
    // "long-tail" keywords.
    new ExcludedKeywordSearchParameter(null, new Keyword[] {keyword}),
    new KeywordMatchTypeSearchParameter(null,
        new KeywordMatchType[] {keyword.getMatchType()}),
    new CompetitionSearchParameter(null,
        new CompetitionSearchParameterLevel[] {

The results are now more interesting:

    legion air tickets/BROAD
    air tram tickets/BROAD
    block air tickets/BROAD
    sheap air tickets/BROAD
    cheap airfare tracker/BROAD
    cheap airfare forum/BROAD

You will notice now that the results are beginning to give you a better idea on how you would shape your campaign. We will now explore placement functionality, formerly found within the SiteSuggestionService.

Replicating SiteSuggestionService.getSitesByUrls

In v13, you would typically retrieve a list of similar websites to expand your content network campaign using the getSitesByUrls method. Below is a snippet of code which replicates the basic functionality of this method.

    String[] urls = new String[] {"",

    LanguageTarget language = new LanguageTarget();

    CountryTarget country = new CountryTarget();

    TargetingIdeaSelector selector = new TargetingIdeaSelector();
    selector.setSearchParameters(new SearchParameter[] {
      new RelatedToUrlSearchParameter(null, urls, true),
      new PlacementTypeSearchParameter(null,
         new SiteConstantsPlacementType[] {SiteConstantsPlacementType.SITE}),
      new LanguageTargetSearchParameter(null, new LanguageTarget[] {language}),
      new CountryTargetSearchParameter(null, new CountryTarget[] {country})});
    selector.setPaging(new Paging(0, 6));

The results you get back may resemble placements like: Results,Top center,Bottom right

Though you now have a better idea of which placements you would like to pursue, you may still have difficulty ranking your results. We will finally discuss pulling additional attributes to help better evaluate targeting ideas.

Requesting more attributes

The TargetingIdeaService adds new functionality not previously found in v13 to help you better understand your results. For example, you may notice from the results above that "" looks interesting, but does not offer much information beyond its URL. To investigate, you can request that a sample URL for each placement be supplied to determine if this is the right website for you. You can do this by adding the SAMPLE_URL attribute to the requestedAttributeTypes parameter:

    // PLACEMENT is added to associate with SAMPLE_URL.
    selector.setRequestedAttributeTypes(new AttributeType[] {
      AttributeType.PLACEMENT, AttributeType.SAMPLE_URL});

When the results are returned, you will then be able to visit each sample URL to investigate the location and quality of placement yourself, something that was not previously possible with v13's SiteSuggestionService. All available attributes are listed in the AttributeType documentation page.

As we've shown in this blog post, there are many new and exciting uses for the TargetingIdeaService. We've included examples of using this service in all of our client libraries to help get you started, so please jump in and let us know of any feedback you may have on our forums.

-- Adam Rogal, AdWords API Team