Friday, August 14, 2009

[Gd] Specifying an image's license using RDFa

| More

Official Google Webmaster Central Blog: Specifying an image's license using RDFa

Webmaster Level: All

We recently introduced a new feature on Google Image Search which allows you to restrict your search results to images that have been tagged for free reuse. As a webmaster, you may be interested in how you can let Google know which licenses your images are released under, so I've prepared a brief video explaining how to do this using RDFa markup.



If you have any questions about how to mark up your images, please ask in our Webmaster Help Forum.

Posted by Peter Linsley, Product Manager
URL: http://googlewebmastercentral.blogspot.com/2009/08/specifying-images-license-using-rdfa.html

[Gd] Prototyping a Drupal Module for Google Wave

| More

Google Wave Developer Blog: Prototyping a Drupal Module for Google Wave

Even before getting my invite to the Google Wave developer preview, I had started brainstorming new and interesting things I could contribute. One of the other things I wanted to try was embedding a wave into my Drupal site, since Blogger integration had already been demonstrated and I see a lot of potential in the combination of blogs and wave.

For the Drupal module, I began with their generic 6.x module tutorial . Since all I needed was to add a few pieces of javascript, it wasn't hard to do. I used the drupal_set_html_head() function to include the embed.js file, then used the drupal_add_js() function for the chunk of javascript specific to loading the wave into a container div.

At this point I was able to load a specific wave into the div, but had to specify the waveid in the module itself, because it was included in the header of the page. Considering this to be inelegant, I recalled some of my experiences with jQuery, and how it could pull contents from a div element given that it had a known id. I used the results of calling jQuery's .html() function on the DIV as the parameter to wave.loadWave() to provide it with the Wave ID. This appealed to me as a more elegant solution since I could specify the waveid in the contents of the page and put different waves on each page.

A wave can be embedded into any page by downloading, extracting, installing, and enabling the Google Wave Drupal Module.

Afterwards, add this content to any page and the wave will be embedded after the page loads:
<div id="wave" style="width: 560px; height: 420px">
wavesandbox.com!waveid
</div>
This module was written in a couple days, so there is still plenty of room for improvement on it. One feature it lacks is the ability to change the font color/size and other options set using the wave.SetUIConfig() method. Although I'm proud of having written this module, it is by no means the only module out there for Drupal integration. Another module using a different technique, but with configuration options for things like font size and color, is available at http://drupal.org/node/530526.

Several features would make the Embed API even more compelling, like the ability to embed Waves that anyone can read (regardless of whether they have a Wave account), and the ability to specify an alternative wave for visitors who don't have permission to view the embedded Wave.

As the Google Wave APIs continue to expand, even more robust modules can be written to take advantage of Google Wave's unique features. One such idea would be a robot for Drupal that acts in much the same way as Bloggy: publishing waves as pages to a Drupal instance, and allowing the management of a site's contents primarily through wave.

One of the things I find most exciting about Wave is that it comes in a time when so many services online are available through SOAP/REST/XMLRPC interfaces, and budding developers like me can theoretically integrate all of these services with Wave. Along those lines, I've been working on a robot that integrates Trac (issue tracking) and I'm also looking to write a module to embed waves into Elgg, since both of those are heavily used for my graduate project, Beaversource.

I hope that other users will find my Wave modules as useful as I have, and other developers will be inspired to integrate Wave into their own systems.


Posted by Eric Betts, Community Developer
URL: http://googlewavedev.blogspot.com/2009/08/prototyping-drupal-module-for-google.html

[Gd] Caption your videos with the YouTube API

| More

YouTube API Blog: Caption your videos with the YouTube API

In August last year, we launched the ability to add captions to your videos on YouTube. Now, you can do the same using the YouTube Data API.

With the new captions API, developers can create third-party apps that help users create, upload and manage the caption tracks of their YouTube videos. Each video can have multiple caption tracks, and multiple subtitle formats are supported.

Find out more in our Developer's Guide.

Posted by Christoph Schwab-Ganser, YouTube Engineering
URL: http://apiblog.youtube.com/2009/08/caption-your-videos-with-youtube-api.html

[Gd] Google Code Jam Returns!

| More

Google Code Blog: Google Code Jam Returns!

