Ccnet

早上搜索了下 清华大学开源软件俱乐部的网站,找到这点关于Ccnet的资料,分享下。

Ccnet 是 common creative network 的简称,它的目标是给 Linux 桌面提供一个面向于 group 的通用的 P2P 服务,使得人们没有中心服务器的情况下也能协同工作。

使用上来说,与大部分现有的 P2P 系统相比,Ccnet 有两个主要的不同点。 首先,Ccnet 并不试图将所有的人连接成一个全球性的网络,而是从协作的视角出发,为个人桌面环境提供 P2P 服务,使得一个桌面系统可以和一个或多个 group 中所有的其他成员的桌面系统能联通起来。其次,Ccnet 本身是一个守护进程,为桌面上的其他程序提供服务,比如通过 Ccnet 提供的消息传输服务,一个桌面应用程序可以向一个或多个 peer 发送一条消息;这种简单易用的 P2P 服务将极大地扩展目前桌面应用程序的所能实现的功能。

技术上来说,Ccnet 包含了一个目前大多数 P2P 系统都没有的功能,即请求的延迟满足。 举个例子,如果主机 A 需要向一个不在线的主机 B 发送一个消息,而且主机 A 自己马上要下线,怎么来保证该请求得到满足? 该功能对于一个节点在线时间不确定的 P2P 系统是至关重要的。Ccnet 通过 Requirement 机制来实现该功能。

程序结构上来说,Ccnet 是极易扩展的。Ccnet 包含提供了两套机制: Processor 和 Requirement。 Processor 用于实现两个在线 peer 的交互功能,比如传文件、传消息。 Ccnet 框架提供了一个 Processor 基类,通过书写一个子类,我们就能实现一个新的交互功能。Requirement 也是如此,通过书写一个子类,我们就能实现一个新的种类的请求的延迟满足。

ccnet-usage

ccnet-talk-01

目录

[显示]


概览

代码页面

几个设计原则

  • 提供机制,把策略留给上层。 Ccnet 底层是 P2P 网络。 每个节点向其他的节点提供一个功能列表(可调用的 processor 列表),通过互相之间调用这些功能可以实现许多不同的上层功能。
  • 关注于易用性
  • 尽量底层: 直接使用 TCP 提供的字节流服务。不使用 XML,不使用 DBUS。

为什么使用 C 和 GObject

  • 这是一个底层的代码,大量的 char *buf 操作
  • 易被理解易被扩展
  • 只在必要的时候使用面向对象编程功能

模块

Ccnet 层次结构

Ccnet 层次结构

 

Ccnet 运行流

Ccnet 运行流

 

Ccnet 模块
功能模块 文件 说明
工具模块
事件管理 trevent.c
log log.c
底层
peer 信息管理(本地) peer.c peer-mgr.c 建立和维护 peer 数据库 (内存和磁盘)
peer 互连 peer.c peer-mgr.c handshake.c listen.c peer-io.c
packet IO peer.c packet.h
group(本地)
routing routing-mgr.c getpeerinfo-proc.c
processor processor.c session.c peer.c proc-factory.c
requirement requirement.c response.c req-manager.c sendreq-proc.c receivereq-proc.c
中层
message 管理 message.c message-manager.c sendmsg-proc rcvmsg-proc getmsg-proc putmsg-proc sendmsg-req
文件管理 file-manager.c sendfile-proc receivefile-proc getfile-proc sendfile-proc
git db 管理
高层
peer 信息管理(网络化) 依赖于 message 管理和文件管理
group(网络化) 依赖于 message 管理和 git db 管理

peer 管理

相关的类: CcnetPeer ccnet_peerMgr

信息存储: peer-db/peer-info.txt peer-db/<id>

身份标识

每个节点用自己的公钥的 SHA1 值作为 ID。

采用 RSA 公钥算法认证。

代码分析

添加 peer

添加一个 peer 有两种方式

  1. 主动添加: 通过邮件等方式得到一个 peer 的 info 文件,将该文件加入到 peer-db 中。
  2. 被动添加: 其他人向你发送一个 auth-request,认证该 auth-request。

