SlideShare a Scribd company logo
1 of 43
Google Wave APIs

        Marcel Prasetya
        mprasetya@google.com
        November 10, 2009
Overview - 3 Ps

 Wave introduction

 Google Wave (Product)

 Google Wave APIs (Platform)
   Embedding
   Extensions (Gadgets, Robots, and Installers)

 Wave Federation (Protocol)
 Roadmap
Where is it?

 Google's Developer Sandbox
 https://wavesandbox.com

 Google Wave Preview
 https://wave.google.com/wave

 API Documentation
 http://code.google.com/apis/wave
 Stay up-to-date on our blog
 http://googlewavedev.blogspot.com/
Google Wave API - Embedding

Make waves available across the web
Embedding

  Embed as a gadget
  http://wave-api.appspot.com/public/gadgets/embed.xml




  Or just add a piece of JavaScript to any page
Wave Embedding JS API
 WavePanel
 loadSearch(searchExpression) Load search panel
 loadWave(waveId) Load wave by ID
 setUIConfigObject(uiConfig) Set user interface configuration
 init(frame) Initialize the IFrame (to be called last)
 addReply() Add reply to the wave
 More to come

 UIConfig
 setBgcolor(color) Background color
 setColor(color) Text color
 setFont(font) Font
 setFontSize(fontSize) Font size
 setHeaderEnabled(enabled) Display header (participants, etc)
 setFooterEnabled(enabled) Display footer (tags, image and file menus)
 setToolbarEnabled(enabled) Switch between wave and wave search

 See http://code.google.com/apis/wave/embed/reference.html for the comple
 reference
Example

 <div id='waveframe' style='height:500px;width:100%'>
 </div>

 <script type='text/javascript'
  src='http://wave-api.appspot.com/public/embed.js'>
 </script>

 <script type='text/javascript'>
  var wavePanel = new WavePanel(
     'http://wave.google.com/a/wavesandbox.com/');
  wavePanel.loadWave('wavesandbox.com!w+PfYnNrZk%1');
  var uiConfig = new WavePanel.UIConfig();
  uiConfig.setColor('red');
  uiConfig.setFont('courier new');
  uiConfig.setFontSize('18px');
  wavePanel.setUIConfigObject(uiConfig);
  wavePanel.init(document.getElementById('waveframe'));
 </script>




Demo!
Extensions

Do more with the Wave
Gadgets and Robots Extensions
                    Robot


   Extension Hook




                    Gadget
Wave Gadgets

Put any web application inside the Wave and get:
   Real-time state synchronization across clients

   Playback
   Real-time interaction with multiple people and robots
   Participant support
Wave Gadget API

What gadget knows:
   host
   participants
   state
   mode (view, edit, playback)

What updates gadget receives:
   participants
   state
   mode
What gadget changes:
   state

Other standard gadget APIs are supported
Hosting Gadgets

 Google Gadget Editor
 http://code.google.com/apis/gadgets/docs/legacy/gs.html#GGE
 App Engine
 http://code.google.com/appengine/
 Any other web hosting options
     Your website.
     Your friend's website.
     etc...
Adding Gadgets to Waves

  Toolbar Menu
     The green gadget button
  Robots
     Add Gadgets from the Robot APIs

  Debug Menu in sandbox
    Debug -> Extensions -> Add Gadget...
    Paste URL of your gadget
Gadget Code Example

 General gadget wrapper
 <?xml version="1.0" encoding="UTF-8"?>
 <Module>
 <ModulePrefs title="Wave API
 Gadget" height="300">
   <Require feature="locked-domain" />
   <Require feature="dynamic-height" />
   <Require feature="wave" />
 </ModulePrefs>
 <Content type="html"><![CDATA[

  Your html goes here.
 ]]></Content>
 </Module>
Gadget Code Example
<script type="text/javascript">
 function initialize() {
   wave.setStateCallback(receiveState, this);
 }
 function receiveState(state) {
   document.getElementById('state').innerHTML = String(state.get('counter'));
   gadgets.window.adjustHeight();
 }
 function resetState() {
   wave.getState().submitDelta({'counter' : '0'});
 }
 function updateState() {
   var state = wave.getState();
   var counter = parseInt(state.get('counter', '0'));
   state.submitDelta({'counter' : ++counter});
 }
 gadgets.util.registerOnLoadHandler(initialize);
</script>

