协作式虚拟工作空间
你走下走廊,走进设计室。这里和往常一样忙碌;东西散落在地板上。首席架构师 Alex 和另外两位设计师 Brad 和 Lynn 都在这里。他们一直在讨论新项目的架构。
“我想我们差不多完成了,” Alex 说,“看看我们的设计。”他递给你一份文档,你仔细地查看了一下。
“还不错,”你回答说,“但你可能需要看看这个。”你走到白板旁,画了一个草图。Brad 看出了你的意图,拿起一支笔,在你的图纸上添加了一些组件。
Lynn 注意到一个问题,说:“我们在这个方面实施安全接口可能会有一些问题。我给安全部门的 Rachel 打个电话。”她拿起电话,简单交谈后,告诉大家安全团队认为这种实施方式会产生什么影响。
“好的,”你说,“听起来你们走在正确的轨道上。我会把这份初步设计交给程序员,让他们粗略估计一下他们需要多少时间来实现它。”当你走出去时,你注意到你的传呼机收到一条来自你秘书的消息,提醒你下午 3:00 与部门主管开会。
像这样的活动每天都在工作环境中发生;然而,在这种情况下,参与者从未实际移动。事实上,一个人坐在走廊的另一端,另一个人在远程站点工作,第三个人在家。然而,每个人都能够像个人、物体和文档都实际在同一地点一样进行互动。
随着计算机在工作场所和家庭中占据主导地位,人与人之间的互动发生了显著变化。会议不再聚集在饮水机旁或小咖啡馆,而是转移到了互联网上。然而,随着场地变化,也带来了一些限制。你再也无法解读一个人的肢体语言,也无法从一个人的语气中推断含义。使用许多互联网协作工具,例如互联网中继聊天(IRC)或即时通讯工具,你只能理解其他人键入的文字。
我目前从事的项目,协作式虚拟工作空间(CVW),旨在为基于计算机的社交互动增加更多意义。CVW 不仅仅依赖口语,还为社交环境增加了动作、音频和视频,以及更具描述性的虚拟环境。此外,CVW 环境中的用户可以创建和传递各种人工制品,例如文档和图片。这是因为 CVW 实现了持久存储机制与环境的结合。在 CVW 中创建的任何内容都可以保存下来,供其他人随时查看。
最棒的是,CVW 是免费提供的。为了进一步鼓励协作系统的创新,MITRE 公司已将 CVW 变成开源软件产品。通过以这种方式传播 CVW,不同的社区可以开始试验和理解同步的基于计算机的协作。我们相信像 CVW 这样的协作系统将继续发展,互联网社区将大有可为。
让我们看看 CVW 的起源以及构成我们虚拟环境的要素。
从 1994 年的最初构想开始,CVW 就构建在客户端-服务器架构之上。服务器的核心是一个来自 Xerox PARC 的面向对象的 MUD(MOO)(ftp://ftp.lambda.moo.mud.org/pub/MOO/)。MUD 和 MOO 最初只在地下城与勇士玩家的领域内使用,现在已经发展到包含众多社交环境。尽管 MOO 提供了非常具有描述性的环境,但它给当今的普通计算机用户带来了一个挑战——它们主要是文本驱动的。没有花哨的图形界面或精巧的设计,用户只需使用 MOO 客户端程序或 telnet 连接到服务器,登录并开始在环境中互动。
MOO 服务器真正的优势之一是其可扩展性。服务器包含一种名为“MOO”的面向对象编程语言。使用 MOO 语言,程序员可以创建新房间,实现新动作,并提供在虚拟环境中与他人互动的各种方式。再加上允许大量人员同时连接的能力,很容易理解为什么 MOO 已成为流行的协作环境。
如果你下载 LambdaMOO 源代码并在你的 Linux 机器上运行它,你会注意到默认情况下该环境中没有太多内容。每个 MOO 管理员必须构建一个新的虚拟环境,或者获取其他人编写的代码。
CVW 的 MOO 服务器已经包含了我们虚拟环境的代码。我们扩展了我们的 MOO 服务器,以便创建一个大型建筑物,其楼层平面图在客户端中以图形方式显示。尽管这会将客户端与 CVW 服务器紧密耦合,但它确实为新用户提供了更直观的界面。该建筑物由若干层组成,每层有七个房间和各种其他会议场所(走廊、大厅)。这些都可以修改以适应任何团体的需求。
使用基于房间的隐喻还提供了另外两个明显的优势。首先,会话管理可以进行逻辑分区。每个房间将管理该区域用户的特定会话要求。通过在服务器端控制这一点,连接到服务器的任何客户端都不必配置其音频、视频或文档设置即可与其他用户通信。其次,安全性也可以同样轻松地控制。由于每个房间都可以实施单独的访问控制策略,因此可以创建私人会议场所。同样,这提供了一种非常直观的安全实施方式——如果服务器拒绝用户访问房间,他们通常会理解他们没有进入该区域的权限。
除了 MOO 服务器之外,我们还在协作系统中加入了文档持久性。这使得 CVW 能够涵盖协作框架的角色。如果人们聚在一起讨论一个主题,他们可以使用任何可用的工具(文档编辑器、绘图程序)创建文档或图形。使用 CVW,用户可以导入这些外部文档,并允许其他人查看或编辑它们。尽管 MOO 确实允许用户创建对象,但这些对象通常是简单的文本文档,无法轻松导出到其他外部应用程序。这种持久性功能允许异步协作——用户可以随时进入或离开房间,但他们仍然可以访问正在执行的工作。
由于持久性的添加对 MOO 环境进行了重大更改,我们将此功能实现为一个独特的服务器进程,即文档服务器。此服务器不必与 MOO 服务器在同一台机器上运行,但它应该有足够的磁盘空间来存储用户创建的所有文档。文档的存储非常简单——基本上是一个扁平的数据库目录。到目前为止,这已被证明是足够的,但 CVW 的大型实施可能需要考虑重新设计此过程。
创建 CVW 环境的第一步是获取并安装 CVW MOO 服务器和文档服务器软件。如果你浏览网站(http://cvw.mitre.org/),你会找到可供下载的二进制文件和源代码构建版本。我将逐步介绍二进制版本的安装过程,尽管源代码版本只需要多几个步骤。这两个下载都包含详细的文档,所以我只会强调重要的步骤,并尝试指出服务器运行可能遇到的任何障碍。
至于系统要求,你的 CVW 系统的大小取决于你希望构建的虚拟社区的大小。我的 Linux 系统包含一台 Pentium 300,配备 64MB RAM,运行 Red Hat 5.1 和 2.2 内核。尽管我们尚未在负载下测试此配置,但它至少应该足够 40 到 50 个并发用户使用。我们已经在一台 Sun Ultra 2 双处理器机器上同时看到超过 250 个用户,因此配置适当的 Linux 工作站也应该表现相当。此外,运行文档服务器进程的服务器需要安装 Java 1.1 JRE。
在 CVW 软件下载过程中,在接受许可协议后,系统会要求你提供一些个人信息。MITRE 是一家非营利组织,因此,不使用广告或将用户列表出售给其他组织。我们维护用户列表的唯一原因是通知你软件的任何更改以及 CVW 软件可能发生的任何其他活动。
要开始安装 CVW 服务器,请下载两个二进制包,cvw-moo-server-3.2.0-x86-Linux2-libc6.tar.gz 和 cvw-doc-server-3.2.0-any.tar.gz,并将它们放在一个临时目录中。使用命令 tar xvzf package_name 解压这些包将创建单独的目录,其中包含所需的二进制文件。
我决定将 /opt/CVWserver 作为我的安装目录。在创建此目录之前,请在你的系统上创建一个名为“cvw”的用户。此用户将是安装的所有者,因此二进制文件不会以 root 身份执行。尽管我们没有发现以 root 身份运行软件有任何实际问题,但这通常是一个很好的经验法则。创建用户后,使用 mkdir 创建你的安装目录,并将你的 cvw 用户分配为其所有者。
将以下文件从 moo-server 二进制目录移动到你的安装目录——moo 可执行文件、restart 脚本和 CVW.db 文件。如果你愿意,你可以将 CVW.db 重命名为更适合描述你的环境的名称。你选择的名称并不重要,但你需要记住它,因为你稍后会用到它。
文档服务器还需要一个文档存储库。此存储库目录必须足够大,以存储 CVW 中的所有文档。根据你的潜在用途,你可以在刚刚创建的服务器目录下创建一个目录,或者在你的系统上挂载一个单独的分区。我创建了一个 /opt/CVWserver/docstore 目录,因为我预计文档数量会很少。你也可以创建一个 /docstore 目录并将另一个磁盘挂载到它。你采取的路线很大程度上取决于你的预计用途。
接下来,文档服务器需要从文档服务器二进制目录安装文件。将 docserver.jar、docserver.cfg 和 start-dserver 脚本移动到你的安装目录中。你需要修改 docserver.cfg 以指向你的文档存储库。最后,将安装目录中的所有文件所有权更改为 cvw 用户所有。
为了在我的系统启动时自动启动这些进程,我们提供了两个 init 脚本。这些脚本包括用于 MOO 服务器的 cvw.boot 和用于文档服务器的 cvwds.boot。将这些脚本移动到 /etc/rc.d/init.d 并根据你的个人配置进行编辑。默认情况下,我们使用 8888 作为我们的 MOO 服务器通信端口,8889 作为文档服务器端口;如果你的系统上的任何其他程序使用这些端口,请将脚本中的数字更改为未使用的端口。然后可以从 /etc/rc.d/rc3.d/S99cvw 和 /etc/rc.d/rc0.d/K99cvw 创建到 cvw.boot 的链接,以及从 /etc/rc.d/rc3.d/S99cvwds 和 /etc/rc.d/rc0.d/K99cvwds 创建到 cvwds.boot 的链接,以允许自动启动和关闭。要手动启动进程,只需键入
/etc/rc.d/rc3.d/S99cvw start /etc/rc.d/rc3.d/S99cvwds start
要测试服务器进程是否正常运行,可以使用 TELNET 会话。有关运行这些测试的信息,请参见列表 1。
为了向你的用户呈现完整的 CVW 体验,你需要构建一个用户图像存储库。这些图像将显示在客户端软件上,当用户从一个房间移动到另一个房间时,允许虚拟的“面对面”感觉。用户图像最好是 50x60 dpi gif 图像(尽管其他尺寸应该在客户端内缩放),可以存储在两个位置之一。首先,如果你有一个分布式文件系统(例如 NFS),则可以将图像存储在那里以允许全局访问。第二个选项是从 HTTP 服务器获取图像。在任何一种情况下,只要图像存储库是全局可访问的,客户端软件就可以配置为查找图像。
现在我们需要获取客户端。由于任何给定区域内通常存在许多计算机平台,因此我们构建了可以在 Unix 平台以及 Microsoft Windows 下运行的客户端程序。即使用户可能更喜欢在不同的系统上工作,他们仍然可以使用 CVW 进行协作。
目前存在两个可以在 Linux 系统上运行的版本:原始的 Tcl/Tk 客户端和较新的 Java 客户端。两者都以源代码分发形式提供,但只有 Tcl/Tk 可以作为二进制文件下载。此外,只有 Tcl/Tk 客户端可以支持管理功能,尽管我们希望有人能尽快修复这个问题。因此,我将讨论 Tcl/Tk 二进制分发版本的安装。但是,稍后我将介绍 Java 源代码分发版本。
下载 Linux 客户端分发版本并将其保存在临时目录中。对于 Tcl/Tk 客户端,请检索名为 cvw-tk-client-3.2.0-x86-Linux2-libc6.tar.gz 的软件包。移动到你想要安装客户端软件的目录,然后运行 tar xvzf package_name。除了我们网站上提供的客户端软件外,还可以从其他网站获取一些工具。这些工具包括用于多播音频会议的 vat 和用于多播视频会议的 vic,最初由劳伦斯伯克利国家实验室(www.lbl.gov)开发。目前,我们不包含这些工具,因为我们没有重新分发它们的权限。一旦清除了这个障碍,我们希望将所有内容都包含在客户端软件包中。
客户端的另一个重要配置步骤是修改 mime 类型。CVW 使用简单的 mime 查找将文件类型与其父应用程序关联。此文件可以在安装目录下的 lib/mime-db 中找到。要添加新的 mime 关联,只需提供一个应用程序来打开给定文档类型的读取和写入。
README 文件完全详细说明了连接到你的 CVW 服务器所需的其余配置。完成后,从你的安装目录执行 bin/xcvw 将启动应用程序。
默认登录名“User: admin, Password: admin”将允许你登录到你的 CVW 服务器和 CVW。在四处查看一分钟后,你需要完成几个配置步骤。
主菜单栏上的“Admin”菜单提供对系统管理员功能的访问。“打开“System Settings”菜单选项并提供请求的信息。请注意,你应该提供一个多播前缀,该前缀不会干扰网络上的其他多播用户。多播前缀的范围可以从 224.0 到 239.255。
在继续介绍你可以在 CVW 中使用的命令之前,我将更多地描述你的虚拟用户。个人通常会在 CVW 中被分配一个普通用户。此用户有能力执行各种操作:在环境中移动,创建和读取对象,将对象放置在房间中或将它们放在携带文件夹中随身携带,以及在 MOO 中与他人通信。用户还可以修改他们的描述以个性化他们在其他人眼中的外观。此外,用户可以成为房间的所有者,允许他或她修改访问列表和房间的描述。

携带文件夹
可以授予用户额外权限,使其成为 CVW 环境中的程序员。尽管 CVW 不认为程序员具有额外的功能,但程序员可以在 MOO 环境中修改代码和创建对象。
CVW 管理员是 MOO 向导的类似物。换句话说,此用户在 CVW 中拥有最多的功能。管理员有能力:创建房间和用户,修改对象,分配权限以及配置 CVW 环境。尽管可以将管理员功能分配给任何人,但建议限制拥有此权限的人数。
登录 CVW 后,你将进入一栋有多层的建筑物。在每一层楼上,你会发现八个房间和连接走廊。除非权限干预,否则你可以在建筑物内自由移动。你也可以拿起并检查 CVW 中存在的对象。
现在让我们试用一下。对于以下示例,在滚动文本区域下方的输入窗口中输入 MOO 命令。要查找更多信息和示例,请使用 help 命令,单独使用或与你要使用的命令一起使用
help say
首先,要与当前房间中的每个人交谈,请使用 say 命令
say Hello, World你也可以将讲话对象指向特定的人。尽管其他人可能会看到此对话,但接收方会注意到你是直接与他们交谈。
to admin Hello最后,要进行私下交流,以便其他人看不到,请使用 whisper 命令,或者如果用户在另一个房间,则使用 page 命令
whisper Hello to admin page admin Hello page admin !Hello最后一个示例向管理员用户显示一个弹出窗口。此命令使你的评论更容易被接收方注意到。
就像日常人际交流一样,行动有时胜于言语。默认情况下,MOO 允许进行此类交流。用户可以使用称为 emote 的命令,让他们的行动代替语言
emote types furiously at the keyboard
许多这些命令的快捷方式可以在用户图像上找到。通过右键单击用户图像,你将找到一个弹出菜单,其中包含几种通信方法以及信息选择。此菜单将生成与所选个人的定向通信,所有人都可以看到。
CVW 中支持的另外两种流行的通信方法是音频和视频。CVW 通过与劳伦斯伯克利国家实验室的两个常用 mbone 工具:vic 和 vat 绑定来实现这些功能。要启动这些工具,请按顶部工具栏上的“Video”或“Audio”按钮。你会注意到,无需任何配置即可与房间中的任何人发起会议。CVW 会自动处理会话管理任务。当然,你的 Linux 内核需要支持特定硬件所需的音频和视频驱动程序才能使用此功能。
你可能并不总能通过 CVW 与他人交谈,可能是因为你不在办公桌旁或忙于其他事情。CVW 提供了允许你让其他用户知道你不在线的命令
idle gone fishing busy working on project proposal
CVW 提供了两种在房间之间移动的方法。首先,你可以使用导航命令(north、south、east、west、up、down)来简单地指示你想去的地方。go to 命令也可以自动将你移动到目的地
go to CVW Help Desk但是,你可能已经注意到 CVW 地图按钮。单击此按钮将打开一个单独的窗口,其中包含你建筑物的蓝图。此地图还允许你在建筑物周围导航。你可以使用窗口底部的滑块选择要查看的楼层,双击房间可以让你在房间之间快速移动。
进入房间后,当前位于房间中的对象将列在“Contents”窗口中。你将找到的一些对象包括文件夹、文档、白板和 URL 链接。这些对象的菜单可以再次通过右键单击它们的图标找到。通常在这些菜单上找到的选项将允许用户查看、复制、创建快捷方式(链接)或删除文档,具体取决于用户对该项目的权限。你也可以从房间中取出对象,这将把它们移动到你的携带文件夹,也可以将携带文件夹中的项目放回房间。
CVW 客户端将允许你对文档和人员执行更多操作。这些操作包括导入和导出文档,获取连接到服务器的人员列表,查找特定人员或项目,甚至创建人员组以使通信更容易。与其逐步介绍无数可用的选项(这可能需要四个小时来教授),不如指向我们的用户指南,CVW 3.0 Unix 客户端快速参考指南,它可以在我们的网站上找到。
正如我之前提到的,CVW 也存在 Java 源代码客户端。此客户端使用 Blackdown 组织(http://www.blackdown.org/)最近发布的 Java 2 端口。尽管此客户端确实提供了一些更新和更高级的功能,并且也可以在 Linux 上运行,但它可以被认为是 beta 版本,并且需要进行一些错误修复。但是,我们相信此客户端最终将成为标准的 CVW 客户端。我们希望许多用户会发现它很有趣,并将其构建到与 Tcl/Tk 客户端的功能相匹配的程度。
已经开始对替换文档服务器进行一些调查。尽管当前的服务器运行良好,但它有几个缺点:客户端和服务器之间的交互无法保证安全,存储库由一个大型目录组成,并且不存在真正的身份验证机制。我们希望通过新的文档服务器来解决这些问题,该服务器提供更强大的功能和性能。
由于 CVW 已成为开源项目,MITRE 将更专注于开发下一代协作系统。我们希望许多人会发现 CVW 对他们像对我们一样有用,并继续改进它。由于它作为一个互联网项目来说还是一个新生事物,因此存在许多开发可能性。我们希望 CVW 将继续向许多人展示计算机协作的可能性。
Stephen Jones 目前在 MITRE 公司担任软件工程师。当他不骑他的哈雷摩托车外出时,他喜欢与他的妻子 Lynn、两岁的计算机迷儿子 Bradley 和新来的儿子 Derek 一起玩。可以通过电子邮件 srjones@mitre.org 与他联系。