auth-request 工作流程如下 (A 请求 B 的认证):

  • A 在一个对话框中输入认证附加消息 m,并创建一个 auth-req 实例。
  • A 将该 auth-req 实例传给 B
  • B 得到这个 auth-req 后,获得 m 和 A 的 info 文件 (通过 getmsg-proc 和 getfile-proc)
  • B 在认证对话框中点击确认
  • info 文件被加入到 peer-db 中
  • 向 A 发送一个 auth-rsp。

路由模块

路由模块依赖于 peer 模块和 getpeerinfo-proc.c 。

组管理

创建与加入

主动操作

  • 创建一个组
    • 将其他 peer 加入该组,并发送邀请 (设置状态为 unconfirmed)
  • 发出加入一个组的请求
    • 收到确认,通过 processor-getgroupinfo 得到组信息
    • 收到拒绝

被动操作

  • 收到加入一个组的邀请
    • 拒绝该邀请 (在对方数据的状态变为 rejected)
    • 接受该邀请 (在对方数据的状态变为 confirmed)
      • 创建 group 数据结构,通过 processor-getgroupinfo 得到组信息

 

其他模块

权限控制

权限列表

  • 创建仓库的权限
  • 对一个特定仓库中一个特定分支的修改权限

几个问题

  • 什么时候一个 peer 有权向 client 查询其他 peer 的信息?

Packet IO

基于 libevent 库中的 bufferevent 和 evbuffer 实现,涉及的文件:

  • net.c 对 socket API 的封装
  • packet.c 定义报文的格式
  • peer-io.c 提供两个之间相连 peer 之间面向 packet 的 IO
  • peer.c 提供中转服务

上层应用应该调用 peer.h 提供的 IO 函数,以便自动选择是否需要启动中转服务。

P2P 拓扑

监听

每隔时间间隔 LISTEN_INTERVAL (listen.c),incomingPeersPulse() 函数回被调用,以检测是否有 TCP 连接请求到达。注意,由于是非阻塞 IO, 所以 ccnet_netAccept() 函数总会立即返回。 ccnet_peerMgrAddIncoming() 生成 peerIo 对象和 handshake 对象,前者是对 socket IO 的封装,后者负责连接的初始化,比如认证。初始化完成后, myHandshakeDoneCB() 会被调用。

static void
incomingPeersPulse (ccnet_handle * h)
{
for ( ;; ) /* check for new incoming peer connections */
{
int socket;
struct sockaddr_storage cliaddr;
size_t len = sizeof (struct sockaddr_storage);
 
if ((socket = ccnet_netAccept (h->bindSocket, &cliaddr, &len)) < 0)
break;
 
ccnet_peerMgrAddIncoming (h->peerMgr, &cliaddr, len, socket);
}
}
 
void
ccnet_peerMgrAddIncoming (ccnet_peerMgr *manager,
struct sockaddr_storage *cliaddr,
size_t addrlen,
int socket)
{
ccnet_peerIo *io;
ccnet_handshake *handshake;
 
managerLock (manager);
 
io = ccnet_peerIoNewIncoming (manager->handle, cliaddr, socket);
handshake = ccnet_handshakeNew (io, myHandshakeDoneCB, manager);
g_ptr_array_add (manager->incomingHandshakes, handshake);
 
managerUnlock( manager );
}

Handshake

见 handshake.c。 完成 Hankshake 后,双方都知道了对方的 ID。 接下去要采取的行为,比如是否要认证对方,各自决定,采用“请求-响应”语义进行。比如,A 发起认证 B 的过程,而 B 可以决定不去认证 A。

认证

Client 将所有已经认证的 peer 放到 peer-db/peer-info.txt 中。 启动时读取该文件。

Client 在与一个未认证的 peer 完成 Handshake 后, 将该 peer 放到未认证 peer 池中。 用户调用 processor-getpeerinfo 来从该 peer 得到更多的信息。 调用 ccnet_peerMgrAuthPeer(peer) 来将该 peer 放入到已认证 peer 池中。

用户可以决定是否把未认证 peer 池保存到磁盘文件中 (peer-db/peer-unauth.txt)。

相关函数

void ccnet_peerMgrAddUnauthPeer (ccnet_peerMgr *mgr, const char *peer_id, ccnet_peerIo *io);
 
void ccnet_peerMgrAcceptPeer (ccnet_peerMgr *mgr, const char *peer_id);
 
void ccnet_peerMgrRejectPeer (ccnet_peerMgr *mgr, const char *peer_id);

地址信息维护