Given a 49x49 grid of numbers, can you place mines in the cells in such a way that each number represents the number of mines in its 3x3 sub-grid (the cell itself and its 8 immediate neighbors)? Find the maximum number of mines that could end up in the middle row of the grid.

Intrigued? Think you can solve it with a clever algorithm? Here at Google, we know how thrilling it can be to encounter a challenge and then overcome it by coding up a creative solution. Since 2003, we've been privileged to share that experience with a global community of computer programmers through our annual programming competition, Google Code Jam.

We're excited to announce Google Code Jam 2009, powered by Google App Engine. Join the fun and compete in several 2½-hour online rounds, attacking three to four difficult algorithmic problems during each round. You may use your favorite programming languages and tools to code up a solution. When ready, run your solution against our fiendish test data. The algorithm needs to be right, and it needs to be efficient: when N=10000, O(N3) won't cut it!

If you're up to the challenge, visit the Google Code Jam site to register and read the rules. Most importantly, you can practice on the problems from last year's contest, so you are in shape when the qualification round starts on September 2. You could be one of the top 25 competitors who will be flown to our Mountain View headquarters to match wits for the $5,000 first prize, and the title of Code Jam champion!

P.S. Think you can solve our "Mine Layer" problem? Try it out on the Code Jam website!

By Igor Naverniouk, Code Jam Team
URL: http://googlecode.blogspot.com/2009/08/google-code-jam-returns.html

Thursday, August 13, 2009

[Gd] iGoogle joins the social web

| More

OpenSocial API Blog: iGoogle joins the social web

Those of you who were around for the early days of OpenSocial might remember that one of the very first test implementations ran on iGoogle. Since that early version more than a year and a half ago, the iGoogle team has worked hard to get the experience right. Today we're pleased to announce that, starting this week, iGoogle supports OpenSocial gadgets in both the US and Australia.

The 19 social gadgets that launched today offer iGoogle users new ways to make their homepage more useful and fun. Gaming fanatics can compete with others in Who has the biggest brain? or challenge their fellow Chess or Scrabble enthusiasts to a quick match. News enthusiasts can add media-sharing gadgets from NPR, The Huffington Post, and YouTube.

Developers using the OpenSocial API can now reach the tens of millions of iGoogle users in the US and Australia, and we plan to roll it out to more users soon. If you're interested in writing you own social gadgets for iGoogle, check out the full announcement on the iGoogle developer blog.

Posted by Dan Holevoet, Google Developer Programs
URL: http://blog.opensocial.org/2009/08/igoogle-joins-social-web.html

Wednesday, August 12, 2009

[Gd] GWT for Enterprise Developers

| More

Google Web Toolkit Blog: GWT for Enterprise Developers

Do you use GWT -or are thinking seriously about using it- to develop your internal or public facing web applications? Do you work in a corporate setting or otherwise collaborate with multiple developers on a single web app? If their answer is yes to either of these questions perhaps we can share.




I'd like to share with you

I will be giving a talk called Google Web Toolkit for the Enterprise Developers at JBoss World 2009 in Chicago, September 1-4. I hope to share practical tips and lesser known, yet really useful features in GWT. While the talk will focus primarily on corporate development scenarios, the content will most certainly be useful if you're the most valuable member of a one person team. I hope to see you there. Don't forget to bring your questions.




Will you share with us?

Not everyone develops the same. In fact the same people may adopt different development styles as they move between teams. Different tools also work differently depending on the team and the project. I'd like to get to know your teams a little bit better and understand how GWT development happens for you. If you're willing to share with me please send me an email.


URL: http://googlewebtoolkit.blogspot.com/2009/08/gwt-for-enterprise-developers.html

[Gd] Seesmic duplicates their Adobe Air interface on the web with GWT

| More

Google Web Toolkit Blog: Seesmic duplicates their Adobe Air interface on the web with GWT


Recently I was shown a demo of Seesmic Web, an application that lets you manage multiple streams and Twitter accounts. The demo was very cool and notable because Seesmic's related product is Seesmic Desktop, implemented in Adobe Air. Seesmic Web replicates the desktop functionality, but on the web using GWT.



The team chose GWT to build Seesmic Web, and I was curious to hear about their experience. In case it helps others in the process of evaluating GWT for building web apps, here is the response I got back from Johann Romefort, CTO at Seesmic.




The choice of using GWT was nearly natural once we defined the need for a very dynamic "single page" application.



