Saturday, October 30, 2010

[Gd] Creating a Great User Interface For Your Web App

| More

Chromium Blog: Creating a Great User Interface For Your Web App

Today we are kicking off a series of blog posts that provide tips and tricks on how to create better web apps as well as insights behind the technology of the Chrome Web Store - Ed.

Looking at building a web app for the Chrome Web Store? The browser landscape has changed a lot recently and user expectations about the quality and polish level of apps are extremely high thanks in part to the success of highly polished mobile apps. Can you meet these high expectations with a webapp?

Fortunately, you now have a lot more power and flexibility with the user interface thanks to the power of HTML5, CSS3, and other new web technologies. It’s now possible to make a web app that is every bit as slick and polished as the best desktop or phone app, while still maintaining the flexibility and portability of the web. For example, using CSS3 transitions and animations, you can make actions in your app feel much more interactive. You can use CSS3’s support for gradients, reflections and rounded corners to create scalable interfaces that look as if they were built using hand-crafted images. And with the rise of GPU-accelerated graphics, you’re now able to create compelling 3D experiences.

However, creating great user experiences is about more than sizzle and polish. Another important factor is focus. Ideally, an app should accomplish a single task well with a minimal amount of distractions. Be judicious with your use of links and ads that could take users away from the task at hand. When the user launches your app, they’re trying to accomplish something specific that your app enables; help them get started right away by minimizing the steps that they need to take, especially when they’re first trying your app. If the first thing a user sees is a registration screen, many will bounce off (once you need the users to sign in, you can use OpenID and Google Accounts to simplify the process). By installing your app they’ve indicated something stronger than just clicking a link - they want to use your app to accomplish something specific. Keep the distractions to a minimum and keep your app focused on the job at hand and your users will be happier.

UI responsiveness in your app is also crucial. For example, let’s say you’ve built a photo stitching app that glues together photos into one seamless larger photo. This may require a lot of CPU horsepower or even that you do the heavy lifting on the server. Maybe the whole operation takes two minutes to complete. However, you can still keep your interactive performance high while the operation proceeds asynchronously. You could ship the CPU work off of the main user interface thread using an HTML5 Worker or you could offload it to a server with an XHR. That alone isn’t enough though. You need to give the user feedback while this is happening, ideally something cool and visual and not just a progress bar. Meanwhile, the user should be able to do other things. If that’s not possible, then cancelling needs to be easy and responsive. Interactive performance is usually something that needs to be designed into your app up front rather than added later as an afterthought, so plan ahead.

In short, you need to think both like app developer as well as a web developer. Putting a little extra thought into focus, performance, feedback and polish can make the difference between “meh” and “whee!”.

Posted by Erik Kay, Software Engineer

[Gd] Keynote at QCon SFO

| More

Google Testing Blog: Keynote at QCon SFO

by Patrick Copeland

