知行合一
全部博文(31)
分类: 系统运维
2009-06-07 16:58:00
google wave是一个旨在帮助使用者在web上进行交流和协作的产品。一个wave等同于对话和文档,在那里使用者可以利用富含格式化的文本,相片,视频,地图等更多的原料进行几乎即时的沟通和协同工作。Google wave同时也是一个富含开放的API的平台,这些API能让开发者将wave嵌入到其他的web服务中并且还可以让他们构建extensions工作在wave中。
wave可以被分享。任何参与者都可以在消息中的任何位置进行对改消息的回复,内容的编辑,以及在处理过程的任意的时间点来添加参与者。之后playback的功能可以让任何在之后加入的参与者获知在他加入之前有谁,以及在什么时候说过什么。
wave的”直播“性。打字时的直播性,让wave上面的参与者能够获得更快捷的对话方式。关于这一点,可以看看实时的与extensions来进行交互的部分。
google wave api允许开发者通过两个主要形式的开发手段来使用和增强google wave。
1:Extensions:构建robot extensions来自动化的完成一些普通的任务,或是构建gadget extensions来提供给使用者新的交互的方式。
2:Embed:在你的网站中放置一个wave将使你的网站更加具有协作性。
使用google wave apis进行有效的编程需要了解下面的一些wave的基本概念:
wave:一个wave是一个线程化(threaded)的会话。包含一个或是更多的参与者(包括真实的人类参与者(human)和机器人参与者(robots))。wave是一个包含状态和储存历史信息的动态的实体。因其的直播性,参与者可以实时地与wave进行交互或是对其进行修改。Wave可以看作下面介绍的wavelet的容器。
wavelet:一个wavelet是一个有wave(包括初始化会话)产生的线程化(threaded)的会话。Wavelet作为消息的容器,这里消息我们称之为blips。wavelet是wave中对数据进行访问控制的最基本单元。wavelet中的所有参与者都有对wavelet中的所有内容进行完全读写访问的权力。还有就是,在google wave api中发生的所有事件都运行在wavelet以及更低的级别上。
当你在wave中生成wavelet时,你不会从其父母wavelet继承任何访问权限。在wave的生命期内,你可以生成私人会话(private conversations),这个私人会话会变成单独的wavelets,但是其适合同一个wave绑定的。既然时间是在wavelet以及以下级别产生的,那么时间发生的上下文也是限制在一个独立的wavelet上。一个wavelet可以被robot创建和管理,而该robot也是其唯一的参与者。这就允许robot可以有效的使用wavelet来作为一个私有的数据文档。这些数据文档不会暴露给使用者,并且可以包含关于wavelet的结构化或是非结构化的数据。
blip:其是会话的基本单元,由出现在wavelet上的一条单独的消息组成。Blips可以是草稿(drafts)也可以通过点击wave客户端中的 “Done”按钮来进行发布。Blips通过他们的文档来对他们的内容进行管理,下面将进行介绍。Blips也可以包含其他的blips作为他们的子女(children),形成blip层级(blip hierarchy)。每一个wavelet总是由至少一个根blip组成。
document:是和一个blip相关联的内容。这个document由XML组成,它可以被API获取,修改或添加。一般地,你可以通过方便的方法来对document进行管理,而不是直接通过操作XML数据结构。
任何google wave api应用中的基本元素都是wave本身。WavePanel对象是其的持有者。这篇文章就来讨论如何建立和使得WavePanel对象持有wave。
了解google wave api最容易的方式就是看一个简单的例子。下面的代码是在wave api的home页面上显示“welcome”wave。
3C//DTD XHTML 1.0 Strict//EN"
"">
你可以下载这个例子进行编辑运行,但是要和wave进行交互,你需要request Sandbox access,并且要提供你自己的Wave ID。
即使在这个简单的例子中,还是有些事要注意:
1.我们使用“script”标识包含Wave API JavaScript。
2.我们创建了一个名叫waveframe的” 3:我们写了一个JavaScript函数来创建WavePanel对象。 4:我们使用唯一的wave Id来加载独有的wave。 5:我们用init()来初始化WavePanel并将其与 6:我们由标识中的onload事件初始化所有的代码。 上面的步骤在下面解释: URL——指向一个特定JavaScript文件的位置,这个文件包含你所需要的使用Google Wave API的所有的符号(symbols)和定义(definitions)。你的页面必须包含一个指向该URL的的标识,并且这个标识应该被放置在你使用那些符号(symbols)来写的JavaScript之前。 对于显示在web page上的wave,我们必须留一个spot给它。一般的,我们通过创建一个名为”div”的元素并获取该元素在浏览器的DOM(document object model)中的引用来实现之。在上面的例子中,我们定义了一个名为”waveframe”的 var wavePanel = new WavePanel(""); 持有wave的JavaScript类是WavePanel类。这个类的对象可以在网页上持有一个单独的wave。(你也可以创建多个这个类的实例-每一个对象在页面上定义一个wave)我们使用JavaScript的new操作符来创建这个类的一个新的实例。 当你创建了一个新的wave实例,你需要在页面中指定一个DOM节点(通常是div元素)作为wave的一个容器。HTML节点是JavaScript document对象的子女(children),所以我们可以通过document.getElementById()方法来获取这个元素的引用。 函数WavePanel被认为是一个构造函数,它的定义如下: Constructor Description WavePanel(Wave server instance) Creates a new Wave panel using the indicated Wave server instance. For development purposes, this instance will be . (Note the trailing slash in the URL; this is required.) wavePanel.loadWave("wavesandbox.com!w+waveID"); 一旦我们已经通过WavePanel()构造函数创建了wave,我们需要使用初始化的wave来加载它。(目前,我们还不允许你在这种环境中创建一个新的wave)。加载过程通过loadWave()方法完成,该方法接受需要的wave的唯一的wave ID。 现在,你可以通过选择一个wave然后,选择Debug->Get Current Wave Id来获取Wave中的wave ID。注意,访问这个wave的那些人必须是wave的参与者,对于公共的网站是不可能访问的。考虑到这种情况,有一个特殊的保留地址供你添加到wave中(public@a.gwave.com)来提供对任何wave的公共访问。现在,“公共访问”还只是局限在拥有wave sandbox access的用户。 Note:我们正在计划在将来发布对wave只读权限访问。暂时,所有wave的参与者都是激活的参与者(具有读写权限),并且还必须具有Sandbox上的wave帐号。 wavePanel.init(document.getElementById('waveframe')); 当HTML页面渲染时,DOM被增建,外部的图片和脚本被获得并合并进document对象中。为了确保我们的wave在页面完全加载后被再放置到页面上,我们只需在当HTMP页面的元素得到”onload”事件时,执行创建WavePanel对象的函数。这样作避免了不可预期的行为,并且让我们能够获得更多的控制关于wave如何以及何时开始draw的权力。 wave是一个交互实体。people,groups,和robots可以在被邀请或被授权的情况下与wave进行交互。我们期待在不久的将来在Wave Embed API中直接添加进这种功能。然而,目前你必须事先在wave中建立这种访问控制。要允许所有的使用者能够访问你的wave,那么将地址public@a.gwave.com作为一个参与者添加进wave。 你可以使用setUIConfig()方法来改变嵌入的wave的。这个方法准备了一个字符串的集合来对wave初始化时的背景颜色,字体等进行配置。注意:在调用init()之后再调用这个方法依然无效了。 下面的代码改变了wave的显示,改变为绿色背景,白色的Arail字体 setUIConfig('green', 'white', 'Arial', ' Class WavePanel Constructor Constructor Description WavePanel(opt_rootUrl:String) Constructs a WavePanel in the container. An Methods
Methods Return Value Description AddParticipant() None Adds the current user as a participant to the wave. addReply() None Adds a reply to the currently loaded wave. An empty reply will be added to the wave. getFrameId() String Returns the ID of the created init(container:Object, opt_loadCallback:Function) None Actually creates the wave loadWave(waveId:String, opt_callback:Function) None Loads the given wave into the wavePanel. This can be called before or after init. setUIConfig(bgcolor:String, color:String, font:String, fontsize:String) None Set the UI configuration for the wave. This must be done before init() is called. Note that fontSize must be expressed in points, such as " 加载google wave Embed api
Wave DOM Elements
WavePanel对象
加载Wave
初始化wave
添加参与者入wave
配置wave的UI
wave嵌入API参考