<div style="width: 100%; height: 100%">
 <div id="state"></div><br/>
 <button type="button" onclick="updateState()"> Increment Counter </button>
 <button type="button" onclick="resetState()"> Reset Counter </button>
</div>
Gadget Ideas

 Tic-tac-toe
 Server-authoritative Poker
 (robots + gadgets)
 Collaborative TODO list
 Whiteboard
 Embedded browser
 (collaborative surfing)
Robots

World peace or world domination?
Robot Concept

  Robot is an automated (robotic) participant that lives in
  the cloud that has full access to wave

  It can listen to events on a wave, and respond with a
  series of operations

  Server-side extension, where Gadget is a client-side
  extension

  Currently available for Java and Python APIs on Google
  App Engine
Robot Architecture Overview
Smiley
No emoticons? No problem, Smiley can help.
"""Smiley robot."""

from waveapi import events
from waveapi import robot

def OnBlipSubmitted(properties, context):
 blip = context.GetBlipById(properties['blipId'])
 document = blip.GetDocument()
 contents = blip.GetDocument().GetText()
 smiley = ':)'
 smiles = []
 i = contents.find(smiley)
 while i >= 0:
   smiles.append(i)
   i = string.find(smiley, i + 2)
 for s in reversed(smiles):
   document.SetTextInRange(document.Range(s, s + 2), unichr(0x263A) + ' ')
   document.SetAnnotation(
      document.Range(s, s + 1), 'style/backgroundColor', rgb(253,252,63))

if __name__ == '__main__':
  smiley = robot.Robot('Smiley')
  smiley.RegisterHandler(
    events.BLIP_SUBMITTED, OnBlipSubmitted)
  smiley.Run()
Robot Ideas

  Addie (Calculator bot)
  Facty (Fact-checking bot)
  Spammy (Spam-blip deleting bot)
  Arnie (Terminates other bots)
  Publishy (Publish wave content to an external database)
  Maily (Email integration)
Extension Installers

Shrink-wrap your gadgets and robots
Extension Installer API

 Extension bundles are XML-based manifest files.
 Hooks are "listeners" on the client that can execute
 actions, such as inserting a gadget or adding a
 participant.



  Hooks                   Actions
     New Wave
     Toolbar Menus            Insert Gadget
     Keyboard shortcuts       Add Participant
     Macros                   Create New Wave
     etc                      Apply Annotation
                              etc
Example


<extension
  name="Yes/No/Maybe Gadget"
  description="Select yes, no or maybe."
  thumbnailUrl="...">
 <author name="Google"/>
 <menuHook
   location="TOOLBAR"
   text="Insert a Yes/No/Maybe gadget."
   iconUrl="...">
  <insertGadget url="..."/>
 </menuHook>
</extension>
You can

  Publish your extension manifest publicly

  Add your extension via...
     Debug Menu -> Add Extension...
     Paste your extension URL

  Install/Uninstall your extension
Wave Federation

Federate this.
Federation

Google Wave is a product

Wave is a technology
  wave is to Google Wave
  email is to Gmail

Enables independent wave providers to interoperate

Draft Federation Protocol Spec: http://waveprotocol.org/

The spec is iterating: it's developing in the open
What is Wave Federation?
Why Wave Federation?

 Encourage adoption of wave as technology and ensure
 users have a choice in their wave provider

 The internet is built on open APIs and standard protocols
    We don't want wave to be a silo'ed communication
    tool

 Avoid different organizations building Wave like systems
 that don't interoperate
Wave Data Model

                  Wave
                    collection of wavelets

                  Wavelet
                    collection of participants
                    and documents
                    unit of concurrency
                    unit of wave federation
Wave Federation: Sharing Wavelets

  Wave servers run OT/CC

  A wave servers shares wavelet updates to federated wave
  servers

  Still only one server owns a wavelet. The wavelet id
  determines which domain owns it
       domain: “initech-corp.com"
       id: "conv+3sG7”
When and where to Federate?

 An AddParticipant operation contains an address from
 another wave provider
    e.g address bob@acmewave.com, milton@initech.
    com

 A participant’s domain determines where to send ops
Example: Bob on Acmewave wants to talk
to Milton at Initech Corp.
 Bob's client sends AddParticipant(“milton@initech-corp.
 com”)
    acmewave.com looks up initech-corp.com's
    waveserver
    acmewave.com pushes the AddParticipant operation
    initech-corp.com requests the wavelet history
    For future ops on that wavelet, acmewave.com will:
        accepts ops from initech-corp.com
        transmits ops to initech-corp.com
    initech-corp.com "passively" accepts ops from
    acmewave

 The result: Bob and Milton are happily waving each other
