A Google Wave robot explained in 5 minutes

I created the SAP Enterprise service robot, which is described in the blog. I wanted to give you an explanation on how this robot was implemented.

I have therefore created a 5 minutes screen capture, showing what is going on and what the moveable parts are. Probably 5 minutes is a little too short, but if you have anything, which you want me to explain, I will do it. I hope you find it interesting.

I’m not proud of using crafted XML documents, instead of sending SOAP documents. But it was the only way that I could find to call SOAP web services from Appengine. If you have any suggestions to how I can avoid this, please let me know.

My first 2 months with Google Wave

I got a comment from Jim Spath, about lessons learned from an early adopter. I feel this is something that I would like to share. I have now used Wave for two months and am getting use to Wave.

At first it was just creating some test waves with other users on the wave. Just to test wave. To many people used the same waves and the system were getting a little unstable. With the release of some service packs it is now much better.

All test users got two accounts a normal and then –test account. So it is possible to test the collaboration with another user if you don’t know anybody in the sandbox. Gave an interesting place to start with development and made it possible to work on projects without disturbing others. It just required to different browsers, but that was easily fixed.

The first couple of times I was using Google Wave, I got some crashes like showed on the screenshot below. Lately it has not been very often. The platform is much more stable and faster now, than when I first started. After I upgraded to Chrome 3.0.195.21, the browser crashes sometime when the Wave is fully loaded.

When I open the window it takes sometime before the client is fully loaded. It takes around 10 seconds to load the client on Chrome, which is a little irritating. But you can start seeing you inbox while the rest is loading.

I have lately been using Google Wave to some productive tasks. I have used it to write blog posts, that I would like to have multiply editing on. I have also been on the SAP Wave discussion, which shows how collaboration can work. I have not talked with the people on the wave, but we are able to have some interesting discussions. Some of them has been asynchronously.

The documents get really messy if there is a not of comments and nested comments. Currently it is not possible to fold the comments together, but I hope it will be possible. Alternative is to delete the comments and merge the result of the comments into the main documents or threats. It could probably be compared to a governance process.

From the development perspective, things have worked out quite easy. The Java APIs have not changed much in the period. When we did a Wavehackaton in Denmark, the delay between changes in a wave and execution on Appengine took until 10 minutes. Appengine was running really smooth, so it must have been something on the bridge between Appengine and Wave which gave problems. This delay gave some confusion when developing application, is my Robot not working or is it Appengine which is not working.

I always get my mail inbox down to zero mails, with the use of archiving. There was coming a lot of Waves into the inbox, most of them was from some random person sending waves to the public group. Mostly something you did not want to see, hence people have started complaining about spam. I have also created a lot of Waves, when I was testing robots. With the instability in the Wave/Appengine path you where not sure if you robot was working or not, so I had to do some more tests. I often forgot to archive those waves so they are still in my inbox. I would like to be able to mark many Waves and then archive them, so I don’t need to see them all.

I’m not fully comfortable with the usability, yet. It takes some time to get use to all the short cuts and the search options. The Danish keyboard users ALT GR to create @ or { signs, it does not work for me because of some reason. You can only see one wave at the time, but switching between them is easy.

I’m looking forward to the next 2 months of Waveing, where we hopefully will see some larger implementations.

Simple Form Gadget

Creating my first form gadget, I call it “form gadget” because the main idea of creating this post is to simply show the possibility of using gadgets for form transactions inside wave. Form transactions, meaning having a form created in gadget residing inside a wave but sending the data gathered to a robot or a robot can simply manipulate the data once the form is submitted.

NOTE: In this post I will not discuss on how to create a form gadget. However, I will discuss parts of the code and hopefully feature some other ideas on it.

When I first started creating this gadget I thought it would be easy for me to finish. Unfortunately there were a lot of challenges. I think one of the most challenging part, is having an idea on what gadget to build. Until, I came up with an idea of creating a simple address book gadget. I choose address book because it is simpler and much easy to create. It also shows the idea of a form being submitted. I believe there are a lot of potentials using gadgets inside wave, like this one that I have created. It shows the potential of having a transaction from one servlet residing in remote server or other scripting language that resides in a remote server.

Continue reading Simple Form Gadget

Blip debug robot

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 some more knowledge on how annotations work.

Simply add the robot with the name BlipDebug@appspot.com 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.

The Java code to the robot is in the code.google.com repository.

The robot is now approved in the sample gallery.

Google Wave annotations

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 and is in edit mode
  • user/e/key identifies where the users cursor is only the from selection counts.
  • user/r/key identifies the selection the user has created with start and end. The user will still have his curser at a place in the blip.
  • style/fontWeight identify if the selection is bold
  • style/textDecoration can be used to add line through
  • style/color is the color of the selected text
  • lang identifies the language of a region. There can be multiply different languages in a blip.

There are probably a number of different style markings, which you will have to find your self.

Key is probably a hash of the user address.