Friday, April 9, 2010

[Gd] Sharing and previewing Google Docs in Socialwok: Google Data APIs

| More

Google Apps Developer Blog: Sharing and previewing Google Docs in Socialwok: Google Data APIs

Editor's note:Navin Kumar is CTO and co-founder of Socialwok, a feed-based group collaboration application for enterprises that integrates with Google Apps. With Socialwok, Google Apps users can create their own private social network to share Google Docs, Calendars and Spreadsheets with their coworkers. Navin and his team built Socialwok on Google App Engine for Java, Google Web Toolkit and Google GData APIs. Socialwok will be at the Google IO sandbox May 19 - 20, 2010.

At Socialwok (, we work extensively with a wide variety of Google technologies (Google App Engine, Google Web Toolkit), OpenID, OAuth, and Google Data APIs (Google Docs, Google Calendar, Google Spreadsheets, etc...) while building our product.

Sharing and Previewing Google Docs in feeds

Most enterprise microblogging or collaboration solutions exist in their separate walled garden. Users have to use separate logins and post status updates independently of their existing workflow. From the start, we designed Socialwok to be integrated with the workflow of businesses who use Google Apps. Users can use their existing Google Apps or Gmail accounts to login into Socialwok. They can access all features of Socialwok from right inside Gmail. They can also create and share their existing Google Docs (Documents, Presentations, Spreadsheets) and Google Calendars with other coworkers who are following them in a feed.

In the below example, I upload a Microsoft Powerpoint (ppt) to Google Docs for sharing in a feed.

Uploading a Microsoft Powerpoint file for sharing using Google Docs
Google Docs automatically converts the Microsoft Powerpoint to a Google Presentation that can be previewed from right inside Socialwok. By clicking the preview option, we preview the Google Presentation in a new tab.

Successful posting of the Google Presentation shared in a feed
Previewing the Google Presentation from the Socialwok web using the Google Data API

Using Google Docs viewer to preview Google Docs, PDF, PPT, XLS in Socialwok Desktop and Mobile Web

Another really cool feature introduced in our recent release is the ability to preview Google Docs, PDF, PPT, or XLS files directly in the Socialwok web interface with no download required. Using the Google Documents Viewer, our users can preview any Google Document, pdf, ppt or XLS directly from their desktop web browser or their HTML5-capable WebKit mobile browser (iPhone and Android).

Preview of a shared pdf document from Socialwok's desktop web application using the Google Docs Viewer
The same applies to other common file formats like Adode Portable File (pdf), Microsoft Excel (xls) and other Google Docs supported formats. Socialwok provides businesses with cloud based access to their office documents from both the web and the mobile (HTML 5).

Preview of a shared pdf document using Google Docs viewer from Socialwok's HTML 5 mobile web page

Sharing Google Docs using the Google Data APIs

We use the Google GData APIs to upload the document, and then proceed to attach it to a new Socialwok status update. The latest version of the Google GData Java APIs work great on Google App Engine Java, with almost no configuration. Now, before accessing and manipulating Google Docs or Calendar from the GData APIs, we must make sure that we have authentication credentials for the current user. Our application stores the existing user in the session. Here's how we do that using the low-level Java datastore APIs.
Entity currentUser = (Entity) httpRequest.getSession()
Each Google Apps or Google Accounts user actually logs in to Socialwok using their own Google authentication credentials. We accomplish this using the Hybrid Step2 OpenID/OAuth authentication flow. You can learn more about this flow here. From this flow, we gain the users credentials via OAuth, and store the OAuth token and token secret in another child object of our user:
Query query = new Query("GoogleAccount", currentUser.getKey());
Entity googleAccount = dataService.prepare(query).asSingleEntity();
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
(String) googleAccount.getProperty("oauthToken"));
(String) googleAccount.getProperty("oauthSecret"));
We now use the Google Docs GData APIs to upload the document. Google GData APIs use Atom Feeds to retrieve and upload new information into existing Google Services like Google Docs. For Google Docs, this involves using the MediaStreamSource API.
DocsService service = new DocsService("Socialwok-v1");

