Designing robots

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. 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.

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,

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.

Do you know of any modeling tools or methods, which could be prove useful for designing robots?

 

 

Bookmark and Share

Earning money on Google Wave applications

I was talking to Kenneth Joni Jørgensen from Greenclickmedia.dk about how Pay per click options in Google Wave. Kenneth is an expert in creating media campaigns for customers. I talked to Kenneth on how to make money on creating ads in pages.

When I’m going to develop applications to Google Wave, they will probably be supported with a Freemium model. Freemium products have two features a basis and a premium. The basis products purpose is to get people hooked on the service. It will be limited in some features and maybe supported by ads. The paying model will be ad free and have some other extra functions that will appeal to the users like more space or better security. This is the same model Google is using for Apps for my domain, where you can get the service free. With the free version you get ads on your mail. You can also select the paid version, which costs $50 a year. For this amount you get some extra functionalities regarding single singon and no ads.

We where first looking at the wave screen. With the current layout it does not look like there is space for ads like on their search or gmail pages. Google will probably find a place to put the ads, in a way so it will blend into the design.

If you develop an application, which you would like to have some money for you can insert advertisings. A way would be on insert AdSense into the pages. It could be possible to insert AdSense into gadgets like showed in the blog Gadget and Robots interaction. AdSense is just a Javascript, which should be inserted on a page and then it will show the ads. This integration should be fairly simple.

One issue with AdSense is if you are allowed to put the ads on Waves. I’m not sure how own the content, when it is hosted on Google’s servers. Is it Google or the participants in the Wave. I cann’t find any information if you are allowed to set ads on other pages than your own.

AdSense has currently products for Mobile or video, it will make sense also to make a Wave version. This way Google will still make money, and the developer can make money. If the developers can make money on their apps, they will develop more applications.

Bookmark and Share

Is Google Wave a purple Cow

I have been listing to Seth Godin’s Purple Cow audio book on the way to work. It is an interesting book, about creating the most success full products or services, which are such unique that people will talk about them. The book is from 2003, so for an internet product it is quite old. But the point probably still holds.

One of the main issues in the book is to create something, which is so unique that you people starts talking about you product. It is very popular to say that I’m working on a Google Wave project, when talking to people how are working with it. People with less knowledge of IT, does not know what wave is, and it is just a black box for them.

On large part of the adoption should be performed by the innovators. These are the people how just want to use the product because it is cool, not because they need it. They will create a lot of hype of the product; leading to the early adopters will start using the product. This is also achieved with Google Wave. Wave is only opened to a limited number of people at the moment and they generate a lot of noise on the product. Some have concerns about the product, but still positive about the potentials of the product. All the early adapters will inform other people and get them aboard the service, when Wave is ready for prime time.

Seth also says that TV ads, are not cost efficiently. Google is not known for spending anything on advertizing they just use word of mouth or blogs which is faster. So they are using other means for communication.

When the developing product focus groups should be banned, so all the rough edges are removed. I don’t know how the product has been developed, but it has probably stared as a 20% project. The goal with the product has been to develop a product to revolutionize the communication world. It is therefore not a small increment of an existing technology.

It was very interesting to hear the audio program, and then see a lot of the ideas used in Google Wave. The only thing which amazes me is the scale of the product and hype, before it is launched.

Image by sunclover.

 

Bookmark and Share

Gadget and Robots interaction

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 tutorial has basis in the Creating A Simple Inline Gadget To Show External Web Applications, 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.

First the robot which inserts the gadget.

public class EmbedUrlRobotServlet extends AbstractRobotServlet {
    public final String URLFIELD = "URL_FIELD";
   
    @Override
    public void processEvents(RobotMessageBundle bundle) {
        Wavelet wavelet = bundle.getWavelet();
        String creator = wavelet.getCreator();
        if (bundle.wasSelfAdded()) {
            Blip blip = wavelet.appendBlip();
            TextView textView = blip.getDocument();
            textView.appendMarkup("<p><b>Inline the url</b></p>\n");
            FormView form = textView.getFormView();
            form.append(new FormElement(ElementType.INPUT, URLFIELD,"http://"));
            form.append(new FormElement(ElementType.BUTTON, "submit", "INSERT"));
        }

        for (Event e : bundle.getEvents()) {
            if (e.getType() == EventType.FORM_BUTTON_CLICKED) {
                Blip blip = e.getBlip();
                FormView form = blip.getDocument().getFormView();
                FormElement urlElement = form.getFormElement(URLFIELD);
                GadgetView gadgetView= blip.getDocument().getGadgetView();
                gadgetView.append(new Gadget("http://pollenvarsel.appspot.com/gadget?url="+urlElement.getValue()));
               
            }
        }
    }
}

 

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.

    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws IOException {
        resp.setContentType("application/xml");
       
        PrintWriter out= resp.getWriter();
        out.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
      +"<Module>"
      +"<ModulePrefs title=\"inline_external_page\" height=\"400\" width=\"800\"/>"
      +"<Content type=\"html\">"
      +"<![CDATA[ "
      +" <div id=\"main\"><!--Main container for the iframe-->"
      +" <iframe name=\"check\" id=\"check\" height=\"100%\" src =\""+(String)req.getParameter("url")+"\" width=\"100%\" frameborder=\"0\">"
        +"<p>Your browser does not support iframes .</p>"
        +"</iframe> <!-- this is where contents of the links are displayed -->"
        +"</div>"
        +"]]></Content>"
        +"</Module>");
    }

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.