Our Flex developers found themselves in a known environment (Eclipse) - developing a webapp with a strongly typed language. It took them 2 weeks to learn the GWT Framework - together with the Java language itself!



We were delighted to see the number of high quality libraries already available, as well as the vivid community around GWT. Finally, the determination of Google to keep the project updated was a convincing factor for adopting this technology.



From the beginning, we started using a MVC framework to keep our code well-structured, and it soon paid itself off in development. The predictability of the framework was a big plus: you write code, you reload, it works. All the bugs we encountered were documented, so finding workarounds was pretty straightforward. We were a bit anxious about legacy Javascript bridging, but JSNI proved to be a very easy way to use 3rd-party libraries.



We started development with version 1.5.3 of GWT and we just ported the app to 1.7. The porting process was a breeze and we’re very happy to be able to use the Eclipse plug-in for GWT.



I guess one area of departure is that we did not follow the classical RPC way for our server-side interactions. Instead, we built a REST API to keep our back-end services agnostic from the client used. We’re using Restlets to interact with our REST API, which once again worked flawlessly, as expected.



Our overall experience using GWT has been very positive. The fact that we develop in Java has a lot of advantages, such as being able to use java debugging tools - instead of just Firebug - if you’re in pure JavaScript. GWT has a few things we would like to see, like being able to load code dynamically instead of compiling everything in a large .js file, but it seems that GWT2.0 will bring forth some new possibilities.

URL: http://googlewebtoolkit.blogspot.com/2009/08/seesmic-duplicates-their-adobe-air.html

[Gd] iGoogle adds support for OpenSocial

| More

Google Code Blog: iGoogle adds support for OpenSocial

Developers using the OpenSocial API can now reach tens of millions of iGoogle users! As of this week, iGoogle now supports OpenSocial in both the US and Australia, with the plan to roll it out to more users soon. In general, we think "social is better" when it comes to the web - activities such as reading the news, doing a crossword puzzle, sharing a todo list, or watching a video are all better when done with a friend. These are all things that iGoogle users love to do, so making them social on iGoogle was the next logical next step.

If you're interested in getting started writing social gadgets for iGoogle, check out the full announcement on the iGoogle developer blog.

By Dan Holevoet, Google Developer Team
URL: http://googlecode.blogspot.com/2009/08/igoogle-adds-support-for-opensocial.html

[Gd] Separating View and Presenter code for better testability

| More

Google Web Toolkit Blog: Separating View and Presenter code for better testability

The Google Testing blog has a post on testing GWT applications. Specifically the post talks about testing best practices and the use (or non-use) of GwtTestCase. It's worth checking out, especially if you are interested in better testability and architecture. To learn more about the MVP pattern mentioned, watch Ray Ryan's Best Practices for Architecting your GWT App talk at Google I/O.

URL: http://googlewebtoolkit.blogspot.com/2009/08/separating-view-and-presenter-code-for.html

[Gd] Dev Channel Update: Bug Fixes and Locales

| More

Google Chrome Releases: Dev Channel Update: Bug Fixes and Locales


This release is for Mac and Linux and it includes a number of bug fixes:

Both:
  • (Bug 18427Make New Tab Page load faster with custom themes [r22462].
  • (Bug 18160) Ensure downloads really stop when a user cancels [r22557].
  • (Bug 13649, Bug 18456) Don't show themes in chrome://extensions/, since that page doesn't work well with them [r22578].
  • (Bug 18480) Theme the New Tab Page in incognito mode too [r22613].
  • (Bug 15247) Add a way to restore blacklisted thumbnails on the New Tab Page [r22704].
  • (Bug 18093) App mode and popup windows should not be themed [r22783].

Mac:
  • Flash gets mouse and key events so you can pause/play video.
  • (Bug 13203) Forward/backward buttons now have history dropdown menus.
  • (Bug 18353) Arrow keys work again.

Linux:
  • (Bug 14790Now supporting 50 locales.
  • Support downloading large files (greater than 2GB) [r22670].

Known Issues:
  • (Mac Bug 12030) Quicktime and other plugins no longer load since they are not yet supported.
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: http://dev.chromium.org/getting-involved/dev-channel.

If you find new issues, please let us know by filing a bug at http://code.google.com/p/chromium/issues/entry.

Jonathan Conradt
Engineering Program Manager


URL: http://googlechromereleases.blogspot.com/2009/08/dev-channel-update-bug-fixes-and.html

[Gd] XING Launches OpenSocial-based Partner Ecosystem

| More

OpenSocial API Blog: XING Launches OpenSocial-based Partner Ecosystem

Hello, my name is Matthias Häsel, and I am a Senior Product Manager at XING, the leading European online business network. Over 8 million members use XING in 16 languages to do business, find jobs, and further their careers. XING helps members find contacts and stay in touch with them with customized networking solutions and services.

It gives me great pleasure to announce the XING Partner Ecosystem to the OpenSocial community. XING’s members will benefit from a wide variety of partner applications on the XING platform, all made possible via OpenSocial. 

XING’s partners are able to create applications using OpenSocial v0.8 and then easily integrate those applications into the XING professional network. The applications are firmly integrated into the core functionality of XING, using OpenSocial's People, Activities, and Notification services. The applications are thus able to leverage XING’s “business graph” of connections between professionals to make the applications engaging and rewarding for XING’s users.

What’s most exciting about the XING Partner Ecosystem is that it is a win-win-win for everyone involved:
  • XING’s members win because they benefit from the useful applications we introduce for various specific user interests.
  • XING’s partners win because their applications are made available to all of the users on the XING platform.
  • XING wins because our service becomes more valuable to our members and partners.
We have 16 launch applications from 13 partners from 7 different countries, specifically Austria (ZCOPE), Canada (Tungle), Finland (Dopplr), Switzerland (Doodle), the UK (Huddle), the USA (SlideShare) and Germany (WELT online, Süddeutsche Karrierecamp, Wallstreet:online, DW-World, travelload, Mindmeister and Spreed, as well as our own applications).

The XING launch apps represent our focus on both locally relevant and globally valuable applications. We host many applications that function in multiple languages, as well as several apps that are specific to the German-speaking markets.

This is just the beginning. We will be adding more and more apps in the future.

Got an app that you think would be suitable for XING? Here are our guiding principles for getting new apps onto the XING platform.
  • Open — we are open to launching anyone’s application if we believe it will provide user value. In the end, the XING users will decide which apps they prefer. So, we are OPEN for apps. Come one, come all, with your great applications!
  • Professional — not just any application, but apps that are suitable for a professional network and that provide value to the business community in the markets we serve.
  • Rewarding — apps that provide a return on time investment to our users.
Do you think your app idea meets our criteria? Visit our OpenSocial Partner Community to learn more.

But don’t just read about the apps. I encourage you to check them out - and give us your feedback on them! UserVoice has proved to be just the right tool for that. Simply click on the big button labeled “feedback” on the right side to give us your ideas and suggestions and to vote on them along with other XING members.

To learn more about the XING Partner Ecosystem, please visit: https://www.xing.com/opensocial.

Posted by Matthias Häsel, XING Team
URL: http://blog.opensocial.org/2009/08/xing-launches-opensocial-based-partner.html

[Gd] iGoogle is a social being

| More

iGoogle Developer Blog: iGoogle is a social being

If you've been a devoted reader of this blog you're probably no stranger to the idea that "social is better" when it comes to the web. Activities such as reading the news, doing a crossword puzzle, sharing a todo list, or watching a video are all better when done with a friend. Coincidentally, these are all things that iGoogle users love to do, so bringing social to iGoogle is a logical next step.

Developers have had a chance to sneak a peek at what iGoogle has been doing in the social space for many months, in the iGoogle developer sandbox. As of today, social gadgets taking advantage of the OpenSocial API will now work in both the US and Australia, with other countries soon to follow. That's tens of millions of iGoogle users with access to social gadgets, if you're keeping count.

Of course, iGoogle is a little bit different than most of the sites which support OpenSocial, so here's a quick rundown of the differences:
  1. An iGoogle page is personal, and not shared with other users. In OpenSocial terms, this means that VIEWER and OWNER are always the same person.
  2. Friendship between two users may be non-mutual. This allows developers to use a "following" model in their applications. For cases where it's important to verify mutual friendship (sharing private data, for instance), developers can use the isFriendsWith filter when requesting the user's mutual friends.
  3. iGoogle has users without canvas view, with canvas view but without social, and with social, all at the same time. And, some users sign in to use iGoogle while others remain signed out. Developers should make sure their gadgets work gracefully across feature sets so that users always have the optimal experience. This blog post provides more details and an example gadget for checking different cases.
  4. iGoogle supports organic growth of applications with two mechanisms.
    • Application sharing (via requestShareApp), allows developers to reach a wider audience by encouraging users to engage their friends inside of a given application. By default, requestShareApp will list all of the user's Friends and users can auto invite new friends by email. iGoogle will email recipients without iGoogle accounts, or present a notification within the UI to existing iGoogle users to add the gadget and become friends.
    • Updates (via requestCreateActivity), allow developers to call out specific user actions, to share them with a wider audience. There is a current limit of 3 updates per user, per app, per day, which may be increased in the future.
To see some great examples of new (or upgraded) gadgets using social features, check out this page. Then, when you're ready, take a look at the getting started guide for details on writing your own social gadgets for iGoogle. As always, if you have questions, please visit us in the iGoogle Developer Forum.

Posted by Dan Holevoet, Developer Programs
URL: http://igoogledeveloper.blogspot.com/2009/08/igoogle-is-social-being.html

[Gd] Super Fast JS Testing

| More

Google Testing Blog: Super Fast JS Testing



by Shyam Seshadri

Before I jump into how exactly you can perform super fast and easy JS testing, let me give you some background on the problem.

Javascript is a finicky language (Some people even hesitate to call it a language). And it can easily grow and become a horrible and complicated beast, incapable of being tamed once let loose. And testing it is a nightmare. Once you have decided on a framework (of which there are a dime a dozen), you then have to set it up to run just right. You need to set it up to actually run your tests. Then you have to figure out how to run it in a continuous integration environment. Maybe even run it in headless mode. And everyone solves it in their own ways.

But the biggest problem I have with most of these frameworks is that executing the tests usually requires a context switch. By that, I mean to run a JSUnit test, you end up usually having to open the browser, browse to a particular url or html page which then runs the test. Then you have to look at the results there, and then come back to your editor to either proceed further or fix your tests. Works, but really slows down development.

In java, all it takes is to click the run button in your IDE to run your tests. You get instant feedback, a green / red bar and details on which tests passed and failed and at what line. No context switch, you can get it to run at every save, and proceed on your merry way. Till now, this was not possible with Javascript.

But now, we have JS Test Driver. My colleagues Jeremie and Misko ended up running into some of the issues I outlined above, and decided that going along with the flow was simply unacceptable. So they created a JS Testing framework which solves these very things. You can capture any browser on any machine, and when you tell it to run tests, it will go ahead and execute them on all these browsers and return you the results in your client. And its blazing fast. I am talking milliseconds to run 100 odd tests. And you can tell it to rerun your tests at each save. All within the comforts of your IDE. And over the last three weeks, I have been working on the eclipse plugin for JS Test Driver, and its now at the point where its in a decent working condition.
The plugin in actionThe plugin in action

The plugin allows you to, from within Eclipse, start the JS Test Driver server, capture some browsers, and then run your tests. You get pretty icons telling you what browsers were captured, the state of the server, the state of the tests. It allows you to filter and show only failures, rerun your last launch configuration, even setup the paths to your browsers so you can launch it all from the safety of eclipse. And as you can see, its super fast. Some 100 odd tests in less than 10 ms. If thats not fast, I don’t know what is.

For more details on JS Test Driver, visit its Google Code website and see how you can use it in your next project and even integrate it into a continuous integration. Misko talks a little bit more about the motivations behind writing it on his Yet Another JS Testing Framework post. To try out the plugin for yourselves, go add the following update site to eclipse:

http://js-test-driver.googlecode.com/svn/update/

For all you IntelliJ fanatics, there is something similar in the works.
URL: http://googletesting.blogspot.com/2009/08/super-fast-js-testing.html

Tuesday, August 11, 2009

[Gd] New tools for Google Services for Websites

| More

Official Google Webmaster Central Blog: New tools for Google Services for Websites

Webmaster Level: All
(A nearly duplicate version :) cross-posted on the Official Google Blog)

Earlier this year, we launched Google Services for Websites, a program that helps partners, e.g., web hoster and access providers, offer useful and powerful tools to their customers. By making services, such as Webmaster Tools, Custom Search, Site Search and AdSense, easily accessible via the hoster control panel, hosters can easily enable these services for their webmasters. The tools help website owners understand search performance, improve user retention and monetize their content — in other words, run more effective websites.

Since we launched the program, several hosting platforms have enhanced their offerings by integrating with the appropriate APIs. Webmasters can configure accounts, submit Sitemaps with Webmaster Tools, create Custom Search Boxes for their sites and monetize their content with AdSense, all with a few clicks at their hoster control panel. More partners are in the process of implementing these enhancements.

We've just added new tools to the suite:
  • Web Elements allows your customers to enhance their websites with the ease of cut-and-paste. Webmasters can provide maps, real-time news, calendars, presentations, spreadsheets and YouTube videos on their sites. With the Conversation Element, websites can create more engagement with their communities. The Custom Search Element provides inline search over your own site (or others you specify) without having to write any code and various options to customize further.
  • Page Speed allows webmasters to measure the performance of their websites. Snappier websites help users find things faster; the recommendations from these latency tools allow hosters and webmasters to optimize website speed. These techniques can help hosters reduce resource use and optimize network bandwidth.
  • The Tips for Hosters page offers a set of tips for hosters for creating a richer website hosting platform. Hosters can improve the convenience and accessibility of tools, while at the same time saving platform costs and earning referral fees. Tips include the use of analytics tools such as Google Analytics to help webmasters understand their traffic and linguistic tools such as Google Translate to help websites reach a broader audience.
If you're a hoster and would like to participate in the Google Services for Websites program, please apply here. You'll have to integrate with the service APIs before these services can be made available to your customers, so the earlier you start that process, the better.

And if your hosting service doesn't have Google Services for Websites yet, send them to this page. Once they become a partner, you can quickly configure the services you want at your hoster's control panel (without having to come to Google).

As always, we'd love to get feedback on how the program is working for you, and what improvements you'd like to see.

Posted by Rajat Mukherjee, Group Product Manager
URL: http://googlewebmastercentral.blogspot.com/2009/08/new-tools-for-google-services-for.html

Monday, August 10, 2009

[Gd] Help test some next-generation infrastructure

| More

Official Google Webmaster Central Blog: Help test some next-generation infrastructure

Webmaster Level: All

To build a great web search engine, you need to:
  1. Crawl a large chunk of the web.
  2. Index the resulting pages and compute how reputable those pages are.
  3. Rank and return the most relevant pages for users' queries as quickly as possible.
For the last several months, a large team of Googlers has been working on a secret project: a next-generation architecture for Google's web search. It's the first step in a process that will let us push the envelope on size, indexing speed, accuracy, comprehensiveness and other dimensions. The new infrastructure sits "under the hood" of Google's search engine, which means that most users won't notice a difference in search results. But web developers and power searchers might notice a few differences, so we're opening up a web developer preview to collect feedback.

Some parts of this system aren't completely finished yet, so we'd welcome feedback on any issues you see. We invite you to visit the web developer preview of Google's new infrastructure at http://www2.sandbox.google.com/ and try searches there.

Right now, we only want feedback on the differences between Google's current search results and our new system. We're also interested in higher-level feedback ("These types of sites seem to rank better or worse in the new system") in addition to "This specific site should or shouldn't rank for this query." Engineers will be reading the feedback, but we won't have the cycles to send replies.

Here's how to give us feedback: Do a search at http://www2.sandbox.google.com/ and look on the search results page for a link at the bottom of the page that says "Dissatisfied? Help us improve." Click on that link, type your feedback in the text box and then include the word caffeine somewhere in the text box. Thanks in advance for your feedback!

Posted by Sitaram Iyer, Staff Software Engineer, and Matt Cutts, Principal Engineer
URL: http://googlewebmastercentral.blogspot.com/2009/08/help-test-some-next-generation.html

[Gd] Custom Search with Custom Style - Peanut Butter and Jelly

| More

Google Custom Search: Custom Search with Custom Style - Peanut Butter and Jelly

Posted by: Jeff Scudder, Developer Programs Engineer

Creating a custom look and feel for your website can have significant benefits in everything from improving usability to setting a professional or playful tone for your website. In many cases, letting users search the content of your site and related sites gets them the information they need faster. After all, a speedy user experience is a happy user experience. Here are some examples of how Custom Search and custom styles are as easy (and delicious) as peanut butter and jelly.

We start with a Custom Search Element, which uses the CustomSearchControl to add Custom Search to my web page. If you've never used a Custom Search engine before, I think you'll find a lot to love: it uses Google's search technology to include a specific group of websites for indexing, and you can share in ad revenue.

One of the many benefits of using the AJAX Search APIs to dynamically add search capabilities to your web pages is that you can also control the look and feel of the search input and results by using open web standards like cascading style sheets (CSS). When you combine this styling with Custom Search, you can create a seamless search experience for your users.

You can begin by changing the search input box (dynamically added to your page by default) to use an input box that you've placed on the page wherever you like.
// Set drawing options to use my text box
// as input instead of having the library create one.
var drawOptions = new google.search.DrawOptions();
drawOptions.setInput(document.getElementById('query_input'));

// Draw the control in content div
customSearchControl.draw('results', drawOptions);
With the above changes we get a page that looks like this:

Now that we're able to use a Custom Search box (look ma, no button push required!) we can add CSS rules to change fonts, colors, and more in the search results.

For example, see: http://ajax-apis.appspot.com/cse-style which has CSS rules that effect the styling of the search results and compare it to our first step which uses the default styles.

Take a look at the CSS rules to get an idea for how this works, and how you can do custom styling to fit your own website.

We can change the font and add a border around each search result:
#results .gsc-results {
/* Sets font for titles, snippets, and URLs. */
font-family: arial, helvetica, sans-serif;
}

