蓝森林首页 | 返回主页 | 本站地图 | 站内搜索 | 联系信箱 | -->
 您目前的位置:首页 > 自由软件 > 技术交流 > 应用编程 -->


    

蓝森林 http://www.lslnet.com 2006年8月16日 14:08

CFFD Project

下载:
http://cffd.cosoft.org.cn/download/
http://cosoft.org.cn/project/showfiles.php?group_id=4624

CFFD - Common Full Feature Dictionary
此计划的最终目的是建立一个全功能的字典。
使用 C 语言编程。GUI 用 GTK+-2.0。

CFFD 所具有的功能:
1. 屏幕取词
2. 输入即查
3. 多词库
4. 具有词库编辑器
5. 控制显示内容为三个状态:简单、详细、完全。
6. 预留远程字典的接口。
7. 编程时智能提示函数名称。(与 SCIM 合作实现)
8. 允许像 cdict 一样在字符终端下运行。

CFFD 的主页:
http://cffd.cosoft.org.cn
CFFD 的开发基地:
https://cosoft.org.cn/projects/cffd/
CFFD 的邮件列表:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel
如果想加入 CFFD,只需订阅邮件列表即可。


如果你爱好 GTK2 编程,欢迎订阅 cffd-devel 邮件列表。

因为我们用 GTK2 为 CFFD 编写 GUI,所以在我们的邮件列表里要
经常要讨论 GTK2 编程的问题。GTK2 很新,中文资源很少,我希
望能把 cffd-devel@cosoft.org.cn 建成一个讨论 GTK2 编程的中文邮
件列表。一个好的自由软件项目,必然有一个好的、活跃的邮件列
表。我希望其它爱好 GTK2 编程的朋友能订阅该邮件列表,在交流
中,共同提高,共同进步。
cffd-devel 邮件列表:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel


词库编辑器

以下是这一段时间用 GTK2 编的程序


#include <gtk/gtk.h>
#include <stdio.h>

GtkListStore *model=NULL;
GtkWidget *treeview1=NULL,*treeview2=NULL;
GtkWidget *textview1=NULL;
FILE *file=NULL;
gchar *buf;

void file_ok_sel( GtkWidget *fs)
{
GtkTreeIter iter;
GtkTreePath *path;
gboolean valid;
gint cmp_result;
GtkWidget *message_box;

buf=(gchar*)gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs));
gtk_file_selection_complete(GTK_FILE_SELECTION (fs),buf);
if(g_strrstr(buf,".dic")==NULL) return;
valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL(model), &iter);
while (valid)
{
gchar *str_data;

gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, 0, &str_data, -1);

cmp_result=g_ascii_strncasecmp(buf,str_data,100);
if (cmp_result==0) break;

g_free (str_data);
valid = gtk_tree_model_iter_next (GTK_TREE_MODEL(model), &iter);
}

if (cmp_result==0)
{
buf=g_locale_to_utf8("该词库文件已经打开了!",-1,NULL,NULL,NULL);
message_box=gtk_message_dialog_new(GTK_WINDOW(fs),
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_WARNING,
GTK_BUTTONS_OK,buf);
gtk_dialog_run(GTK_DIALOG(message_box));
gtk_widget_destroy(message_box);
}
else
{
gtk_list_store_append (model, &iter);
gtk_list_store_set (model, &iter,0,buf,-1);
path=gtk_tree_model_get_path(GTK_TREE_MODEL(model),&iter);

gtk_tree_view_set_cursor(GTK_TREE_VIEW(treeview2),
path,NULL,FALSE);

gtk_tree_view_scroll_to_cell(GTK_TREE_VIEW(treeview2),
path,NULL,TRUE,1.0,0.0);

gtk_tree_path_free(path);
gtk_widget_hide(fs);
}
}

void on_clear_button_clicked(GtkWidget *w)
{
gtk_entry_set_text(GTK_ENTRY(w),"");
}

