2009年06月09日

 

dimdim用到的开源项目如下:

 —————————————

terracotta
terracotta ['terə'kɔtə] 赤陶;赤土
官方网址: http://terracotta.org/
 

Open Terracotta一个JVM级的开源群集框架,提供:HTTP Session复制,分布式缓存,POJO群集,
跨越群集的JVM来实现分布式应用程序协调(采用代码注入的方式,所以你不需要修改任何)。
Terracotta提供一种JVM集群方案,可让单节点、多线程的应用变成分布式、多节点的应用,
而无需修改一行代码。

—————————————

Lighttpd
官方网址: http://www.lighttpd.net/
中文WIKI:  http://www.lighttpd.com.cn/
 

Lighttpd – 是由德国人 Jan Kneschke 领导开发的,基于BSD许可的开源WEB服务器软件,
其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的
web server环境。具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点。
Lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI,
Auth, 输出压缩(output compress), URL重写, Alias等重要功能。因此对于那些负载
非常高的WEB服务器选用 Lighttpd 会是非常完美的解决方案。

Lighttpd名字的来源
light footprint + httpd = LightTPD 可以读成Lighty,
轻量级的HTTP服务器

—————————————

nginx
官方网址: http://nginx.org/
中文站:   http://www.nginx.cn
中文维基: http://wiki.codemongers.com/NginxChs
 

一个俄国人开发的轻量级高性能web server。
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的。

—————————————

ACE
Adaptive Communication Environment
An OO Network Programming Toolkit in C++
官方站点: http://www.cs.wustl.edu/~schmidt/ACE.html
           http://www.cse.wustl.edu/~schmidt/ACE.html
 

Adaptive Communication Environment(自适配通信环境),简称ACE。为一个以C++的Template
技术所做成的开放源代码的可跨平台的网络应用程序的程序库套件。

—————————————

Tomcat
web服务器
 

—————————————

CherryPy
http://www.cherrypy.org/
a pythonic, object-oriented HTTP framework
基于python的web开发框架
 

—————————————

GWT
http://code.google.com/intl/zh-CN/webtoolkit/
Google web toolkit
Google Web 工具包
 

—————————————

 

 

 

 

 

 

 

 

 

 

2009年06月08日

 

FastCGI学习

FastCGI是一个常驻型的CGI,dimdim项目中的VNC-reflector采用了该技术,所以今天
就研究了一下。
FastCGI官方网址:http://www.fastcgi.com/一般的工作过程如下:
首先设置WEB服务器支持FastCGI的调用(如apache的mod_fastcgi.so或者mod_fcgid.so),
然后编写相应的FastCGI程序(如reflector),
最后编写调用FastCGI的网页程序。

FastCGI

当然,WEB服务器有很多种(如apache/lighttpd),不同的服务器,支持FastCGI方法也不同;
编写FastCGI程序的语言也有很多种(如c++/java/python/perl),不同的语言,编写代码
格式也不尽相同。

我比较熟悉的是apache和c++,所以下面主要是以它们作为例子。

apache支持fastCGI的模块常用的有两个,一个mod_fastcgi,一个mod_fcgid。
其中mod_fcgid是一个跟mod_fastcgi二进制兼容的Apache module,增强了一些性能。
它是国人作品,官方网址 http://fastcgi.coremail.cn/index.htm ,推荐使用。

—————————————

百度百科对FastCGI的解释是:

1. FastCGI 像是一个常驻 (long-live) 型的 CGI,它可以一直执行着,只要激活后,
   不会每次都要花费时间去 fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
2. FastCGI 可在任何平台上使用,Netscape Enterprise 及 IIS 都有 FastCGI 的模块
   可供使用,阿帕契 (Apache,以及利用 Apache 衍生出做的服务器) 上也有 mod_fastcgi 可用。
3. FastCGI 支持 C/C++,Ruby, Perl,Tcl,Java,Python 等程序语言。
4. FastCGI 的应用程序亦兼容于 CGI。即 FastCGI 的应用程序也可以当成 CGI 来执行。
5. 现有的 CGI 程序要改写成 FastCGI 非常简单,最少可能只需要多加入三行程序代码。
6. FastCGI 的侦错方式与 CGI 大同小异,只要带入程序所需的环境变量及参数,即可在命令列模式执行或侦错。
7. FastCGI 应用程序的写作方式与 CGI 类似,除了几项原则要特别注意外,FastCGI 的
   写作方式跟 CGI 几乎一样,与学习 Web Server API 比较起来, FastCGI 简单多了。