The code can be found at code.google.com.

Bookmark and Share

Creating A Simple Inline Gadget To Show External Web Applications

In this post, I will discuss how to create a simple gadget that has the capability to show an external web application inside a wave. The purpose of this blog is to simply show how it is possible to create a gadget that can interact with an external web application. I have a vision that by creating gadgets will help developers create an external web application that interacts with a database storage residing in a server that supports Google Wave Robots’ APIs and whenever the form is updated, it will only need to send request to its server and not inside wave and later on the robot will  send an information to the wave regarding its notifications or create a wave robot/gadget that has the capabilities to add an external web applications dynamically to a wave . Writing this gadget is just as simple as coding a traditional XHTML /HTML page since Google gadgets are created using JavaScript and html.

Creating the gadget

First things first, I have created this gadget using iGoogle Gadget Editor. If you don’t have an account, you can use your Gmail account to sign in here, or if you don’t have any, you can also sign up to the given link and add the Google Gadget Editor in your iGoogle page.

Note: You can also use any text editor and upload the gadget in any available public  host and add it in a wave. Or Host it in any site that has the ability to run Google gadget such as iGoogle.

First step is to construct your XML gadget specifications:

–          Content Section. The <Content> section is where the real work of your gadget happens. It is where you specify the type of gadget, your programming logic, and often the HTML elements that determine the appearance of your gadget.

–          User Preferences. The <UserPrefs> section defines controls that allow users to specify settings for the gadget. For example, a personalized greeting gadget might provide a text field for users to specify their names.

–           Gadget Preferences. The <ModulePrefs> section in the XML file specifies characteristics of the gadget, such as title, author, preferred sizing, and so on.

You can find out more about it here.

This is how it looks after you have declared your gadget specification.

<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs
title="inline_external_page" height="350" width="1280"/>
<Content type="html">
<![CDATA[

]]></Content>
</Module>

Note: Most of the gadgets written for non-Wave containers can run in Wave. However, these gadgets are not able to take advantage of the live and multi-user environment that is Wave. The main difference between Wave gadgets and non-Wave gadgets is that a Wave gadget lives in a wave and can interact with the wave.

The next step is basically like writing a primitive XHTML/HTML code.  You will need to create a <div> section that will serve as the main container of your external page.

<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs
title="inline_external_page" height="350" width="1280"/>
<Content type="html">
<![CDATA[
<div id="main"><!--Main container for the iframe-->
<span>Title</span>

</div>
]]></Content>
</Module>

The next step you need to do is to create an <iframe> section that will hold the external web application that you are trying to show on the container.

<?xml version="1.0" encoding="UTF-8"?>
<Module>
<ModulePrefs
title="inline_external_page" height="350" width="1280"/>
<Content type="html">
<![CDATA[
<div id="main"><!--Main container for the iframe-->
<span>Title</span>
<iframe name="check" id="check" height="100%" src ="https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/pcd!3aportal_content!2fcom.sap.sdn.folder.sdn!2fcom.sap.sdn.folder.application!2fcom.sap.sdn.folder.iviews!2fcom.sap.sdn.folder.crp!2fcom.sap.sdn.app.crp.mypoints?userid=J%2BrvmxDK7BA%3D" width="100%" frameborder="0">
<p>Your browser does not support iframes.</p>
</iframe> <!-- this is where contents of the links are displayed -->
</div>
]]></Content>
</Module>

Those are the steps that you need to follow on creating an inline gadget that holds an external web page. The next thing you need to do is to put it inside a wave, considering that you have already uploaded your gadget in a site/host that can hold a Google gadget.

Putting it in a wave:

First step is to login to your wave account here or if you don’t have any account, you can register here.

Once logged in; Create a new wave. Select Debug>Extensions>Add Gadget…


Inside wave

Place the URL of your gadget on the “Enter the URL for a gadget you want to add” text box and click Add by XML.

This is how it looks after you have successfully added your gadget inside the wave.
final

Those are the steps that i have done to create this simple gadget inside wave. Thank you and if there are any questions or suggestions please do feel free to leave a comment.

References:

http://code.google.com/apis/gadgets/docs/basic.html

http://code.google.com/apis/spreadsheets/spreadsheet_gadgets.html

Bookmark and Share