Make your waves easier to find with savedSearchHook

Monday, May 31, 2010 | 5:17 PM

One of my favorite features of Wave is "saved searches." When I use a search query that I want to remember to check later, I click "save search" at the bottom of the search panel, specify a title, and then that search shows up in my nav panel as a link. When a wave matching that search query show up in the search panel, it will be labeled with the saved search terms.

I use searches for lots of things - keeping track of waves for particular Google groups (e.g. "group:artisticwaves@googlegroups.com"), waves with particular tags (e.g. "tag:wavedevfaq"), waves I've contributed to ("with:me"), and oftentimes, waves created by a particular robot (e.g. "with:submitty-bot tag:status-inreview").

I always wished extensions could automatically save those searches for me, and today, I'm happy to announce that extension installers can now use the savedSearchHook to specify saved searches to be automatically added to the user's nav panel. For example, the Google I/O extension adds a saved search to make it easy to find all the conference waves, using this addition to the installer XML:

<savedSearchHook name="Google IO 2010" query="group:io2010-wave@googlegroups.com tag:io2010"></savedSearchHook>

For another example, the Tasky developer provides users with a "Tasky Extras" extension that adds a set of hooks for finding tasks in various stages of progress:

<savedSearchHook name="Tasky: All" query="with:me tag:task"></savedSearchHook> 
<savedSearchHook name="Tasky: Top-Level" query="with:me tag:task -tag:sub-task"></savedSearchHook> 
<savedSearchHook name="Tasky: Active" query="with:me tag:task -tag:status-completed -tag:status-canceled -tag:status-rejected"></savedSearchHook> 
<savedSearchHook name="Tasky: New" query="with:me tag:status-describing OR tag:status-notstarted OR tag:status-brainstorming past:1w"></savedSearchHook>  

For more information, read through the extension installer documentation. Stop by the forum to ask any questions or to share your use of the feature.


Google Wave platform updates at I/O: See what you can build now!

Wednesday, May 19, 2010 | 9:41 AM

When we first launched Google Wave in developer preview mode at last year's I/O, thousands of developers started playing around on WaveSandbox.com, experimenting with the APIs, and checking out the preliminary set of specs and whitepapers on waveprotocol.org. Back then, many developers looked around and decided that they couldn't do what they wanted with the APIs yet, or the protocol wasn't fleshed out enough for their needs, so they filed their feature requests and slowly disappeared from the Wave world.

Today, we'd like to encourage all those developers to take a second look. Over the past year, and today at Google I/O, we've launched a series of improvements that make Wave a more compelling platform, product, and protocol, and enable the kind of apps and integrations developers first dreamed of when they encountered Wave.

Here's a quick recap of the last few months of API releases:

And here's what we've announced at I/O:

  • Run robots on any server -- not just App Engine. This means you run robots on your own web servers, and you can use your language of choice, making it significantly easier to write robots that integrate with your existing website and systems. Read more in the docs.
  • Use a robot to manipulate and retrieve attachments within a wave, so you can build something like a wave -> Flickr album converter, a CSV -> interactive map builder, or as we'll be demo'ing live at the I/O talk, a wave -> PowerPoint exporter. Read more in the docs.
  • Use the "Wave This" service to let your website's visitors easily create waves out of the content on your site. You can see an example of it in use with the Wave This Chrome Extension. Read more in the docs.
  • Fetch waves on behalf of users with Wave data APIs to build lightweight clients or apps like what we just launched, the official Google Wave Notifier Chrome Extension. Read more in the docs.

Beyond the API releases, we're also open sourcing a lot more of Google Wave's code, including the rich text editor, so you can learn how to run a wave server, like the one Novell Pulse is working on, and start prototyping with a simple frontend for editing and replying to waves. You can also extend that code to build your own alternative Wave clients. Today, SAP announced that they are working to adopt the Google Wave Federation Protocol in their product, StreamWork. Stay tuned for another blogpost with more pointers and details.

Now, all of this sounds great, but as a developer building on top of a platform, many of you will be most concerned about one thing: users. We've been in invite-only mode for the past year, and built up a loyal user base of about 1 million active users. Today, we will let anyone with a Google account use Google Wave (no more invites!), *and* even better, any company or organization using Google Apps can enable Wave for their domain. So, there should both be more users who want to use your extensions and more businesses that want developers to build extensions for them. Win-win!

We're not done yet, of course. The product and the APIs are in Labs, because we think it's important to stay flexible when creating a whole new paradigm in web based communication and collaboration. We want to be able to respond to your feedback, and we still have a lot left to do to make the vision a reality.

But we think we've made good progress with these improvements, and we invite you to check them out, give us your feedback, and hopefully join us on the rest of this journey.


New features for Robots: Bundled Annotations, Inline Blips, Read-Only Roles

Wednesday, May 12, 2010 | 11:34 AM

Over the last few releases, we've been rolling out incremental improvements to the robots API, based on the feedback from all of you developers. For those of you who haven't been reading the forum waves and changelogs, here's a summary of the new features:

Bundled Annotations:

When you're adding new text to a blip, you often want to annotate that text with a particular set of annotations. In the past, you had to calculate the range of that text and use the annotate operation, like so:

blip.append('New text')
blip.range(len(blip.text), len(blip.text)+8).annotate('style/fontWeight', 'bold')

This often led to off-by-1 errors and frustration. Now with bundled annotations, you can specify both the content to append and the annotation(s) to apply to that content, all in the same operation, like so:
blip.append('New Text', bundled_annotations=[('style/fontWeight', 'bold')])

For more information, read the announcement wave.


Inline Blip Positions:

Several robots produce alternate rendering of waves, like Mr. Ray and its "Wave Lite" view, and those robots needed to know the positions of inline blips inside other blips for a more accurate rendering. To help with this, we introduced a new attribute to the Blip classes to let robots access that position. For more info, see the Python or Java reference.


Read Only Roles:

A few months ago Google Wave launched the ability to have "Read-only" participants, which lets the creator of a wave set access rights for the other participants as either "full access" (the default) or "read only". We now offer that same ability in the API, so a robot that creates a wave can set the access rights of all the participants on the wave, like so:

new_wave.participants.set_role('public@a.gwave.com', wavelet.Participants.ROLE_READ_ONLY)

For more information, read the announcement wave.

Check out the new features, and let us know in the forum how you're using them in your robots.