8. FastCGI 支授分布式运算 (distributed computing),即 FastCGI 程序可以在网站服务器
   以外的主机上执行并且接受来自其它网站服务器来的请求。

—————————————

一个具体的例子:
AMP环境使用的xampp包,fcgi程序使用的是官方自带的echo-cpp。

*)编译echo-cpp工程,生成echo-cpp.exe文件。
*)拷贝echo-cpp.exe/libfcgi.dll文件到cgi-bin目录下,并改名为echo-cpp.fcgi。

*)修改xampp\apache\conf\httpd.conf,添加下面的定义:
   注意fcgid-script是mod_fcgid注册的handler。
   LoadModule fcgid_module modules/mod_fcgid.so
   <IfModule mod_fcgid.c>
      AddHandler fcgid-script .fcgi
      IPCConnectTimeout 20
   </IfModule>

*)新建测试网页xampp\htdocs\test_fcgi.htm,内容如下:
   …
   <form name="subform" method="POST" action="cgi-bin/echo-cpp.fcgi">
     <br><hr>
     <input type="submit" name="submit" value="发送">
     <input type="reset" value="复位">
   </form>
   …

*)打开浏览器,输入http://localhost/test_fcgi.htm
   鼠标点击“发送”按钮,即可显示echo-cpp输出的内容:
   echo-cpp
   PID: 4696
   Request Number: 2
   Request Environment
   …

—————————————

apache支持fastcgi的模块mod_fastcgi:
http://www.fastcgi.com/drupal/node/25 must be configured to identify requests for FastCGI URIs. mod_fastcgi registers
(with Apache) a handler type of fastcgi-script for this purpose.

Apache

To configure Apache to handle all files (within the scope of the directive) as FastCGI
applications (e.g. for a fcgi-bin directory):
SetHandler fastcgi-script

To configure Apache to handle files (within the scope of the directive) with the specified
extension(s) as FastCGI applications:
AddHandler fastcgi-script fcg fcgi fpl

Consult the Apache documentation for more information regarding these and other directives
which affect request handling (such as Action).

Dynamic FastCGI applications require the ExecCGI option be enabled (see the Options directive)
in the application’s directory.

—————————————

使用mod_fastcgi模块的httpd.conf配置文件例子:
http://www.fastcgi.com/docs/faq.html fastcgi_module modules/mod_fastcgi.so

LoadModule

<IfModule mod_fastcgi.c>

    # URIs that begin with /fcgi-bin/, are found in /var/www/fcgi-bin/
    # 别名映射
    Alias /fcgi-bin/ /var/www/fcgi-bin/

    # Anything in here is handled as a "dynamic" server if not defined as "static" or "external"
    # 该目录下的所有文件将被作为fcgi程序执行
    <Directory /var/www/fcgi-bin/>
        SetHandler fastcgi-script
        Options +ExecCGI
    </Directory>

    # Anything with one of these extensions is handled as a "dynamic" server if not defined as
    # "static" or "external". Note: "dynamic" servers require ExecCGI to be on in their directory.
    # 扩展名fcgi/fpl的文件将被作为fcgi程序执行
    # 注意fastcgi-script是mod_fastcgi注册的handler。
    AddHandler fastcgi-script .fcgi .fpl

    # Start a "static" server at httpd initialization inside the scope of the SetHandler
    FastCgiServer /var/www/fcgi-bin/echo -processes 5

    # Start a "static" server at httpd initialization inside the scope of the AddHandler
    FastCgiServer /var/www/htdocs/some/path/echo.fcgi

    # Start a "static" server at httpd initialization outside the scope of the Set/AddHandler
    FastCgiServer /var/www/htdocs/some/path/coolapp
    <Directory /var/www/htdocs/some/path/coolapp>
        SetHandler fastcgi-script
    </Directory>

</IfModule>

—————————————

 

 

2009年06月03日

 

Intelligere SCS rc1 flash客户端编译过程总结