Wave Federation Architecture -
Delta Flow
Data stays in your network

   On-premise solution

   If you don't add anyone from the outside the data
   stays in your network

   Scenario: confidential chat between colleagues in a
   company
Where we've come so far...

Published the (draft) protocol spec
  Google Wave Federation Protocol
  Google Wave Conversation Model (incl. Blip model)

Open sourced ~40K lines of code (http://code.google.
com/p/wave-protocol):
   Wave Model + Operational Transformation
   FedOne: Basic Prototype Client/Server
      With an early crypto library
What we've done...

Opened up a federation port on WaveSandbox.com
   This port is still highly experimental

 Updated the FedOne client/server
   The client does a better job displaying OT
   The server understands the new protocol manifest

 Published a Google Wave Contributors Licensing Agreement
    Encourages community-based development for open source
    patches
http://googlewavedev.blogspot.com/2009/11/wavesandboxcom-
federate-this.html

Demo
Roadmap

But wait... there's more!
Recent Features

 Extensions:
    annotateSelection to markup selected text

 Gadget edit/view mode distinction:
    setModeCallback()

 Robot Java and Python Client Libraries
    Auto-generation of capabilities.xml

 Federation:
    Opened federation port on WaveSandbox.com
Features in Development

  Extensions:
     New hook for regular expressions
         Enables more seamless interaction with robots

  Robots:
     v0.2 Wire Protocol
     Active API (via OpenSocial RPC)
         Allows robot to send operations on demand,
         authenticated with OAuth, to the robot proxy via
         OpenSocial RPC

  Gadgets:
     OpenSocial JS Support
        Provides a common API to access social information
What's Next?

  Extensions:
     Dynamic Extension Gallery
     Improved Extension Installation Flow

  Robots:
    New robot operations (fetch wave, search wave)
    Robots performance improvements

  Gadgets:
    Gadgets latency reduction
    Diff-on-open support

  Federation:
     Open port on wave.google.com
Future Features

  Extensions:
     Internationalization Support
     Extension Store

  Robots:
    Non-AppEngine Robots

  Gadgets:
    UI Wave Library
    Caja Support
    Inline gadgets

  Embed:
    Read-only anonymous embed access
    More display configuration options
Thank you!
Thanks for listening and good luck!

More Related Content

Similar to Natural language processing for botsWave Embedding: Embed waves on any siteWave Search: Search across all waves RoadmapNear Term:- Federation Improvements - Authentication - Crypto - Performance- Gadgets 2.0 - More capabilities - Better integration- Robot APIs - More events - Better integration- Embedding Improvements - Offline support - More customization- Mobile - iPhone - Android- More Languages - C# - Ruby RoadmapLonger Term:- Federation Spec 1.0- Federation Interop Tests- Wave as Platform

Programming For Google Wave
Programming For Google WaveProgramming For Google Wave
Programming For Google WaveRodrigo Borges
 
How to Develop Slack Bot Using Golang.pdf
How to Develop Slack Bot Using Golang.pdfHow to Develop Slack Bot Using Golang.pdf
How to Develop Slack Bot Using Golang.pdfKaty Slemon
 
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...eCommConf
 
Developing a Google Wave Extension
Developing a Google Wave ExtensionDeveloping a Google Wave Extension
Developing a Google Wave ExtensionBrian Kennish
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web ToolkitsYiguang Hu
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitIMC Institute
 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Tony Frame
 
Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Jonas Follesø
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax Wrajivmordani
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web ToolkitsYiguang Hu
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial IntroPamela Fox
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with VoltaDaniel Fisher
 
Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2Alessandro Molina
 
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...James Gallagher
 
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklum Ukraine
 
The Big Picture and How to Get Started
The Big Picture and How to Get StartedThe Big Picture and How to Get Started
The Big Picture and How to Get Startedguest1af57e
 
Google Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformGoogle Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformPamela Fox
 

Similar to Natural language processing for botsWave Embedding: Embed waves on any siteWave Search: Search across all waves RoadmapNear Term:- Federation Improvements - Authentication - Crypto - Performance- Gadgets 2.0 - More capabilities - Better integration- Robot APIs - More events - Better integration- Embedding Improvements - Offline support - More customization- Mobile - iPhone - Android- More Languages - C# - Ruby RoadmapLonger Term:- Federation Spec 1.0- Federation Interop Tests- Wave as Platform (20)