void on_open_button_clicked(GtkWidget *w)
{
static GtkWidget *filew=NULL;

if (filew==NULL){
buf=g_locale_to_utf8("打开或新建词库文件\n",-1,NULL,NULL,NULL);
filew = gtk_file_selection_new (buf);

g_signal_connect(G_OBJECT (filew),"delete-event",
G_CALLBACK (gtk_widget_hide),NULL);

g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
"clicked",G_CALLBACK (file_ok_sel), filew);

g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
"clicked",G_CALLBACK (gtk_widget_hide), filew);

gtk_widget_show(filew);
gtk_file_selection_complete(GTK_FILE_SELECTION (filew),"*.dic");
}
else{
gtk_widget_show(filew);
gtk_file_selection_complete(GTK_FILE_SELECTION (filew),"*.dic");
}
}

void on_treeview2_cursor_changed(GtkTreeView *treeview)
{
GtkTreePath *path[1];
GtkTreeIter iter;
gchar *str_data;

gtk_tree_view_get_cursor(GTK_TREE_VIEW(treeview2),
path,
NULL);

gtk_tree_model_get_iter(GTK_TREE_MODEL(model),
&iter,
path[0]);

gtk_tree_model_get (GTK_TREE_MODEL(model), &iter, 0, &str_data, -1);

g_free(str_data);
gtk_tree_path_free(path[0]);

if (file!=NULL) fclose(file);
fopen(buf,"a+");
}

int main(int argc,char **argv)
{
GtkWidget *window;
GtkWidget *toolbar,*main_vbox,*vbox,*hbox;
GtkWidget *scrolledwindow;
GtkWidget *hpaned1;
GtkWidget *notebook1;
GtkWidget *label;
GtkWidget *entry1;
GtkWidget *clear_button,*open_button;
GtkTooltips *tooltip;
GtkCellRenderer *renderer;
GtkTreeViewColumn *column;

gtk_init(&argc,&argv);

/* 创建工具提示 */
tooltip=gtk_tooltips_new();

/* 创建主窗口 */
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_default_size(GTK_WINDOW(window),700,500);
gtk_window_set_title(GTK_WINDOW(window),g_locale_to_utf8("通用词库编辑器",-1,NULL,NULL,NULL));
g_signal_connect(G_OBJECT(window),"destroy",gtk_main_quit,NULL);

/* 创建主纵向盒 */
main_vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(main_vbox);
gtk_container_add(GTK_CONTAINER(window),main_vbox);

/* 创建清除按钮和文本输入框,以及容纳它们的横向盒 */
hbox=gtk_hbox_new(FALSE,0);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(main_vbox),hbox,FALSE,TRUE,0);

/* 清除按钮 */
clear_button=gtk_button_new_from_stock("gtk-clear");
buf=g_locale_to_utf8("清除单词查询框中的内容",-1,NULL,NULL,NULL);
gtk_tooltips_set_tip(tooltip,clear_button,buf,NULL);
gtk_box_pack_start(GTK_BOX(hbox),clear_button,FALSE,FALSE,0);
gtk_button_set_relief (GTK_BUTTON (clear_button), GTK_RELIEF_NONE);
GTK_WIDGET_UNSET_FLAGS (clear_button, GTK_CAN_FOCUS);
gtk_widget_show(clear_button);

/* 文本输入框 */
entry1=gtk_entry_new();
gtk_widget_set_usize (entry1, -4, 28);
gtk_box_pack_start(GTK_BOX(hbox),entry1,TRUE,TRUE,3);
gtk_widget_show(entry1);

g_signal_connect_swapped(G_OBJECT(clear_button),"clicked",
G_CALLBACK(on_clear_button_clicked),entry1);

/* 创建水平分隔栏 */
hpaned1 = gtk_hpaned_new ();
gtk_widget_show (hpaned1);
gtk_paned_set_position (GTK_PANED (hpaned1), 180);
gtk_box_pack_start(GTK_BOX(main_vbox),hpaned1,TRUE,TRUE,0);
gtk_container_set_border_width(GTK_CONTAINER(hpaned1),2);

/* 创建笔记本构件 */
notebook1 = gtk_notebook_new ();
gtk_widget_show (notebook1);
gtk_paned_pack1 (GTK_PANED (hpaned1), notebook1, FALSE, TRUE);
gtk_notebook_set_tab_pos (GTK_NOTEBOOK (notebook1), GTK_POS_BOTTOM);
GTK_WIDGET_UNSET_FLAGS (notebook1, GTK_CAN_FOCUS);