Client 自身处于三种状态之一:

  • Down (未连网)
  • In Nat (在 Nat 内)
  • Full (不在 Nat 内)

Client 用 CcnetPeerAtom 结构来保存 peer 的地址信息。 为了保持地址信息的有效性,需要

  • Client 主动连接上一个 peer 后,需要更新 atom 结构中的 mtime (modify time)。

 

 

Processor

Processor 生命周期的管理并不使用 GObject 引用计数机制,而是通过下面的规范

  • 上层通过 ccnet_proc_factory_create_processor() 来创建一个 processor
  • ccnet_proc_factory_create_processor() 将 processor 放到对应的 peer 的 processor Hash 表中。
  • ccnet_proc_factory_create_processor() 创建完一个 processor 后,发送 proc-create signal
  • processor 根据自身运行情况,在需要结束的时候调用 ccnet_processor_done () 函数终止自身。
  • 终止时需要做三件事, 1) 从 peer->processors Hash 表中去除; 2) 发送 done signal; 3) 释放内存

ccnet_processor_done () 只能由 processor 自己调用。 其他模块如果要关闭一个 processor, 使用 ccnet_processor_shutdown()

Requirement

Requirement 是一种可靠的对象传输机制,它可以在两个节点不同时在线的情况下可靠地将一个节点上的对象(消息、文件、认证请求等)传输到另一个节点上,Requirement 本身并不负责对象的处理,对象的处理交由上层负责。

生命周期管理

Requirement 的生命周期分为内存生命周期和状态生命周期,前者由引用计数机制管理,后者由自身管理。

在源节点和中继节点, Requirement 存在于 pending_reqrs 列表中。在目的节点,它存在于 check_reqrs 列表中。(在状态生命周期结束后,Requirement 有没有必要保存在一个特殊列表中以便查询?)

Requirement 状态机

Requirement 由事件驱动其运转。 函数 try_satisfy() 用于其他模块给 Requirement 一个初始的触发。 在发生以下事件的时候该函数被调用:

  • 在源节点创建的时候
  • 在中继节点或目的节点被接收的时候 (在目的节点需要先通过防重复检查)
  • 备份后重新加载的时候

初始触发后,Requirement 自我运转,对其他模块封闭。

目前只考虑与消息传送有关的 Requirement。这里有两类 Requirement

  • sendmsg-reqr:发送一个消息
  • ack-reqr:确认消息已经收到

sendmsg-reqr 状态机

源节点

INIT:

  • 事件:try_satify() 被调用;响应:转入 SENDING 或者 WAITING 状态。
    • 转入 SENDING:设置事件监听函数,等待 relay 和 dest peer 上线。
    • 转入 WAITING:设置重传计时器。

WAITING: 只在源节点存在,reqr 已经发给足够的中继节点。

  • 事件: 重传计时器超时;响应:转入 INIT 状态,调用 try_satisfy() 函数。
  • 事件:ack-reqr 到达;响应:转入 FINISH 状态。

SENDING: 只在源节点存在,reqr 尚未发给足够的中继节点。

  • 事件: dest peer 的网络连接状态改变;响应:发送 reqr,转入 WAITING 状态,设置重传计时器。
  • 事件: dest peer 的 req_proxy_list 改变;响应:发送 reqr,如果已经发送给足够的中继,转入 WAITING 状态,设置重传计时器。
  • 事件: try_satify() 被调用;响应: 重新设置事件监听函数。

FINISH 状态: 由 ack-reqr 设置

  • 从 pending_reqrs 列表删除,调用 ccnet_requirement_done()。

中继节点

INIT:

  • 事件:try_satify() 被调用;响应:获取 message,成功获取后转入 MSG_RECV 状态。(如果获取 message 失败还需要考虑出错处理,需要增加一个中间状态)
    • 如果获取 message 成功,并且当前 dest peer 在线,立即转发 reqr,转入 FINISH 状态。
    • 如果获取 message 成功,当前 dest 不在线,转入 MSG_RECV 状态,设置事件监听函数,等待 dest 网络状态改变。

MSG_RECV:

  • 事件:dest 状态改变;响应:发送 reqr,转入 FINISH 状态。
  • 事件:try_satisfy() 被调用;响应:重新设置事件监听函数。

FINISH:

  • 从 pending_reqrs 列表删除,调用 ccnet_requirement_done()。

目的节点