Programming For Google Wave
Programming For Google WaveProgramming For Google Wave
Programming For Google Wave
 
How to Develop Slack Bot Using Golang.pdf
How to Develop Slack Bot Using Golang.pdfHow to Develop Slack Bot Using Golang.pdf
How to Develop Slack Bot Using Golang.pdf
 
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...
David Wang's Presentation at Emerging Communication Conference & Awards 2009 ...
 
Developing a Google Wave Extension
Developing a Google Wave ExtensionDeveloping a Google Wave Extension
Developing a Google Wave Extension
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web ToolkitJava Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
Java Web Programming on Google Cloud Platform [3/3] : Google Web Toolkit
 
Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01Googleappengineintro 110410190620-phpapp01
Googleappengineintro 110410190620-phpapp01
 
Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008Silverlight 2 for Developers - TechEd New Zealand 2008
Silverlight 2 for Developers - TechEd New Zealand 2008
 
Google app engine by example
Google app engine by exampleGoogle app engine by example
Google app engine by example
 
Pushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax WPushing Datatothe Browserwith Comet Ajax W
Pushing Datatothe Browserwith Comet Ajax W
 
Google Web Toolkits
Google Web ToolkitsGoogle Web Toolkits
Google Web Toolkits
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial Intro
 
Wave Workshop
Wave WorkshopWave Workshop
Wave Workshop
 
2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta2008 - TechDays PT: Building Software + Services with Volta
2008 - TechDays PT: Building Software + Services with Volta
 
Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2Reactive & Realtime Web Applications with TurboGears2
Reactive & Realtime Web Applications with TurboGears2
 
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
IBM Connections Activity Stream 3rd Party Integration - Social Connect VI - P...
 
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overviewCiklumJavaSat15112011:Andrew Mormysh-GWT features overview
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
 
The Big Picture and How to Get Started
The Big Picture and How to Get StartedThe Big Picture and How to Get Started
The Big Picture and How to Get Started
 
Google Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, PlatformGoogle Wave 20/20: Product, Protocol, Platform
Google Wave 20/20: Product, Protocol, Platform
 

More from Marakana Inc.

Android Services Black Magic by Aleksandar Gargenta
Android Services Black Magic by Aleksandar GargentaAndroid Services Black Magic by Aleksandar Gargenta
Android Services Black Magic by Aleksandar GargentaMarakana Inc.
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven DevelopmentMarakana Inc.
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMarakana Inc.
 
Why Java Needs Hierarchical Data
Why Java Needs Hierarchical DataWhy Java Needs Hierarchical Data
Why Java Needs Hierarchical DataMarakana Inc.
 
Deep Dive Into Android Security
Deep Dive Into Android SecurityDeep Dive Into Android Security
Deep Dive Into Android SecurityMarakana Inc.
 
Pictures from "Learn about RenderScript" meetup at SF Android User Group
Pictures from "Learn about RenderScript" meetup at SF Android User GroupPictures from "Learn about RenderScript" meetup at SF Android User Group
Pictures from "Learn about RenderScript" meetup at SF Android User GroupMarakana Inc.
 
Android UI Tips, Tricks and Techniques
Android UI Tips, Tricks and TechniquesAndroid UI Tips, Tricks and Techniques
Android UI Tips, Tricks and TechniquesMarakana Inc.
 
2010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-62010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-6Marakana Inc.
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Marakana Inc.
 
Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Marakana Inc.
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationMarakana Inc.
 
jQuery State of the Union - Yehuda Katz
jQuery State of the Union - Yehuda KatzjQuery State of the Union - Yehuda Katz
jQuery State of the Union - Yehuda KatzMarakana Inc.
 
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...Marakana Inc.
 
Efficient Rails Test Driven Development (class 4) by Wolfram Arnold
Efficient Rails Test Driven Development (class 4) by Wolfram ArnoldEfficient Rails Test Driven Development (class 4) by Wolfram Arnold
Efficient Rails Test Driven Development (class 4) by Wolfram ArnoldMarakana Inc.
 