#results .gsc-result {
position: relative;
border: 1px solid #eee;
border-left: 10px solid #eee;
padding: 8px 8px 8px 20px;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
}
We can also change the style of a single result when the user moves the mouse cursor over it:
#results .gsc-result:hover {
border: 1px solid #888;
border-left: 10px solid #888;
}


These are just a couple of examples. Since the CSS styling is handled by the browser, you can use any supported CSS rules to select portions of the search results. For more information on the result HTML structure and the CSS classes you may want to select in your own customizations, see the documentation on styling AJAX Search results.
URL: http://googlecustomsearch.blogspot.com/2009/08/custom-search-with-custom-style-peanut.html

[Gd] Custom Search with Custom Style: Peanut Butter and Jelly

| More

Google AJAX APIs Blog: Custom Search with Custom Style: Peanut Butter and Jelly

Creating a custom look and feel for your website can have significant benefits in everything from improving usability to setting a professional or playful tone for your website. In many cases, letting users search the content of your site and related sites gets them the information they need faster. After all, a speedy user experience is a happy user experience. Here are some examples of how Custom Search and custom styles are as easy (and delicious) as peanut butter and jelly.

We start with a Custom Search Element, which uses the CustomSearchControl to add a Custom Search Engine to my web page. If you've never used a Custom Search engine before, I think you'll find a lot to love: it uses Google's search technology to include a specific group of websites for indexing, and you can share in ad revenue.