FYI...I'll be giving a keynote at QCon in SFO next week. Fortunately, or unfortunately as the case my be, the conference is sold out. But they will post a video of the talk following the conference. If you are interested here's the abstract and a pointer to their site (

There are many paths to innovation. At one extreme, we have large companies who create research labs, staff them with world-class Ph.Ds, and set them working for years to solve extremely complex technical problems. At the other extreme, we have the proverbial "two entrepreneurs in the garage" working on a shoe-string budget. Between these two extremes, we have all sorts of combinations of organizational structure, team size, budgets and time horizons.

History shows that world-changing innovation is possible through all of these paths. But history also shows that, as companies grow in size and reputation, they almost inevitably become more conservative and risk-averse when it comes to considering, and investing in, new ideas and disruptive technology – often with disastrous results.

He will describe how Google's core beliefs, culture, organization and infrastructure have successfully encouraged and enabled innovation throughout its growth. He will conclude by presenting and discussing a practical manifesto to stimulate and leverage innovation in any organization.

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Chrome Dev channel has been updated to 8.0.552.23 for all platforms. This release addresses a number of stability and polish issues found in the previous release as well as the following:

  • Various fixes for browser sign-in
  • [r64308] Fix importing from Firefox on first run on Mac when it’s the default browser. (Issue 61112)
  • Disable accelerated 2D canvas
Full details about the changes are available in the SVN revision log. If you find new issues, please let us know by filing a bug. Want to change to another Chrome release channel? Find out how.

Jason Kersey
Google Chrome

Friday, October 29, 2010

[Gd] Google Drawings Support added to Documents List API

| More

Google Apps Developer Blog: Google Drawings Support added to Documents List API

We are excited to have just launched full support for Google Drawings in the Documents List API. You can now create, import, retrieve, update, and delete your Drawings in a similar manner as other document types.

Currently, we allow importing Drawings from WMF files. Drawings can be exported as PDF, JPEG, PNG, and SVG images.

This has been a feature requested by many users, so we’re happy to fulfil those requests. The release of this feature has been done in stages. You may have noticed that Drawings started showing up in list feeds a few months ago, but our most recent release marks full support for Drawings.

These features are only available in version 3.0 of the Documents List API. Users can read the updated documentation and the release notes for information on using these new features of the API. As always, if you have any questions, please visit the Documents List API support forum.

Posted by Vic Fryzel, Google Apps Team

Want to weigh in on this topic? Discuss on Buzz


[Gd] Simpler Access to Flickr for Google Users with OpenID

| More

Google Code Blog: Simpler Access to Flickr for Google Users with OpenID

OpenID momentum continues to grow. Yahoo! announced that Google users can now sign up for a new account on Flickr’s photo-sharing service with their Google Account information, eliminating the need to create a new username and password. Flickr joins other websites such as Plaxo and Facebook that also support this simpler registration process for Google users.

Google and Yahoo! are two of the many companies who have been involved with the OpenID community’s efforts to improve the process for how users log in and sign up for online services. For example, last month Google announced its use of OpenID to make it simpler for Yahoo! users to sign up for Google services.

While Google doesn’t yet support the use of OpenID for replacing passwords on its own sites, we’re involved in the OpenID community’s efforts to research how to best implement that type of support. Yahoo!’s announcement today is another step in defining those best practices. We look forward to discussing this new feature at next week’s Internet Identity Workshop where the identity community gathers to discuss how to further accelerate the adoption of standards like OpenID.

By Eric Sachs, Internet Identity Team

Thursday, October 28, 2010

[Gd] [Libraries][Update] jQueryUI 1.8.6 and YUI 2.8.2

| More

Google AJAX API Alerts: [Libraries][Update] jQueryUI 1.8.6 and YUI 2.8.2

jQueryUI has been updated to 1.8.6 and YUI has been updated to 2.8.2

[Gd] Announcing the Final Release of GWT 2.1

| More

Google Web Toolkit Blog: Announcing the Final Release of GWT 2.1

For several months now, we’ve been hard at work adding the features and functionality that was first demoed at this year’s Google I/O. The goal of this release has been to make it easy to build business oriented web apps that can take full advantage of the cloud --  zero deployment, instant scaling, cost savings, and portability that allows you to run your app in a variety of cloud environments, such as Google’s hosted service, App Engine, and VMware’s on-premise solution, vFabric. A few weeks ago we mentioned that we were close to wrapping up this project, and today we’re happy to announce the general availability of these tools.

Download the Google Plugin for Eclipse or SpringSource Tool Suite to get started now!

Developer Tools for Business Apps

Google Web Toolkit SDK

  • The GWT SDK makes it possible to build just about any application you can imagine. For the 2.1 release though, we aimed to provide a set of building blocks that will scale to support your entire user base, but at the same time are easy to piece together to get a web app up and running. We’ve wrapped these building blocks up in an application framework that offers the following:

    • Data bound views - An app that doesn’t allow end users to view or edit data isn’t terribly useful, now, is it? With GWT 2.1’s Data Editors, developers can create views that are generated from their app’s data model. These views are completely customizable, and handle all of the nasty work of syncing change sets between the client and server.

    • Highly optimized communication layer - One of the key ways to improve both developer and application efficiency is to get Remote Procedure Calls (RPCs) right. The new communication layer, RequestFactory, does just this. We’ve worked to minimize the payloads being sent between client and server in order to make RPCs as fast as possible, while adding new code generators that build this communication layer based on your app’s data model and the backend services it exposes. For many apps, the developer simply needs to provide server-side find and persist methods in order to get things rolling.

    • MVP support - For a while now, GWT developers have been using and advocating the MVP design pattern, and the Activities and Place support within GWT 2.1 are a set of components that formalize this pattern and the associated best practices, enabling efficient app navigation, history management, and view creation.

  • Cell widgets - A new set of widgets that are optimized for displaying data sets that contain millions of rows. They achieve this efficiency by having one container widget that is responsible for creating views based on chunks of HTML, and delegating events to these children rather than relying on a large number of heavy weight widgets.

  • Spring Roo integration - Developers can now harness the power of Spring Roo 1.1 to create and maintain the large amounts of boilerplate code necessary to construct modern enterprise apps. To enable this, we’ve created a GWT add-on within Spring Roo that, via several new Roo commands, will create an app that targets the new app framework and widgets in GWT 2.1.

Google Plugin for Eclipse

  • Better support for Maven projects - Google Plugin for Eclipse 1.4 has streamlined support for GWT and App Engine applications that use Maven for dependency management, and will now configure the proper classpath and project settings based on the project's pom.xml. No more having to import a Maven project, only to turn around and add the GWT/App Engine dependencies by hand.

  • Speed Tracer integration - Finding the performance bottle-necks in your application has never been easier.  Developers can now kick off a speed trace of their app directly from Eclipse and jump back into the Java source from trouble points that are identified by Speed Tracer. Wondering why hovering over a cell is causing your data table to flicker? No problem, click on the problem areas within Speed Tracer to jump to the line your Java source that is triggering this action.

  • UI enhancements - Developers can now set up browser profiles that allow them to specify different browsers to use when running and debugging their application.

Google Speed Tracer

  • Server side speed traces - We were excited when we initially launched Speed Tracer with the GWT 2.0 release because it allows developers to track down performance issues in the browser. But that was only one half of the story. With this release of Speed Tracer it's now possible to view performance characteristics on the server as well.

  • Cloud-specific integration - With the above functionality in place we set off to start gathering server-side data and, in the spirit of cloud portability, targeted two initial services:

    • App Engine - Using the App Stats capability within Google App Engine, Speed Tracer now has the ability to trace server-side operations such as Memcache hits, and Datastore reads and writes.

    • Spring Insight - Building on top of the services offered by Spring Insight, Speed Tracer 1.0 not only allows developers to drill down in to what was happening within the portion of the app running on tc Server, but it also gives them the ability to jump from Speed Tracer directly into Spring Insight to pinpoint the exact piece of code that may be problematic.

Getting Started

If you’re looking to start building apps using the Spring Roo and SpringSource Tool Suite integration, the quickest way to start is by downloading SpringSource Tool Suite and installing the Google Plugin for Eclipse from the main Dashboard component.

Once downloaded, simply start up Roo’s command line interpreter, and run the “script expenses.roo” command.

Select import source

This will run a series of Roo commands that produce the following starter web app:

Run as Web application

Now that we’ve created our app and launched it from the command line, we can import it into STS to start customizing it. To do this switch back to STS and click the menu item File->Import, and then select “Existing Maven Projects”.

Starter app

Once imported you can now run your app directly from STS by right clicking on the project and selecting the “Run As->Web Application”

Roo command line

From there you can start customizing it using our GWT Developer Guides and Roo documentation to help you along the way.

For a complete “Getting Started” guide, be sure to checkout Getting Started with GWT, Spring Roo, and SpringSource Tool Suite.

A Big Thanks

As you may be able to tell by the list of available product updates, this release has been the culmination of work of several teams. Thanks to the VMware and Spring engineers (Ben Alex, Christian Dupuis, and teams) for working with us to create a seamless and integrated developer experience. And to the developers that have been riding tip of trunk for the past few milestones, submitting questions, issues, and patches, thanks. It wouldn’t be a success without you.

Want to get started? Please download the Google Plugin for Eclipse now! You can jump right in with the Getting Started with GWT 2.1. docs. GWT 2.1 is also available in Maven Central as version 2.1.0.

If you’re interested in receiving updates about existing Google Developer Tools as well as those that are about to be launched, sign up here!


[Gd] Google Apps Script and Recurring Calendar Events

| More

Google Apps Developer Blog: Google Apps Script and Recurring Calendar Events

Google Apps Script has added support for recurring calendar events. Users can now write scripts that create, retrieve, update, and delete recurring events in calendars. We’ve also made the interface for this feature simple and easy to use. Let’s look at some examples.

The following code snippet creates a calendar event for all days that are Friday the 13th, so you can remember to avoid bad luck on those days.

var calendar = CalendarApp.getCalendarsByName("My Calendar")[0];
var fridayTheThirteenth = CalendarApp.newRecurrence();
calendar.createAllDayEventSeries("Bad luck!", new Date(),

The next code snippet adds an event to your calendar to remind you of election day in the United States.

var calendar = CalendarApp.getCalendarsByName("My Calendar")[0];
var usaElectionDay = CalendarApp.newRecurrence();
.onlyOnMonthDays([2, 3, 4, 5, 6, 7, 8]);
calendar.createAllDayEventSeries("Go vote!!!", new Date(),

The interface to interact with recurring events is very straight forward and powerful. We were able to easily select all days matching the parameters Friday the 13th, and also to match all Tuesdays in each occurrence of November having a date between 2 and 8. You can quickly and easily describe dates and times of recurring events you’re looking for. For more information, please check out the release notes and updated documentation.

Posted by Vic Fryzel, Apps Script Team

Want to weigh in on this topic? Discuss on Buzz


[Gd] Discover 201008: CustomerSyncService - So what’s new?

| More

AdWords API Blog: Discover 201008: CustomerSyncService - So what’s new?

We recently released the second part of the v201008 version of the AdWords API and with it the CustomerSyncService - the AdWords API’s first service to determine the entities that were changed in your account. In this blog post, I’ll discuss our goals for the new service and provide a few examples illustrating how to integrate it with your system.

At our developer workshops, we received lots of great feedback about what you’d eventually like to see in this service. Please keep sharing your feedback with us on our forum.

Getting started

Central to the service is the CustomerSyncService.get method. You’ll use this method to retrieve all entities that have changed within the account for a given date time range and set of campaign IDs. As an example, to select all changes to campaign with id 12345 yesterday (today being October 27th), you would do something like:

// Create date time range.
DateTimeRange dateTimeRange = new DateTimeRange();
dateTimeRange.setMin(“20101026 000000”);
dateTimeRange.setMax(“20101027 000000”);

// Create selector.
CustomerSyncSelector selector = new CustomerSyncSelector();
selector.setCampaignIds(new long[] {12345L});

// Get all account changes for campaign.
CustomerChangeData accountChanges = customerSyncService.get(selector);
The result will be a CustomerChangeData object with the entities that changed over the last day for the campaign specified; for the date time range you specified and the single campaign ID, you would only get one CampaignChangeData object back from within the accountChanges variable. If you had specified more than one campaign ID, you would get back one CampaignChangeData object per campaign.

Syncing up

The general way you can use the service is to:
  1. Get a full list of all current campaigns by performing a CampaignService.get with an empty selector and collect the IDs.
  2. Choose a date time range. This could depend on how granular you want your results, or when you last ran the service.
  3. Create a CustomerSyncSelector incorporating all of the campaign IDs and the date time range.
  4. Run CustomerSyncService.get with the selector.
  5. Process the results by traversing the CustomerChangeData object.
  6. Fetch the new data of the entties for all of the IDs within the CustomerChangeData hierarchy using their respective services
The goal of the CustomerSyncService is to give you a consolidated overview of what has changed over a time period; changes will be grouped together based on their overall outcome. Because of this, the dateTimeRange property will largely determine how your results are consolidated.

If you added a campaign to your account on the previous day, for example, you would receive a CampaignChangeData object with the campaignChangedStatus field set to NEW. Imagine now that you changed the campaign later that day as well. If the service returned a single CustomerChangeData object for each change, there would be two objects within the CustomerChangeData - one for the “new” event and one for the “modified” event. Instead, the two events will be consolidated into one object with the status set to NEW, not FIELDS_CHANGED. If you, however, split the service call into two date time ranges, one before the modification and one after, the first call would return a CampaignChangeData object with the status of NEW, and the second call would return a CampaignChangeData object with the status of FIELDS_CHANGED.

The same consolidation principle applies to child objects also. As an example, imagine you create a campaign, modify it later that day, then create an ad group, and then also modify that ad group later that day. The resulting CustomerChangeData object would resemble:

Notice that not only is the status field is set to NEW, not FIELDS_CHANGED, but  also ad groups have been omitted even though they were also modified that day. Since the campaign is new, all of the entities within that object would also be new. Because of this, you would only get 1 CustomerChangeData object with no AdGroupChangeData within in it.

As a final example, imagine that you create an ad group into an existing campaign and modify the budget of the campaign during the same time period. The resulting CustomerChangeData object would be:

Notice here that since the campaign already existed and the budget was changed, the status is FIELDS_MODIFIED. If the ad group had just been added, and the campaign budget left alone, the status for the campaign would be FIELDS_UNMODIFIED. Because you see the status is not FIELDS_UNMODIFIED, you know to fetch the campaign from the API, as well as the ad group, while syncing.

We believe the CustomerSyncService provides a great new way to save you time from scouring your account for changes. We’re looking forward to your feedback on our forum and look forward to seeing what you create with it.

-- Adam Rogal, AdWords API Team

Wednesday, October 27, 2010

[Gd] GTAC starts tomorrow!

| More

Google Testing Blog: GTAC starts tomorrow!

By James Whittaker

Wow, India is a lot different than I expected. Visited Golconda fort today and was totally blown away. Plumbing and "telephones" all the way back then. No wonder IIT is such a good university. All this history on this trip, first England and now India makes a poor old American wish he had some Native American roots. I feel so ... imported.

I'm almost finished with my GTAC talk. Trial run today in Hyderabad for anyone local who wants to come. Tomorrow I close the conference. I hear they've decided where GTAC 2011 is going to be held but they are holding it secret until the end of this one. I only assume that since I don't know that it is not going to be in the Pacific Northwest but I do expect a return to America.

On to GTAC!

[Gd] [Libraries][Update] WebFont updated to 1.0.15

| More

Google AJAX API Alerts: [Libraries][Update] WebFont updated to 1.0.15

WebFont has been updated to 1.0.15

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Chrome Dev channel has been updated to 8.0.552.18 for all platforms. This release addresses a number of stability and polish issues found in the previous release.

Full details about the changes are available in the SVN revision log. If you find new issues, please let us know by filing a bug. Want to change to another Chrome release channel? Find out how.

Jason Kersey
Google Chrome

Tuesday, October 26, 2010

[Gd] Automating business processes with Google Apps Scripts

| More

Google Apps Developer Blog: Automating business processes with Google Apps Scripts

Google Sites lets you create public or internal web sites, and today we’re enabling scripts to support multi-step workflows in sites.

For example, your company can create a site for employees to browse and register for training sessions and career development programs. On the page describing each training session or class, you could add a “Register Now” button, which would automatically add registrants to the class roster, add the details of the session to each participant's Google Calendar, and email users to confirm enrollment. All of these automated actions can be driven by a script embedded in the site.

Starting today, you can create, edit, and launch Google Apps Scripts from any Google Site, which allows you to automate business processes that involve multiple applications. As in the example above, an Apps Script function can automate tasks such as sending emails, scheduling calendar events, creating and updating site pages using data from other systems, and more.

You can build a script by clicking “More actions” > “Manage site” > “Apps Scripts.” Once you’ve added a script to your site, you can add links or buttons to trigger the script from any page. For tips to get started with scripts, visit the Google Apps Script site.

Posted by Laurent Tu, Google Apps Team

Want to weigh in on this topic? Discuss on Buzz


[Gd] We’re giving away 10,000 Google TV devices. To you.

| More

Google Code Blog: We’re giving away 10,000 Google TV devices. To you.

One of the things that makes Google TV different is that it has an Internet browser built-in so users have full access to the entire web on their television screens. Over the past few months, we’ve had many developers come to us seeking guidance on how to make their existing websites even better for the 10-foot TV experience. Many have even come to us with completely new designs for their existing websites.

For developers, building websites for TV is a new opportunity for creativity and provides a distribution channel to reach users in a new way. For users, better and more interesting websites mean that the overall Google TV experience gets even better. We know that developers must be at the heart of our ecosystem, building cool experiences for audiences to watch and enjoy, and we want to encourage a new generation of TV developers to come forward. Which is why, over the next few weeks, we are planning to give away 10,000 Google TV devices to help developers start building for TV.

This morning, we gave away more than 3,000 Google TV devices to attendees of the Adobe MAX conference. Additionally, we’ll be reaching out to thousands of web developers in the Google Code community to offer them a free device. Finally, if you are a professional web developer who wants to help make the Google TV experience even better and you don’t happen to fall into one of those two groups, please submit an entry to our Google TV Web Developer Promotion and include a short summary about the type of interesting website your company would like to create or optimize for Google TV. We’re planning to select 2,500 winners from those entries to receive a free Google TV device.

For a bit of inspiration, check out some of the latest Spotlight sites that have just launched on Google TV. A few of our favorites include Net-A-Porter, which lets you watch runway videos and shop for high fashion; Meegenius, a place where you can read and customize children’s books; TuneIn, a personal radio for your TV; and The Onion, which always gives us a good laugh.

To get started building websites for Google TV, we’ve provided new documentation and a Google TV Web forum to help developers better engage in the process. We’re excited to see what you all come up with. Happy coding!

By Amanda Surya, Google TV Developer Relations Team

Monday, October 25, 2010

[Gd] The ActionScript 2 Chromeless Player and Monetized Videos

| More

YouTube API Blog: The ActionScript 2 Chromeless Player and Monetized Videos

The ActionScript 3 Player APIs, both in the chromeless and embedded variety, have been available for use since last October. When we released the ActionScript 3 APIs, we announced the deprecation of the ActionScript 2 equivalents. As per our deprecation policy, we will keep the ActionScript 2 Player APIs running through October of 2012; however, we wanted to announce a change in the videos available for playback that will affect those still using the ActionScript 2 chromeless player.

As of early January, 2011, some videos that YouTube and our content partners would like to monetize will not be playable using the ActionScript 2 chromeless player because it does not have the ability to show ads. If you attempt to play back such a video, an onError event will be fired, as documented in the ActionScript 2 Player APIs reference guide. As a developer, you can handle this event and play an alternate video, or display an explanatory message to your users.

Please note that this change only affects playback in the ActionScript 2 chromeless player. If you are using the ActionScript 2 embedded player (i.e. the official YouTube player with built-in controls) or if you’ve already upgraded to one of the ActionScript 3 players, you can continue to play the same video content you can play today. Also note that you might be using the the ActionScript 2 chromeless player indirectly if you’re using a third-party custom video player to play back YouTube content. Please reach out to the provider of your custom video player if you’re not sure whether this change will affect you.

-Jeff Posnick, YouTube API Team

[Gd] Website clinic: Call for submissions

| More

Official Google Webmaster Central Blog: Website clinic: Call for submissions

Webmaster Level: Beginner

Cross-posted on the Google Grants Blog

Googlers often participate in live site clinics at conferences, giving advice about real-world sites and allowing webmasters to learn by example. Now Google’s Search Quality team is excited to host an online site clinic right here on this blog. In future posts, we’ll be looking at some user-submitted examples and offering broad advice that you can apply to your site.

This site clinic will focus on non-profit organizations, but chances are that our advice will benefit small business and government sites as well. If you work for a non-profit and would like us to consider your site, read on for submission instructions.

How to Submit Your Site:
To register your site for our clinic, fill in the information requested on our form. From there, we will determine trends and share corresponding best practices to improve site quality and user experience. Our analysis will be available in a follow-up post, and will adhere to public standards of webmaster guidance. Please note that by submitting your site, you permit us to use your site as an example in our follow-up site clinic posts.

We have a few guidelines:
  1. Your site must belong to an officially registered non-profit organization.
  2. In order to ensure that you’re the site owner, you must verify ownership of your site in Google Webmaster Tools. You can do that (for free) here.
  3. To the best of your ability, make sure your site meets our webmaster quality guidelines. We will be using the same principles as a basis for our analysis.
All set? Submit your site for consideration here.

The site clinic goes live today, and submissions will be accepted until Monday, November 8, 2010. Stay tuned for some useful webmaster tips when we review the sites.

Posted by Alexi Douvas and Jen Lee, Search Quality Team