<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mastering WAVE &#187; robots</title>
	<atom:link href="http://www.masteringwave.com/tag/robots/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.masteringwave.com</link>
	<description>Google Wave Made Easy</description>
	<lastBuildDate>Sun, 08 Aug 2010 13:46:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<cloud domain='www.masteringwave.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>New Google Wave Robot API v2</title>
		<link>http://www.masteringwave.com/2010/03/new-google-wave-robot-api-v2/</link>
		<comments>http://www.masteringwave.com/2010/03/new-google-wave-robot-api-v2/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 15:13:25 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[sap]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/2010/03/new-google-wave-robot-api-v2/</guid>
		<description><![CDATA[Finally there is an update to the Google Wave robot API. In the blog Introducing Robots API v2: The Rise of Active Robots the new features are described. It is really nice to see that a lot of new features has been delivered. It is a long time since the last release of any updates [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2010%2F03%2Fnew-google-wave-robot-api-v2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2010%2F03%2Fnew-google-wave-robot-api-v2%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Finally there is an update to the Google Wave robot API. In the blog <a href="http://googlewavedev.blogspot.com/2010/03/introducing-robots-api-v2-rise-of.html">Introducing Robots API v2: The Rise of Active Robots</a> the new features are described.</p>
<p>It is really nice to see that a lot of new features has been delivered. It is a long time since the last release of any updates on the API, so it looked like the development or patching had stopped. But this new release solves many of the problems that have exists. I have written my comments to all to all of the functions.</p>
<ul>
<li><em><strong>Active API:</strong> In v2, robots can now push information into waves (without having to wait to respond to a user action). This replaces the need for our deprecated cron API, as now you can update a wave when the weather changes or the stock price falls below some threshold. You can learn more in <a href="http://code.google.com/apis/wave/extensions/robots/operations.html">the Active API docs</a>.<br />
</em></li>
</ul>
<p>This features is really useful for enterprise contexts, where it is required that you will be able to update the wave based on external events. With this features you can get a new Wave, when something happens that you need to react to. From the SAP perspective there is Universal Worklist where all events that you have to process are. With this Wave you can achieve some of the same ideas.</p>
<ul>
<li><em><strong>Context:</strong> Robots can now more precisely specify how much information they want to get back from a particular event. If only the contents of the affected blip needs updating and you want to reduce your robot&#8217;s bandwidth, then you can specify the new &#8216;SELF&#8217; context. On the flip side, if you do need all the information in the wavelet, you can specify the new &#8216;ALL&#8217; context. You can learn more in <a href="http://code.google.com/apis/wave/extensions/robots/events.html">the Context docs</a>.<br />
</em></li>
</ul>
<p>With this enhancement it will be much easier for robots to interact with the wave, because they can get a much better control of what the data is need in each instance. This will make the development easier because you got the date that you need and it will specify the data you need.</p>
<ul>
<li><em><strong>Filtering:</strong> In a similar way, with this new API, the robot can specify what events it needs to respond to, conserving valuable bandwidth &#8212; and ignore all those that don&#8217;t apply. You can learn more in <a href="http://code.google.com/apis/wave/extensions/robots/events.html">the Filtering Events docs</a></em>.</li>
</ul>
<p>With this function you will only get the events that you need in your robots. Simply create a regular expression and then only the entries matching the expression is sent. This is quite useful if you only want events, when a large number of capital letters is written.</p>
<ul>
<li><em><strong>Error reporting:</strong> Robots are now able to register to receive errors about failed operations, such as insertion on non-existent ranges. You can learn more in <a href="http://code.google.com/apis/wave/extensions/robots/operations.html">the Error Reporting docs</a>.<br />
</em></li>
</ul>
<p>This function will make it possible to make better and more stabile robots. The use requires that you work, how the robot should interact when an error is created.</p>
<ul>
<li><em><strong>Proxying-For:</strong> Robots can now convey to Google Wave that their actions are actually on behalf of a different user, via the proxyingFor field. For robots like the <a href="http://wave-samples-gallery.appspot.com/about_app?app_id=107016">Buggy sample</a>, which connects with the Google Code issue tracker, this means that the wave can be updated with attribution to users on non-wave systems. You can learn more in <a href="http://code.google.com/apis/wave/extensions/robots/operations.html">the Proxying-For docs</a>.<br />
</em></li>
</ul>
<p>I can see that this function will be really interesting when working with one place to monitor all of your solution. It will also make collaboration with external partners much easier.</p>
<p>With all of this information it looks like the robots have been much more decentralized and acts as regular clients. So in the principle the new features will allow you to create a client to Wave using the robot API and some proxy functionality.</p>
<p>There is still room for improvements in the API. This is the two things that I see that currently are missing.</p>
<ul>
<li>Better form handling and the ability to apply styles to the forms, so they don&#8217;t look as 90ish.</li>
<li><strong>UPDATE: This is also possible.</strong> Integration with Gadgets, so the robots can update the gadgets with new information. With the Active API is this even more interesting. It is now possible to update the statistic gadget when you get a new expression.</li>
</ul>
<p>Pamela Fox has created a great <a href="http://prezi.com/y1gmnbt6_4xk/google-wave-robots-v2/" target="_blank">presentation </a>describing what how the features connect.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2010/03/new-google-wave-robot-api-v2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Google Wave Gadgets lack quality</title>
		<link>http://www.masteringwave.com/2010/01/wave-gadgets/</link>
		<comments>http://www.masteringwave.com/2010/01/wave-gadgets/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 13:10:24 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Community]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Enterprise]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[critics]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[robots]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/?p=704</guid>
		<description><![CDATA[I tested quite a bit of different Google Wave gadgets in my christmas calender last month. I tried 40 different apps with a large verity in their complexity and usability. Some of them did not have any useful functions or did not work. I really liked many of the ideas created in the gadgets and [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2010%2F01%2Fwave-gadgets%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2010%2F01%2Fwave-gadgets%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I tested quite a bit of different Google Wave gadgets in my christmas calender last month. I tried 40 different apps with a large verity in their complexity and usability. Some of them did not have any useful functions or did not work.</p>
<p>I really liked many of the ideas created in the gadgets and some was really useful. It was fun to see how people wanted to impress with new ideas.</p>
<p>The quality of the gadgets and robot was lausy. Mine included. I believe that many of to my application must be improved. But with the limited option in the robot API hinders making layouts to shine. It also provide a hindering there is a lack of way the gadget/robots can work together. If there was a better way to make the gadgets/robot work together, the layout issues could be solved.</p>
<p>I will say that most of the gadgets except maybe the simpler voting gadgets all require extra work before they can be used by a wider audience. The robots where you need to write commands with # or ! as the only thing in blip, I doubt that my mother will pick it up easily which is required to get non tech savvy users on board.</p>
<p>One key to make it possible to get the robot to function better is to pay the developers. I guess most of the developers of the robots/gadgets I have seen just tried the protocol out of see if they could make something useful. And they can. But to make them look wave-y the gadgets need to look better.</p>
<p>To make the gadgets/robot complete we need to be able to get some better apis and more importantly be able to charge for your apps. Currently it can be possible to charge for the usage of a robot and with some development also a gadget, but it is a pain and will require to much of the user.</p>
<p>I&#8217;m therefore looking forward a Wave app store is created. It will be interesting to see if it only supports one time payments or monthly payments and maybe even corporate multi seat licenses. The wave app store will mean that more developers will start with developing programs for Google Wave, making the platform more attractive.</p>
<p>I&#8217;m currently only letting my apps be available to my mail list subscribers. We have a new scrum gadget that just need to be published. So sign up to the newsletter and try it out.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2010/01/wave-gadgets/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Wave robots using the Grails Wave plugin</title>
		<link>http://www.masteringwave.com/2009/11/wave-robots-with-grails-plugin/</link>
		<comments>http://www.masteringwave.com/2009/11/wave-robots-with-grails-plugin/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 14:55:12 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[robots]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/?p=438</guid>
		<description><![CDATA[I had when I first got access to Wave, I wrote a blog about how to create a Wave Robot using Grails. This blog can be read at Graversen.org. Now David Trattnig has created a plugin to Grails for developing Wave applications. I had to try it out and see how it works. The first [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F11%2Fwave-robots-with-grails-plugin%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F11%2Fwave-robots-with-grails-plugin%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I had when I first got access to Wave, I wrote a blog about how to create a Wave Robot using Grails. This blog can be read at <a href="http://graversen.org/2009/07/22/creating-google-wave-robots-in-grails/">Graversen.org</a>.</p>
<p>Now David Trattnig has created a <a href="http://grails.org/plugin/wave">plugin</a> to Grails for developing Wave applications. I had to try it out and see how it works.</p>
<p>The first project I tried the plugin on was a failure. I got some error, which I did not think the Wave plugin had created. Just me fumbling around. So I created a new project to see if it was better. The result was much better on the second try. I got a functional robot working without much code.</p>
<p>When you run the commands.</p>
<div class="codecolorer-container dos default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="dos codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">grails install-plugin wave<br />
<br />
grails create-wave-robot</div></div>
<p>You get all the objects you need to create a robot, which is bacisly just one file as a service. You can then start coding in this file. The plugin automaticly handles the creation of the URL mappings needed for the Robot to work.</p>
<p>In Wave you normaly have to create the capabilities.xml file as a seperate file outsite the code. This is irretating to be working with and you have to make sure to update the file. With this plugin all you need to do is to change the begining of the Robot file to something like.</p>
<div class="codecolorer-container groovy default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20static"><span style="color: #000000; font-weight: bold;">static</span></a> robotName <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;Grails Test&quot;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20static"><span style="color: #000000; font-weight: bold;">static</span></a> robotVersion <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;0.1&quot;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20static"><span style="color: #000000; font-weight: bold;">static</span></a> imageUrl <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;http://masteringwave.com/header.png&quot;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20static"><span style="color: #000000; font-weight: bold;">static</span></a> profileUrl <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">&quot;http://masteringwave.com&quot;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20static"><span style="color: #000000; font-weight: bold;">static</span></a> robotCapabilities <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>EventType.<span style="color: #006600;">BLIP_SUBMITTED</span>,EventType.<span style="color: #006600;">BLIP_CREATED</span> <span style="color: #66cc66;">&#93;</span></div></div>
<p>With this information the cababilites xml file can be created.</p>
<p>The development of the plugin can be performed in the <em>processEvents</em> method. Like the following really meaning full code.</p>
<div class="codecolorer-container groovy default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="groovy codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20public"><span style="color: #000000; font-weight: bold;">public</span></a> <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20void"><span style="color: #993333;">void</span></a> processEvents<span style="color: #66cc66;">&#40;</span>RobotMessageBundle eventsBundle<span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20for"><span style="color: #b1b100;">for</span></a> <span style="color: #66cc66;">&#40;</span>event <a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20in"><span style="color: #b1b100;">in</span></a> eventsBundle.<span style="color: #006600;">events</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20if"><span style="color: #b1b100;">if</span></a> <span style="color: #66cc66;">&#40;</span>event.<span style="color: #006600;">type</span> <span style="color: #66cc66;">==</span> EventType.<span style="color: #006600;">BLIP_SUBMITTED</span><span style="color: #66cc66;">&#41;</span> <span style="color: #66cc66;">&#123;</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span style="color: #000000; font-weight: bold;">def</span></a> blip <span style="color: #66cc66;">=</span> event.<span style="color: #006600;">blip</span><br />
<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20def"><span style="color: #000000; font-weight: bold;">def</span></a> textView <span style="color: #66cc66;">=</span> blip.<span style="color: #006600;">document</span><br />
textView.<a href="http://www.google.de/search?q=site%3Adocs.codehaus.org/%20append"><span style="color: #FFCC33;">append</span></a><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;processed check&quot;</span><span style="color: #66cc66;">&#41;</span><br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span><br />
<span style="color: #66cc66;">&#125;</span></div></div>
<p>Using this frame work is really easy and takes care of some of the irritating features you always need to use when developing Robots.  It does requires some knowledge of Grails/Groovy.</p>
<p>I have not tested the function for embedding waves, but it should also be fairly simple to do. You should just insert the Groovytag.</p>
<pre>
<div class="codecolorer-container html4strict default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="html4strict codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #ddbb00;">&amp;lt;</span>g:waveEmbed waveId=<span style="color: #009900;">&lt;<a href="http://december.com/html/4/element/span.html"><span style="color: #000000; font-weight: bold;">span</span></a>&gt;</span>&quot;googlewave.com!w+BmNwtyw5qH.1&quot;/<span style="color: #ddbb00;">&amp;gt;</span></div></div>

</span></pre>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/11/wave-robots-with-grails-plugin/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Installing extensions in Wave</title>
		<link>http://www.masteringwave.com/2009/10/installing-extensions-in-wave/</link>
		<comments>http://www.masteringwave.com/2009/10/installing-extensions-in-wave/#comments</comments>
		<pubDate>Wed, 07 Oct 2009 08:56:54 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[appstore]]></category>
		<category><![CDATA[extensions]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[robots]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/2009/10/installing-extensions-in-wave/</guid>
		<description><![CDATA[Extensions are an easy way to distribute you Wave applications. When the user has installed an extension the user can add robots or gadgets just by pressing a button. This is much easier then remembering the URL of the gadget or Robot. For robots it is pretty simple, since you can add the robot to [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F10%2Finstalling-extensions-in-wave%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F10%2Finstalling-extensions-in-wave%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>Extensions are an easy way to distribute you Wave applications. When the user has installed an extension the user can add robots or gadgets just by pressing a button. This is much easier then remembering the URL of the gadget or Robot. For robots it is pretty simple, since you can add the robot to your gadget.</p>
<p>What is even more exciting about extension is they can allow for an app store for Wave applications. It would be very interesting, if you could sell/buy as easy as you can from the Itunes App store. If it was possible just to make applications and then have somebody else to sell them, more developers would be interested in developing applications. That way you don&#8217;t need to finance you gadgets with ad words.</p>
<p>I was looking at the blog on <a href="http://www.offlineblog.net/2009/10/how-to-uninstall-an-extension-plugin-addon-on-google-wave/">How To Uninstall An Extension or Plugin on Google Wave</a>. The blog does not give an explanation on how to install gadgets, so I have been working to find a way to do it. I should just have a look in the getting started wave.</p>
<p>I have been looking at creating my own extension and install them. In the sandbox there was a debug menu, where you can stall the extensions from. In the preview system you needed to find a place the gallery wave (Search for: Extension Gallery). From this wave it is possible to install the gadgets Google has accepted by clicking on a button.</p>
<p>This video shows how the gadget installer and uninstaller work.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="src" value="http://www.youtube.com/v/WC7EbPpRoXM&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/WC7EbPpRoXM&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>I you are a developer and want to test your own extensions you can do it by installing the &#8220;Extension Installer&#8221;. When this is installed you can install new gadgets from the gadget URL. So this is the way you can test your application, before you send it to the app store. I don&#8217;t know you can share the applications with other or they need to install via the developer gadget.</p>
<p><strong>Update:</strong> if you want to write an extension your self have a look at  <a href="http://wave-samples-gallery.appspot.com/about_app?app_id=36001">Extension Installer XML creator (for Gadget)</a></p>
<h3 style="margin-top: 0.5em;"></h3>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/10/installing-extensions-in-wave/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Blip debug robot</title>
		<link>http://www.masteringwave.com/2009/09/blip-debug-robot/</link>
		<comments>http://www.masteringwave.com/2009/09/blip-debug-robot/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 20:52:40 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[blips]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/2009/09/blip-debug-robot/</guid>
		<description><![CDATA[In the last post I created a screencast of how a debug session, which showed which annotations is created. Now I have posted the robot so it is possible for others to start using the robot. This will allow all users to investigate how the annotations work. I hope it will help you to gain [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fblip-debug-robot%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fblip-debug-robot%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>In the <a href="http://www.masteringwave.com/2009/09/google-wave-annotations/">last</a> post I created a screencast of how a debug session, which showed which annotations is created.</p>
<p>Now I have posted the robot so it is possible for others to start using the robot. This will allow all users to investigate how the annotations work. I hope it will help you to gain some more knowledge on how annotations work.</p>
<p>Simply add the robot with the name <a href="mailto:BlipDebug@appspot.com">BlipDebug@appspot.com</a> to you wave, and start modify your application. Just be careful and not add the robot to any large waves. This robot is quite disturbing and should only be used for testing purposes.</p>
<p>The Java code to the robot is in the <a href="http://code.google.com/p/masteringwave/source/browse/">code.google.com</a> repository.</p>
<p>The robot is now approved in the <a href="http://wave-samples-gallery.appspot.com/about_app?app_id=30011">sample gallery</a>.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/09/blip-debug-robot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Google Wave annotations</title>
		<link>http://www.masteringwave.com/2009/09/google-wave-annotations/</link>
		<comments>http://www.masteringwave.com/2009/09/google-wave-annotations/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 14:44:05 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[blips]]></category>
		<category><![CDATA[google wave]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[robots]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/?p=216</guid>
		<description><![CDATA[Annotations (com.google.wave.api.Annotation) is a key concept to understand, when you are developing robots, how should understand the content of a robot. I have created a screencast, where I show how the annotations are changed because of the editing. I have found the following types of annotations. user/d/key identifies that the user is on the blib [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fgoogle-wave-annotations%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fgoogle-wave-annotations%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://wave-robot-java-client.googlecode.com/svn/trunk/doc/index.html">Annotations</a> (com.google.wave.api.Annotation) is a key concept to understand, when you are developing robots, how should understand the content of a robot.
</p>
<p>I have created a screencast, where I show how the annotations are changed because of the editing.
</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/shRqsjMPJXc&#038;hl=en&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/shRqsjMPJXc&#038;hl=en&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<p>I have found the following types of annotations.
</p>
<ul>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>user/d/key </strong></span>identifies that the user is on the blib and is in edit mode
</li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>user/e/key </strong></span>identifies where the users cursor is only the from selection counts.
</li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>user/r/key </strong></span>identifies the selection the user has created with start and end. The user will still have his curser at a place in the blip.
</li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>style/fontWeight</strong> identify if the selection is bold</span>
		</li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>style/textDecoration </strong></span>can be used to add line through<strong><br />
			</strong></li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>style/color </strong></span>is the color of the selected text<strong><br />
			</strong></li>
<li><span style="color:black; font-family:Arial; font-size:10pt"><strong>lang</strong>  identifies the language of a region. There can be multiply different languages in a blip.</span>
		</li>
</ul>
<p>There are probably a number of different style markings, which you will have to find your self.
</p>
<p>Key is probably a hash of the user address. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/09/google-wave-annotations/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Designing robots</title>
		<link>http://www.masteringwave.com/2009/09/designing-robots/</link>
		<comments>http://www.masteringwave.com/2009/09/designing-robots/#comments</comments>
		<pubDate>Tue, 08 Sep 2009 14:53:17 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[modelling]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/2009/09/designing-robots/</guid>
		<description><![CDATA[I was just trying to design a robot that I would like to show for a demo. I needed somehow way to describe how the robot would interact with the user. As so many other times I found the Whiteboard very useful. With the whiteboard is it possible draw with different colors for each participant. [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fdesigning-robots%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fdesigning-robots%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I was just trying to design a robot that I would like to show for a demo. I needed somehow way to describe how the robot would interact with the user.
</p>
<p><img align="left" src="http://www.masteringwave.com/wp-content/uploads/2009/09/090809_1453_Designingro1.png" alt=""/>
	</p>
<p>As so many other times I found the Whiteboard very useful. With the whiteboard is it possible draw with different colors for each participant. By using this method it will be possible to see the resulting Wave. The resulting wave will give an impression if the content is sufficient.
</p>
<p>I would expect that use cases also could be an option, but they would focus more on with what the participants interacted with, not on how the result looked. The use case design is probably still a good idea, to make sure that all interactions are covered,
</p>
<p>Designing such an interacting robot, might be involve many participants. It would be idea if the users cold design the resulting wave, by using Google Wave as the collaborative tool. They should probably create a wavelet, they could collaborate on and one where they could sketch the resulting wave.
</p>
<p>Do you know of any modeling tools or methods, which could be prove useful for designing robots?
</p>
<p>
 </p>
<p>
 </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/09/designing-robots/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Gadget and Robots interaction</title>
		<link>http://www.masteringwave.com/2009/09/gadget-and-robots-interaction/</link>
		<comments>http://www.masteringwave.com/2009/09/gadget-and-robots-interaction/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 20:09:19 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Beginner]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[gadget]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[wave]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/?p=174</guid>
		<description><![CDATA[In some instances you want to have the robots and gadgets to interact. A scenario where it could make sense is, when the user wants information about a site. The page which could be showed could be the sales report of the customer or some other information which is of interest to the participants. This [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fgadget-and-robots-interaction%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F09%2Fgadget-and-robots-interaction%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>In some instances you want to have the robots and gadgets to interact. A scenario where it could make sense is, when the user wants information about a site. The page which could be showed could be the sales report of the customer or some other information which is of interest to the participants.
</p>
<p>This tutorial has basis in the <a href="http://www.masteringwave.com/2009/08/creating-a-simple-inline-gadget-to-show-external-web-applications/">Creating A Simple Inline Gadget To Show External Web Applications</a>, which shows how to inline a page into the a wave using a gadget. There is a robot which creates a form for entering the url of the page. When the user press submit the robot adds a gadget which inline the specified url.
</p>
<p>First the robot which inserts the gadget.
</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> EmbedUrlRobotServlet <span style="color: #000000; font-weight: bold;">extends</span> AbstractRobotServlet <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">final</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> URLFIELD <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;URL_FIELD&quot;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; @Override<br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> processEvents<span style="color: #009900;">&#40;</span>RobotMessageBundle bundle<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; Wavelet wavelet <span style="color: #339933;">=</span> bundle.<span style="color: #006633;">getWavelet</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> creator <span style="color: #339933;">=</span> wavelet.<span style="color: #006633;">getCreator</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>bundle.<span style="color: #006633;">wasSelfAdded</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Blip blip <span style="color: #339933;">=</span> wavelet.<span style="color: #006633;">appendBlip</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; TextView textView <span style="color: #339933;">=</span> blip.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; textView.<span style="color: #006633;">appendMarkup</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;p&gt;&lt;b&gt;Inline the url&lt;/b&gt;&lt;/p&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aformview+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FormView</span></a> form <span style="color: #339933;">=</span> textView.<span style="color: #006633;">getFormView</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> FormElement<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">INPUT</span>, URLFIELD,<span style="color: #0000ff;">&quot;http://&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; form.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> FormElement<span style="color: #009900;">&#40;</span>ElementType.<span style="color: #006633;">BUTTON</span>, <span style="color: #0000ff;">&quot;submit&quot;</span>, <span style="color: #0000ff;">&quot;INSERT&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aevent+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">Event</span></a> e <span style="color: #339933;">:</span> bundle.<span style="color: #006633;">getEvents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getType</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> EventType.<span style="color: #006633;">FORM_BUTTON_CLICKED</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Blip blip <span style="color: #339933;">=</span> e.<span style="color: #006633;">getBlip</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aformview+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">FormView</span></a> form <span style="color: #339933;">=</span> blip.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getFormView</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; FormElement urlElement <span style="color: #339933;">=</span> form.<span style="color: #006633;">getFormElement</span><span style="color: #009900;">&#40;</span>URLFIELD<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; GadgetView gadgetView<span style="color: #339933;">=</span> blip.<span style="color: #006633;">getDocument</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">getGadgetView</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; gadgetView.<span style="color: #006633;">append</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> Gadget<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://pollenvarsel.appspot.com/gadget?url=&quot;</span><span style="color: #339933;">+</span>urlElement.<span style="color: #006633;">getValue</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>
 </p>
<p>The robots listens for two event. First the SELF_ADDED which creates the URL form with a text box and a submit button. When the button is pressed a gadget is inserted in to the Blip, with the url of the gadget + the target URL. Probably something should be performed to ensure that the submitted URL is valid and can be sent as a query parameter. Probably a URL encoding should be performed or save the data in the datastorage.
</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> doGet<span style="color: #009900;">&#40;</span>HttpServletRequest req, HttpServletResponse resp<span style="color: #009900;">&#41;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">IOException</span></a> <span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; resp.<span style="color: #006633;">setContentType</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;application/xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <br />
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aprintwriter+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">PrintWriter</span></a> out<span style="color: #339933;">=</span> resp.<span style="color: #006633;">getWriter</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; out.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;&lt;?xml version=<span style="color: #000099; font-weight: bold;">\&quot;</span>1.0<span style="color: #000099; font-weight: bold;">\&quot;</span> encoding=<span style="color: #000099; font-weight: bold;">\&quot;</span>UTF-8<span style="color: #000099; font-weight: bold;">\&quot;</span>?&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;Module&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;ModulePrefs title=<span style="color: #000099; font-weight: bold;">\&quot;</span>inline_external_page<span style="color: #000099; font-weight: bold;">\&quot;</span> height=<span style="color: #000099; font-weight: bold;">\&quot;</span>400<span style="color: #000099; font-weight: bold;">\&quot;</span> width=<span style="color: #000099; font-weight: bold;">\&quot;</span>800<span style="color: #000099; font-weight: bold;">\&quot;</span>/&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;Content type=<span style="color: #000099; font-weight: bold;">\&quot;</span>html<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;![CDATA[ &quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; &lt;div id=<span style="color: #000099; font-weight: bold;">\&quot;</span>main<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&lt;!--Main container for the iframe--&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot; &lt;iframe name=<span style="color: #000099; font-weight: bold;">\&quot;</span>check<span style="color: #000099; font-weight: bold;">\&quot;</span> id=<span style="color: #000099; font-weight: bold;">\&quot;</span>check<span style="color: #000099; font-weight: bold;">\&quot;</span> height=<span style="color: #000099; font-weight: bold;">\&quot;</span>100%<span style="color: #000099; font-weight: bold;">\&quot;</span> src =<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span><span style="color: #339933;">+</span><span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span style="color: #003399;">String</span></a><span style="color: #009900;">&#41;</span>req.<span style="color: #006633;">getParameter</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;url&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span> width=<span style="color: #000099; font-weight: bold;">\&quot;</span>100%<span style="color: #000099; font-weight: bold;">\&quot;</span> frameborder=<span style="color: #000099; font-weight: bold;">\&quot;</span>0<span style="color: #000099; font-weight: bold;">\&quot;</span>&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;p&gt;Your browser does not support iframes .&lt;/p&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;/iframe&gt; &lt;!-- this is where contents of the links are displayed --&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;/div&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;]]&gt;&lt;/Content&gt;&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&lt;/Module&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #009900;">&#125;</span></div></div>
<p>The code is the same in the original blog it has just been placed into a servlet, to make it possible to have parameters inside. It just inserts the query parameter into the gadget XML.
</p>
<p>The code can be found at <a href="http://code.google.com/p/masteringwave/source/browse/">code.google.com</a>. </p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/09/gadget-and-robots-interaction/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Architecture for Google Wave applications.</title>
		<link>http://www.masteringwave.com/2009/08/architecture-for-google-wave-applications/</link>
		<comments>http://www.masteringwave.com/2009/08/architecture-for-google-wave-applications/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 13:56:11 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[Architecture]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[robots]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/?p=100</guid>
		<description><![CDATA[I&#8217;m designing an application for Google Wave, which interacts with the user. The following is the considerations that I have for how the architecture of the application works best. The application that I&#8217;m planning on should consist of a Robot which interacts with the user. The other part of the application should be a web [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F08%2Farchitecture-for-google-wave-applications%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F08%2Farchitecture-for-google-wave-applications%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m designing an application for Google Wave, which interacts with the user. The following is the considerations that I have for how the architecture of the application works best.</p>
<p>The application that I&#8217;m planning on should consist of a Robot which interacts with the user. The other part of the application should be a web application where users can configure how the robot should interact and view status from the waves. There should also be some analytics capabilities. The backend application needs to be rather a little complex to fulfill the requirements.</p>
<p>The most convenient way would be to use appengine, since it is the place that is mostly integrated with Google Wave currently.<span id="more-100"></span></p>
<p>Appengine contains a lot of really nice features for building applications. You just created you application and then you don&#8217;t need to consider how to scale the application, since this is done by Google. This is a huge advantage and you don&#8217;t need to have any resources working with deployment. You can sleep at night, knowing that you cannot do anything to solve problems with the database or the servers. If you are successful and create the application with a lot of growth you just have to pay a little more. You don&#8217;t need to use Amazon EC2 or other cloud servers, where you need to scale you application programmatically via the APIs. Spikes in trafic are also handled without any problems.</p>
<p>I will not place my backend application on Appengine, even though I have the advantages listed above.</p>
<p>One problem is the &#8220;lack&#8221; of support for high performance development languages like Ruby-on-Rails (RoR) or Grails. I have tried to deploy <a href="http://graversen.org/2009/07/22/creating-google-wave-robots-in-grails/">Grails</a> applications to Appengine. There are still some problems with getting all the features working like they do with hibernate. I also ran into problems, where the application worked on the development server, but not on the Appengine because of the whiteliste.</p>
<p>There is also a <a href="http://code.google.com/p/appengine-jruby/wiki/GettingStarted">project</a> for getting Jruby to work on Appengine. It mostly looks like Ruby works with Sinatra, a smaller framework than Rails. I would suspect that there is still some way to go, before the Jruby and Appengine works just as easy as the standalone version.</p>
<p>If it is not possible to use one of these frameworks, development will take longer time. Also the application will be less flexible be more difficult to maintain.</p>
<p>I want to develop the backend application in Ruby-on-Rails, since this is the place, where I have found most resources on how to create scalable applications. The plugins also is of a high quality.</p>
<p>All the developers in the organization are Java developers, so Groovy and Grails would be the obvious choice to learn. I just don&#8217;t find the same size of community and quality of plugins. I think we also could have success with Grails applications.</p>
<p>The application that, I planning to building, will have some of analytics capabilities. The Appengine datastorage does not allow summarizations of data like with SQL &#8220;<em>select plant, sum(stock) from x group by plant</em>&#8220;. Therefore the application should fetch all the data objects and then calculate the sum. The datastorage also have a limit on the number of entries it can return. Thought I read on the Appengine <a href="http://googleappengine.blogspot.com/2009/08/recent-happenings-ticktock-parallel.html">blog</a>, that it was possible to perform queries in parallel, at least on python.</p>
<p>So how do I then plan to make this architecture work? Currently it is only possible to make robots, which runs on Appengine. This restriction will be removed at some point, and the robots can be created directly in the (G)rails application.</p>
<p>But I want to create an application which is ready, soon after wave is release of Wave to the public. So we need to get started already. To make this happen, I think the best architecture is create the deployment like the following.</p>
<p><img src="http://www.masteringwave.com/wp-content/uploads/2009/08/081809_1356_Architectur1.png" alt="" width="468" height="138" /></p>
<p>I&#8217;m planning on building the robots on Appengine. The robots have access to the backend data using REST, which should be easy to create in Ruby-on-Rails. We can then use Appengine datastorage and memcache for optimizing the robot. The other alternative is to create a proxy on the Appengine, which sends the posts to our Rails applications.</p>
<p>I need to find a way to get the Ruby-on-Rails application hosted, but there are plenty of resources for this. An even we are optimistic, we will probably not scale to more than 10 servers.</p>
<p>There will also be a problem with how we can do deployment of applications, when we rollout new releases. The release need to be synchronized both to the Rails application on a robot on Appengine.</p>
<p>There will be an issue with finding the right place to business logic in the robots. I&#8217;m currently not sure on how this can work out.</p>
<p>I would like to know if you think that I&#8217;m on a wild goose chaise with my architecture.  Will I have more success with developing the application on Appengine.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/08/architecture-for-google-wave-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Coming changes to Google Wave API</title>
		<link>http://www.masteringwave.com/2009/08/coming-changes-to-google-wave-api/</link>
		<comments>http://www.masteringwave.com/2009/08/coming-changes-to-google-wave-api/#comments</comments>
		<pubDate>Wed, 12 Aug 2009 16:11:55 +0000</pubDate>
		<dc:creator>Daniel Graversen</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[gadgets]]></category>
		<category><![CDATA[robots]]></category>

		<guid isPermaLink="false">http://www.masteringwave.com/2009/08/coming-changes-to-google-wave-api/</guid>
		<description><![CDATA[Tommy Pedersen shared the link to what is coming in the API. It looks like the developer preview will stop on September 30th, and then we must hope we can get an account on the production system. So we will not float without wave access for a long time. What is interesting is that Douwe [...]


No related posts.

Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F08%2Fcoming-changes-to-google-wave-api%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.masteringwave.com%2F2009%2F08%2Fcoming-changes-to-google-wave-api%2F&amp;source=masteringwave&amp;style=normal&amp;service=bit.ly" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://twitter.com/tpedersen">Tommy Pedersen</a> shared the <a href="http://groups.google.com/group/google-wave-api/browse_thread/thread/66cbc0a044da69cc?hl=en">link</a> to what is coming in the API.</p>
<p>It looks like the developer preview will stop on September 30th, and then we must hope we can get an account on the production system. So we will not float without wave access for a long time.</p>
<p>What is interesting is that Douwe Osinga from Google is sharing, what they believe they can achieve before the end of the developer preview.</p>
<p>The things I think is the most exciting news are the following:</p>
<ul>
<li>The Robots can use other addresses that <a href="mailto:name@appspot.com">name@appspot.com</a>. That could mean you could have more robots on the same application making the robots tailored to the user. Also we will see that robots will exist on our own servers and not app-engine.</li>
<li>A better integration between robots in to Wave, so they robot can perform tasks even the wave is not active by a user.</li>
<li>Gadgets better support for using Google Web Toolkit, will make it easier for everyone (how is not a Javascript master) to make Gadgets. This is probably lower the barrier to create Gadgets.</li>
<li>OpenSocial integration for both robots and gadgets. That is something that I&#8217;ll need to look more into.</li>
<li>Insert simple HTML into the waves. This is not possible now, so the robots can make some better looking content easy. Then we need to consider using CSS on the document.</li>
<li>Open source the robot API it does not matter much now, but for the adoption that will probably make things easier.</li>
</ul>
<p>I&#8217;m impressed with the plan Google has created for the development of the Google Wave API. I hope they have made some of the improvements already otherwise they will have a hard time implementing them all.</p>


<p>No related posts.</p>
<p>Related posts brought to you by <a href='http://mitcho.com/code/yarpp/'>Yet Another Related Posts Plugin</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.masteringwave.com/2009/08/coming-changes-to-google-wave-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