One of the many benefits of using the AJAX Search APIs to dynamically add search capabilities to your web pages is that you can also control the look and feel of the search input and results by using open web standards like cascading style sheets (CSS). When you combine this styling with Custom Search, you can create a seamless search experience for your users.

You can begin by changing the search input box (dynamically added to your page by default) to use an input box that you've placed on the page wherever you like.

// Set drawing options to use my text box
// as input instead of having the library create one.
var drawOptions = new google.search.DrawOptions();
drawOptions.setInput(
document.getElementById('query_input'));

// Draw the control in content div
customSearchControl.draw(
'results', drawOptions);

With the above changes we get a page that looks like this:

Now that we're able to use a Custom Search box (look ma, no button push required!) we can add CSS rules to change fonts, colors, and more in the search results.

For example, see: http://ajax-apis.appspot.com/cse-style which has CSS rules that effect the styling of the search results and compare it to our first step which uses the default styles.

Take a look at the CSS rules to get an idea for how this works, and how you can do custom styling to fit your own website.

We can change the font and add a border around each search result:

#results .gsc-results {
/* Sets font for titles, snippets, and URLs. */
font-family: arial, helvetica, sans-serif;
}

#results .gsc-result {
position: relative;
border: 1px solid #eee;
border-left: 10px solid #eee;
padding: 8px 8px 8px 20px;
border-radius: 8px;
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
}