/* 创建笔记本的第一个页“查看” */
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_container_add (GTK_CONTAINER (notebook1), scrolledwindow);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

treeview1 = gtk_tree_view_new ();
gtk_widget_show (treeview1);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview1);

buf=g_locale_to_utf8("查看(_V)",-1,NULL,NULL,NULL);
label = gtk_label_new_with_mnemonic (buf);
gtk_widget_show (label);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);

/* 创建笔记本的第二页“文件” */
vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(vbox);
gtk_container_add (GTK_CONTAINER (notebook1), vbox);
gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook1),1);

scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start(GTK_BOX(vbox),scrolledwindow,TRUE,TRUE,0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

/* 创建树视 */
model = gtk_list_store_new (1,G_TYPE_STRING);
treeview2 = gtk_tree_view_new_with_model (GTK_TREE_MODEL(model));
g_signal_connect(G_OBJECT(treeview2),"cursor-changed",
G_CALLBACK(on_treeview2_cursor_changed),
NULL);
gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (treeview2), TRUE);

/* 为 treeview2 添加列 */
renderer = gtk_cell_renderer_text_new ();
buf=g_locale_to_utf8("词库文件",-1,NULL,NULL,NULL);
column = gtk_tree_view_column_new_with_attributes (buf, renderer,
"text", 0,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (treeview2), column);
gtk_tree_view_column_set_sort_column_id (column, 0);
//gtk_tree_view_column_set_sort_order(column,GTK_SORT_ASCENDING);
gtk_tree_view_column_set_sort_indicator(column,TRUE);
gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model),0,GTK_SORT_ASCENDING);


gtk_widget_show (treeview2);
gtk_container_add (GTK_CONTAINER (scrolledwindow), treeview2);

/* 标签 */
buf=g_locale_to_utf8("文件(_F)",-1,NULL,NULL,NULL);
label = gtk_label_new_with_mnemonic (buf);
gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1),
gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label);
gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);

hbox=gtk_hbox_new(FALSE,0);
gtk_widget_show(hbox);
gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,TRUE,2);

/* 打开按钮 */
open_button=gtk_button_new_from_stock("gtk-open");
buf=g_locale_to_utf8("如果词库文件存在,就打开该词库文件,不存在,就创建一个新的词库文件。",-1,NULL,NULL,NULL);
gtk_tooltips_set_tip(tooltip,open_button,buf,NULL);
gtk_box_pack_start(GTK_BOX(hbox),open_button,FALSE,FALSE,0);
gtk_button_set_relief (GTK_BUTTON (open_button), GTK_RELIEF_NONE);
GTK_WIDGET_UNSET_FLAGS (open_button, GTK_CAN_FOCUS);
gtk_widget_show(open_button);
g_signal_connect(G_OBJECT(open_button),"clicked",G_CALLBACK(on_open_button_clicked),NULL);

/* 创建工具栏和文本视 */
vbox=gtk_vbox_new(FALSE,0);
gtk_widget_show(vbox);
gtk_paned_pack2 (GTK_PANED (hpaned1), vbox, TRUE, TRUE);

/* 工具栏 */
toolbar=gtk_toolbar_new();
gtk_widget_show(toolbar);
gtk_box_pack_start(GTK_BOX(vbox),toolbar,FALSE,TRUE,0);

gtk_toolbar_append_item(GTK_TOOLBAR(toolbar),NULL,NULL,NULL,
gtk_image_new_from_stock("gtk-new",GTK_ICON_SIZE_SMALL_TOOLBAR),
NULL,NULL);

/* 创建文本视 */
scrolledwindow = gtk_scrolled_window_new (NULL, NULL);
gtk_widget_show (scrolledwindow);
gtk_box_pack_start (GTK_BOX (vbox), scrolledwindow, TRUE, TRUE,0);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_SHADOW_ETCHED_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

textview1 = gtk_text_view_new ();
gtk_widget_show (textview1);
gtk_container_add (GTK_CONTAINER (scrolledwindow), textview1);