INIT:

  • 事件:try_satify() 被调用;响应:利用 check_reqrs 列表检查重复
    • 如果不是重复的 reqr,将它加入 check_reqrs 列表,设置超时,获取 message,成功获取后转入 FINISH 状态。(如果获取 message 失败还需要考虑出错处理,需要增加一个中间状态)
    • 如果是重复的 reqr,直接转入 FINISH 状态。

FINISH:

  • 生成一个 ack-reqr 并且发送。调用 ccnet_requirement_done()。

req-manager 创建与接收 requirement

  • 上层创建 reqr, 将它加入到 pending_reqr 队列,调用 try_satisfy()
  • 中继接收 reqr, 将它加入到 pending_reqr 队列,调用 try_satisfy()
  • 程序重启后,restore reqr, 加入相应的队列,根据 Requirement 的不同状态恢复原来的超时计时器,调用 try_satisfy()

防止重复

当一个 requirement 到达目的节点之后,会自己根据 check_reqrs 列表自己判断是否是重复的 reqr(详细见 sendmsg-reqr 的状态机),不管是否重复,都需要回复一个 ack-reqr,这是因为重复的 reqr 有可能是源节点超时重传的结果,必须回复一个 ack。这里防止重复是对上层而言的,防止将重复的数据传给上层,而不是防止接收到重复的 reqr。

路由问题

Requirement 只能发给直接相连的邻居路由器。 路由采用泊松分布模型。每个节点估计一个到目的节点的 mu 值。对源节点来说,一个 requirement 在 SENDING 状态下,

  • 如果和目的节点直接相连,那么直接把 requirement 发给对方,进入 WAITING。超时设为 100 s。
  • 如果和目的节点间接相连,发给其中一个 proxy,进入 WAITING,超时设为 100 s。
  • 如果和目的节点不同时在线, union_lambda 设为 0。对每个邻居和自身,如果 1/mu > 1/3 * union_lambda (mu < 3 * union_mu),把 requirement 发给该邻居,

union_lambda = union_lambda + (1/mu)。 (超时设为 1/union_lambda * 2)

中继节点的的超时设为 mu * 2

目的节点的的超时(保留在 check_reqrs 列表的时间)设置为一个较大的值,目前取 6 天。

文件对象传输

如果进一步考虑文件对象的传输,还需要设计一个 getfile-reqr,这个 requirement 只是发送一个获取文件的请求,当目的节点收到请求之后,会发送两个 requirement, 一个是 sendfile-reqr,另一个是 ack-reqr,之所以要将数据和 ack 分开是因为如果目的节点收到多个重复的 getfile-reqr,就需要回复多个 ack,如果数据和 ack 是绑定 在一起的话,数据也会被重复发送多次。

是否能够将各种对象的传输统一起来,只用一套 requirement 来传输?

Message 管理

中转的消息只有 server 程序内对其有引用计数,可以用引用计数来管理其生命期。 非中转的消息由于本地 server 无法知道哪些本地 client 需要或正在使用它,所以不能用引用计数来管理。现在的方案是全部保存。

先考虑如何处理中转消息。

  • rcvmsg-proc 只能接收以本机为目的地的消息。
  • getmsg-proc 用于主动得到一条消息,在此期间它对消息有一个引用。之后, 该引用被传递给 requirement。
  • 在 server 重启的时候, 加载所有的 message(非本地), 然后加载所有的其他模块,引用计数得到恢复。然后所有的 message 的引用计数减 1。

 

系统中的并发

GIT 同步

Ccnet 提供以下服务

  • 将 git 仓库中的一个分支可靠同步到整个网络上

GUI

  • 一个全局变量 CcnetClientSession *session: 这样每个 GUI 类和函数可以很方便的访问到 session。
  • main() 函数需要先构造和初始化 session, 再构造和初始化各个界面元素,然后启动 session。

API

P2P 模块

put (key, value)

get (key)

当前工作

http://www.thoss.org.cn/trac/ccnet/report/1

参考资料

A Universally Unique IDentifier (UUID) URN Namespace rfc4122

Pastry http://freepastry.rice.edu

http://en.wikipedia.org/wiki/Collanos

 

 

http://www.thoss.org.cn/mediawiki/index.php/Ccnet

 

报道帖

新人报道帖,请来此报道让大家尽快认识,格式:

姓名(中英文均可):