We can also change the style of a single result when the user moves the mouse cursor over it:

#results .gsc-result:hover {
border: 1px solid #888;
border-left: 10px solid #888;
}

These are just a couple of examples. Since the CSS styling is handled by the browser, you can use any supported CSS rules to select portions of the search results. For more information on the result HTML structure and the CSS classes you may want to select in your own customizations, see the documentation on styling AJAX Search results.

URL: http://googleajaxsearchapi.blogspot.com/2009/08/custom-search-with-custom-style-peanut.html

[Gd] The 7th Plague?

| More

Google Testing Blog: The 7th Plague?

By James A. Whittaker

Yes, I only posted 6 plagues. Congratulations for catching this purposeful omission! You wouldn't trust a developer who argues "this doesn't need to be tested" or "that function works like so" and you shouldn't trust me when I say there are 7 plagues. In the world of testing all assumptions must be scrutinized and it doesn't work until someone, namely a tester, verifies that it does!

Clearly this is an alert and education readership. But why assume even this statement is true? How about another test? Anyone feel like contributing the 7th plague?

I've actually received a few via email already and I have an idea of my own 7th. So email them to me at docjamesw@gmail.com and I'll post a few of the best, with attribution, on this blog. Maybe I can even scare up some Google SWAG or a copy of my latest book to the best one.