Efficient Rails Test Driven Development (class 3) by Wolfram Arnold
Efficient Rails Test Driven Development (class 3) by Wolfram ArnoldEfficient Rails Test Driven Development (class 3) by Wolfram Arnold
Efficient Rails Test Driven Development (class 3) by Wolfram ArnoldMarakana Inc.
 
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas Enebo
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas EneboLearn about JRuby Internals from one of the JRuby Lead Developers, Thomas Enebo
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas EneboMarakana Inc.
 
Replacing Java Incrementally
Replacing Java IncrementallyReplacing Java Incrementally
Replacing Java IncrementallyMarakana Inc.
 
Learn to Build like you Code with Apache Buildr
Learn to Build like you Code with Apache BuildrLearn to Build like you Code with Apache Buildr
Learn to Build like you Code with Apache BuildrMarakana Inc.
 

More from Marakana Inc. (20)

Android Services Black Magic by Aleksandar Gargenta
Android Services Black Magic by Aleksandar GargentaAndroid Services Black Magic by Aleksandar Gargenta
Android Services Black Magic by Aleksandar Gargenta
 
JRuby at Square
JRuby at SquareJRuby at Square
JRuby at Square
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Martin Odersky: What's next for Scala
Martin Odersky: What's next for ScalaMartin Odersky: What's next for Scala
Martin Odersky: What's next for Scala
 
Why Java Needs Hierarchical Data
Why Java Needs Hierarchical DataWhy Java Needs Hierarchical Data
Why Java Needs Hierarchical Data
 
Deep Dive Into Android Security
Deep Dive Into Android SecurityDeep Dive Into Android Security
Deep Dive Into Android Security
 
Securing Android
Securing AndroidSecuring Android
Securing Android
 
Pictures from "Learn about RenderScript" meetup at SF Android User Group
Pictures from "Learn about RenderScript" meetup at SF Android User GroupPictures from "Learn about RenderScript" meetup at SF Android User Group
Pictures from "Learn about RenderScript" meetup at SF Android User Group
 
Android UI Tips, Tricks and Techniques
Android UI Tips, Tricks and TechniquesAndroid UI Tips, Tricks and Techniques
Android UI Tips, Tricks and Techniques
 
2010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-62010 07-18.wa.rails tdd-6
2010 07-18.wa.rails tdd-6
 
Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6Efficient Rails Test-Driven Development - Week 6
Efficient Rails Test-Driven Development - Week 6
 
Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)Graphicsand animations devoxx2010 (1)
Graphicsand animations devoxx2010 (1)
 
What's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovationWhat's this jQuery? Where it came from, and how it will drive innovation
What's this jQuery? Where it came from, and how it will drive innovation
 
jQuery State of the Union - Yehuda Katz
jQuery State of the Union - Yehuda KatzjQuery State of the Union - Yehuda Katz
jQuery State of the Union - Yehuda Katz
 
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...
Pics from: "James Gosling on Apple, Apache, Google, Oracle and the Future of ...
 
Efficient Rails Test Driven Development (class 4) by Wolfram Arnold
Efficient Rails Test Driven Development (class 4) by Wolfram ArnoldEfficient Rails Test Driven Development (class 4) by Wolfram Arnold
Efficient Rails Test Driven Development (class 4) by Wolfram Arnold
 
Efficient Rails Test Driven Development (class 3) by Wolfram Arnold
Efficient Rails Test Driven Development (class 3) by Wolfram ArnoldEfficient Rails Test Driven Development (class 3) by Wolfram Arnold
Efficient Rails Test Driven Development (class 3) by Wolfram Arnold
 
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas Enebo
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas EneboLearn about JRuby Internals from one of the JRuby Lead Developers, Thomas Enebo
Learn about JRuby Internals from one of the JRuby Lead Developers, Thomas Enebo
 
Replacing Java Incrementally
Replacing Java IncrementallyReplacing Java Incrementally
Replacing Java Incrementally
 
Learn to Build like you Code with Apache Buildr
Learn to Build like you Code with Apache BuildrLearn to Build like you Code with Apache Buildr
Learn to Build like you Code with Apache Buildr
 

Recently uploaded

Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104misteraugie
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAssociation for Project Management
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...christianmathematics
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfsanyamsingh5019
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...fonyou31
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024Janet Corral
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Disha Kariya
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeThiyagu K
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajanpragatimahajan3
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfJayanti Pande
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfchloefrazer622
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introductionMaksud Ahmed
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdfQucHHunhnh
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Krashi Coaching
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...EduSkills OECD
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...PsychoTech Services
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfAdmir Softic
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactdawncurless
 