MediaStreamSource streamSource = new MediaStreamSource(fileInputStream,
DocumentListEntry inserted = service.insert( new URL(
doConvert), DocumentListEntry.class, streamSource);
Notice the URL used for uploading the Google Doc. This is a universal URL for uploading new files to Google Docs. The convert parameter is actually very important; it determines whether the file will be converted to a new Google Doc (Document, Presentation, Spreadsheet), or will be uploaded as an arbitrary file without any conversion.

Previewing Google Docs using the Google Data APIs

After uploading the presentation to Google Docs, sometimes another user who is following you would like to preview that presentation quickly without having to fully open Google Docs in order to see the file. To do this, we examine how the actual Google Docs interface previews documents. Each of the 3 different types of Google Docs has its own specific viewer or previewing mode url to simply view the files.

For documents, when you are in the editor, if you click "View," and then click "Webpage preview." You will then get your Google Doc displayed as a webpage. The URL of this "viewer" is:
For reference, the editor link for this document is:
As you can see the transformation between these 2 URLs is quite simple. Therefore we can perform the following to actually bring up a viewable Google Doc in Socialwok.
  1. Get the Google Docs entry from the datastore.
    Entity fileAttachment = datastoreService.get(attachmentKey);
    String entryId = fileAttachment.getProperty("fileId");
  2. Get the Google Docs entry from the Google Docs GData Service.
    URL entryUrl = new URL(entryId);
    DocumentListEntry docEntry = service.getEntry(entryUrl,
  3. Get the document link from the Google Docs Entry
    String docLink = docEntry.getDocumentLink().getHref();
  4. Convert the link to the viewer.
    if (docEntry instanceof DocumentEntry) {
    docLink = docLink.replace("/Doc","/View");
It's important to note that since Socialwok uses your Google Apps or Gmail account to login through OpenID, you are already logged into Google services. In Socialwok, you can click the Mail, Calendar, or Docs links to access each of those Google products. Because of this authentication, it's very easy for us to place this link into an <iframe> tag and embed this in our Socialwok interface. Here's the GWT code to do just that:
Frame viewerFrame = new Frame();
Here's are the different Google Docs editor to viewer mappings, with the changes highlighted:
Document TypeActionURL




Previewing PDF, PPT, and XLS files using the Google Document Viewer

Google Docs has a fantastic feature that lets users preview any PDF,PPT, XLS, or TIFF file via a HTTP link. You can try the viewer out at If you look at the bottom of this page, there is information on how to construct your own URLs so that you can either link or embed the viewer in your own web sites. Here's the rundown on the parameters:

Technical Documentation - Instructions for building your own URLs
All viewer URLs should use the path . This path accepts two parameters:
url : The URL of the document to view. This should be URL-encoded.
embedded : If set to true , the viewer will use an embedded mode interface.

For example, if you wanted to view the PDF at,
you would use the URL:

We will use the embedded parameter to display the viewer in our own interface. To construct the URL to the embedded viewer with the example given by Google, we get the following:
We can then place this URL in an <IFRAME> element to embed the viewer in our application.
<iframe src="">" style="width:600px; height:500px;" frameborder="0"></iframe>
Here's how to create the same using the GWT Frame widget in Java.
Frame viewerFrame = new Frame();
As you can see, it's really quite easy to use the embedded Google Document Viewer. You can check out more information on the Google Document Viewer on the Google Docs blog.

Extending Socialwok using our APIs. Meet Socialwok at Google IO

The above example of sharing and previewing Google Docs using the Google Docs viewer is the result of developers pushing the envelope using Google App Engine with the ever expanding suite of Google APIs. Here at Socialwok, we continue to challenge ourselves in creating innovative web services that leverage on all that cloud computing has to offer. We will continue to have more features and integrations in the future, and we will be opening up Socialwok's APIs for developers in the next few months. You can follow all these developments at our official blog

We would love to hear from fellow developers who would like to create applications to extend Socialwok; please email us at

Socialwok will be at Google I/O in the Developer Sandbox in May where we will be giving demos of a new major add-on service to Socialwok. If you would like a demo, email us at and drop by the Socialwok demo station at Google I/O.

By Navin Kumar, Socialwok

[Gd] Using site speed in web search ranking

| More

Official Google Webmaster Central Blog: Using site speed in web search ranking

Webmaster Level: All

You may have heard that here at Google we're obsessed with speed, in our products and on the web. As part of that effort, today we're including a new signal in our search ranking algorithms: site speed. Site speed reflects how quickly a website responds to web requests.

Speeding up websites is important — not just to site owners, but to all Internet users. Faster sites create happy users and we've seen in our internal studies that when a site responds slowly, visitors spend less time there. But faster sites don't just improve user experience; recent data shows that improving site speed also reduces operating costs. Like us, our users place a lot of value in speed — that's why we've decided to take site speed into account in our search rankings. We use a variety of sources to determine the speed of a site relative to other sites.

If you are a site owner, webmaster or a web author, here are some free tools that you can use to evaluate the speed of your site:
  • Page Speed, an open source Firefox/Firebug add-on that evaluates the performance of web pages and gives suggestions for improvement.
  • YSlow, a free tool from Yahoo! that suggests ways to improve website speed.
  • WebPagetest shows a waterfall view of your pages' load performance plus an optimization checklist.
  • In Webmaster Tools, Labs > Site Performance shows the speed of your website as experienced by users around the world as in the chart below. We've also blogged about site performance.
While site speed is a new signal, it doesn't carry as much weight as the relevance of a page. Currently, fewer than 1% of search queries are affected by the site speed signal in our implementation and the signal for site speed only applies for visitors searching in English on at this point. We launched this change a few weeks back after rigorous testing. If you haven't seen much change to your site rankings, then this site speed change possibly did not impact your site.

We encourage you to start looking at your site's speed (the tools above provide a great starting point) — not only to improve your ranking in search engines, but also to improve everyone's experience on the Internet.

Posted by Amit Singhal, Google Fellow and Matt Cutts, Principal Engineer, Google Search Quality Team

Thursday, April 8, 2010

[Gd] Dev Channel Update

| More

Google Chrome Releases: Dev Channel Update

The Dev channel has been updated to 5.0.371.0 for Windows, Mac, and Linux


  • Geolocation support (Issue 11246 and many others)
  • Fixed bug where HTML5 audio/video elements stopped firing timeupdate events (Issue 25185)
  • WebGL is running inside the sandbox under the --enable-webgl flag (i.e. this no longer requires the --no-sandbox flag to run). Browsing with the --no-sandbox is dangerous and we strongly recommend that you not do it.
  • Changes to the Omnibox (e.g. the bookmark star has moved, icon changes, etc...)


  • See All


  • More omnibox reshuffling work-in-progress (Issue: 37865)


Known Issues

  • [Linux] HTML5 audio/video elements are not firing the ended event
  • [Linux] Right clicking "Copy Image" causes a crashe (Issue: 40448)

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

WebKit has been updated from r56820 to r57160.

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


[Gd] When and why was my site flagged for malware? Learn in near real-time!

| More

Official Google Webmaster Central Blog: When and why was my site flagged for malware? Learn in near real-time!

Webmaster Level: All

We’ve been hearing this question for many years from webmasters. That’s why we built features such as the Safe Browsing API, the malware review form, and our Malware details Labs feature.

As of today, once we notice your site is infected, we’ll do our best to send an e-mail to the address you have associated with your account in Webmaster Tools. We believe malware is such an important issue for site owners that being quickly informed is beneficial to you and your website’s visitors.

In addition, we’ve promoted our Malware details feature out of Labs and placed it under Diagnostics. The malware data is now updated four times faster than before, we’ve updated our algorithms for identifying injected content, and we’re now able to identify exploits which we were unable to catch earlier.

We hope this allows you to stay up-to-date with any malware issues we detect on your site, and to fix them quickly.

As always, please let us know if you have any feedback or questions about how to fix malware-related issues in our Webmaster Help Forum.

Posted by Sagar Kamdar, Product Manager, Webmaster Tools Team

[Gd] [Search][Release] "More results" removed from search control and Custom Search element

| More

Google AJAX API Alerts: [Search][Release] "More results" removed from search control and Custom Search element

The "More results" link has been removed from the search control and Custom Search element

[Gd] Media RSS support added to the Feed API

| More

Google AJAX APIs Blog: Media RSS support added to the Feed API

More and more sites are adding support for MediaRSS to include images, videos and other types of multimedia files. Today, we're announcing that the Google Feed API now includes this metadata in the response. This content is now included in the JSON and XML results returned by the API. For more details on the result format, check out the documentation.

Please note that complete MediaRSS content is generally only available in feed entries newer than February 1, 2010.

Questions? Comments? If you're attending Google I/O, come meet the team and learn more about the Feed API at our Office Hours. If you can't wait that long, there's always our IRC channel and support forum.

[Gd] [Feed][Update] Media support added to the Feed API

| More

Google AJAX API Alerts: [Feed][Update] Media support added to the Feed API

Media support added to the Feed API

[Gd] 14 days left to migrate to v2009

| More

AdWords API Blog: 14 days left to migrate to v2009

If you haven’t migrated to the new v2009 AdWords API yet you have only 14 days left to do so. Developers that don’t migrate by April 22 will experience failed calls to most v13 services. The only v13 services that will remain accessible are AccountService, ReportService, and TrafficEstimatorService.

Have questions about migrating? Review the per-call migration guide, visit the developer forum and follow us on Twitter.

– Jason Shafton, Product Marketing Manager

[Gd] Google Wave Federation Protocol: More Docs, More Code

| More

Google Wave Developer Blog: Google Wave Federation Protocol: More Docs, More Code

When we shipped the FedOne code to demonstrate the Google Wave Federation Protocol, we included some overview information and basic documentation on how to get it up and running. Since then, the community has stepped up and contributed some great documentation, and we wanted to highlight a couple of great resources that may be helpful to anyone interested in the Google Wave Federationn Protocol.

For example, Anthony Watkins wrote several articles to explain the architecture of the FedOne code:

In an effort to bring together this and other community-created resources in a single place, we've gathered links to Anthony's articles, along with links to articles by James Purser and Bryce into a wiki page. Be sure to check them out, and let us know if we've missed any great articles on the Google Wave Federation Protocol or the FedOne code. Share your links on the wave protocol discussion forum and we will update the wiki as they come in.

Also be sure to check out the new, recently open sourced wave document model code, as announced by J.D. in the Google Wave Protocol Forum:

We have just open sourced a significant new chunk of Google Wave source code: the wave document model. The new code, some thirty-eight thousand lines of code mainly in the org.waveprocotol.wave.model.document package, implements useful and efficient data structures for reading and manipulating wave documents. This is the same document model used by the Google Wave client and servers.

In case you missed it, Novell Pulse recently demonstrated federation with Google Wave.

Finally, be sure to visit us if you are attending Google I/O, there are some some great talks lined up, we hope to see you there!

Posted by Joe Gregorio, Developer Relations


Wednesday, April 7, 2010

[Gd] Happy Birthday

| More

Google App Engine Blog: Happy Birthday

Today marks a special day for us on the App Engine team. It was just thirty-six years ago today that IBM announced the IBM System/360. As Wikipedia puts it, “It was the first family of computers designed to cover the complete range of applications, from small to large, both commercial and scientific.” One of the unique aspects of the S/360 was that customers could start with a small system while being confident that they could upgrade their system to scale to larger workloads without having to rewrite their application code.

We’ve come a long way since the days of 7.2MB disk drives and when systems with 256KB of main memory were considered large. Customers haven’t changed all that much though. Developers still want a platform which makes it easy to build, easy to manage and easy to scale their applications. That’s exactly what inspired us to build Google App Engine.

It was two years ago today that we launched App Engine to the first 10,000 developers. Those developers formed the start of today’s vibrate community of over 250 thousand developers. Each day your apps collectively serve over 250 million pageviews. Since it’s our Birthday we thought we’d share our traffic graph with you.

It all started on April 7, 2008 with the Python runtime. And, after a somewhat false start with the FORTRAN 77 runtime, we were able to successfully launch App Engine for Java, along with a number of other exciting features, on our first anniversary.

Those of you who have followed along closely know that we didn’t stop there. We’ve kept up the pace, launching a significant new feature almost every month since then. The datastore team has added everything from key-only queries, kindless queries, ancestor queries inside of transactions and query cursors to configurable datastore deadlines, opt-in eventual consistency and a whole new way of replicating data across data centers. Meanwhile the rest of the team hasn’t skip a beat, delivering a number of new platform capabilities including Task Queues, XMPP support, incoming email and blobstore. We even affixed our own shipment of delete buttons to the Admin Console.

This is probably a good time to call out one of our recent favorites though. It’s an instrumentation library which provides great data and insights. It comes bundled with the SDK and can be easily enabled in your application. Of course we’re talking about Appstats. If you do one thing this week to celebrate our birthday and improve the performance of your app while helping to make the web faster, you should enable Appstats. You might be surprised what you learn about your own app or you might even win a t-shirt.

Of course it’s often the little things that count: API fetch from blobstore, expanded URL fetch ports, DoS API, IPv6 support, removing the 1000 row result limit, Java unit testing framework, custom admin console pages, Java app pre-compilation, datastore stats, wildcard domains, per request statistics in HTTP response headers, SDK dataviewer and stable unique id for users to name a few. If you saw something in that list you didn’t know about, be sure to read 10 things you didn't know about App Engine, visit the ever growing list of great App Engine articles, and, while you prepare for Google I/O 2010, be sure to review the excellent and highly informative App Engine sessions from previous years. The Java developers among you are of course already reading the App Engine Persistence Blog.

We want to take this opportunity to thank you for your tremendous support. Hearing your feedback is really important to us. It helps us stay on course. Your feedback has also helped drive the list of things we’re working on.

We know many of you like the big features and the new APIs we’ve launched. We have graphs that show you’re using them. But, we often don’t get enough detailed feedback on how you’re using these APIs, whether they’re working really well, or whether there’s room for improvement. Let us know how we’re doing. We’d love to hear what your favorite APIs are and how you use them, especially if you’re doing something interesting you think others might like to hear about. Also, tell us about your favorite little feature. What’s that one thing that made your life easier?

Please don’t mind the crumbs as we enjoy some cupcakes.

Posted by Fred Sauer, App Engine Team


[Gd] Google Code Jam Returns!

| More

Google Code Blog: Google Code Jam Returns!

Given a list of cell phone towers, the cost or gain of upgrading each one, and the requirement that every upgraded tower can only have upgraded towers in its range, can you find the most profitable set of towers to upgrade?

Caught your attention? Then we have the competition for you.

We’re thrilled to announce Google’s annual Code Jam competition. Google Code Jam is a programming competition in which professional and student programmers solve complex algorithmic challenges in a limited amount of time. The contest is all-inclusive: Google Code Jam lets you compete in the programming language and development environment of your choice.

And, this year, for the very first time, the final competition will take place in Google’s Dublin office.

Visit to register now and get up to speed on the rules. You can also practice on problems from previous contests. It’s a good idea to check out the competition arena and get comfortable with the interface, competition format and types of problems that you’ll encounter in the contest (

The qualification round starts on May 7th, 2010 and after four rounds of online competition, the top 25 competitors will be flown to Google's Dublin office to match wits for the $5,000 first prize — and the title of Code Jam champion!

By Igor Naverniouk, Code Jam Team

[Gd] Adding Images to your Sitemaps

| More

Official Google Webmaster Central Blog: Adding Images to your Sitemaps

Webmaster Level: All

Sitemaps are an invaluable resource for search engines. They can highlight the important content on a site and allow crawlers to quickly discover it. Images are an important element of many sites and search engines could equally benefit from knowing which images you consider important. This is particularly true for images that are only accessible via JavaScript forms, or for pages that contain many images but only some of which are integral to the page content.

Now you can use a Sitemaps extension to provide Google with exactly this information. For each URL you list in your Sitemap, you can add additional information about important images that exist on that page. You don’t need to create a new Sitemap, you can just add information on images to the Sitemap you already use.

Adding images to your Sitemaps is easy. Simply follow the instructions in the Webmaster Tools Help Center or refer to the example below:

<?xml version="1.0" encoding="UTF-8"?>
  <urlset xmlns=""

We index billions of images and see hundreds of millions of image-related queries each day. To take advantage of that traffic most effectively, take a moment to update your Sitemap file with information on the images from your site. Let us know in the Sitemaps forum if you have any questions.

Posted by Alkis Evlogimenos, Software Engineer

[Gd] Beta Update: Fix extensions installer

| More

Google Chrome Releases: Beta Update: Fix extensions installer

Google Chrome 5.0.342.9 has been released to the Beta channel on all platforms. This update fixes issue 38220: some extensions cannot be installed.

--Mark Larson, Google Chrome Team

Tuesday, April 6, 2010

[Gd] Calling all Students! Work on Chromium during Google Summer of Code

| More

Chromium Blog: Calling all Students! Work on Chromium during Google Summer of Code

This Friday, April 9th at 19:00 UTC is the deadline for students to apply to this year's Google Summer of Code.

The Chromium project has been accepted as a mentoring organization for this awesome program. This means that you have the opportunity to work on exciting new features for Chromium over the summer, experience real-world browser development with a Chromium team mentor, and, of course, receive a stipend.

To participate, first pick an idea off our handy ideas list or come up with your own. Next, discuss it with a prospective mentor on our mailing list or irc channel. Finally, when you’re confident you have a solid idea, write up a proposal on how you'd implement it in the allotted time frame (3 months) and submit it at the official gsoc website. In evaluating proposals, we'll be looking for familiarity with the codebase and lots of intelligent detail. The more detail you can provide, the better!

Once again, proposals are due Friday. We're looking forward to seeing great project proposals and expanding our community!

Posted by Jeremy Moskovich, Software Engineer

[Gd] URL removals explained, part II: Removing sensitive text from a page

| More

Official Google Webmaster Central Blog: URL removals explained, part II: Removing sensitive text from a page

Webmaster level: All

Change can happen—sometimes, as we saw in our previous post on URL removals, you may completely block or remove a page from your site. Other times you might only change parts of a page, or remove certain pieces of text. Depending on how frequently a page is being crawled, it can take some time before these changes get reflected in our search results. In this blog post we'll look at the steps you can take if we're still showing old, removed content in our search results, either in the form of a "snippet" or on the cached page that's linked to from the search result. Doing this makes sense when the old content contains sensitive information that needs to be removed quickly—it's not necessary to do this when you just update a website normally.

As an example, let's look at the following fictitious search result:

Walter E. Coyote < Title
Chief Development Officer at Acme Corp 1948-2003: worked on the top secret velocitus incalculii capturing device which has shown potential ... < Snippet
... - Cached < URL + link to cached page

To change the content shown in the snippet (or on the linked cached page), you'll first need to change the content on the actual (live) page. Unless a page's publicly visible content is changed, Google's automatic processes will continue to show parts of the original content in our search results.

Once the page's content has been changed, there are several options available to make those changes visible in our search results:

  1. Wait for Googlebot to re-crawl and re-index the page
    This is the natural method for how most content is updated at Google. Sometimes it can take a fairly long time, depending on how frequently Googlebot currently crawls the page in question. Once we've re-crawled and re-indexed the page, the old content will usually not be visible as it'll be replaced by the current content. Provided Googlebot is not blocked from crawling the page in question (either by robots.txt or by not being able to access the server properly), you don't have to do anything special for this to take place. It's generally not possible to speed up crawling and indexing, as these processes are fully automated and depend on many external factors.

  2. Use Google's public URL removal tool to request removal of content that has been removed from someone else's webpage
    Using this tool, it's necessary to enter the exact URL of the page that has been modified, select the "Content has been removed from the page" option, and then specify one or more words that have been completely removed from that page.

    Note that none of the words you enter can appear on the page; even if a word has been removed from one part of the page, your request will be denied if that word still appears on another part of the page. Be sure to choose a word (or words) that no longer appear anywhere on the page. If, in the above example, you removed "top secret velocitus incalculii capturing device," you should submit those words and not something like "my project." However, if the word "top" or "device" still exists anywhere on the page, the request would be denied. To maximize your chances of success, it's often easiest to just enter one word that you're sure no longer appears anywhere on the page.

    Once your request has been processed and it's found that the submitted word(s) no longer appear on the page, the search result will no longer show a snippet, nor will the cached page be available. The title and the URL of the page will still be visible, and the entry may still appear in search results for searches related to the content that has been removed (such as searches for [velocitus incalculii]), even if those words no longer appear in the snippet. However, once the page has been re-crawled and re-indexed, the new snippet and cached page can be visible in our search results.

    Keep in mind that we will need to verify removal of the word(s) by viewing the page. If the page no longer exists and the server is returning a proper 404 or 410 HTTP result code, making us unable to view the page, you may be better off requesting removal of the page altogether.

  3. Use Google Webmaster Tools URL removal tool to request removal of information on a page from your website
    If you have access to the website in question and have verified ownership of it in Google Webmaster Tools, you can use the URL removal tool there (under Site Configuration > Crawler access) to request that the snippet and the cached page be removed until the page has been re-crawled. To use this tool, you only need to submit the exact URL of the page (you won't need to specify any removed words). Once your request has been processed, we'll remove the snippet and the cached page from search results. The title and the URL of the page will still be visible, and the page may also continue to rank in search results for queries related to content that has been removed. After the page has been re-crawled and re-indexed, the search result with an updated snippet and cached page (based on the new content) can be visible.

Google indexes and ranks items based not only on the content of a page, but also on other external factors, such as the inbound links to the URL. Because of this, it's possible for a URL to continue to appear in search results for content that no longer exists on the page, even after the page has been re-crawled and re-indexed. While the URL removal tool can remove the snippet and the cached page from a search result, it will not change or remove the title of the search result, change the URL that is shown, or prevent the page from being shown for searches based on any current or previous content. If this is important to you, you should make sure that the URL fulfills the requirements for a complete removal from our search results.

Removing non-HTML content

If the changed content is not in (X)HTML (for example if an image, a Flash file or a PDF file has been changed), you won't be able to use the cache removal tool. So if it's important that the old content no longer be visible in search results, the fastest solution would be to change the URL of the file so that the old URL returns a 404 HTTP result code and use the URL removal tool to remove the old URL. Otherwise, if you chose to allow Google to naturally refresh your information, know that previews of non-HTML content (such as Quick View links for PDF files) can take longer to update after recrawling than normal HTML pages would.

Proactively preventing the appearance of snippets or cached versions

As a webmaster, you have the option to use robots meta tags to proactively prevent the appearance of snippets or cached versions without using our removal tools. While we don't recommend this as a default approach (the snippet can help users recognize a relevant search result faster, and a cached page gives them the ability to view your content even in the unexpected event of your server not being available), you can use the "nosnippet" robots meta tag to prevent showing of a snippet, or the "noarchive" robots meta tag to disable caching of a page. Note that if this is changed on existing and known pages, Googlebot will need to re-crawl and re-index those pages before this change becomes visible in search results.

We hope this blog post helps to make some of the processes behind the URL removal tool for updated pages a bit clearer. In our next blog post we'll look at ways to request removal of content that you don't own; stay tuned!

As always, we welcome your feedback and questions in our Webmaster Help Forum.

Posted by John Mueller, Webmaster Trends Analyst, Google Switzerland

[Gd] AdWords Downtime: April 10th, 10am-2pm PDT

| More

AdWords API Blog: AdWords Downtime: April 10th, 10am-2pm PDT

We'll be performing routine system maintenance on Saturday, April 10th from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.

- Eric Koleda, AdWords API Team 

[Gd] Developing with the Google Wave APIs - For a grade!

| More

Google Wave Developer Blog: Developing with the Google Wave APIs - For a grade!

As a student at university, I always loved when I had the chance to use a Web API in my programming assignments. I think Web API programming is a great way for students to get a taste of the real world, and plus, APIs are just plain fun. :)

So, I was thrilled when I found out that a class of students in Singapore were working on a Google Wave extensions project, and I volunteered to give them a virtual talk. As part of the talk, I critiqued each of their final projects, giving them advice on making them "Wave-ier"and easier to use. Overall, I was incredibly impressed with the diversity & utility of their extensions - everything from adorable games to meeting planners:

Scrummy: This gadget lets you assign tasks to participants for particular "sprints", and then visualize the tasks for each sprint.
Bubble Man: This super cute gadget let you play a game of balloon popping - if you pop the balloon next to the other player, you win. As a connoisseur of water balloon fights, I think this is an awesome game.
Chess Room: This gadget displays a "room" of 6 tables. You can pick a "table", and enter it to a game of chess against another player.

Note Sticker: This gadget lets you collect notes in a collaborative gadget, similar to desktop note apps (or similar to post-its on your physical desktop, if you're old school like that).

WavePlan: This gadget lets participants select what days/hours they're available, to help in picking the best meeting time.

yourBrainstormer: This slick looking gadget lets you create a sequence of parent and child nodes, and to navigate amongst them.

NTI Language Translator: This gadget lets you translate text using the Google AJAX Language API, and it shares the currently translated text with others in the wave.

For the complete list and links to the extensions, visit the course project page.

Many of these are still in prototype form, but some of them are already user-ready and in the extensions gallery, like the yourBrainstormer extension, and others are in the samples gallery, like the Scrummy gadget. I hope that the students have the time to continue working on their extensions, and take them from a class assignment to an in-use web app. It's so cool that you can make something for a class *and* for thousands of users.

If you are a professor and thinking of using Google Wave in your programming assignments, you can grab the Latex/PDF for this class assignment, and you can browse the presentations gallery for slides to deliver for class lectures. Let us know if you have any questions in the forum.

Thanks to Professor Ben Leong for teaching his students about the Google Wave APIs, letting me talk with the students for a few brief virtual hours, and for getting students excited by the possibility of Web APIs.

Posted by Pamela Fox, Developer Relations

Monday, April 5, 2010

[Gd] HTML5 + Quake II

| More

Google Code Blog: HTML5 + Quake II

In case you missed it on the Google Web Toolkit Blog, check out this HTML5 port of Quake II. (Yep, that is a browser pushing 30 frames per second)

For more info, read the full post on the GWT Blog.

By Stephanie Liu, Google Developer Team

[Gd] TweetDeck and Google App Engine: A Match Made in the Cloud

| More

Google App Engine Blog: TweetDeck and Google App Engine: A Match Made in the Cloud

I'm Reza and work in London, UK for a startup called TweetDeck. Our vision is to develop the best tools to manage and filter real time information streams like Twitter, Facebook, LinkedIn and MySpace. We offer products like our TweetDeck desktop client built on Adobe AIR, and our iPhone application. We are happy to say that we use App Engine as key part in our backend.

We're a small startup, so early on we started to look for tools that would give us the biggest bang for our buck. Combined with the fact we love Python, we thought it might be worth taking a look at what Google App Engine had to offer. The first feature we started playing with was the mail sending facility.

It was easy! Sending mail was a single call-- no messing around. Combined with the fact that it was sent via tried-and-tested Google Mail servers, this meant that we had a simple mailing solution where we didn't have to deal with spam blacklists, mail retries or SPF records. We could really see App Engine being our sole email provider for transactional emails (new users and forgotten passwords), but also for newsletter-type mailing.

When we got started, our existing backend was hosted on Amazon EC2 and SimpleDB, and we knew that we needed a way for the two systems to communicate with each other. App Engine provides all the basic tools to define any sort of resources you want--but more importantly, it has the Python standard library. We implemented a small mail API, with authentication provided by an HMAC-SHA1 of the request information and a shared secret key. The API has been made extremely general: its JSON input format contains fields to send messages to blocks of email addresses that are either defined in the request itself, or which exist as a template in App Engine (templates are defined as strings in a Python module).

The whole setup currently works quite well. We're already extending our mailing system to use App Engine's task queues-- exposing a number of queues to break large mailing jobs into a series of subtasks, thus spreading mailing sending over a large period of time. We have plans to make an even tighter bridge between our EC2 systems and App Engine, which involves keeping our subscriber list entirely in App Engine, and adding and removing from that list as appropriate.

We also use App Engine for various other prototypes and smaller applications that are part of our product. We use it to serve our "TweetDeck Recommends" feed, and we've even developed small tools to apply TweetDeck fan badges on Twitter homepage backgrounds using the Imaging API! The lesson from us, of course, is that using something like App Engine doesn't have to mean everything runs on it. It's an extremely good platform for creating APIs or smaller parts of your application that do specific tasks, and do them well. Think of it as the UNIX metaphor applied to the Cloud.

We love that we've been able to grow the functionality that Tweetdeck provides by progressively using more of the cloud. App Engine provides the perfect platform to compose new services quickly, iterate on them in production, and scale with demand as Tweetdeck's install base grows. Thanks to App Engine and the cloud, there's nothing holding us back from tackling the needs of our user base.

Here is a video interview of Reza and the Tweetdeck team.

Guest Post by Reza Lotun @rlotun, TweetDeck