First come, first published.


URL: http://googletesting.blogspot.com/2009/08/7th-plague.html

Sunday, August 9, 2009

[Gd] Optimize your crawling & indexing

| More

Official Google Webmaster Central Blog: Optimize your crawling & indexing

Webmaster Level: Intermediate to Advanced

Many questions about website architecture, crawling and indexing, and even ranking issues can be boiled down to one central issue: How easy is it for search engines to crawl your site? We've spoken on this topic at a number of recent events, and below you'll find our presentation and some key takeaways on this topic.



The Internet is a big place; new content is being created all the time. Google has a finite number of resources, so when faced with the nearly-infinite quantity of content that's available online, Googlebot is only able to find and crawl a percentage of that content. Then, of the content we've crawled, we're only able to index a portion.

URLs are like the bridges between your website and a search engine's crawler: crawlers need to be able to find and cross those bridges (i.e., find and crawl your URLs) in order to get to your site's content. If your URLs are complicated or redundant, crawlers are going to spend time tracing and retracing their steps; if your URLs are organized and lead directly to distinct content, crawlers can spend their time accessing your content rather than crawling through empty pages, or crawling the same content over and over via different URLs.

In the slides above you can see some examples of what not to do—real-life examples (though names have been changed to protect the innocent) of homegrown URL hacks and encodings, parameters masquerading as part of the URL path, infinite crawl spaces, and more. You'll also find some recommendations for straightening out that labyrinth of URLs and helping crawlers find more of your content faster, including:
  • Remove user-specific details from URLs.
    URL parameters that don't change the content of the page—like session IDs or sort order—can be removed from the URL and put into a cookie. By putting this information in a cookie and 301 redirecting to a "clean" URL, you retain the information and reduce the number of URLs pointing to that same content.
  • Rein in infinite spaces.
    Do you have a calendar that links to an infinite number of past or future dates (each with their own unique URL)? Do you have paginated data that returns a status code of 200 when you add &page=3563 to the URL, even if there aren't that many pages of data? If so, you have an infinite crawl space on your website, and crawlers could be wasting their (and your!) bandwidth trying to crawl it all. Consider these tips for reining in infinite spaces.
  • Disallow actions Googlebot can't perform.
    Using your robots.txt file, you can disallow crawling of login pages, contact forms, shopping carts, and other pages whose sole functionality is something that a crawler can't perform. (Crawlers are notoriously cheap and shy, so they don't usually "Add to cart" or "Contact us.") This lets crawlers spend more of their time crawling content that they can actually do something with.
  • One man, one vote. One URL, one set of content.
    In an ideal world, there's a one-to-one pairing between URL and content: each URL leads to a unique piece of content, and each piece of content can only be accessed via one URL. The closer you can get to this ideal, the more streamlined your site will be for crawling and indexing. If your CMS or current site setup makes this difficult, you can use the rel=canonical element to indicate the preferred URL for a particular piece of content.

If you have further questions about optimizing your site for crawling and indexing, check out some of our previous writing on the subject, or stop by our Help Forum.

Posted by Susan Moskwa, Webmaster Trends Analyst
URL: http://googlewebmastercentral.blogspot.com/2009/08/optimize-your-crawling-indexing.html