/* 显示主窗口 */
gtk_widget_show(window);
gtk_main();
return 0;
}


CFFD 与 SCIM 合作实现智能提示。

CFFD - Common Full Feature Dictionary
一个正在开发的通用全功能字典。

SCIM - Smart Chinese/Common Input Method platform
一个通用输入法平台。

我们正打算把它们结合起来实现智能提示。

智能提示
用过 VC++ 6 编程的朋友一定知道,它有一个智能提示技术,
输入函数时能动态提示可选函数,还能提示函数的参数。
这是编程时非常有用的功能。我们就想实现一个这样的功能,
与 SCIM 结合可以保证智能提示的通用性,在任何编程器下
都可以使用,可以提示任何库函数,无论 GTK 和 QT。估计
老外也在做,但是他们总是把它做在 IDE 里,这样就不能通用了。

大家觉得是否可行,是否有益。是不是有点拿 SCIM 不务正业。

请大家关注 CFFD 和 SCIM 的开发。
如果你对 CFFD 和 SCIM 感兴趣,请订阅下面的邮件列表。
Cffd-devel -- 讨论使用和开发 CFFD 和 SCIM,同时也讨论 GTK2 编程:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel


近期计划

在这个月底前做出一个可用的 CFFD,具有屏幕取词和一个词库编辑器。
查看邮件列表,你可以得到最新信息:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel

CFFD 发布了(第一个版本)

下载:
http://www.sharemation.com/konghui/cffd/cffd.tar.gz
描述:
cffd-edit.c 是词库编辑器,现在已经完成了词库编辑的所有部分,
程序中的中文注释非常详细。

TODO list:
1.国际音标
2.合并多个词库文件
3.寻找词库数据
4.屏幕取词

cffd-edit 编译后的程序。
cffd-edit.c 源程序,有中文注释。
编译很简单:
make
./cffd-edit

konghui@xinhuanet.com
2002年8月14日


Re: CFFD 发布了(第一个版本)

这个url无法下载

Re: CFFD 发布了(第一个版本)

见附件。

Re: 近期计划

there is a big problem with your project: uncleared specification.

Maybe only you know exactly how you want the system to be. so there will not be many people able to help. Posting code is far not enough for decent software engineering. maybe you should work out some UML or Z notation to firstly let us aware what you wish to do?


Re: 近期计划

谢谢,你说的问题,我们已经讨论过了。可以查看邮件列表的存档。
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel

CFFD V0.0.2 发布了。

下载:
http://www.sharemation.com/cffd/cffd.tar.gz

CFFD v0.0.2
描述:
CFFD - Common Full Feature Dictionary,通用全功能字典。

cffd 编译后的程序
cffd.c 源程序,有中文注释。
ec.dic 英汉字典。
ce.dic 汉英字典。

CFFD 使用了 GTK2,编译前应确保已经正确安装了 GTK2。
编译很简单:
cd cffd
make
./cffd

TODO list:
1.国际音标
2.屏幕取词

已知 Bug:
打开没有权限的文件,程序会直接退出。

CFFD 的主页:
http://cffd.cosoft.org.cn
CFFD 的开发基地:
https://cosoft.org.cn/projects/cffd/
CFFD 的邮件列表:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel
如果想加入 CFFD,只需订阅邮件列表即可。

孔晖 konghui@xinhuanet.com
2002年8月22日

CFFD v0.0.3 贴图

http://cffd.cosoft.org.cn/images/Screenshot-cffd.png
明天要发布的 CFFD v0.0.3 就是这个样子。
在图中看到的就是牛津英汉双解字典。

CFFD V0.0.3 发布了。

下载:
http://cffd.cosoft.org.cn/download/
https://cosoft.org.cn/project/showfiles.php?group_id=4624

CFFD 贴图:
http://cffd.cosoft.org.cn/images/Screenshot-cffd.png

CFFD v0.0.3
描述:
CFFD - Common Full Feature Dictionary,通用全功能字典。

what's new?
* 增加了牛津英汉双解字典
* 修订了两个 bug

目前 CFFD 有四个包:
cffd-0.0.3.tar.bz2 程序
ce-0.0.1.tar.bz2 汉英字典
ec-0.0.1.tar.bz2 英汉字典
oxford-0.0,1.tar.bz2 牛津英汉双解字典

