tag:blogger.com,1999:blog-79380359223880482192024-03-13T11:56:57.378-07:00Google Wave Developer BlogUnknownnoreply@blogger.comBlogger60125tag:blogger.com,1999:blog-7938035922388048219.post-53116972111980609032010-12-06T16:03:00.000-08:002020-07-15T16:39:31.864-07:00Introducing Apache WaveOne of the best outcomes from November's <a href="http://googlewavedev.blogspot.com/2010/11/this-weeks-wave-protocol-summit-updates.html">Wave Protocol Summit</a> was a <a href="http://wiki.apache.org/incubator/WaveProposal">proposal</a> for Wave to enter the <a href="http://apache.org/">Apache</a> Software Foundation's <a href="http://incubator.apache.org/">incubator</a> program. Apache has a fantastic reputation for fostering healthy open source communities that create great software. Last week, that proposal was accepted, and we're spinning up the project infrastructure so that the community can continue to grow in the Apache way. <br><br>
During the summit, it became quite clear that there is a healthy community of startups, independent developers, and industry partners enthusiastic to continue development of the Wave Federation protocols and Wave in a Box product. We've posted <a href="http://www.waveprotocol.org/wave-protocol-summit/wave-summit-talks">videos</a> of the technical talks and demos presented throughout the summit so that those who couldn't make it to San Francisco needn't miss out.<br><br>
The final days of the summit were dedicated to technical design and coding. Progress since then includes significant improvements to the wave panel, visual enhancements to the login pages, gadgets hooked up and working, improved development set-up and documentation, and a <a href="http://www.waveprotocol.org/protocol/design-proposals/http-based-federation-protocol">draft</a> HTTP transport for wave federation.<br><br>
In recognition of this work, we're proud to announce that the open source project leadership is expanding to include a number of new committers from outside Google: Tad Glines, Michael McFadden (Solute), James Purser, Ian Roughley (Novell), Anthony Watkins (SESI), and Torben Weis (University Duisburg-Essen). They are joining graduated Google interns Joseph Gentle and Lennard de Rijk as trusted contributors who have demonstrated high quality code and valuable design insight.<br><br>
The creation of Apache Wave will serve to accelerate the growth of the existing community with strong open source processes. If you'd like to get involved, please join the Apache Wave mailing list (send an email to wave-dev-subscribe@incubator.apache.org). We're looking forward to working with you.<br><br>
<span class="post-author">Posted by Alex North, Software Engineer, Google Wave team </span>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-21218847821191038052010-11-10T18:10:00.000-08:002020-07-15T16:39:31.127-07:00This Week's Wave Protocol Summit: Updates<p>We've just wrapped up day 3 of this week's <a href="http://www.waveprotocol.org/wave-protocol-summit">Wave Protocol Summit</a> in San Francisco. Developers and industry partners have gathered from all over the world to discuss the architecture of Wave, opportunities for use in enterprise, government, and consumer technology, and the future of the open source project. The last few days have included a great mix of architecture presentations, technical discussions, and interesting demos using Wave technology (<a href="http://wavelook.com/">WaveLook</a>, <a href="http://www.youtube.com/watch?v=KFaUrDFjERM&feature=player_embedded">Novell Vibe</a>, <a href="http://wave-vs.net/">Wave-vs.net</a>, and others).</p>
<p>Since the <a href="http://googlewavedev.blogspot.com/2010/09/wave-open-source-next-steps-wave-in-box.html">Wave in a Box announcement</a> in September, progress has been rapid. We've recently added: </p><ul><li>a new <a href="http://www.waveprotocol.org/protocol/design-proposals/new-wave-panel-undercurrent">wave panel</a>, which is much prettier and a lot faster,</li><li>improvements to <a href="http://www.waveprotocol.org/protocol/design-proposals/authentication">login and authentication</a>,</li><li><a href="http://google-opensource.blogspot.com/2010/11/adding-robots-to-wave-in-box.html">robot and data API support</a>,</li><li>support for <a href="http://code.google.com/apis/wave/extensions/gadgets/guide.html">Wave Gadgets</a>,</li><li><a href="http://www.waveprotocol.org/code">new setup, installation guides and tutorials</a>,</li><li>support for browers without websocket support (via <a href="http://code.google.com/p/socketio-java/">socket.io</a>),</li><li>designs for a <a href="http://www.waveprotocol.org/protocol/design-proposals/wave-store-design-for-wave-in-a-box">file-based wave store</a>, and</li><li>support for federation between instances of Wave in a Box (and <a href="http://wavesandbox.com/">wavesandbox.com</a>).</li></ul><p></p>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TinOg0_YgIQ/TNtNcDRXRvI/AAAAAAAATXk/aDfmqBA0yjo/s1600/wiab.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 183px;" src="http://1.bp.blogspot.com/_TinOg0_YgIQ/TNtNcDRXRvI/AAAAAAAATXk/aDfmqBA0yjo/s320/wiab.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5538105311091967730" /></a><div style="text-align: center;"><span class="Apple-style-span" style=" ;font-size:12px;">Wave in a Box "out of the box"</span></div>
<p>You can keep up to date by following the <a href="https://wave.google.com/wave/#restored:wave:googlewave.com/w+tYBKatJxA">Progress Reports wave</a>.</p>
<p>For the rest of this week we'll be hacking on Wave in a Box, helping new contributors tackle some <a href="http://www.waveprotocol.org/code/starter-projects">starter projects</a>, resolving <a href="http://code.google.com/p/wave-protocol/issues/list">open issues</a>, and adding even more functionality.</p>
<p>As a reminder, we'll continue running <a href="http://wave.google.com/">wave.google.com</a> at least through the end of the year. We've also recently introduced a <a href="http://googlewave.blogspot.com/2010/11/exporting-your-waves.html">wave export feature</a>. In addition, we're working on ways for you to access waves through Google Docs and we hope to share more on our progress soon.</p>
<p>If you're following along from home, we'll be sharing videos following the event -- but please join us in the <a href="http://groups.google.com/group/wave-protocol/">Wave Protocol group</a>.</p><br>
<span class="post-author">Posted by Dan Peterson, Product Manager</span>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-23655087601487871152010-10-04T15:39:00.000-07:002020-07-15T16:39:31.154-07:00Join us at the Wave Protocol Summit<p>The <a href='http://googlewavedev.blogspot.com/2010/09/wave-open-source-next-steps-wave-in-box.html'>Wave in a Box</a> project is shaping up well and we're now posting regular progress reports to the group forum (the most recent is <a href='https://groups.google.com/group/wave-protocol/browse_thread/thread/6bde65dd8d4ee1d8/6ffde83a0f624a55'>here</a>). We've also created a list of <a href='http://www.waveprotocol.org/code/starter-projects'>starter projects</a>, easy tasks for developers to get started contributing to the codebase. You can chat with some of the Wave engineers at the upcoming online office hours (in Google Wave). The next one is on Monday (Tuesday down under) - details are <a href='http://groups.google.com/group/wave-protocol/browse_thread/thread/5763f3033d447120'>in the forum</a>.</p>
<p>To bring the developer community together we are hosting a Wave Protocol Summit in San Francisco, November 2010. Through the summit we aim to grow the Wave developer community, share technical knowledge, and discuss the future of Wave technology and its community. The summit will be targeted towards technical people interested in using, contributing to, or building on Wave technology. Content will include:
<ul>
<li>technical talks on specific aspects of Wave technology,
<li>problem solving around open technical issues,
<li>discussions about project organisation and governance, and
<li>group coding sessions (fun!).
</ul>
</p>
<p>The summit will be three days of talks and discussion (November 8 - 10) followed by two days of coding (November 11 - 12) on Wave in a Box and federation. We're still working out the detailed schedule, so stay tuned to the forums for further details (and give your feedback).</p>
<p>If you would like to join us, you can <a href='https://spreadsheets.google.com/viewform?formkey=dGFwZDBFMlpfRWhyWVk4LTZQRXJNM2c6MA'>request a seat</a> (due to capacity constraints, we'll confirm your seat in the coming weeks). To help improve the summit, please also suggest or request session content of particular interest to you.</p>
<p>In the meantime, see you on the forums!</p>
<br>
<span class="post-author">Posted by Alex North, Google Wave team.</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-54656565446199472032010-09-02T17:48:00.000-07:002020-07-15T16:39:31.891-07:00Wave open source next steps: "Wave in a Box"Since the <a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html">announcement that we will discontinue development</a> of Google Wave as a standalone product, many people have asked us about the future of the open source code and Wave federation protocol. After spending some time on <a href="http://googlewave.blogspot.com/2010/08/quick-note-on-next-steps-for-google.html">figuring out our next steps</a>, we'd like to share the plan for our contributions over the coming months.<div><p>
We will expand upon the 200K lines of code we've already open sourced (detailed at <a href="http://waveprotocol.org/">waveprotocol.org</a>) to flesh out the existing example Wave server and web client into a more complete application or "Wave in a Box." <p>
This project will include:
<ul><li>an application bundle including a server and web client supporting real-time collaboration using the same structured conversations as the Google Wave system</li><li>a fast and fully-featured wave panel in the web client with complete support for threaded conversations</li><li>a persistent wave store and search implementation for the server (building on contributed patches to implement a MongoDB store)</li><li>refinements to the client-server protocols</li><li>gadget, robot and data API support </li><li>support for importing wave data from <a href="http://wave.google.com/">wave.google.com</a></li><li>the ability to federate across other Wave in a Box instances, with some additional configuration</li></ul>This project will not have the full functionality of Google Wave as you know it today. However, we intend to give developers and enterprising users an opportunity to run wave servers and host waves on their own hardware. <p>
Since the beginning, it has been our vision that the Google Wave protocols could support a new generation of communication and collaboration tools. The response from the developer community to date has been amazing and rewarding. Even more so now, we believe that developers and <a href="http://googlewavedev.blogspot.com/2010/06/wave-federation-keeps-growing-rich-text.html">other projects</a> are a critical part of this story. <p>
While Wave in a Box will be a functional application, the future of Wave will be defined by your contributions. We hope this project will help the Wave developer community continue to grow and evolve. We'll discuss more technical details of our plan on the <a href="https://groups.google.com/group/wave-protocol?pli=1">Wave Protocol Forum</a>, which is the best place to keep up with the latest progress on the open source project and learn how you can contribute. <p>
Wave on <p>
<div>
<span class="post-author">Posted by Alex North, Software Engineer, Google Wave team </span></div></div>Unknownnoreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-37178595268346684102010-08-02T20:44:00.000-07:002020-07-15T16:39:31.522-07:00Upcoming Wave Talks: Michigan & Washington, DC<p>Every so often, I leave this beautiful city of Sydney, Australia and depart for foreign lands to meet developers from around the world. This time, I'm heading to the states and dropping by two <a href='http://gtugs.org/'>GTUGs</a> (Google Technology User Groups) to talk about Google Wave and the APIs:</p>
<ul>
<li><p><a href='https://sites.google.com/site/dcgtug/home'>DC GTUG</a><br />Washington, DC<br />August 10, 6pm</p></li>
<li><p><a href='http://migtug.eventbrite.com/'>Michigan GTUG</a><br />Southfield, MI<br />August 12, 6:30pm</p>
</li>
</ul>
<p>After the GTUG talks, I'll also be swinging by the <a href='http://gtug-campout-2010.eventbrite.com/'>HTML5 GTUG campout</a> in San Francisco, setting up waves for the teams to document their progress and ask questions.</p>
<p>If you're in the area, I hope to see you there!</p>
<p>Update: In light of the recent <a href="http://googleblog.blogspot.com/2010/08/update-on-google-wave.html">update on Wave</a>, the talks have changed topic and will now be on Google APIs: A-Z.</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-85991302168160500912010-07-30T16:45:00.000-07:002020-07-15T16:39:32.473-07:00Wave Visualizer: Turning Threads into Trees<p>Two years ago, I discovered the <a href='http://thejit.org/'>JavaScript InfoVis Toolkit</a>, a really cool library for doing visualizations in Javascript, like force-directed graphs, hypertree, treemaps, sunbursts, and more. Since then, I've been looking for an excuse to use the library in conjunction with a Google API, and after our latest API release, I found the perfect use.</p>
<p>A few weeks ago, we released a new feature in the data and robot APIs: threads. This feature means that developers can render threaded waves in alternative clients and export waves to other formats while retaining their true structure. It also means that I can finally use the InfoVis Toolkit, in order to visualize the threads in a wave as a structured tree.</p>
<p>To create the visualization, I started with the code for the <a href="http://wave-samples-gallery.appspot.com/about_app?app_id=266001">Inbox Checker</a> sample, a Python App Engine app that asks a user to authenticate (via OAuth), and then shows them their inbox and any wave they click on. I modified that app to output JSON instead of HTML for each wave, and I piped that JSON into the <a href='http://thejit.org/static/v20/Docs/files/Visualizations/Spacetree-js.html'>SpaceTree</a> class from the toolkit.</p>
<p>Here's an side-by-side example of how a wave might look like in the client, and what it looks like as a SpaceTree:</p>
<br>
<img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand; width:500px" src="http://2.bp.blogspot.com/_T1lquhCmKo8/TFNlRYDzkqI/AAAAAAAADcE/jICtOuVO59w/wavevisualizer_sidebyside.png" border="0" />
<br>
<p>You can try the app out for yourself here: <a href='http://wave-visualizer.appspot.com/'>Wave Visualizer</a>. After granting access to the app, you can click each of the waves in your inbox and browse the tree for it. As you mouse over each blip, you'll see a snippet of the content of the blip in the tooltip. When you click on a blip, you'll be taken to that exact blip in the Wave client, utilizing our other new feature: <a href='http://wave-api-faq.appspot.com/#bliplinking'>blip linking</a>.<br />(You can also try out the "Timeline" view, which shows the sequence of blips over time, using the <a href="http://code.google.com/apis/visualization/documentation/gallery/annotatedtimeline.html">Google Visualization API</a>).</p>
<p>This app shows off one of my favorite features of Wave - flexibly structured conversations. Some waves are very flat long trees, and others are wide and deeply nested, and they are all made possible by the <a href='http://www.youtube.com/watch?v=ydsSFMB4SFI'>Wave conversation model</a>. And now, thanks to the new <a href="http://code.google.com/apis/wave/wavedata/">Wave data APIs</a>, apps like this are possible.</p>
<p>Enjoy playing around with the visualizer, and if you have any questions about building apps like it, stop by <a href='http://code.google.com/apis/wave/forum.html'>the Wave API forum</a> and let us know!</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-41342021637927086432010-07-29T18:16:00.000-07:002020-07-15T16:39:31.601-07:00Wave UI: Making your gadgets look & feel Wave-y<p>As part of my Google I/O talk on "<a href='http://www.youtube.com/watch?v=tXKidPYCEzQ'>Anatomy of a Great Extension</a>", I talked about the optimal look & feel for Wave gadgets. On one hand, if your Wave gadget is based off an existing website, like the 6Rounds gadget, then we recommend mimicing the UI of your website inside the gadget, so that your existing users feel like they're using an extension of your website into Wave. On the other hand, if your Wave gadget is independent and designed purely for Wave, like many extensions in the gallery, then we suggest mimicing the UI of the Google Wave client itself, so that users feel like the gadgets fit inside their environment, and so that waves with multiple independent gadgets look cohesive. To make that easier for developers, we've introduced a new feature to the Wave Gadgets API, the <a href='http://code.google.com/apis/wave/extensions/gadgets/guide.html#waveui'>wave.ui library</a>, which makes it easy to turn your gadget elements into wave-styled elements.</p>
<p>For example, you might start with an anchor with some javascript onclick behavior:<br />
<pre class="code">
<a id="button" href="javascript:void(0)" onclick="doIt()">Do Cool Stuff!</a>
</pre>
<span style=''></p>
<p>You can then call makeButton and pass in the anchor element:<br /></span>
<pre class="code">
<script>
wave.ui.makeButton(document.getElementById("button"));
</script>
</pre>
<span style=''>
<br />And, presto, your button will be wave-styled like this:</p>
<p>
<img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 95px; height: 29px;" src="http://1.bp.blogspot.com/_T1lquhCmKo8/TFIoLmTeopI/AAAAAAAADb8/_QJaMdf-hIw/s400/waveuimakebutton.png" border="0" alt=""/>
</p>
<p>The wave.ui library also offers the </span><span style='font-family:monospace;'>loadCss</span><span style=''>, </span><span style='font-family:monospace;'>makeDialog</span><span style=''>, and </span><span style='font-family:monospace;'>makeFrame</span><span style=''> methods, and will expand to include additional methods as needed by developers.</p>
<p>For examples of gadgets using the new wave.ui library, check out the <a href='https://wave.google.com/wave/waveref/googlewave.com/w+sYRTy7ZkCT3'>Flammard bible bot</a>, which uses </span><span style='font-family:monospace;'>makeFrame </span><span style=''>for a multi-tabbed interface, or the <a href='https://wave.google.com/wave/waveref/googlewave.com/w+R8RbkhA9C'>Google Maps gadget</a>, which uses </span><span style='font-family:monospace;'>makeDialog </span><span style=''>for a welcome screen and </span><span style='font-family:monospace;'>makeButton </span>for the info window buttons.</p>
<p>As usual, please let us know in <a href='http://code.google.com/apis/wave/forum.html'>the forum</a> how you're using this feature and if you have any questions.</p>
<p>Enjoy wave-styling!</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-12447700980108430002010-07-15T20:24:00.000-07:002020-07-15T16:39:30.939-07:00Building Wave Gadgets with GWT<span style='font-style:italic;'>Hilbrand Bouwkamp is an independent internet developer/trainer/presenter specialized in RIA, GWT and Android. He has been following GWT and Wave since it's first release and has created two open source libraries related to GWT and Wave: <a href='http://www.cobogw.org'>cobogw</a> and <a href='http://code.google.com/p/cobogwave'>cobogwave</a>.This blogpost is about the cobogwave library.</span></p>
<p>As soon as Google Wave was released and I had an account, I wanted to write a Wave Gadget. I believe Gadgets are one of the strengths of Wave because they let you add a structured component to an unstructured communication flow to make things more efficient. For example, a simple date picker Gadget can be added to an event-planning wave, and instead of people having to go to a separate site and communicate their date preferences manually, they can do the date-selection in the wave, and all of the information is stored in a single place. There are many situations like this where gadgets can add structure and keep related information together.</p>
<p><img src="http://code.google.com/webtoolkit/images/gwt-logo.png" align="right">Since the Google Wave client itself is build with <a href='http://code.google.com/webtoolkit/'>GWT (Google Web Toolkit)</a>, I thought it to be natural to write a Gadget with GWT. To do that, I needed to wrap the Wave Gadgets JavaScript API with my own GWT JSNI wrapper. Like other GWT gadget developers, I wrote my own wrapper - but I wanted to do it in a way that other developers could benefit from. So, I made sure that my wrapper included all of the Wave Gadgets API functionality, I wrote documentation for it, and I open-sourced it under the Apache 2 license as the <a href='http://code.google.com/p/cobogwave/'>cobogwave</a> library. Now, other developers can skip the wrapper-writing step and simply focus on writing their gadget.</p>
<p>The cobogwave library makes it very easy to build gadgets for Wave. Just like the iGoogle GWT Gadgets API library, it defines a <span style='font-style:italic;'>Needs </span><span style=''>interface: </span><span style='font-style:italic;'>NeedsWave</span>. By implementing the interface, you can make your gadget code Wave-enabled. Or, you can simply extend the WaveGadget class for the same effect.</p>
<p>GWT developers are accustomed to work with handlers, so the cobogwave library provides much of its functionality via handlers. For example, you can register for the ModeChangeEvent to be notified when the user changes from playback to edit mode, ParticipantUpdateEvent when a new user is added or removed to the wave, and StateUpdateEvent when the gadget receives a new state. The cobogwave library also has support for experimental functionallity in the Wave Gadget library, like the <a href='http://www.bouwkamp.com/?p=107'>Wave UI Widgets Button, Frame and Dialog</a>.</p>
<p>Recently, I was involved in the <a href='http://googlewebtoolkit.blogspot.com/2010/06/google-api-libraries-for-google-web.html'>latest release</a> of the gadgets support in the <a href='http://code.google.com/p/gwt-google-apis'>Google API Libraries for GWT</a>. In the new version, it's much easier to <a href='http://www.bouwkamp.com/?p=110'>implement RPC calls</a> to your own server, and this method also works for Wave Gadgets.</p>
<p>Here's a sampling of diverse range of gadgets that developers have built using the cobogwave library:</p>
<img src="http://1.bp.blogspot.com/_HrTFtSYIY_8/S9pBtzbVWWI/AAAAAAAAAA8/9XLOJFh9X-c/s200/r4.png" align="right" style="margin:5px">
<ul>
<li>
<a href='http://googlewebtoolkit.blogspot.com/2010/04/tale-of-two-and-more-apps.html'>Shortyz</a>: Lets you solve crosswords together in a wave - ported from Android code.
<li>
<a href='http://code.google.com/p/wavemindmap'>MindMap</a>: Lets you create an interactive mindmap, and favorite nodes up or down.
<li>
<a href='http://karma.ourproject.org'>Karma</a>: Lets participants in a Wave rate each other.
<br />
<li>
<a href='http://code.google.com/p/pongy'>Pongy</a>: Lets you play the classic game "Pong" with a fellow Wave user. (This last gadget was written by me to showcase the highly interactive possibilities of Wave.)
</ul>
<p>
To start building your own Wave Gadgets with GWT, visit the <a href='http://code.google.com/p/cobogwave'>cobogwave</a> project page and to keep informed on updates, follow me on <a href='http://www.twitter.com/hilbrand'>Twitter</a>.
</p>
<br>
<span class="post-author">Posted by Hilbrand Bouwkamp, Community Developer</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-52541905416071874392010-07-14T20:55:00.000-07:002020-07-15T16:39:31.838-07:00Behind the Scenes of the Wave API Python Client Library<p>When I heard that Australia was going to have its very own <a href='http://pycon-au.org/2010/about/'>PyCon</a>, I knew I wanted to give a talk. While working on the with the Wave APIs over the last year, I've gotten to the point where I'm using the <a href='http://code.google.com/p/wave-robot-python-client/'>Python client library</a> on a daily basis, and I've learnt a lot about Python from our library. I wanted to give a talk that would be interesting both to Wave API developers and to Python developers and would force me to dig deeper into the depths of our client library.</p>
<p>So, I presented a talk called "Wave Robots API: Behind the Scenes", with the goal of showing how we used Python to abstract on top of our HTTP API. I started with an overview of Google Wave and a quick look at Wave's core technology — the <a href="http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model">conversation model</a> and <a href="http://wave-protocol.googlecode.com/hg/whitepapers/operational-transform/operational-transform.html">operational transformation</a> algorithm — so that everyone in the room would be comfortable with me talking about blips, wavelets, operations, and the like. Then I went deep into the robots API, explaining the <a href="http://code.google.com/apis/wave/extensions/robots/protocol.html">JSON-RPC protocol</a> between the Wave server and robots, and showing how the Python client library serializes the JSON into Python objects, how it lets developers register for events, and how it signs outgoing requests using OAuth. I then explained how we designed the client library to be hosting-provider-agnostic, and live demoed <a href="http://pamelafox-samplecode.googlecode.com/svn/trunk/djangobot/">a robot</a> that I created using the Django framework on a slicehost node. I finished with a summary of the most important features of the client library — versioning, automation, authentication, flexibility, and <a href="http://faassen.n--tree.net/blog/view/weblog/2005/08/06/0">being Pythonic</a>.</p>
<p>But, hey, if all that sounds interesting to you, you don't have to read about it -- you can watch it! Check out the <a href='http://blip.tv/file/3841401'>video here</a>, and the <a href='http://prezi.com/_p_ufchsw8wc/wave-robots-api-behind-the-scenes/'>slides here</a>. If you have any questions after watching, just head over to our <a href='http://code.google.com/apis/wave/forum.html'>Google Wave API forum</a>.</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-55909990036731049322010-07-05T17:10:00.000-07:002020-07-15T16:39:31.917-07:00Developers Wanted: Help create an open source Wave-based forum<p><span style='font-style:italic;'>David Crane is an external Wave developer, involved in the development of the <a href='http://googlewave.blogspot.com/2010/01/debatewise-global-youth-panel-waving-on.html'>Debatewise extension</a>. We've invited him to post on this blog to share his vision for an open source project.</span></p>
<p>A few months ago, the Google Wave team open-sourced the code underlying <a href='http://code.google.com/p/forum-botty/'>Forum Botty</a>, the robot that is powering the <a href='http://code.google.com/apis/wave/forum.html'>Wave API forum</a>. We want to continue developing this code base into a powerful and generic extension for running forums in wave, and we're hoping that other developers like you will join us in this project.</p>
<p>Google Wave offers a number of benefits over traditional forum software, with just its native functionality. However, by incorporating some of the tried-and-tested features from forums into a robot, we could turn Google Wave into the ultimate platform for forum-based discussion.</p>
<p>A forum could be a killer app for Wave. It’s a tool that people already use in huge numbers for specific purposes, are used to keeping separate to their email, and will dip in and out of as required. Wave is similar enough for them to jump in quickly and different enough for them to get, and be hooked by, the benefits. A forum removes the need for people to find things to use Wave for and means they could use it even if none of their friends did. Wave could enhance and improve upon some of the most important features of a forum and through acclimatisation, will encourage them to use it for a world of other purposes.</p>
<p>There are three specific areas we believe need developing</p>
<p><span style='font-weight:bold;'>Goal</span>: Allow people to coalesce around a subject of their choosing and help them find Waves of interest <br />
<span style='font-weight:bold;'>Tasks</span>: Group waves around subject areas. List the following alongside each Wave title: the total number of blips in the wave (including read/unread), total number of views, date/time of last post and who made the post. Later add ways of rating, sorting and categorising the Wave.</p>
<p><span style='font-weight:bold;'>Goal</span>: Encourage and reward participation in the conversations<br />
<span style='font-weight:bold;'>Tasks</span>: Add karma mechanisms, applause and trophies so Waves, blips and users can be rated. Incorporate tiered participation levels and privileges (eg StackOverflow).</p>
<p><span style='font-weight:bold;'>Goal</span>: Develop trust mechanisms so people can determine who to rely upon or ignore <br />
<span style='font-weight:bold;'>Tasks</span>: Link waves with Google Profiles (or other profiles), display the user’s trophy cabinet, list all posts by user and their ranking in the community</p>
<p>We’re looking for Python, Java and Javascript developers, QA testers and anyone with an interest in forum software, community building and online discussion. All software will be licensed under Apache 2.0, the same open source licence that Google Wave uses.</p>
<p>This project is organised by <a href='http://Debatewise.org'>Debatewise.org</a>, a non-profit debating web site whose goal is to be the Wikipedia of debate. Anyone can create a debate on any subject they like and anyone can edit and strengthen that debate. In this way and over time the debates become stronger, more definitive and an ever-greater resource for anyone looking to make up their mind.</p>
<p>If you're interested in joining the project, please wave me at dh.crane@googlewave.com.</p></p>
<span class="post-author">Posted by David Crane, Debatewise</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-42699019549302067142010-06-24T07:31:00.000-07:002020-07-15T16:39:31.628-07:00Wave Federation Keeps Growing: Rich text editor is open source<p>As you may have heard before, the <a href='http://www.waveprotocol.org/'>Google Wave Federation Protocol</a> is an emerging open protocol for improving communication and collaboration across the web -- not just in a single product. To further propel the community, as part of Google I/O, we open sourced another significant chunk of Google Wave production code (now totaling more than 200,000 lines of code released), including: the in-browser rich text editor, the wave model, and the concurrency control mechanism.</p>
<p>This code release introduces a simple web client for FedOne, which enables you to bring up your own browser-based client running against the FedOne backend, which can then federate over to <a href='http://WaveSandbox.com'>WaveSandbox.com</a>. The web client communicates with the FedOne server using an emerging <a href='http://wave-protocol.googlecode.com/hg/whitepapers/client-server-protocol/client-server-protocol.html'>WebSocket-based client/server protocol</a>, with the initial documentation in the whitepaper under review. There is even work going on to make an <a href='http://code.google.com/p/wave-client-for-emacs/'>Emacs client for wave</a> using this emerging client/server protocol. To get started with your own instance, please read a recent forum post: <a href='http://groups.google.com/group/wave-protocol/browse_thread/thread/fa5e530b29d9215f'>exploring the simple web client</a>, and you may also be interested in reading the <a href='http://code.google.com/p/wave-protocol/wiki/WaveModelCodeWalk'>wave model code walk-through</a>.</p>
<p>There is a growing community of wave providers building on wave technology and the Google Wave Federation Protocol, including SAP StreamWork (demo below, and you can read more about <a href='http://decisionvelocity.net/2010/05/19/watch-that-stream-become-a-wave/'>SAP StreamWork and the wave protocol</a>), Novell Pulse (<a href='http://www.novell.com/communities/node/11233/guest-post-novell-pulse-and-google-wave-demonstrating-inter-company-collaboration'>here's a demo</a>), ProcessOne's <a href='http://www.process-one.net/en/blogs/article/waveone_a_wave_server_by_processone/'>OneWave</a>, <a href='http://wave-vs.net'>wave-vs.net</a><a href='http://pygowave.net/'>,</a> and <a href='http://AboutPeers.com'>AboutPeers.com</a>. The US Navy also put out a call for proposals earlier in the year (<a href='http://www.acq.osd.mil/osbp/sbir/solicitations/sttr10A/navy10A.pdf'>Navy Wave RFP</a> [PDF]). Additionally, there are several open source projects in development as well: <a href='http://pygowave.net/'>PyGoWave</a>, <a href='http://code.google.com/p/qwaveclient/'>QWave</a>, <a href='http://code.google.com/p/arwave/'>ARWave</a>, and <a href='http://github.com/danopia/ruby-on-sails'>Ruby on Sails</a>.</p>
<p>Here's a video showing SAP StreamWork federating with <a href='http://WaveSandbox.com:'>WaveSandbox.com</a>:</p>
<p>
<object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/3HuLnoxxz5U&hl=en_US&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/3HuLnoxxz5U&hl=en_US&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>This is all driven by the desire to let users work together no matter what system they may be using. For more information about building your own wave provider, feel free to check out the <a href='http://code.google.com/events/io/2010/sessions/open-source-wave-provider.html'>session video and slides</a> from Google I/O 2010.</p>
<p>Please join us in <a href='http://groups.google.com/group/wave-protocol'>the forum</a> if you'd like to get involved.</p>
<p><span class="post-author">Posted by J.D. Zamfirescu, and Anthony Baxter, Software Engineers, Google Wave</span></p>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-8122836087016039842010-06-21T02:24:00.000-07:002020-07-15T16:39:32.394-07:00Running a Contest in Wave: Behind the Scenes<p>Back in April, we ran <a href='http://mashable.com/2010/03/09/google-wave-api-challenge/'>a challenge</a> together with Mashable, asking developers to make fun and useful extensions. We saw a lot of great extensions come out of it, like <a href='https://wave.google.com/wave/waveref/googlewave.com/w+zxOw37ZkSB'>WaveTube</a>, <a href='https://wave.google.com/wave/waveref/googlewave.com/w+rqNRqrZkk6'>Poker</a>, <a href='https://wave.google.com/wave/waveref/googlewave.com/w+FFJnwrZkXn'>Wave Transformer</a>, and more. Now, I want to take some time out to explain how an <a href='http://wave-samples-gallery.appspot.com/about_app?app_id=218001'>open-sourced Wave robot</a> made it possible to run the contest entirely in Wave, from the submission to the voting.</p>
<h2>1) Submission Wave</h2>
<p>
<span style='font-weight:bold;'>The process is all kicked off by the creation of a new submission wave.</p></span>
<p>To submit an entry, developers would install the Mashable Submitty extension. They then clicked 'New extension submission' in the New Wave menu, and watched a robot populate the new wave with a submission template. The robot does this by responding to the <a href='http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html#events.WaveletSelfAdded'>WaveletSelfAdded</a> event, and appending text, form elements, and a gadget. The text describes the submission process, the form input elements let the developers give the robot information in a structured way, and the gadget manages the flow of submission.</p>
<p>
<a href="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8yRz3FvAI/AAAAAAAADZA/bFRkOCxa4oI/s1600/mashablesubmitty_step1.png"><img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 500px;" src="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8yRz3FvAI/AAAAAAAADZA/bFRkOCxa4oI/mashablesubmitty_step1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485158152720989186" /></a>
</p>
<h2>2) Installer Checking</h2>
<p>
<span style='font-weight:bold;'>The robot helps automate some of the more tedious aspects of the review process, like checking an installer is valid.</span>
</p>
<p>
When the developer is filling in the wave, they specify the URL of the <a href='http://code.google.com/apis/wave/extensions/installers/index.html'>installer XML</a> in one of the input elements. When the robot sees a URL in that field, it grabs the XML, and parses it to look for all the required fields. If there are any errors, it reports them in an inline blip, and if not, it inserts the <a href='http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html#element.Installer'>installer element</a> inside that blip. By doing this, the reviewers can easily install the extension from inside the wave.</p>
<p>
<a href="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8yfI1oroI/AAAAAAAADZI/XD1WkSWrZqY/s1600/mashablesubmitty_installerchecking.png"><img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 500px;" src="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8yfI1oroI/AAAAAAAADZI/XD1WkSWrZqY/mashablesubmitty_installerchecking.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485158381690334850" /></a>
</p>
<h2>3) Workflow Gadget</h2>
<p>
<span style='font-weight:bold;'>The workflow gadget helps manage the sequence of steps, and let some participants move the sequence forward.</span>
</p>
<p>When the wave is first created, the only participants are the developer and the robot. When the developer is done filling out the information, they click "Share with Reviewers" in the gadget, which prompts the robot to add the review team Google Group and tag the wave with status-review. At that point, the gadget shows different options depending on who's viewing it. For the developer who submitted the extension, the gadget explains that the wave is currently shared with the team and will be responded to soon. For the admins of the review process, the gadget provides a "Approve for Gallery" button. When an admin clicks that button, the robot first checks that the event actually came from an admin (just in case someone's simulated the button click in javascript) and then kicks off the process to add the extension to the gallery.</p>
<p>
<a href="http://4.bp.blogspot.com/_T1lquhCmKo8/TB8ypxCXs9I/AAAAAAAADZQ/qG7xLxYhOk0/s1600/mashablesubmitty_workflowall.png"><img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 500px;" src="http://4.bp.blogspot.com/_T1lquhCmKo8/TB8ypxCXs9I/AAAAAAAADZQ/qG7xLxYhOk0/mashablesubmitty_workflowall.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485158564279858130" /></a>
</p>
<h2>4) Gallery Waves</h2>
<p><span style='font-weight:bold;'>The robot automates the process of creating individual waves that are rich in content, and of creating one central table of contents wave.</span></p>
<p>After the extension is approved, the robot starts by creating an individual wave about the extension - inserting the title, description, installer, a ratings gadget, and a sharing gadget. Since gadgets don't have access to the wave content around them, the robot injects the extension name into the state of the sharing gadget so users can easily tweet about it (e.g. "Checking out Requesty- <a href='http://www'>http://www</a>..."). Next, the robot fetches the table of contents wave using the <a href='http://code.google.com/apis/wave/extensions/robots/operations.html#ActiveRobotAPI'>Active API</a> and appends an image and links for the new extension.</p>
<p>
<a href="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8ywfJz3vI/AAAAAAAADZY/uglg2aHD0uI/s1600/mashablesubmitty_gallerydiscuss.png"><img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 500px;" src="http://2.bp.blogspot.com/_T1lquhCmKo8/TB8ywfJz3vI/AAAAAAAADZY/uglg2aHD0uI/mashablesubmitty_gallerydiscuss.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5485158679738310386" /></a>
</p>
<p>All in all, the Submitty extension helps automate a multi-step process in Wave while still allowing for freeform discussion. In the submission waves, we would often go back and forth with the submitter when trying out the extension and start up private replies to discuss the status of the extension with just the reviewers. In the gallery waves, wave users would report bugs and request features, and on the <a href='https://wave.google.com/wave/waveref/googlewave.com/w+QQ_p0LZkbD'>discussion wave</a> for the most popular extension, Mr. Ray, they even got into a passionate discussion about the future of wave.</p>
<p>If you're interested in running a contest in wave or employing a similar workflow for your own use, check out the code for <a href='http://wave-samples-gallery.appspot.com/about_app?app_id=218001'>Mashable Submitty</a> from the samples gallery. Let us know in <a href='http://code.google.com/apis/wave/forum.html'>the forum</a> if you have any questions.</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-34401873198869266462010-06-17T17:42:00.000-07:002020-07-15T16:39:31.363-07:00Highlights from the Google I/O Wave Developer Sandbox<p>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_T1lquhCmKo8/TBrC5y1bsQI/AAAAAAAADYo/jzYLrJK1eck/s1600/19-12_41_40-01-IMG_0092.JPG"><img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 140px; height: 160px;" src="http://3.bp.blogspot.com/_T1lquhCmKo8/TBrC5y1bsQI/AAAAAAAADYo/jzYLrJK1eck/s400/19-12_41_40-01-IMG_0092.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5483909794431217922" /></a>
We recently <a href='http://googleblog.blogspot.com/2010/05/happy-1st-birthday-google-wave.html'>celebrated Google Wave's 1st Birthday</a> and <a href='http://googlewavedev.blogspot.com/2010/05/google-wave-platform-updates-at-io-see.html'>announced several API and protocol updates</a> at Google I/O. Along with that we invited 16 developer groups to showcase their Wave extensions and integrations as part of the <a href='http://code.google.com/events/io/2010/sandbox.html#Wave'>Google Wave Developer Sandbox</a>. We've been amazed at the many extensions and product integrations that developers have built eversince we launched Wave and we wanted to share with the public what were showcased at I/O:</p>
<p><b>Extensions:</b><br />
<ul>
<li>
<a href='http://rucksack.com/'>Columbus Internet</a> showcased <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252Bl_7wqbZkDA'>Travel WithMe</a> and <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BH6dhkbZkFC'>Hostel WithMe</a>, their useful trip planning extensions for Wave.<br />
<li>
<a href='http://www.processwave.org'>ProcessWave</a> showcased a <a href="https://wave.google.com/wave/waveref/googlewave.com/w+0enaYrZkk ">collaborative diagram editor</a> that supports software and business process modeling with UML, BPMN and EPC.<br />
<li>
<a href='http://www.timebridge.com'>Timebridge</a> showcased a <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BWcENY7Zk4P'>web conferencing gadget</a> and a meeting planner gadget.<br />
<li>
<a href='http://www.unawave.com'>UnaWave</a> demoed a <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BzqS7G7ZkBE9'>project and task management extension</a>.<br />
<li>
<a href='http://www.withwaves.com'>WithWaves</a> demoed the <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BMEzqRrZkkr'>Browse eBay</a> and <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BYZcm5rZkPY'>Browse Amazon</a> extensions that enable collaborative shopping.<br />
<li>
<a href='http://Wave.to'>Wave.to</a> showcased a lightweight wave client for the Android platform.
<br />
<li><a href='http://www.conceptdraw.com/en/'>CS Odessa</a> demoed their <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery%2540googlegroups.com,restored:wave:googlewave.com!w%252BaOZmbbZk2f'>brainstorming and mind maping extension</a>.<br />
<li>
<a href='http://caseish.com/'>Caseish</a> showcased their collaborative case management tool.<br />
<li>
<a href='http://www.6rounds.com'>6Rounds</a> showcased their interactive <a href='https://wave.google.com/wave/#minimized:nav,minimized:contact,minimized:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BR8RbkhA9I'>video conferencing gadget</a>.<br />
<li>
<a href='http://www.prezi.com'>Prezi</a> demoed their collaborative presentation editor.<br />
<li>
<a href='http://www.twilio.com'>Twilio</a> demoed their phone conferencing robot</p>
</ul>
<p><b>Product Integrations:</b><br />
<ul>
<li>
<a href='http://www.salesforce.com'>Salesforce</a> demoed their wave integration inside Chatter, their collaborative product, and introduced the <a href="http://blog.sforce.com/sforce/2010/05/announcing-the-forcecom-toolkit-for-google-wave.html">Force.com Toolkit for Google Wave</a>.<br />
<li>
<a href='http://www.oracle.com'>Oracle</a> demoed their wave integration inside their CRM On Demand product.</p>
</ul>
<p><b>Federation:</b><br />
<ul>
<li>
<a href='http://www.sap.com'>SAP</a> demoed their <a href="http://decisionvelocity.net/2010/05/19/watch-that-stream-become-a-wave/">new StreamWork product</a> built with on the wave federation protocol.<br />
<li>
<a href='http://www.process-one.net/en/'>ProcessOne</a> demoed their WaveOne XMPP server built with the wave federation protocol.<br />
<li>
<a href='http://www.novell.com'>Novell</a> showcased <a href="http://www.novell.com/communities/node/11233/guest-post-novell-pulse-and-google-wave-demonstrating-inter-company-collaboration">Pulse</a>, their collaborative product built with the wave federation protocol.</p>
</ul>
<p>To see videos of many of the above extensions in action and read more about them, check out our <a href='http://wave.google.com/extensions.html'>featured extension page</a>. We hope these extensions and product integrations will inspire you to build more things on Google Wave. As always, we love to hear from developers. If you have feedback on our APIs or want to build extensions, <a href='http://code.google.com/apis/wave/'>read our guide</a> and drop us a line in the <a href='http://code.google.com/apis/wave/forum.html'>Wave APIs forum</a>. If you're interested in the Wave Protocol, check out <a href='http://www.waveprotocol.org'>http://www.waveprotocol.org</a> and join the <a href='http://groups.google.com/group/wave-protocol/'>Wave Protocol discussion forum</a>.</p>
<br>
<span class="post-author">Posted by Amanda Surya, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-159298711726442852010-05-31T17:17:00.000-07:002020-07-15T16:39:31.047-07:00Make your waves easier to find with savedSearchHook<p>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.</p>
<p>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").</p>
<p>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:</p>
<pre class="code">
<savedSearchHook name="Google IO 2010" query="group:io2010-wave@googlegroups.com tag:io2010"></savedSearchHook>
</pre>
<p>For another example, the <a href="https://wave.google.com/wave/waveref/googlewave.com/w+V3ZKIrZkMt">Tasky</a> developer provides users with a <a href='https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252B0iUY5fqtC'>"Tasky Extras"</a> extension that adds a set of hooks for finding tasks in various stages of progress:</p>
<pre class="code">
<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>
</pre>
<p>For more information, read through the <a href='http://code.google.com/apis/wave/extensions/installers/index.html#Hooks'>extension installer documentation</a>. Stop by <a href='http://code.google.com/apis/wave/forum.html'>the forum</a> to ask any questions or to share your use of the feature.</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-62471717203186085052010-05-19T09:41:00.000-07:002020-07-15T16:39:31.996-07:00Google Wave platform updates at I/O: See what you can build now!<p>When we first launched Google Wave in developer preview mode at last year's I/O, thousands of developers started playing around on <a href='http://WaveSandbox.com'>WaveSandbox.com</a>, experimenting with the APIs, and checking out the preliminary set of specs and whitepapers on <a href='http://waveprotocol.org'>waveprotocol.org</a>. 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.</p>
<p>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.</p>
<p>Here's a quick recap of the last few months of API releases:</p>
<ul>
<li>We introduced (and iterated on!) an <a href='http://googlewave.blogspot.com/2010/05/discover-your-favorite-extension-today.html'><span style='font-weight:bold;'>extensions gallery</span></a><span style=''>, making it easier for users to find extensions.
<li>We launched <a href='http://googlewavedev.blogspot.com/2010/03/introducing-robots-api-v2-rise-of.html'></span><span style='font-weight:bold;'>Robots API v2 and the Active Robots API</span></a><span style=''>, making it easier to integrate with external systems. That release, along with <a href='http://mashable.com/2010/04/21/google-wave-api-contest-winners/'>Mashable's Google Wave API Contest</a>, resulted in robots like Ferry for Google Docs integration, Mr. Ray for email integration, and Salesforce.com's just-announced <a href='http://Force.com'>Force.com</a> Toolkit for for the Google Wave APIs, which shows how developers can bring Google Wave together with the <a href='http://Force.com'>Force.com</a> platform and Salesforce Chatter.
<li>We released <a href='http://googlewavedev.blogspot.com/2010/04/embed-api-improvements-viewing-public.html'></span><span style='font-weight:bold;'>anonymous read-only access for embedded waves</span></a><span style=''>, making Wave a more compelling platform for publishing content and discussions on the web, and leading to some <a href='http://www.fastcompany.com/1639697/google-wave-preps-to-get-its-wow-back'>live blogging</a> experiments.
</ul>
<p>And here's what we've announced at I/O:</p>
<ul>
<li></span><span style='font-weight:bold;'>Run robots on any server</span><span style=''> -- 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. <a href='http://code.google.com/apis/wave/extensions/robots/registration.html'>Read more in the docs.</a>
<li></span><span style='font-weight:bold;'>Use a robot to</span><span style=''> </span><span style='font-weight:bold;'>manipulate and retrieve attachments</span><span style=''> 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 <a href="http://code.google.com/events/io/2010/sessions/google-wave-media-apis.html">I/O talk</a>, a wave -> PowerPoint exporter. <a href='http://code.google.com/apis/wave/extensions/robots/attachments.html'>Read more in the docs</a>.
<li></span><span style='font-weight:bold;'>Use the</span><span style=''> </span><span style='font-weight:bold;'>"Wave This"</span><span style=''> 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 <a href='https://chrome.google.com/extensions/detail/fdgmdpiobhnblhnhlmngalmeobbmofbm'>Wave This Chrome Extension</a>. <a href='http://code.google.com/apis/wave/wavethis/'>Read more in the docs</a>.
<li></span><span style='font-weight:bold;'>Fetch waves on behalf of users with Wave data APIs</span> to build lightweight clients or apps like what we just launched, the official <a href='https://chrome.google.com/extensions/detail/ihbcpkcoopncbdefilgpnlncpeajenmk?hl=en'>Google Wave Notifier Chrome Extension</a>. <a href='http://code.google.com/apis/wave/extensions/wavedataapi/index.html'>Read more in the docs.</a>
</ul>
<p>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 <a href='http://googlewavedev.blogspot.com/2010/03/novell-pulse-and-google-wave.html'>Novell Pulse is working on</a>, 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, <a href='http://decisionvelocity.net/2010/05/18/watch-that-stream-become-a-wave/'>SAP announced</a> 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.</p>
<p>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 <a href='http://www.google.com/apps/intl/en/business/wave.html'>enable Wave for their domain</a>. 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!</p>
<p>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.</p>
<p>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.</p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations, Google Wave Team</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-90266521060521344502010-05-12T11:34:00.000-07:002020-07-15T16:39:32.579-07:00New features for Robots: Bundled Annotations, Inline Blips, Read-Only Roles<p>Over the last few releases, we've been rolling out incremental improvements to the <span style='text-decoration:underline;'>robots API</span><span style=''>, based on the feedback from all of you developers. For those of you who haven't been reading the <a href='http://code.google.com/apis/wave/forum.html'>forum</a> waves and changelogs, here's a summary of the new features:</p>
<p></span><span style='font-weight:bold;'>Bundled Annotations</span><span style=''>:</p>
<p>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:<br /></span>
<pre class="code">
blip.append('New text')
blip.range(len(blip.text), len(blip.text)+8).annotate('style/fontWeight', 'bold')
</pre>
<span style=''><br />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:<br /></span>
<pre class="code">
blip.append('New Text', bundled_annotations=[('style/fontWeight', 'bold')])
</pre>
<p><span style=''>For more information, read the <a href='https://wave.google.com/wave/waveref/googlewave.com/w+WtMrv2glD'>announcement wave</a>.</p>
<br/>
<p></span><span style='font-weight:bold;'>Inline Blip Positions:<br /></span><span style=''><br />Several robots produce alternate rendering of waves, like <a href='http://wave.to/projects/mr-ray'>Mr. Ray</a> and its <a href="http://wave.to/google-io-2010/wave-lite">"Wave Lite"</a> 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 <a href='http://wave-robot-python-client.googlecode.com/svn/trunk/pydocs/index.html#blip.Blip.inline_blip_offset'>Python</a> or <a href='http://wave-robot-java-client.googlecode.com/svn/trunk/doc/com/google/wave/api/Blip.html#getInlineBlipOffset()'>Java reference</a>.</p>
<br/>
<p></span><span style='font-weight:bold;'>Read Only Roles:<br /></span><span style=''><br />A few months ago Google Wave <a href='http://googlewave.blogspot.com/2010/01/new-features-read-only-and-restore.html'>launched the ability to have "Read-only" participants</a>, 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:<br /></span>
<pre class="code">
new_wave.participants.set_role('public@a.gwave.com', wavelet.Participants.ROLE_READ_ONLY)
</pre>
<p><span style=''>For more information, read the <a href='https://wave.google.com/wave/waveref/googlewave.com/w+l_zuOVEmB'>announcement wave</a>.</p>
<p>Check out the new features, and let us know in the <a href='http://code.google.com/apis/wave/forum.html'>forum</a> how you're using them in your robots.</span></p>
<br>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-35795053612499413572010-04-30T10:32:00.000-07:002020-07-15T16:39:31.417-07:00Embed API Improvements: Viewing public waves without a wave account<p>We recently introduced a new API for embedding waves, which includes a powerful new feature: anonymous, read-only access to public waves. Prior to this launch, webmasters could embed waves into their sites, but visitors could only see the content of the embedded wave if they had a Google Wave account, were logged in, and had access to that particular wave. Now, all waves with public@a.gwave.com (or a properly <a href='http://www.google.com/support/wave/bin/answer.py?answer=168248'>configured Google Group</a>) as a participant can be embedded in a website so their content can be read by those who don't have a wave account (or simply aren't logged in).</p>
<p>You can view an example of this below or see it in action by visiting the <a href='http://code.google.com/apis/wave/extensions/robots/python-walkthrough.html'>KitchenSinky walkthrough documentation</a>.</p>
<br>
<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_TinOg0_YgIQ/S9sWhcS-eKI/AAAAAAAATCA/NMUoN9_N1gs/s1600/mashable-embed2.jpg"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 218px;" src="http://1.bp.blogspot.com/_TinOg0_YgIQ/S9sWhcS-eKI/AAAAAAAATCA/NMUoN9_N1gs/s320/mashable-embed2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5465987336531507362" /></a></p>
<br>
<p>The new embed API also provides some optional parameters, like the ability to display participants in the the header panel or to include the toolbar. With an embedded wave, users are able to discuss topics in realtime and even catch up by playing back the exchange. Additionally, it provides a mechanism for staying involved in the conversation without requiring the user to constantly check the host site for updates.</p>
<p>To get started with the API, please visit the <a href='http://code.google.com/apis/wave/embed/guide.html'>tutorial</a> and consult the <a href='http://code.google.com/apis/wave/embed/reference.html'>API reference</a>.</p>
<p>If you're just interested in quickly getting a wave embedded on your site, you can simply make the wave and then get the code to paste into your site using the new <a href='http://www.google.com/webelements/wave/'>Wave Element</a>.</p>
<p>As you're diving in, here are a few ideas for ways to make use of embedded waves:</p><ul><li>Use a wave to do live-blogging (or "live-waving" as we call it) about breaking news. You can provide up-to-the-second commentary for an election, earnings call, sporting event, or product announcement -- and even combine points of view from multiple bloggers into a single wave.</li><li>Display realtime RSVPs to an event with the Yes/No/Maybe gadget. Participants can also add comments for everyone to see.</li><li>Publish documentation or other articles via embedded waves. It's easy to update and readers can simply follow the wave to stay in the loop on changes. For example, we publish the <a href='http://code.google.com/p/google-wave-resources/wiki/WaveAPIsChangeLog'>Wave API release changelog</a> as an embedded wave.</li><li>Take advantage of the <a href='http://code.google.com/apis/wave/extensions/robots/operations.html#ActiveRobotAPI'>active robots API</a> and create waves programmatically for embedding in a variety of sites, such as a private messaging system for a social network, a shared collaborative workspace in a productivity tool, or as a customer support system.</p></li></ul>
<p>We hope you find this new API and this new level of access useful, and we have more improvements to the embed API on the way. For example, at the moment, embedded waves do not work in Internet Explorer (even with Google Chrome Frame), but we will be resolving that issue.</p>
<p>We look forward to seeing what you come up with. If you have questions or comments, please discuss in the <a href='http://code.google.com/apis/wave/forum.html'>forum</a>.</p>
<br>
<span class="post-author">Posted by Dhanji R. Prasanna, Software Engineer, Google Wave team</span>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-28995274337097379872010-04-27T10:18:00.000-07:002020-07-15T16:39:31.258-07:00The API v2 Robots Have Risen: Check them out!<p>We launched the <a href='http://googlewavedev.blogspot.com/2010/03/introducing-robots-api-v2-rise-of.html'>new Robots API (v2)</a> last month, and since then, we've seen a a slew of new and interesting robots from Google Wave developers -- proving that robots can now be used in more ways than ever before.</p>
<p>We want to share some examples here, to give you a taste of the possibilities:</p>
<br/>
<table>
<tr>
<td><img src="http://pushyrobot.appspot.com/assets/icon.png" align="left" style="margin: 5px" width="100" height="100">
</td>
<td>
<span style='font-weight:bold;'>Pushy</span>: This robot accepts any form of HTTP post and adds the content as a new message on the wave. It has special handling for the post-commit hooks on github and googlecode. The developer created this robot because he uses Google Wave at his company, and he wanted a way to have waves be updated based on their github project activity I've personally been using it to subscribe to updates on our google-wave-resources project. You can check out the source code from the <a href='http://wave-samples-gallery.appspot.com/about_app?app_id=114001'>samples gallery</a>, and install it from the <a href='https://wave.google.com/wave/?pli=1#restored:search:group%253Agoogle-wave-extension-gallery%2540googlegroups.com,restored:wave:googlewave.com!w%252B-sIsArZkMU.2'>gallery wave</a>.</p>
</td>
</tr>
<tr>
<td>
<img src="http://docxwave.appspot.com/profile/avatar.png" align="left" style="margin: 5px" width="100" height="100">
</td>
<td>
<span style='font-weight:bold;'>docXwave</span>: This robot imports .docx (Microsoft Word) files into a wave, converting the formatting and even tables, using a table gadget. The developer is a part of Plutext, a group of developers working on various Microsoft Word related efforts and an open source OpenXML file converter python module. You can install it from the <a href='https://wave.google.com/wave/#restored:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252BSwU9zrZkk'>gallery wave</a>.</p>
</td>
</tr>
<tr>
<td>
<img src="http://ferrybot.appspot.com/gadget/thumb2.png" align="left" style="margin: 5px" width="100" height="100">
</td>
<td>
<span style='font-weight:bold;'>Ferry</span>: This robot exports Google waves to Google documents, letting you specify if you want to continually export, and if you want to export everything or just the root blip. This is useful for people that want to export to a Google doc for the printing, exporting, or extra formatting capabilities. You can install it from the <a href='https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252B19YUd7ZkLU'>gallery wave</a>.
</td>
</tr>
<tr>
<td>
<img src="http://robot-robot.appspot.com/assets/icon.png" align="left" style="margin: 5px" width="100" height="100">
</td>
<td>
<span style='font-weight:bold;'>robot-robot</span>: The robot lets you write code inside a wave, and run that code as a robot on another wave. This means that you can get started playing around with the APIs, without having to setup an App Engine account and your own project. I'm looking forward to using it for live demos and codelabs. You can check out the source code from the <a href='http://wave-samples-gallery.appspot.com/about_app?app_id=164001'>samples gallery</a>, and install it from the <a href='https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252BCPKVVbZkBsC'>gallery wave</a>. You might also be interested in "<a href='http://as-a-robot.appspot.com/'>as-a-robot</a>", another robot-writing robot from a different developer. Great developers think alike!</p>
</td>
</tr>
<tr>
<td>
<img src="http://mr-ray.appspot.com/web/media/icon.png" align="left" style="margin: 5px" width="100" height="100">
</td>
<td>
<span style='font-weight:bold;'>Mr. Ray: </span>This robot makes it possible to use wave with people not on wave - you add their emails via a gadget, and the robot emails them a static copy of the wave. When they reply in the static interface, it syncs the reply back into the wave. It's a fantastic use of the proxying for feature in the new API, and of course, the active API. It's also incredibly useful - I'm using it to plan an event with high school friends, who are all highly addicted to their email system of choice. You can install Mr. Ray from the <a href='https://wave.google.com/wave/?pli=1#restored:wave:googlewave.com!w%252BmIb3SrZkcw'>gallery wave</a>.</p>
</td>
</tr>
</table>
<p>If you're working on your own API v2 robots, be sure to share them in <a href='http://code.google.com/apis/wave/forum.html'>the forum</a> and in the <a href='http://code.google.com/apis/wave/submitextension.html'>extensions gallery</a>. We look forward to seeing what your creative minds come up with.</p>
<br/>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-66546067434070006382010-04-11T12:52:00.000-07:002020-07-15T16:39:32.130-07:0010 New Articles; 10 More Ways to Learn the Google Wave APIs<p>We've added 10 new articles to the <a href='http://code.google.com/apis/wave/articles.html'>documentation</a>, written by both the Google Wave API team and developers like you, and we hope these articles will give you a new way of understanding how to use the APIs.</p>
<p>After launching the new robots API a month ago, robot developers have already written a bunch of articles about using it in various ways, from developing in Eclipse to integrating with Salesforce:</p>
<ul>
<li>
<a href='http://wave.to/guides/simple-robots-v2'><span style='color:rgb(0, 0, 204);font-weight:bold;'>Simple Guides for Robot API v2</span></a><span style='font-weight:normal;'>: A series of sample robots that demonstrate accomplishing basic tasks in the new API. All samples are both in Java & Python.</span>
</li>
<li>
<a href='http://www.vogella.de/articles/GoogleWave/article.html'><span style='font-weight:bold;color:rgb(0, 0, 204);'>Google Wave Java Robot Tutorial</span></a><span style='font-weight:normal;'>: Gives a detailed explanation of creating a basic Java robot, and then shows how to extend the robot to respond to commands.
</span>
<li>
<a href='http://googlewaveexperiments.wordpress.com/2010/03/09/episode-1-writing-your-first-google-wave-robot-using-robot-api-v2/'><span style='color:rgb(0, 0, 204);font-weight:bold;'>Writing your First Google Wave Robot with Eclipse</span></a><span style='font-weight:normal;'>: Shows the steps of creating a basic Java Wave robot using the Eclipse IDE.
</span>
</li>
<li>
<a href='http://d3developer.com/2010/04/01/syncing-google-wave-with-salesforce-chatter/'><span style='color:rgb(0, 0, 204);font-weight:bold;'>Writing a Salesforce Chatter Robot for Google Wave</span></a><span style='font-weight:normal;'>: Shows how to sync between Google Wave and Salesforce chatter, displaying Salesforce posts in a wave, and syncing wave replies to the Salesforce posts. Uses the Java SDK.</span>
</li>
<li>
<a href='https://wave.google.com/wave/#restored:wave:googlewave.com!w%252B1hW-euxPC'><span style='color:rgb(85, 26, 139);font-weight:bold;'>Using the Deferred Task Queue Library with the Python Wave Robots Library</span></a><span style='font-weight:normal;'>: Explains how to use the deferred library in the App Engine Python SDK to defer robot operations, like creating new waves or performing many operations in a row.</span>
</li>
<li>
<a href='https://wave.google.com/wave/#restored:wave:googlewave.com!w%252B04QrF_rEE'><span style='color:rgb(85, 26, 139);font-weight:bold;'>Responding to User Selection</span></a><span style=''>: Describes how to use the annotateSelection action in extension installers to create extensions, and more specifically, robots, that respond to and process user-selected text.
</li>
</ul>
<p>Meanwhile, gadget developers have been spreading their knowledge on writing gadgets, with articles on everything from Flex to GWT:</p>
<ul>
<li>
<a href='http://www.ibm.com/developerworks/library/os-googlewave/index.html'></span><span style='color:rgb(0, 0, 204);font-weight:bold;'>Developing gadgets for Google Wave:</span></a><span style='font-weight:normal;'> Explains what a wave gadget is, and how to develop a basic gadget.
</span>
</li>
<li>
<a href='http://www.masteringwave.com/2010/03/5-easy-steps-to-create-a-google-wave-gadget-using-flex/'><span style='color:rgb(85, 26, 139);font-weight:bold;'>5 Easy Steps To Create A Google Wave Gadget Using Flex</span></a><span style='font-weight:normal;'>: Presents a 5-part video tutorial to creating a counter gadget using Flex (Flash Builder and Flex 4, specifically).</span>
</li>
<li>
<a href='http://thezukunft.com/2010/02/08/a-wave-gadget-robot-using-gwt-2-0-and-google-app-engine-part-1/'><span style='font-weight:bold;color:rgb(85, 26, 139);'>Building a Wave Gadget Using GWT 2.0 & App Engine</span></a><span style='font-weight:normal;'>: Steps through the creation of a simple message-sharing gadget using GWT, App Engine, and the cobogwave GWT wrapper for the Gadgets API.
</span>
</li>
<li>
<a href='http://thezukunft.com/2010/02/10/waveconnector-for-gwt-local-testing-and-turnkey-gadget-development/'><span style='color:rgb(85, 26, 139);font-weight:bold;'>WaveConnector for GWT</span></a><span style=''>: Shows how to use the open-source WaveConnector library for developing Google Wave gadgets using GWT and testing them locally in hosted mode.
</li>
</ul>
<p>If you wrote an article yourself, please share it in the <a href='http://code.google.com/apis/wave/forum.html'>forum</a>. Happy reading!</span></p></p>
<p><span class="post-author">Posted by Pamela Fox, Developer Relations</span></p>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-78140222402226380592010-04-07T21:29:00.000-07:002020-07-15T16:39:32.288-07:00Google Wave Federation Protocol: More Docs, More Code<p>When we shipped the FedOne code to demonstrate the <a href='http://www.waveprotocol.org/'>Google Wave Federation Protocol</a>, we included some overview information and basic <a href='http://code.google.com/p/wave-protocol/wiki/Installation'>documentation</a> 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.</p>
<p>For example, Anthony Watkins wrote several articles to explain the architecture of the FedOne code:</p>
<ul><li><a href='http://www.angleofsight.com/2010/02/google-wave-federation-part-1/'>Part 1 - Audience and Prerequisites</a></li><li><a href='http://www.angleofsight.com/2010/02/google-wave-federation-part-2/'>Part 2 - Startup Process</a></li><li><a href='http://www.angleofsight.com/2010/02/google-wave-federation-part-3/'>Part 3 - Dependency Object Graph</a></li><li><a href='http://www.angleofsight.com/2010/02/google-wave-federation-part-4/'>Part 4 - Communication Interfaces</a></li><li><a href='http://www.angleofsight.com/2010/02/google-wave-federation-part-5/'>Part 5 - Wavelet Container</a></li></ul>
<p>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 <a href='http://code.google.com/p/wave-protocol/wiki/FurtherReading'>wiki page</a>. 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 <a href='http://groups.google.com/group/wave-protocol'>wave protocol discussion forum</a> and we will update the wiki as they come in.</p>
<p>Also be sure to check out the new, recently open sourced wave document model code, as announced by J.D. in the <a href='http://groups.google.com/group/wave-protocol/msg/020c84c38c3ee74b'>Google Wave Protocol Forum</a>:</p>
<blockquote> 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.</blockquote>
<p>In case you missed it, Novell Pulse recently demonstrated <a href='http://googlewavedev.blogspot.com/2010/03/novell-pulse-and-google-wave.html'>federation with Google Wave</a>.</p>
<p>Finally, be sure to visit us if you are attending Google I/O, there are some some <a href='http://code.google.com/events/io/2010/sessions.html#Wave'>great talks lined up</a>, we hope to see you there!</p>
<p><span class="post-author">Posted by Joe Gregorio, Developer Relations</span></p>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-44627888001564676142010-04-05T20:56:00.000-07:002020-07-15T16:39:31.708-07:00Developing with the Google Wave APIs - For a grade!<p>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. :)</p>
<p>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:</p>
<br>
<table>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://4.bp.blogspot.com/_T1lquhCmKo8/S7q6ZtKl7QI/AAAAAAAADRE/hVI3bnXy70g/s400/thumbnail_scrummy.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456878849296297218" /></td>
<td><span style='font-weight:bold;'>Scrummy</span>: This gadget lets you assign tasks to participants for particular "sprints", and then visualize the tasks for each sprint.
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://1.bp.blogspot.com/_T1lquhCmKo8/S7q5rwSZ8qI/AAAAAAAADQc/DW6cYTcZ5Ck/s400/thumbnail_bubbleman.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456878059860390562" /></td>
<td><span style='font-weight:bold;'>Bubble Man</span>: 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.
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://3.bp.blogspot.com/_T1lquhCmKo8/S7q593oPKBI/AAAAAAAADQs/fXlpTp8g65c/s400/thumbnail_chessroom.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456878371068651538" /></td>
<td><span style='font-weight:bold;'>Chess Room</span>: This gadget displays a "room" of 6 tables. You can pick a "table", and enter it to a game of chess against another player.
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://3.bp.blogspot.com/_T1lquhCmKo8/S7q6P9unAuI/AAAAAAAADQ8/wA8ObOi8Uqw/s400/thumbnail_notesticky.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456878681943638754" />
</td>
<td><span style='font-weight:bold;'>Note Sticker</span>: 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).
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://2.bp.blogspot.com/_T1lquhCmKo8/S7q7CvSbEoI/AAAAAAAADRM/uK3vJyKDslQ/s400/thumbnail_waveplan.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456879554240647810" /></td>
<td>
<span style='font-weight:bold;'>WavePlan</span>: This gadget lets participants select what days/hours they're available, to help in picking the best meeting time.
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://1.bp.blogspot.com/_T1lquhCmKo8/S7q5gQd3MZI/AAAAAAAADQU/i9OQxqSLyWA/s400/thumbnail_brainstormer.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456877862339948946" /></td>
<td>
<span style='font-weight:bold;'>yourBrainstormer</span>: This slick looking gadget lets you create a sequence of parent and child nodes, and to navigate amongst them.
</td>
</tr>
<tr>
<td><img style="width: 100px; height: 100px;" src="http://1.bp.blogspot.com/_T1lquhCmKo8/S7q6HJ78DfI/AAAAAAAADQ0/M-UygPVIQ7M/s400/thumbnail_langtranslate.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456878530601946610" />
</td>
<td>
<span style='font-weight:bold;'>NTI Language Translator</span>: This gadget lets you translate text using the Google AJAX Language API, and it shares the currently translated text with others in the wave.
</td>
</tr>
</table>
<p>For the complete list and links to the extensions, visit the course <a href='http://www.comp.nus.edu.sg/~cs3216/projects.html#ass2Pan'>project page</a>.</p>
<p>Many of these are still in prototype form, but some of them are already user-ready and in the extensions gallery, like the <a href='https://wave.google.com/wave/?pli=1#restored:search:group%253Agoogle-wave-extension-gallery-all%2540googlegroups.com,restored:wave:googlewave.com!w%252Bcl-Sv7ZkPA'>yourBrainstormer extension</a>, and others are in the samples gallery, like the <a href='http://wave-samples-gallery.appspot.com/about_app?app_id=109004'>Scrummy gadget</a>. 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.</p>
<p>If you are a professor and thinking of using Google Wave in your programming assignments, you can grab the <a href='http://google-wave-resources.googlecode.com/svn/trunk/articles/assignment/'>Latex</a>/<a href='http://google-wave-resources.googlecode.com/svn/trunk/articles/assignment/wave.pdf'>PDF</a> for this class assignment, and you can browse the <a href='http://code.google.com/apis/wave/mediagallery.html'>presentations gallery</a> for slides to deliver for class lectures. Let us know if you have any questions in <a href='http://code.google.com/apis/wave/forum.html'>the forum</a>.</p>
<p>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.</p>
<br/>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-70651731143210428462010-03-25T16:28:00.000-07:002020-07-15T16:39:32.209-07:00Novell Pulse and Google Wave: Demonstrating Inter-company Collaboration<p><span style="font-style:italic;">Ian Roughley is an architect on Novell Pulse, a new real-time collaboration environment for enterprises that federates with Google Wave so users of both products can work together using their tool of choice.
</span>
</p>
<p>
For Novell Pulse, it was a pretty easy decision to adopt the <a href="http://www.waveprotocol.org/">Google Wave Federation Protocol</a>. For many months before Google Wave was announced to the world, we had been working on solving exactly the same problems: how to collaborate instantly and on‑demand; how to make collaboration easier for groups; how to expedite document workflow; and how to do it all in real‑time. We had also come to many of the same conclusions, and if you look at the products side‑by‑side you can see this reflected through the interfaces. Not exactly, but certainly the big decisions.
</p>
<p>
The Google Wave Federation Protocol excited us, because for the first time since email, it provided a way for collaboration systems to cooperate in a non‑silo'dway . The promise is that each organization can choose what product to use and the communication will flow unimpeded between the different systems, in the same way that people on different email systems can send and receive messages to each other today. This is a collaboration revolution we wanted to be a part of.
</p>
<p>
From a technical perspective we've leveraged the code Google has open sourced by integrating Google Wave's <a href="http://www.waveprotocol.org/whitepapers/operational-transform">operational transformation algorithm</a> and the federation parts of the <a href="http://code.google.com/p/wave-protocol/">FedOne implementation</a> into Novell Pulse. This allowed us to quickly get the core <a href="http://www.waveprotocol.org/draft-protocol-specs/draft-protocol-spec">federation protocol</a> features working. We have developed our own editor, which provides compatibility with a large number of browsers, and provided a mapping from the <a href="http://www.waveprotocol.org/draft-protocol-specs/wave-conversation-model">Google Wave Conversation Model</a> to our own internal structure. Along with the Google Wave Federation Protocol, we also support the <a href="http://code.google.com/apis/wave/extensions/gadgets/guide.html">Wave Gadgets API</a> and are working to support the <a href="http://code.google.com/apis/wave/extensions/robots/index.html">Wave Robots API</a>. This allows extensions built by 3rd parties to work seamlessly with a mix of users on Novell Pulse and Google Wave.
</p>
<p>
Check out this video to see a business use-case of federation between Novell Pulse and Google Wave.
</p>
<object width="560" height="340"><param name="movie" value="http://www.youtube.com/v/KFaUrDFjERM&hl=en&fs=1&rel=0"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/KFaUrDFjERM&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object>
<p>
We're excited about the opportunities for open collaboration that utilizing the Google Wave Federation Protocol will bring to both the users of Novell Pulse and Google Wave, as well as a growing ecosystem of extension developers that now have broader distribution opportunities. For more information on Novell Pulse, visit <a href="http://www.novell.com/pulse">www.novell.com/pulse</a>.
</p>
<br/>
<span class="post-author">Posted by Ian Roughley, Architect, Novell Pulse</span>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-64692334762742475742010-03-13T07:10:00.000-08:002020-07-15T16:39:32.077-07:00Upcoming Wave Developer Events<p>
Now that the new Wave Robots API is launched, we're excited to spread the word about Wave to developers in all corners of the world. Please join us in one of the upcoming events:
</p>
<br/>
<b><a href="http://chigtug7.eventbrite.com/">Chicago GTUG Google Wave & Android Workshop</a></b>
<ul><li>March 13, 9-5pm</li><li>Chicago, Illinois</li></ul>
<b><a href="http://www.google.com/events/sxsw2010/hackathon.html">Google Hackathon @ SXSW Interactive</a></b>
<ul><li>March 14, 12pm</li><li>Austin, Texas</li></ul>
<b><a href="http://www.meetup.com/sfgwmg/">SF Wave Meetup</a></b>
<ul><li>March 16, 6:30pm</li><li>San Francisco, CA</li></ul>
<b><a href="http://www.novell.com/brainshare/">Novell Brainshare</a></b>
<ul><li>March 23 and March 25</li><li>Salt Lake City, Utah</li></ul>
<b><a href="http://www.googledevfest.com.mx/index.php">DevFest Mexico</a></b>
<ul><li>April 13, All day</li><li>Mexico City, Mexico</li></ul>
<b><a href="http://guest.cvent.com/EVENTS/Info/Summary.aspx?e=1ac7d186-c8f7-4005-abec-acdb5a4d251b">EJA Melbourne Forum</a></b>
<ul><li>April 21, 5pm</li><li>Melbourne, Australia</li></ul>
<span class="post-author">Posted by Pamela Fox, Developer Relations</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-25503960645968434132010-03-12T04:18:00.000-08:002020-07-15T16:39:31.180-07:00Introducing the Google Wave Extensions Gallery<p>We've just rolled out an initial version of our extensions gallery: simply look for "Extensions" in the navigation panel of <a href="http://wave.google.com/wave/">Google Wave</a>. The gallery is intended to make it easier for users to discover the fun and useful extensions you all are building with the <a href="http://code.google.com/apis/wave/">Google Wave APIs</a>.
</p>
<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_TinOg0_YgIQ/S5nZMWa7qWI/AAAAAAAAS-E/pPDHWMwGMqQ/s1600-h/extensions_link.png"><img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 177px; height: 301px;" src="http://4.bp.blogspot.com/_TinOg0_YgIQ/S5nZMWa7qWI/AAAAAAAAS-E/pPDHWMwGMqQ/s320/extensions_link.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5447624030481525090" /></a>
<p>
The gallery is simply a set of waves containing <a href="http://code.google.com/apis/wave/extensions/installers/">extension installers</a> (the puzzle pieces). The first wave, "<a href="https://wave.google.com/wave/#minimized:search,restored:wave:googlewave.com!w%252BR8RbkhA9Y">Read me first</a>" contains an introduction to extensions and how to use them. In many cases, those particular waves won't maintain their read/unread status in Google Wave preview; we're working on this. Beyond that, we have some design improvements in the works, but we wanted to get this out there to get feedback and help users find your extensions.
</p>
<p>
As a tip, you can also use the waves in the gallery to share a direct link to your extension's installer with other Google Wave users -- simply open the installer and copy-and-paste the URL (note: the panel arrangement and search query are included in the URL, but can easily be edited out).
</p>
<p>
While you're building your extensions, if you'd like them to be included in the gallery, please be sure to <a href="http://code.google.com/apis/wave/submitextension.html">submit them for review</a>. You may also want to check out <a href="http://mashable.com/2010/03/09/google-wave-api-challenge/">Mashable's Google Wave API Challenge</a>.
</p>
<p>
We look forward to seeing what you come up with -- especially with the new <a href="http://googlewavedev.blogspot.com/2010/03/introducing-robots-api-v2-rise-of.html">Google Wave robots API (v2)</a>.
</p>
<br/>
<span class="post-author">Posted by Dan Peterson, Product Manager, Google Wave</span>Anonymoushttp://www.blogger.com/profile/05677772767072854676noreply@blogger.comtag:blogger.com,1999:blog-7938035922388048219.post-27631611054417998402010-03-08T06:00:00.000-08:002020-07-15T16:39:31.232-07:00My Extension Wish: Recipeasy<p>Hi! I'm Anna Rose Kerr, a Kiwi and Google Wave user living in Sydney. Coming from a background in creative advertising, I see a lot of potential for Wave to make everyday tasks more efficient and enjoyable. Now, I want to share one of my ideas for how developers can make my own life easier.</p><p>Before I moved in with my boyfriend, I had no idea that making dinner could be such a complex problem. My normal approach of "eat whatever I feel like when I get hungry" does not compute with him, and thus we spend hours each day discussing what is for dinner that night. We have to factor in what's in the fridge that needs to be consumed, seasonal product, and which animal he currently feels sympathetic towards and won't eat. It often gets too complicated and we end up eating take-aways.</p><p>An ideal solution would be a cookbook extension that could do the math and come up with a recipe given all these variables, and I call that solution "Recipeasy." This extension would sit on a wave between you and your dinner guests, suggesting recipes using the ingredients you have and the foods you all like to eat.</p><p>First, the extension could insert a gadget that let users add lists of food items which they "have", "would like" or "would not like". Other users can click on these items to confirm they are a good choice or delete them from a list. The most popular ingredients have the greatest influence on the generated recipe suggestions. The extension could also include a robot that would scan the conversation for food items, and pull those out and insert them into the gadget. It would work off phrases such as "I can bring some..." or "yuck I don't like..." to place the various ingredients discussed into the right lists.</p><p><img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 342px;" src="http://4.bp.blogspot.com/_T1lquhCmKo8/S5OClTqlz2I/AAAAAAAADMg/yC-dLZWvV0Y/s400/recipegadget+(1).jpg"/>
</p><p>Recipeasy would automatically produce 3-5 of the top recipes based on your selections. Clicking on a recipe name within the gadget would open the recipe's own Wave. Here, you might find suggestions and tips from other Wavers who have already tried the recipe and you can add your own review. These "Recipeasy" waves form your own virtual cookbook, which would be easily accessible by searching "with:recipeasy".</p><p>There are some obvious businesses to partner with when making this extension — like supermarket chains which could offer to deliver the extra food needed to complete a recipe. Recipe sites or chefs could add to the Recipeasy database from their own repertoire and pull the Waver's comments back onto their site.</p><p>An extension like Recipeasy would make cooking so much easier by using food you already have (or getting what you don't have delivered) and taking the effort out of agreeing on a meal. While cooking may not appeal to you directly, just think — this could be the way you get your mother using Google Wave!</p>
<br/>
<span class="post-author">Posted by Anna Rose Kerr, Google Wave User</span>Pamela Foxhttp://www.blogger.com/profile/15947664772001597300noreply@blogger.com