Recently uploaded (20)

Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104Nutritional Needs Presentation - HLTH 104
Nutritional Needs Presentation - HLTH 104
 
APM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across SectorsAPM Welcome, APM North West Network Conference, Synergies Across Sectors
APM Welcome, APM North West Network Conference, Synergies Across Sectors
 
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"Mattingly "AI & Prompt Design: The Basics of Prompt Design"
Mattingly "AI & Prompt Design: The Basics of Prompt Design"
 
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
Explore beautiful and ugly buildings. Mathematics helps us create beautiful d...
 
Sanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdfSanyam Choudhary Chemistry practical.pdf
Sanyam Choudhary Chemistry practical.pdf
 
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
Ecosystem Interactions Class Discussion Presentation in Blue Green Lined Styl...
 
General AI for Medical Educators April 2024
General AI for Medical Educators April 2024General AI for Medical Educators April 2024
General AI for Medical Educators April 2024
 
Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..Sports & Fitness Value Added Course FY..
Sports & Fitness Value Added Course FY..
 
Measures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and ModeMeasures of Central Tendency: Mean, Median and Mode
Measures of Central Tendency: Mean, Median and Mode
 
social pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajansocial pharmacy d-pharm 1st year by Pragati K. Mahajan
social pharmacy d-pharm 1st year by Pragati K. Mahajan
 
Web & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdfWeb & Social Media Analytics Previous Year Question Paper.pdf
Web & Social Media Analytics Previous Year Question Paper.pdf
 
Disha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdfDisha NEET Physics Guide for classes 11 and 12.pdf
Disha NEET Physics Guide for classes 11 and 12.pdf
 
Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1Código Creativo y Arte de Software | Unidad 1
Código Creativo y Arte de Software | Unidad 1
 
microwave assisted reaction. General introduction
microwave assisted reaction. General introductionmicrowave assisted reaction. General introduction
microwave assisted reaction. General introduction
 
1029 - Danh muc Sach Giao Khoa 10 . pdf
1029 -  Danh muc Sach Giao Khoa 10 . pdf1029 -  Danh muc Sach Giao Khoa 10 . pdf
1029 - Danh muc Sach Giao Khoa 10 . pdf
 
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
Kisan Call Centre - To harness potential of ICT in Agriculture by answer farm...
 
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
Presentation by Andreas Schleicher Tackling the School Absenteeism Crisis 30 ...
 
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
IGNOU MSCCFT and PGDCFT Exam Question Pattern: MCFT003 Counselling and Family...
 
Key note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdfKey note speaker Neum_Admir Softic_ENG.pdf
Key note speaker Neum_Admir Softic_ENG.pdf
 
Accessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impactAccessible design: Minimum effort, maximum impact
Accessible design: Minimum effort, maximum impact
 