安装:
1. 解压:
tar jxvf cffd-0.0.3.tar.bz2
2. 运行:
./cffd
3. 解压字典包,并把解开的文件复制到 cffd 下,以方便使用。

如果想自己编译程序:
CFFD 使用了 GTK2,编译前应确保已经正确安装了 GTK2。
编译很简单:
cd cffd
make
./cffd

TODO list:
1.国际音标
2.屏幕取词

已知 Bug:
打开没有权限的文件,程序会直接退出。

CFFD 的主页:
http://cffd.cosoft.org.cn
CFFD 的开发基地:
https://cosoft.org.cn/projects/cffd/
CFFD 的邮件列表:
http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel
如果想加入 CFFD,只需订阅邮件列表即可。

孔晖 konghui@xinhuanet.com
2002年9月3日

共创软件杂志即将发表介绍 CFFD 的文章

作者:胡晓飞

编者按:CFFD并不是共创联盟协同开发平台上开发得最完善的项目,但是在短短两个月的时间内,已经有30人参与,60多人关注这个项目了,从开源传播的角度讲,它是成功的。作为共创联盟平台上参与人数较多的一个项目,在开源社区的分布式项目协同管理方面,CFFD可以说正在做着有益的尝试。国内开源社区需要壮大,更需要越来越多的关注和支持。从本期起,我们将陆续向读者介绍一些在共创联盟协同开发平台上有意义的项目。

共创联盟协同开发平台开源项目CFFD介绍

一群热爱GNOME和GTK①的中国年轻人计划要翻译一些GTK方面的资料,这时候他们发现需要一个功能齐备的字典,因为Linux下虽然有许多字典,如:stardic、rdict、cdict、xdict、IBM dict,但在功能方面都或多或少有些缺失。他们希望有一个具有以下功能的字典:(1)屏幕取词;(2)自动补全;(3)输入即查;(4)多词库;(5)具有词库编辑器;(6)控制显示内容为三个状态:简单、详细、完全;(7)预留远程字典的接口;(8)编程时智能提示函数名称;(9)允许像cdict一样在字符终端下运行。

因为目前尚没有满足这些需求的合适工具,他们就像一些真正的黑客一样,决定自己去解决这个问题。为此,2002年7月初,由孔晖( konghui@xinhuanet.com )等人发起并以共创联盟协同开发平台为基地开始了CFFD项目的开发。

CFFD 是Common Full Feature Dictionary的缩写,中文含义即“通用全功能字典”,是一款运行于XWindow环境下的通用英汉字典,可以根据所提供的英文单词查出对应的中文语义。CFFD是一个开源项目,它遵循GPL许可协议。

1. CFFD项目开发进程

CFFD项目的开发是在2002年7月初启动的,项目的发起人期望在2003年5月完成全部项目。目前项目组已经发布了三个可运行版本(CFFDV0.01、v0.02、v0.03)和四个软件包(cffd-0.0.3.tar.bz2程序包、ce-0.0.1.tar.bz2汉英字典、ec-0.0.1.tar.bz2英汉字典、oxford-0.0,1.tar.bz2牛津英汉双解字典)。

在8月中旬,第一个版本发布后,项目组制订了四个近期要完成的任务,即实现国际音标功能、合并多个词库、寻找词库数据以及实现屏幕取词功能。目前,寻找词库数据和合并多个词库任务已完成,项目组开发人员正在努力实现国际音标和屏幕取词功能。

CFFD在开发过程中还成功地实现了与另外两个项目的合作。一个是与suzhe(苏哲)开发的SCIM合作来实现CFFD中的智能提示,另一个是与cai yu开发的gnudict合作来实现远程字典功能。

所谓智能提示就是指CFFD要实现的第8个功能,即“编程时智能提示函数名称”,CFFD想让这个动态提示函数名称及函数参数的功能可以在任意编辑器中实现,以此来方便编程。所以他们就需要一个通用的输入法平台,而suzhe开发的SCIM(Smart Chinese/Common Input Method Platform)正好可以对此提供支持,令人高兴的是两个项目已很好地实现了合作。