环境准备:
*) FB3.0.2 集成开发环境。
*) flex_sdk_3.2.0 支持fp10的开发包,fb3默认包含的是3.1.0
*) datavisualization_sdk3.3 图形组件,包括饼图/柱状图等。
*) 如果需要编译fpfinder的话,还需要准备mtasc和as2ant软件。

在D:\Program Files\Adobe\Flex Builder 3\sdks目录下新建"3.2.0"目录,
拷贝flexsdk和datavisualization_sdk3文件到此目录。
然后设置flexbuilder,添加 3.2.0 SDK。
(选择菜单windows – preference,选择条目 flex – "installed flex sdks")

编译具体过程:
*)启动flexbulider开发环境。
*)新建一个新的"flex project"。
   工程名"Intelligere",不使用工作空间的默认路径。
*)拷贝rc1\src目录下的所有文件到新建的工程src目录下。
   (事实上scs发布时,仅打包了html-template、libs、src三个目录,
     没有打包flex工程文件和flash的输出目录)
*)设置工程属性,"Flex application",添加Intelligere.mxml和
   IntelligereLearningModule.mxml这两个应用,设置Intelligere为默认。
   (默认应用对应于.actionScriptProperties文件中的mainApplicationPath属性,
     所有应用对应于applications标记)
*)设置flash player的目标版本,由于scs rc1用到了v10的一些特性,
   所以需要使用flexsdk3.2.0以上版本。
   工程属性-"Flex compiler",
      Use a specified SDK flex 3.2,
      Require Flash player version 10.0.0
   工程属性-"Flex build path"-"Library path"
      添加datavisualization.swc(图表组件)
      (官方文档说还需要删除v9的playerglobal.swc,再添加v10的playerglobal.swc,
        但我发现默认加入的就是v10版本,所以没有进行这一步)
*)编译即可。

—————————————

备忘录:
adobe网站的下载系统很是怪异,同一个文件从不同的入口可以到达不同的下载页面。
比如fb3的下载,我就见到3个完全不同的下载页面:
http://www.adobe.com/cfusion/entitlement/index.cfm?e=flex3email
http://www.adobe.com/cfusion/entitlement/index.cfm?e=flexbuilder3
https://www.adobe.com/cfusion/tdrc/index.cfm?product=flex
感觉第一个下载页面最清楚,提供了详细的版本号和文件的校验和。
Flex Builder 3.0.2
Windows: D516A81D0AC01DF4E4B75B28BDB63B8D

开源flexsdk不包含图形组件datavisualization,它需要从官方网站单独下载,
或者从FlexBuilder开发环境中剥离。flex sdk free 事实上就等于 opensource
加上 addon 。

—————————————

 

2009年05月14日

OpenMeetings客户端学习

OpenLaszlo目录结构:
\demos  例子代码
\docs 文档
\examples 例子代码
\laszlo-explorer 10分钟向导
\lps\components 开发包SDK

其中最关键的是components目录,类似MFC类库,它包含了OpenLaszlo自带的所有类。
incubator(孵化器)目录包含了一些第三方的类,暂时还没有完全整合到OpenLaszlo的类库里。

OpenMeetings客户端目录结构:
\base               基本类库
   \auth            用户登陆认证窗口、注册新用户窗口、重新设置密码窗口
   \components      界面组件,包括日历、列表、滚动条等UI组件。
      \button         按钮类,包含浅绿色和蓝色按钮,其中蓝色按钮是工具栏某一项命令按钮的父类。
      \calendar       日历类,日历窗口和日期选择。
      \clickbox       单选框
      \conferencebox  主要被conferenceView继承的一个界面框,包括成员列表框、白板文件框和聊天框。
      \explorer       弹出窗口类,labelExplorerBox是很多类的父类,如登陆、注册新用户、导入、导出。
      \list           列表
      \lps            包括(1)属性面板中的UI组件,如各种滑动条slider(文字大小、线宽、颜色选择等);
                          (2)正则表达式验证错误的提示框;
      \panel          面板,如工具栏面板。
      \presenter      窗口特效
      \scrollbars     水平和垂直滚动条scrool
      \simplevaluelist 列表
      \text           文本框
      \turnoverlist   列表
      \upload         文件上传窗口
      \validbox       支持有效性验证的文本框,也可能是下拉列表框,如"国家选择"
   \contentviews    确认删除窗口、保存窗口等
   \hibernate       远端方法调用,继承自rtmpConnection,负责主要流程调度及部分默认配置
   \navi            导航菜单
   \remote          包括(1)远端方法调用,封装了rtmpConnection,奇怪,底层也有该类的实现。
                        (2)视频窗口封装
   \tabbar          tab标签,已经不再使用了。
   \usermanage      用户管理,已经不再使用了。