所在地:

公司/单位:

从事职业(或自由职业):

使用操作系统:

兴趣,爱好:

其他(座右铭等):

北京GNOME用户组第八次会议/The 8th BeijingGUG Meeting 06/17/2009

北京GNOME用户组第八次会议将于6月17日在融科资讯中心A座八层,intel办公室举行。
如果您计划出席,请于2009年6月17日(星 期三)中午1点之前,在以下网址注册登记,北京GNOME用户组将为此活动提供免费晚餐和饮料,非常感谢。

点击此处报名

会议具体议程:

活动时间 (Time) : 2009 年6 月17 日(星期三 19 :00——21 :30 )
活动地点 (Venue) : 北京融科资讯中心A座八层,intel办公室 Map
7:00pm – 8:30pm Presentation topic: Ccnet Project/主题演讲: Ccnet项目
8:30pm – 9:30pm Free talk/自由讨论

收费标准
:无, 北京GNOME用户组将提供饮料畅饮

演讲嘉宾 (Speakers)
Introduction of Speaker
Lingtao Pan is a student of Second-year master’s degree in Department of Computer Science, Tsinghua University, researches for computer network, especially for routing of the Internet. He has been using Linux for five years, and has strong interest on programming. He want to be able to grasp the programming skills thoroughly, and now focuses on GNOME Desktop System.

潘凌涛,目前就读于清华大学计算机系,硕士二年级,研究方向为计算机网络,特别是 因特网路由。从大一下学期开始使用 Linux,迄今已有五年多。对程序设计有浓厚的兴趣,理想之一是希望能够在编程上达到融汇贯通的境界。目前主要关 注于GNOME桌面系统。

演讲内容
Ccnet is short for Common Creative NETwork. It is intended for a group of users to set up a private p2p network to connect their desktop together.
Ccnet provides a general P2P service to desktop applications in the following sense:

First, it is separated into a daemon server and a client library, other programs can access the services via the client library; Second, the services it provides include messages transferring, files transferring, and even GIT repositories synchronization, and the functionality can be easily extended. One special technique of Ccnet is delay-able of requirements. For example, if you want to get a file from an offline friend, you can just issue the requirement, and the file will be transferred to you when your friend becomes online. If you are offline at this moment, the file will be stored in intermediate machines to increase the chance that you will get the file when you are online.

Ccnet是common creative network的简称,它的目标是给Linux桌面提供一个面向于group的通用的P2P服务,使得人们没有中心服务器的情况下也能协同工作。
使用上来说,与大部分现有的 P2P 系统相比,Ccnet 有两个主要的不同点。首先,Ccnet 并不试图将所有的人连接成一个全球性的网络,而是从协作的视角出 发,为个人桌面环境提 P2P服务,使得一个桌面系统可以和一个或多个group中所有的其他成员的桌面系统能联通起来。其次,Ccnet本身是一个守护进程,为 桌面上的其他程序提供服务,比如通过Ccnet提供的消息传输服务,一个桌面应用程序可以向一个或多个peer发送一条消息;这种简单易用的 P2P 服务将极大地扩展目前桌面应用程序的所能实现的功能。

技术上来说,Ccnet包含了一个目前大多数P2P系统都没有的功能,即请 求的延迟满足。举个例子,如果主机A需要向一个不在线的主机B发送一个消 息,而且主机A自己马上要下线,怎么来保证该请求得到满足该功能对于一个节点在线时间不确定的P2P系统是至关重要的。Ccnet通过 Requirement机制来实现该功能。

程序结构上来说,Ccnet是极易扩展的。Ccnet包含提供了两套机制:Processor 和 Requirement。Processor用于实现两个在线peer的交互功能,比如传文件、传消息。Ccnet 框架提供了一个Processor基类,通过书写一个子类,我们就能实现一个新的交互功能。Requirement也是如此,通过书写一个子类,我们就能实现一个新的种类的请求的延迟满足。

欢迎大家参加并讨论.

相册

北京GNOME用户组第七次会议/Beijing GNOME Users Group The 7th Meeting

Emily Chen  发送至 gnome-cn-list

大家好,

北京GNOME用户组第七次会议将于5月 20日在Sun 中国工程研究院 — 清华科技园创新大厦A座7层会议室举行。 此次会议将是北京GNOME用户组第一次与北京OpenSolaris用户组携手组织活动。