Cai yu的gnudict可以支持DICT server(RFC2229)、Babylon字典(英汉,汉英,英法,英德),它的插件部分将用在CFFD项目中,来帮助实现远程字典功能。

2. CFFD项目遇到的问题

CFFD从创立到现在不过两个月的时间,可是已经取得了值得称赞的成果。首先有形的成果是他们发布的三个版本和四个软件包。另外无形的,具有更大意义的是他们正在尝试着探索的社区协同开发模式在国内尚未开始或者说是刚刚开始。因为相对的参照比较少,导致开发人员对项目的发展方向、解决问题的方法正确与否等不是特别清楚。这些由于缺乏经验和必要的参照而产生的“不清楚”常常会使项目发展发生偏差,有时候会导致一个新项目的夭折。当然不论项目成功与否,解决这些问题时的方法都会成为后继项目的必要参照。

从CFFD的现状来看,有以下几个问题值得关注:

(1)开发速度与质量问题
CFFD在2002年8月16日发布了第一版本,然后在半个多月的时间里连续发布了两个版本,这个开发速度应该说是不慢了。项目前期能很快地发布可用的版本,对吸引参与者是有帮助的。可是如果CFFD要“每半个月发布一次新版本”这样的开发速度是不是太快了?过快的开发速度会不会对质量产生影响?如果既要保证开发速度,又要保证开发质量,那么对开发人员的要求是否太高了?

(2)开发中的管理/协作问题
开源项目的一个特点就是分布式开发,即开发者不在同一地点,只是通过网络组成一个虚拟的工作组。分布式开发如何管理?国外大一点的项目的作法是设计详细的文档、制订完善的管理体系,这要求项目主要开发者同时具有管理和文档撰写的能力。这种作法无疑也会分散项目管理者(同时也是主要开发人员)许多精力和时间。CFFD过去一直使用邮件列表交流的方式来协同开发,在最近一段时间内他们还打算这样做。可是随着项目的进展,这种简单的开发方式能代替有文档的系统的管理方式吗?

(3)用户支持问题
用户支持是项目生存的基础。而在开源项目中,用户往往不是单纯的使用者,他们是开发者和测试者,还可能是合作者和支助者。他们会向项目组报告bug和提出有益的建议。CFFD创立之初只有几个人,到现在已受到60多人关注,有30人直接参与开发。如何保持和扩大这个用户基础?功能的添加和完善是吸引关注的一个好办法,而这其中又会有很多问题要解决。

打开CFFD的邮件列表( http://lists.cosoft.org.cn/mailman/listinfo/cffd-devel ),你会发现一片快乐的、自由交流的天地,一群喜爱C和GTK的人在这里相互学习、相互帮助,共同完成着一件对他们来说很有意义的东西。正如我们上面提到的这个项目还需要大量的关注和支持一样,如果你对他们感兴趣,不妨加入其中。加入的方法很简单,只要你也喜欢C和GTK+,并且有一个可以收到他们邮件列表的邮箱,你就可以到共创软件联盟( http://cosoft.org.cn )的平台上注册,然后再通知项目的主要开发者孔晖( konghui@xinhuanet.com )就可以了。

CFFD是一个国内自由软件开发者利用国内开源社区的协同开发平台(共创软件联盟协同开发平台)进行的比较成功的项目,我们祝愿它顺利地发展下去,同时我们也相信会有更多的类似CFFD这样的项目采用社区协同开发的方式。CFFD所遇到的问题可能也是某些项目正在经历的,或将会经历的,这些问题的解决需要大家的协同努力。祝愿我们的开源社区在众人的支持下越来越壮大!

①GTK是一个创建图形用户界面的库,它采用LGPL许可。所以你可以用它来开发开源软件、自由软件、甚至是商业非自由软件,而不必付许可费用。GTK被称为GIMP工具集,因为它最初是被编写来开发GNU图象处理程序(GIMP)的,但是GTK现在已被用在许多软件工程中,包括GNU Network对象模型环境(gnome)项目。GTK+是GTK的加强版,GTK+2.0是GTK的最新加强版。




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 蓝森林网站 版权所有。 E-mail : webmaster@lslnet.com