\doc                文档,可惜都是日文,所以根本没用
\modules            各种功能模块
   \admin           管理模块
   \calendar        日历模块
   \chat            聊天模块
   \conference      会议模块
      \browser        浏览网页
      \moderation     主席控制,包括主席面板、申请主席窗口、响应主席窗口,开始录制窗口。
      \conference     会议和演讲视图,会议菜单栏。
      \participents   成员列表
      \polls          投票
      \popups         各种弹出窗口
      \tabbar
      \tabcontent
      \video          视频相关类
      \videoclassroom 视频窗口
      \whiteboard     白板模块
   \dashboard
   \events
   \invitation
   \issuetracker
   \meetings
   \recording
   \settings
   \wizard
\resources          资源文件,放置图片和swf文件
\rest               测试rest网关
\test               测试代码

—————————————

通过这一段时间的学习,感觉sebarwagnar很牛B,big niubility.

但是东西还是有点糙,如果真的拿来做产品部署,还是远远不够的。

 

 

 

2009年04月16日

在会议室聊天的时候,窗口最上面出现最近聊天内容,很是糟糕,但是貌似还有一定的偶然性,
即有时候不出现。奇怪的是,OpenMeetings官方的demo没有这个BUG。
为了解决这个问题,今天分析了一下它的聊天代码。整体框架如下:
 

其中调用addChatHistory的地方有:
canvas.addChatHistory  ->  canvas._chatContent.addChatHistory
                           canvas._chatHistory.addChatHistory (已经不再使用了)
canvas._chatContent.addChatHistory
canvas._chatContentRPC.addChatHistory
canvas._overAllChatContent.addChatHistory

*) _chatContent是 chatTab ,即会议室里的聊天窗口
*) _chatContentRPC是 roomlistDetails ,即会议列表里的聊天窗口
*) _overAllChatContent是 overAllChat ,即首页里的聊天窗口。

仔细测试后发现,主要是由于在会议室聊天的时候,同时给_chatContent和_chatContentRPC调用了
addChatHistory,所以导致有时屏幕顶部出现聊天内容,我怀疑是_chatContentRPC出了问题,所以
暂时的解决方案是把这屏蔽掉。

2009年04月15日

OpenMeetings的白板功能不支持包含中文字符的文件名,它被自动替换为下换线。
比如上传“测试.pdf”,则替换为“____.pdf”。这个问题在Red5中文论坛和一些博客里
有人询问过,但是我没有google/baidu到具体的解决方法,所以决定自己尝试一下。直观
感觉是个小儿科的问题,无非就是字符串编码的问题嘛,没想到呀没想到,居然搞了整整
一天。或许对JAVA比较熟悉的程序员几分钟就搞定了吧,我是对JAVA一窍不通,完全靠着
多年C++的经验硬碰的,哈哈。

下面列一下详细的修改日志,以及其中碰到的若干问题。
*)Dom4j对中文的支持
*)中文文件的下载
*)ImageMagic对中文文件的处理

详细修改日志:

1、处于安全方面的考虑,OpenMeetings对上传的文件名名称字符进行了过滤,只允许26个大小字母和
   10个数字以及下划线。这种过滤对中文文件名简直就是灾难,导致的后果是所有的中文名称都被
   替换成了下划线“_____”。我现在的解决方法是不进行过滤,对任意字符都返回true(或许有安全隐患)。

修改 StringComparer.java 文件:

在compareChars函数里
  for (int i=0;i<allowedChars.length();i++)
    //if (allowedChars.charAt(i)==inputChar) return true;
    return true; // XRadish *
  return false;

—————————————