Natural language processing for botsWave Embedding: Embed waves on any siteWave Search: Search across all waves RoadmapNear Term:- Federation Improvements - Authentication - Crypto - Performance- Gadgets 2.0 - More capabilities - Better integration- Robot APIs - More events - Better integration- Embedding Improvements - Offline support - More customization- Mobile - iPhone - Android- More Languages - C# - Ruby RoadmapLonger Term:- Federation Spec 1.0- Federation Interop Tests- Wave as Platform

  • 1. Google Wave APIs Marcel Prasetya mprasetya@google.com November 10, 2009
  • 2. Overview - 3 Ps Wave introduction Google Wave (Product) Google Wave APIs (Platform) Embedding Extensions (Gadgets, Robots, and Installers) Wave Federation (Protocol) Roadmap
  • 3. Where is it? Google's Developer Sandbox https://wavesandbox.com Google Wave Preview https://wave.google.com/wave API Documentation http://code.google.com/apis/wave Stay up-to-date on our blog http://googlewavedev.blogspot.com/
  • 4. Google Wave API - Embedding Make waves available across the web
  • 5. Embedding Embed as a gadget http://wave-api.appspot.com/public/gadgets/embed.xml Or just add a piece of JavaScript to any page
  • 6. Wave Embedding JS API WavePanel loadSearch(searchExpression) Load search panel loadWave(waveId) Load wave by ID setUIConfigObject(uiConfig) Set user interface configuration init(frame) Initialize the IFrame (to be called last) addReply() Add reply to the wave More to come UIConfig setBgcolor(color) Background color setColor(color) Text color setFont(font) Font setFontSize(fontSize) Font size setHeaderEnabled(enabled) Display header (participants, etc) setFooterEnabled(enabled) Display footer (tags, image and file menus) setToolbarEnabled(enabled) Switch between wave and wave search See http://code.google.com/apis/wave/embed/reference.html for the comple reference
  • 7. Example <div id='waveframe' style='height:500px;width:100%'> </div> <script type='text/javascript' src='http://wave-api.appspot.com/public/embed.js'> </script> <script type='text/javascript'> var wavePanel = new WavePanel( 'http://wave.google.com/a/wavesandbox.com/'); wavePanel.loadWave('wavesandbox.com!w+PfYnNrZk%1'); var uiConfig = new WavePanel.UIConfig(); uiConfig.setColor('red'); uiConfig.setFont('courier new'); uiConfig.setFontSize('18px'); wavePanel.setUIConfigObject(uiConfig); wavePanel.init(document.getElementById('waveframe')); </script> Demo!
  • 9. Gadgets and Robots Extensions Robot Extension Hook Gadget
  • 10. Wave Gadgets Put any web application inside the Wave and get: Real-time state synchronization across clients Playback Real-time interaction with multiple people and robots Participant support
  • 11. Wave Gadget API What gadget knows: host participants state mode (view, edit, playback) What updates gadget receives: participants state mode What gadget changes: state Other standard gadget APIs are supported
  • 12. Hosting Gadgets Google Gadget Editor http://code.google.com/apis/gadgets/docs/legacy/gs.html#GGE App Engine http://code.google.com/appengine/ Any other web hosting options Your website. Your friend's website. etc...
  • 13. Adding Gadgets to Waves Toolbar Menu The green gadget button Robots Add Gadgets from the Robot APIs Debug Menu in sandbox Debug -> Extensions -> Add Gadget... Paste URL of your gadget
  • 14. Gadget Code Example General gadget wrapper <?xml version="1.0" encoding="UTF-8"?> <Module> <ModulePrefs title="Wave API Gadget" height="300"> <Require feature="locked-domain" /> <Require feature="dynamic-height" /> <Require feature="wave" /> </ModulePrefs> <Content type="html"><![CDATA[ Your html goes here. ]]></Content> </Module>
  • 15. Gadget Code Example <script type="text/javascript"> function initialize() { wave.setStateCallback(receiveState, this); } function receiveState(state) { document.getElementById('state').innerHTML = String(state.get('counter')); gadgets.window.adjustHeight(); } function resetState() { wave.getState().submitDelta({'counter' : '0'}); } function updateState() { var state = wave.getState(); var counter = parseInt(state.get('counter', '0')); state.submitDelta({'counter' : ++counter}); } gadgets.util.registerOnLoadHandler(initialize); </script> <div style="width: 100%; height: 100%"> <div id="state"></div><br/> <button type="button" onclick="updateState()"> Increment Counter </button> <button type="button" onclick="resetState()"> Reset Counter </button> </div>
  • 16. Gadget Ideas Tic-tac-toe Server-authoritative Poker (robots + gadgets) Collaborative TODO list Whiteboard Embedded browser (collaborative surfing)
  • 17. Robots World peace or world domination?
  • 18. Robot Concept Robot is an automated (robotic) participant that lives in the cloud that has full access to wave It can listen to events on a wave, and respond with a series of operations Server-side extension, where Gadget is a client-side extension Currently available for Java and Python APIs on Google App Engine
  • 20. Smiley No emoticons? No problem, Smiley can help. """Smiley robot.""" from waveapi import events from waveapi import robot def OnBlipSubmitted(properties, context): blip = context.GetBlipById(properties['blipId']) document = blip.GetDocument() contents = blip.GetDocument().GetText() smiley = ':)' smiles = [] i = contents.find(smiley) while i >= 0: smiles.append(i) i = string.find(smiley, i + 2) for s in reversed(smiles): document.SetTextInRange(document.Range(s, s + 2), unichr(0x263A) + ' ') document.SetAnnotation( document.Range(s, s + 1), 'style/backgroundColor', rgb(253,252,63)) if __name__ == '__main__': smiley = robot.Robot('Smiley') smiley.RegisterHandler( events.BLIP_SUBMITTED, OnBlipSubmitted) smiley.Run()
  • 21. Robot Ideas Addie (Calculator bot) Facty (Fact-checking bot) Spammy (Spam-blip deleting bot) Arnie (Terminates other bots) Publishy (Publish wave content to an external database) Maily (Email integration)
  • 23. Extension Installer API Extension bundles are XML-based manifest files. Hooks are "listeners" on the client that can execute actions, such as inserting a gadget or adding a participant. Hooks Actions New Wave Toolbar Menus Insert Gadget Keyboard shortcuts Add Participant Macros Create New Wave etc Apply Annotation etc
  • 24. Example <extension name="Yes/No/Maybe Gadget" description="Select yes, no or maybe." thumbnailUrl="..."> <author name="Google"/> <menuHook location="TOOLBAR" text="Insert a Yes/No/Maybe gadget." iconUrl="..."> <insertGadget url="..."/> </menuHook> </extension>
  • 25. You can Publish your extension manifest publicly Add your extension via... Debug Menu -> Add Extension... Paste your extension URL Install/Uninstall your extension
  • 27. Federation Google Wave is a product Wave is a technology wave is to Google Wave email is to Gmail Enables independent wave providers to interoperate Draft Federation Protocol Spec: http://waveprotocol.org/ The spec is iterating: it's developing in the open
  • 28. What is Wave Federation?
  • 29. Why Wave Federation? Encourage adoption of wave as technology and ensure users have a choice in their wave provider The internet is built on open APIs and standard protocols We don't want wave to be a silo'ed communication tool Avoid different organizations building Wave like systems that don't interoperate
  • 30. Wave Data Model Wave collection of wavelets Wavelet collection of participants and documents unit of concurrency unit of wave federation
  • 31. Wave Federation: Sharing Wavelets Wave servers run OT/CC A wave servers shares wavelet updates to federated wave servers Still only one server owns a wavelet. The wavelet id determines which domain owns it domain: “initech-corp.com" id: "conv+3sG7”
  • 32. When and where to Federate? An AddParticipant operation contains an address from another wave provider e.g address bob@acmewave.com, milton@initech. com A participant’s domain determines where to send ops
  • 33. Example: Bob on Acmewave wants to talk to Milton at Initech Corp. Bob's client sends AddParticipant(“milton@initech-corp. com”) acmewave.com looks up initech-corp.com's waveserver acmewave.com pushes the AddParticipant operation initech-corp.com requests the wavelet history For future ops on that wavelet, acmewave.com will: accepts ops from initech-corp.com transmits ops to initech-corp.com initech-corp.com "passively" accepts ops from acmewave The result: Bob and Milton are happily waving each other
  • 35. Data stays in your network On-premise solution If you don't add anyone from the outside the data stays in your network Scenario: confidential chat between colleagues in a company
  • 36. Where we've come so far... Published the (draft) protocol spec Google Wave Federation Protocol Google Wave Conversation Model (incl. Blip model) Open sourced ~40K lines of code (http://code.google. com/p/wave-protocol): Wave Model + Operational Transformation FedOne: Basic Prototype Client/Server With an early crypto library
  • 37. What we've done... Opened up a federation port on WaveSandbox.com This port is still highly experimental Updated the FedOne client/server The client does a better job displaying OT The server understands the new protocol manifest Published a Google Wave Contributors Licensing Agreement Encourages community-based development for open source patches http://googlewavedev.blogspot.com/2009/11/wavesandboxcom- federate-this.html Demo
  • 39. Recent Features Extensions: annotateSelection to markup selected text Gadget edit/view mode distinction: setModeCallback() Robot Java and Python Client Libraries Auto-generation of capabilities.xml Federation: Opened federation port on WaveSandbox.com
  • 40. Features in Development Extensions: New hook for regular expressions Enables more seamless interaction with robots Robots: v0.2 Wire Protocol Active API (via OpenSocial RPC) Allows robot to send operations on demand, authenticated with OAuth, to the robot proxy via OpenSocial RPC Gadgets: OpenSocial JS Support Provides a common API to access social information
  • 41. What's Next? Extensions: Dynamic Extension Gallery Improved Extension Installation Flow Robots: New robot operations (fetch wave, search wave) Robots performance improvements Gadgets: Gadgets latency reduction Diff-on-open support Federation: Open port on wave.google.com
  • 42. Future Features Extensions: Internationalization Support Extension Store Robots: Non-AppEngine Robots Gadgets: UI Wave Library Caja Support Inline gadgets Embed: Read-only anonymous embed access More display configuration options
  • 43. Thank you! Thanks for listening and good luck!