如果您计划出席,请于2009年5月18日(星期一)下午6点之前,在以下网址注册 登记,北京OpenSolaris用户组将为此活动提供免费晚餐和饮料,非常感谢。http://spreadsheets.google.com/viewform?formkey=ckkxSi0wRVItZkFCUlNTdUo4djJTVkE6MA..

为避免食物浪费,如不能按计划出席,烦请提前发信给emily告知,谢谢!

北京GNOME用户组

========================================================================================

会议具体议程如下:

活 动时间 (Time) : 2009 年5 月20 日(星期三 19 :00——21 :30 )

活 动地点 (Venue) : 北京清华科技园创新大厦A座7层会议室 Saint Andrews举行

活动议程 (Agenda) :

7:00 – 7:10 pm  开场白, 介绍BJOSUG和BJGUG的第一次联合会议活动

7:10 – 7:30 pm  介绍演讲者,每个与会成员轮流自我介绍

7:30 – 8:30 pm Unix-Center社区 — 演讲者 蒋清野

8:30 – 9:30 pm  LXDE, GNOME and OpenSolaris” — 演讲者 Mario Behling

演讲嘉宾 (Speakers) :

*蒋清野

Qingye Jiang (John) obtained his B. Eng degree from Tsinghua University
in 1999, and MS degree from University of Illinois at Urbana-Champaign
in 2000. He is currently the Senior Manager of Sun Developer Network in
China. He is also a guest lecturer at the Software School of Beijing
Jiaotong University. Before joining Sun John worked for Beijing CBE-AMD
Information Technology Ltd (a child company of AMD), responsible for
tailoring Linux OS and driver development. Before that John worked for
American GNC Corporation, where he carried out research in inertial
guidance, artificial intelligence, and embedded systems. John’s personal
blog is http://www.qyjohn.net/.

蒋清野,1999年获得清华大学学士学位, 2000年获得美国伊里诺大学香槟分校硕士
学位,目前是Sun 中国技术社区的高级经理,同时任北京交通大学软件学院的客座
讲师。在加入Sun 公司之前,蒋清野曾就职于北京中基超威信息技术有限公司
(AMD公司的子公司), 负责Linux操作系统的裁减与驱动开发。在此之前蒋清野就
职于美国导航与控制公司,负责惯性导航、 人工智能和嵌入式系统等多方面的研
发。蒋清野的个人博客地址为http://www. qyjohn.net/

演讲内容:

Unix-Center.Net is a special Unix/Linux developer community. By
providing free access to a series of Unix/Linux servers (including
Solaris, AIX, FreeBSD, Fedora and Ubuntu on x86/x64, UltraSparc, Power
5, and Loongson 2E processors), Unix-Center.Net enables junior developer
to learn, discuss and use different version of Unix/Linux operating
systems without the need to own a Unix/Linux systems.

Unix-Center.Net是一个特别的Unix/ Linux用户社区。Unix-Center.Net免费提供多
种Unix/Linux服务器(操作系统包括Solaris, AIX FreeBSD, Fedora, Ubuntu,处
理器类型包括x86/x64, UltraSparc, Power 5, 龙芯2E)的访问权限,使得新近接
触Unix/ Linux的用户无须购买或者安装就可以学习如何使用不同类型的 Unix/Linux
操作系统,或者是在不同类型的Unix/ Linux操作系统上进行开发。

* 周三晚上我们邀请到第二位演讲者, Mario Behling, President LXDE Foundation e.V

他将会跟大家分享的主题是“LXDE, GNOME and OpenSolaris”.

摘要:

“Lightweight X11 Desktop Environment”, is an extremely faster,
performing and energy saving desktop environment for Unix and Posix
compliant platforms and OS such as Linux, BSD and OpenSolaris. It was
founded by PCMan (Hong Yen Jee) from Taiwan and is maintained by an
international community of developers. LXDE uses less CPU and less
RAM. It is especially designed for cloud computers with low hardware
specifications like netbooks, mobile devices (e.g. MIDs) or older
computers. Since LXDE is a GTK based desktop environment, LXDE
applications (pcmanfm, lxpanel, lxappearance, lxlauncher etc.) can be
easily built and installed on OpenSolaris. Alfred Peng from Wuhan has
ported the first components and has added the first set of spec files
into the SFE reporitory (SFElx*, SFEgpicview, SFEgtknetcat, SFEopenbox
and SFEpcmanfm). Good news is that the OpenSolaris nwam manager works
great with small memory footprint. The talk will introduce you to LXDE
and the community, current prjects in the summer of code and show ways
how to join and cooperate with this vibrating project.