2、OpenLaszlo开发环境生成的swf文件(即OpenMeetings的客户端),默认编码都是UTF-8编码,即发送给
   OpenMeetings的字符串全部都是UTF-8编码的,我们需要进行转换。

修改 UploadHandler.java 文件:

在service函数里
  //trim whitespace
  String fileSystemName = StringUtils.deleteWhitespace(upload.getFileSystemName("Filedata"));
  fileSystemName = new String(fileSystemName.getBytes("iso-8859-1"), "utf-8"); // XRadish * iso-8859-1  GBK utf-8

—————————————

3、下载文件名如果包含中文,则需要转换成GBK编码。
   参考资料:http://cutelion.blog.hexun.com/6980666_d.html

修改 DownloadHandler.java 文件:

在service函数里
  httpServletResponse.setContentType("APPLICATION/OCTET-STREAM");
  requestedFile = new String(requestedFile.getBytes("GBK"), "iso-8859-1"); // XRadish * iso-8859-1  GBK utf-8

                                               
—————————————

4、产生缩略图部分,由于ImageMagic对中文名文件支持BUG很多,所以没有啥好办法。
   下面参考资料里面说的跟我试验结果不大一样,我的是:UTF8正常,GBK不正常。
   参考资料: http://www.yeeach.com/

—————————————

5、Dom4j支持读包含中文路径的XML文件。用Dom4j解析XML,如果XML文件路径中包含中文,
   则直接用SAXReader.read(String path)的话没办法读取,需要加File()定义。
   参考资料:http://blog.csdn.net/laowantong06/archive/2007/08/24/1757469.aspx

修改 LoadLibraryPresentation.java 文件:

import java.io.File; // XRadish + dom4j support gbk

在parseLibraryFileToObject函数里
  Document document = reader.read(new File(filePath)); // XRadish * dom4j support gbk

—————————————

6、Dom4j支持写包含中文内容的XML文件。由于FileWriter默认的输出编码是ANSI编码,而Dom4j中的
   write方法提供的内容实际是以UTF-8保存的,因此造成了包括中文字符的XML文件无法正常阅读。
   所以我改用FileOutputStream类。
   参考资料:http://www.lupaworld.com/928/viewspace-2261.html

修改 CreateLibraryPresentation.java 文件:

// XRadish +
import org.slf4j.Logger;
import org.red5.logging.Red5LoggerFactory;
import java.io.FileOutputStream;
import org.dom4j.io.OutputFormat;

在generateXMLDocument函数里
  // lets write to a file
  // XRadish *
  OutputFormat format = OutputFormat.createPrettyPrint();      
  FileOutputStream fos = new FileOutputStream(new File(targetDirectory+CreateLibraryPresentation.libraryFileName));
  XMLWriter writer = new XMLWriter(fos, format);
  writer.write( document );
  writer.close();

2009年04月10日

OpenMeetings里的Imagemagic调用ghostscript完成pdf文件的转换。

Ghostscript
Ghostscript是一套建基於Adobe、PostScript及可移植文档格式(PDF)的页面描述语言,
进而编译成的免费软件。这个软件的配置功能很好,可用作:
*)计算机打印机使用的栅格化图像处理器(RIP),例如,行打印机Daemon的输入过滤器。
*)以PostScript和PDF阅览器使用的栅格化图像处理器(RIP)引擎。
*)文件格式转换器,如PostScript和PDF转换器。
*)一般用途的编程环境。

GhostScript安装时,一路next,不需要做任何设置,这里要注意,ghostscript并没有
修改系统环境变量,这一点跟swftools不同。ImageMagic调用的是它的gsdll32.dll,
这个dll已经在安装的时候设置了注册表:
   "GS_DLL"="d:\\meeting\\gs\\gs8.64\\bin\\gsdll32.dll",
ImageMagic是通过"GS_DLL"来调用ghostscript的,具体代码在文件
   \ImageMagick-windows\ImageMagick-6.3.0\magick\nt-base.c
的“NTGhostscriptLoadDLL”函数设置了gs_dll_handle变量。

OpenMeetings的白板功能使用了各种“文档转换”软件,如:SWFTools负责PDF/SWF文件的
转换;ImageMagic负责PDF/JPG以及各种图像格式的转换;JODConverter负责office文档格式
之间的转换(它内部调用的是OpenOffice的接口)。也就说,OpenMeetings的白板功能需要
上述四个软件的配合才能正常工作。

