Entries from September 2009 ↓

Private replies in Waves

I have been interesting in how the private messaging inside wave works. More specifically what can the participants how has the private message see. I don’t know why I have never tested it out.

I recorded a small video of how this works. (Sorry about the background noise)

The conclusion is that the participant in the private wave can only see the content inside the private wave. He cannot see it is a part of a larger conversation. That is also what you need. The participant in the private wave must not be able to see, waves he has not been added to.

This also makes sense from a productivity perspective. He should not see everything else; he does not need to comment on that.

So when you create a private wave, you need to remember that the user you are added cannot see the rest of the conversation. The content the new participant, should comment on needs to be copied into the private Wave.

Bookmark and Share

What to do before the Google Wave invitation arrives

I’m currently waiting for invites to the live Wave system,. The sandbox works still fine, so I can still collaborate. So an obvious choose is to follow up on what is happening and research for news. Try to have a look at the API’s for the system, and then you can start your development. Try to get the AppEngine plugin up and running.

There are some interesting blogs, to read for the day. ReadWriteWeb has an article on what to expect from the Wave launch, this gives some interesting pointers to how the launch will take place. Among that you can nominate 8 friends with invitations. There will be no new features for the wave system.

Lars Rasmussen and Stephanie Hannon wrote about what he google blog. They write about the teams process and the fun they had when they was at a school and had the children write stories together. Lars and Stephanie believe that people will be more productive with wave when communicating and collaborating, which I believe is a large part of the day. I would have to agree with them.

Stephanie Hannon also wrote about what happened in the wave sandbox on the google blog. She mentions the SAP and Sales force as some of the vendors how have made some impressive demos of the potentials.

Stop checking the twitter channel for #googlewave, it is way to full today so you will just get a lot of messages. It is really difficult to follow the conversations. The just wait till people starts receiving the team had received of feedback and the use cases which was presented from the sandbox period.

So when you get online try to check out the maps gadget, Pamela Fox has made.

Then hope that you get an invitation. I just hope that I get an invitation for my domain, so I can start collaborating with the team.

Bookmark and Share

Wordpress publisher bot

Inspired by offlineblog’s blog about Live blogging and the Wordpress plugins like described on my blog, and at offlineblog and the bloggy robot which can publish to blogger.com. I thought this could also be possible to perform the same with a Wordpress robot.

The solution simply works by adding the robot wp-bot@appspot.com to a Wave. Then it publishes your wave to the site as an embedded wave to Wordpress. With this you get a permalink to the blog, where the content is hosted. I was unable to using the API’s that Google is using for displaying that the content is shared. If you know how to use please let me know.

I found the wordpress-java library to help with creating the XMLRPC code, which I was unable to use. With this library it is pretty simple to create a blog with some content. And since the content I’m posting just is wave id=’waveID’ bgcolor=’#ffffff’, it is pretty easy to craft.

The robot in action works the following way.

 

The code looks like the following.

public class WPRobotServlet extends AbstractRobotServlet {
      private String ownname = "wp-bot@appspot.com";
 
    @Override
    public void processEvents(RobotMessageBundle bundle) {
        Wavelet wavelet = bundle.getWavelet();
       
        // when the Robot is added publish to the robot
        if (bundle.wasSelfAdded()) {

            Blip blip = wavelet.appendBlip();
            TextView textView = blip.getDocument();
            textView.append(ownname+ " added version " +this.getVersion() +" \n");
            textView.appendMarkup("\n <a href=\"http://masteringwave.com/\">MasteringWave</a> <br />");
            textView.append("\n");
            String rootText = wavelet.getRootBlip().getDocument().getText();
            // find the first line, which will be the title to the blog
            String firstLine ;
            if(rootText.indexOf("\n")>0){
                firstLine =     rootText.substring(0,rootText.indexOf("\n"));
            }else{
                firstLine = rootText;
            }
            textView.append( uploadWave(firstLine, wavelet.getWaveId()));
        }
         

    }
   
    private String uploadWave(String title, String waveID){
           String sXmlRpcURL = "http://wp-bot.masteringwave.com/xmlrpc.php";
              String sUsername = "wave";
              String sPassword = "<SECRET>";
         
              // Hard-coded blog_ID
              String blog_ID = "1";

              // XML-RPC method
              String sXmlRpcMethod = "metaWeblog.newPost";
              // the content of the blog
              String sContent = "[wave id=\""+waveID+"\" bgcolor=\"#ffffff\"]";

                  // Try block to create the upload
              try
              {
                Wordpress wp = new Wordpress(sUsername, sPassword, sXmlRpcURL);
                  Page newPost = new Page();
                  newPost.setTitle(title);
                  newPost.setDescription(sContent);
                  newPost.setWp_author(sUsername);
                  String resultId = wp.newPost(newPost, "draft");
                  return wp.getPost(Integer.parseInt(resultId)).getPermaLink();
              }
              catch( Exception e )
              {
               return e.toString();
              }
    }
}

 

The full code can be found at http://code.google.com/p/masteringwave/source/browse/#svn/trunk/WP-BOT.

If you just want to check it out, just add the robot wp-bot@appspot.com to your Wave and the wave will be published.

Bookmark and Share

Robots in .NET

csharpcoderobot

I’m not a .NET coder, but I’m always keen to see new libraries for creating Google Wave Robots. Dagfinn Parnas had linked to the project which creates Robots in .NET

Jonathan Skeet has created a project for developing robots in .NET. Obvious .NET is not supported to run on the App Engine yet. I would guess that Google will not support .NET on App Engine. I don’t know if anybody are working on creating a C# Java compiler, so C# can be run from a Java environment.

To use .NET Jonathan is instead using the Downy to forward all request to the .NET server. Jonathan has created a nice guide to deploy Downy to the AppEngine. I guess that Downy also can be used for other projects, where you don’t want to use the AppEngine for your robots. As I can see Downy just forwards the plain http requests to the .NET server. Downy can also be used to run robots in Ruby or Grails hosted outside the Appengine, which can be necessary for some applications.

The code for the Robot API looks much like the Java API and parses all the JSON using one of standard library for parsing. It looks fairly easy to use and you should be able to follow most of the Java tutorials. Expanding the Robot library to more languages, will make it much easier for developer to choose their favorite language.

 

 

Bookmark and Share

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.

Bookmark and Share