欢迎大家参加并且提问.

北京GNOME用户组第六次会议/The 6th BeijingGUG Meeting

=======================================
中文通知
=======================================

时间: 2009-04-15 19:00

地点变更通知:由于原活动地点“流”咖啡吧正在停业装修,现将活动地点改为: 中关村科学院南路二号,融科资讯中心A座八层,intel办公室,(乘公交384或826在中关村二桥南站下)地图

 

报名:点击此链接在Google doc中报名。

 

日程安排:
7:00pm – 8:00pm 主题演讲: 介绍Linux上的Google Gadgets项目

收费标准:无,北京GNOME用户组将提供饮料畅饮

 

主题演讲安排:

主题:介绍与Linux上的Google Gadgets项目

主讲人背景:

苏哲的自我介绍:

    自幼爱好电子计算机编程,初中开始学习 C 语言编程,高三用C++开发出曾经非常流行的小工具软件 Smart Fdisk。1994年进入清华大学物理系学习,在校期间大部分业余时间都花在了玩电脑上。1997年开始接触 Linux 操作系统和开源软件。1999 年开发出 Smart Boot Manager 工具软件,风靡一时。2001 年停止开发 Smart Boot Manager,转而研究 Linux 本地化与国际化相关技术,率先实现了 Linux 下图形用户界面对国标 GB18030的支持。同时参与改进了众多开源软件对中文的支持。随后潜心开发 Smart Common Input Method platform, 一个 Linux 下开源输入法开发平台。现已成为Linux下最流行的输入法平台,被众多 Linux 发行商所采用。2002 年取得清华大学物理系凝聚态物理专业硕士后加入 Turbolinux 软件公司,负责开发 Turbolinux 系统。随后于 2004 年加入 Novell 公司 SUSE Linux 开发团队,负责国际化和本地化相关组件的开发与维护。期间兼任中国Linux标准化工作组专家和东北亚开源软件论坛Linux标准化子工作组中方专家,负 责输入法相关标准的研究与制定。于2007年2月加入 Google。

=====================================

Announcement in English
=====================================

Time: 2009-04-15 19:00

Venue changed:Because of the decorating of “Flow cafe & bar”,now the venue changed as: RAYCOM INFOTECH PARK, Tower A, 8th floor,intel office, No.2 of Zhongguancun Kexueyuan South Street.(Take the bus 384 or 826 to Zhongguancun’erqiao south station)Map

 

Register:please click this link to register in Google doc.

 

Agenda:
7:00pm – 8:00pm Topic : Introduction to Google Gadgets for Linux project

 

Fee: Free. BGUG will provide unlimited drink for every participants

Introduction of Speaker
About Zhe Su:

    I am fond of computer programming when I was young, and started to learn about C Language Programming when I was in junior high school. I created the very fashionable tool named “Smart Fdisk” by C++ when I was in senior middle school. I entered the Department of Physics, Tsinghua University in 1994 and spent most time in playing computers. I came across Linux OS and Open Source Software in 1997 and developed another fashionable software named ” Smart Boot Manager” in 1999. I stopped to improve Smart Boot Manager in 2001 and switched to study Linux localization and internationalization, firstly achieved the goal of supporting GB18030 under the Linux Graphical User Interface, and participated the Chinese supporting work of many open source software as well. Then, I devoted myself to develop the Smart Common Input Method platform, which is an open source input method platform under linux. Now it has become the most popular input method platform under linux and is used by many Linux distributor companies. I joined the Turbolinux after obtaining the Master’s degree of Condensed Matter Physics Department of Physics, Tsinghua University in 2002, and was responsible for the development of Turbolinux OS. Then joined the SUSE Linux Development Team of Novell in 2004 and was responsible for the development and maintenance of the relevant components of the internationalization and localization. During the time of working in Novell, I hold a concurrent post of the China Linux Standardization Working Group of Experts and Northeast Asia Open Source Software Forum Linux standardization sub-working group of experts in China, and was responsible for the related research and development of standards for input method. I entered Google in February, 2007.

     

    相册