接下来总结一下JODConverter的相关知识:
OpenMeetings包含一个jod目录,下面放置着JODConverter软件的执行文件和执行文档转换的
批处理文件。由于不清楚jod这个单词的意思,所以上网搜了一下,整理如下:

*) JOD – Java Open Directory (Java的一个开放目录实现,类似LDAP?)
    http://sourceforge.net/projects/jod
    This is a simple java based interface to the Open Directory Project.
    (www.dmoz.org) The java class supplied can retrieve data from dmoz on
    a request per request basis to give your site access to dmoz data.

*) good jod 说得好
    jod 貌似没有这个词,或许job 工作?

从搜索的结果来看,OpenMeetings里的jod显然不是上面这几个意思,应该是取了JODConverter
的前三个字母,即Java OpenDocument的意思。

—————————————

JODConverter Java OpenDocument Converter (office文档转换工具)
http://www.artofsolving.com/opensource/jodconverter
JODConverter is a Java library for converting office documents into different
formats, using OpenOffice.org 2.x.

它既可以是部署在servlet容器里的web应用,也可以是单独的命令行工具。
OpenMeetings是把它作为单独的工具调用的。
JODConverter is both a Java library and a set of ready-to-use tools:
 * a web application that you can deploy into any servlet container (e.g. Apache Tomcat)
 * a command line tool (java -jar jodconverter-cli-2.2.0.jar <input-document> <output-document>)

2009年04月09日

 

OpenMeetings白板转换规则以及使用的工具:
通过flash客户端上传文件后,文件保存在服务器的upload目录下,而且服务器在jod目录下
生成bat批处理文件,这个批处理执行各种文件格式之间的转换操作,转换生成的文件跟原文件
放在同一个目录,即upload目录下。

下面针对不同格式的文件,介绍相应的执行步骤。
*) 上传TXT文本文件 aaa.txt
    1、jod执行txt文件转换到pdf文件的操作,生成aaa.pdf文件;
    2、SWFTools\pdf2swf.exe执行pdf文件转换成swf文件的操作,生成aaa.swf文件;
    3、imagemagic\convert.exe执行pdf文件生成缩略图jpg的操作,生成_thumb_aaa-?.jpg文件;
       (?是pdf文件的页码,如果有3页,则生成3个缩略图文件0/1/2);

*) 上传PDF文件 xxx.pdf
    1、SWFTools\pdf2swf.exe执行pdf文件转换成swf文件的操作,生成xxx.swf文件。
    2、imagemagic\convert.exe执行pdf文件生成缩略图jpg的操作,生成_thumb_xxx-?.jpg文件。
       (?是pdf文件的页码,如果有3页,则生成3个缩略图文件0/1/2);

*) 上传JPG文件 yyy.jpg
    1、imagemagic\convert.exe执行jpg文件生成缩略图jpg的操作,生成_thumb_yyy.jpg文件。

*) 上传PNG/GIF/ICO/BMP文件 zzz.png
    1、imagemagic\convert.exe执行png/gif/ico/bmp文件转换成jpg文件的操作,生成zzz.jpg文件。
    2、imagemagic\convert.exe执行jpg文件生成缩略图jpg的操作,生成_thumb_zzz.jpg文件。

已知BUG:
不支持中文文件名

2009年04月07日

基于Red5开发的项目列表(主要集中于sf/googlecode):

*) sf上的项目不多而且不活跃,如red5chat/red5recorder(同一个管理者)等。
    red5chat http://sourceforge.net/projects/red5chat/ 管理者:proxymis
    red5recorder http://sourceforge.net/projects/red5recorder/ 管理者:proxymis

*) googlecode上的项目不错,如red5phone/openmeetings/bigbluebutton(red5phone和openmeetings是同一个管理者)等。
    red5phone http://code.google.com/p/red5phone/ 管理者较多,包括seba.wagner
    openmeetings http://code.google.com/p/openmeetings/ 管理者:seba.wagner
    bigbluebutton http://code.google.com/p/bigbluebutton/ 管理者:ffdixon, Me.Snap, ritzalam