82
星星星星 - 星星星星星星

星际译王 - 自由软件介绍

Embed Size (px)

DESCRIPTION

星际译王 - 自由软件介绍. 内容. 1. 个人简介 2. 星际译王软件介绍 3. 技术介绍 4. 开发历史 5. 我开发的一些其他软件 6. 其他兴趣爱好 7. 提问和交流. 本人简介. 胡正,83年出生,湖南岳阳人。 2006年从四川大学毕业。 在大学里开发了星际译王等软件。 曾获中国开源软件竞赛金奖。 对哲学和佛法很爱好,写了一些非正式的书。 目前在红帽Linux公司工作。. 星际译王简介. - PowerPoint PPT Presentation

Citation preview

Page 1: 星际译王 - 自由软件介绍

星际译王 - 自由软件介绍

Page 2: 星际译王 - 自由软件介绍

内容

1. 个人简介 2. 星际译王软件介绍 3. 技术介绍 4. 开发历史 5. 我开发的一些其他软件 6. 其他兴趣爱好 7. 提问和交流

Page 3: 星际译王 - 自由软件介绍

本人简介

胡正, 83年出生,湖南岳阳人。 2006年从四川大学毕业。 在大学里开发了星际译王等软件。 曾获中国开源软件竞赛金奖。 对哲学和佛法很爱好,写了一些非正式的书。 目前在红帽 Linux公司工作。

Page 4: 星际译王 - 自由软件介绍

星际译王简介

星际译王是一个跨平台 (能在 Linux下和Windows下运行 )的国际化的词典软件,使用C++语言开发,并使用了 GTK2库作为图形界面,开放源代码,并遵循 GPLv3协议。

Page 5: 星际译王 - 自由软件介绍

功能

星际译王功能强大,除基本的即输即查功能外,还有通配符匹配,模糊查询,全文检索,正则表达式匹配,屏幕取词等功能。

星际译王 3.0版新加了插件系统,网络词典等功能,已经渐趋完善。

Page 6: 星际译王 - 自由软件介绍

运行主界面

Page 7: 星际译王 - 自由软件介绍

取词窗口

Page 8: 星际译王 - 自由软件介绍

词典管理 在词典管理对话框中,你可以屏蔽掉不需要的词典,你也可以设置词典查询的顺序。

Page 9: 星际译王 - 自由软件介绍

首选项 在首选项窗口里可以进行各种配置。

Page 10: 星际译王 - 自由软件介绍

插件管理

Page 11: 星际译王 - 自由软件介绍

图形化网状词典插件

Page 12: 星际译王 - 自由软件介绍

全文翻译

Page 13: 星际译王 - 自由软件介绍

网络词典功能

Page 14: 星际译王 - 自由软件介绍

Windows移植版本

Page 15: 星际译王 - 自由软件介绍

包含金山词霸词典 金山词霸的所有版本的所有词典都可以转换后在星际译王中使用。

Page 16: 星际译王 - 自由软件介绍

使用所有 Babylon词典

星际译王也开发了 Babylon词库转换程序。

Page 17: 星际译王 - 自由软件介绍

项目主页

Page 18: 星际译王 - 自由软件介绍

词典下载页面 目前星际译王已经有两千多个词典下载,包含各种语言和类型。

Page 19: 星际译王 - 自由软件介绍

安装

星际译王安装十分方便,在 Linux下提供了 RPM包,在Windows下有向导式的安装程序。

Page 20: 星际译王 - 自由软件介绍

Mac OS X 苹果移植

Page 21: 星际译王 - 自由软件介绍

Nokia N800移植

Page 22: 星际译王 - 自由软件介绍

GPE手机移植版本

Page 23: 星际译王 - 自由软件介绍

星际译王在线词典网站

Page 24: 星际译王 - 自由软件介绍

Ajax界面网页

Page 25: 星际译王 - 自由软件介绍

跨平台

目前星际译王能在 Linux, FreeBSD, Solaris, Windows 等平台上运行。

Mac OS X 苹果移植版也已经推出。 星际译王还有专门的命令行版本,叫做 sdcv。

Page 26: 星际译王 - 自由软件介绍

国际化

由于有 UTF-8支持,星际译王能支持各种语言。如德语,法语,俄语,日语,阿拉伯语等。

星际译王还收集了广泛的词典数据,包含了各种各样的语言。

因此星际译王在国外也有很多的用户。目前是在Linux系统下最流行的词典软件。

Page 27: 星际译王 - 自由软件介绍

高效率

星际译王自己设计了词典文件格式,访问效率极高,支持数据压缩,扩展性也很好,并使用了稀

疏索引技术,使用时的内存消耗很少。

Page 28: 星际译王 - 自由软件介绍

广受欢迎

星际译王得到了广大用户的欢迎,目前下载量已达到 400万以上,每天下载量在 8千左右。项目主页的每日独立 IP访问在几万以上。

在 SourceForge.net的全球自由软件排名目前是八十名左右的位置。

Page 29: 星际译王 - 自由软件介绍

开发历史

星际译王在 2003年开始开发,现在已经比较完善,现有代码 8万行左右,其中主程序 2万行,词典引擎库 3万行,插件 1万行,工具 1万多行 , 目前还在不断维护中。 主要工作是由我做的,来自俄罗斯的 Evgeniy也曾做了不少贡献。有非常多的用户和爱好者也进行了参与。

项目主页是: http://stardict.sourceforge.net

Page 30: 星际译王 - 自由软件介绍

获奖

2004年获得第一届中国开源软件竞赛金奖。 2005 “ ”在香港举行的 金企鹅杯 两岸四地开源软件大赛中获得杰出创意奖。代表分别来自港澳台和大陆。

第一届中日韩开源软件竞赛中作为中方四名代表之一进行参赛,和其他国家的选手进行了友好交流。

Page 31: 星际译王 - 自由软件介绍

商业回报

毕业工作半年后,在 2007年一月以一个六位数将在线词典网站和软件所有权卖给了一家翻译公司。

商业交易后软件继续保持开源,我们仍然一起合作并致力于改进和维护星际译王的发展。

Page 32: 星际译王 - 自由软件介绍

开发开源项目对毕业后找工作的帮助

由于有很强的项目实践经历,培养了实力,所以找工作比较简单。

毕业后到北京飞漫嵌入式 Linux公司工作是发了封邮件就定好了。

去红帽面试时说到开发过星际译王,大家知道了我是谁,所以过程也很顺利。

目前工作还是比较轻松自由,之前一段时间就是在工作时开发 StarDict-3.0版。因为是开源软件公司,所以支持我们的开源项目。

Page 33: 星际译王 - 自由软件介绍

目前的主要问题

缺少其他开发者的参与和贡献。目前我自己的个人精力已经转变到一些其他的事情上了,所以难以继续做很多开发。希望能有高水平的开发者参与进来,维护和发展星际译王的后续版本。

缺少技术支持人员。目前在 StarDict论坛里发帖提问题的人很多,发信到邮件列表的人也比较多,但一直只有我一个人回复。平时回复邮件占了我很多精力,希望也有人能参与进来。

Page 34: 星际译王 - 自由软件介绍

星际译王的一些技术细节

1. 词典文件格式 2. 查询引擎 3. dictzip技术 4. 屏幕取词技术 5. 网络词典 6. 插件系统

Page 35: 星际译王 - 自由软件介绍

详细词典格式文档 星际译王的词典格式是公开的,这意味着,其它软件可以自由读取星际译王的词典文件。由于StarDict词典文件格式设计简单而清晰合理,所以很多其它软件也在采用这种格式作为他们的词典数据,比如Mac os下的mdict,手机上的 NDS等等。

详细文档包含在了软件源码包里。这是一个 500多行的英文文档。因为软件一般都有国际化的要求,而且也会有其他国家的开发人员参与,所以用英文写文档和注释是一个好习惯,也能锻炼自己。

Page 36: 星际译王 - 自由软件介绍

词典文件组成

一个最基本的词典分为 .ifo, .idx, .dict三个文件。

还可以有 .syn同义语信息文件 , .idx.oft索引缓存文件 (加快启动速度 ), .clt单词排序方法文件等,另外也可以有图片资源等目录文件。

.idx文件可以用 gzip压缩。 .dict文件可以用 dictzip技术压缩,生成 .dict.dz文件。

Page 37: 星际译王 - 自由软件介绍

ifo文件内容

Ifo文件包含词典的基本信息。是一个纯文本文件。

Page 38: 星际译王 - 自由软件介绍

idx文件格式

Idx文件格式也很简单。就是一个 UTF-8编码的单词,加上 \0字符结尾,然后两个 32位数字,一个表示解释数据块在 .dict文件里的偏移,另一个表示解释数据块的大小。接着就是第二个单词,依次重复。

所有这些单词,按一定的排序规则来存储。比如利用类似 strcasecmp的函数。

Page 39: 星际译王 - 自由软件介绍

dict文件格式

dict文件是纯粹的数据块,每个数据块的开始偏移地址和大小记录在 idx文件里了。

由于 idx文件里已经有了数据长度信息,所以字符串可以不要结尾的 \0字符。

数据块的类型由 .ifo文件里的sametypesequence标识决定的。可以是纯文本,也可以是 html, pango, xdxf, xml, 音标,wiki标记等等,正因为如此, StarDict可以兼容各种其他词典的数据类型,只要开发相应的数据解析插件就行了。

Page 40: 星际译王 - 自由软件介绍

查询原理 StarDict通过读取 ifo文件,获取了词典的基本信息。然后加载处理 .idx单词索引文件,在内存里创建一个元素为 32位数字的数组,数组大小就是单词的数量。每个数组成员的值就是对应单词在 idx文件里的起始偏移。

比如,第一个单词的偏移肯定就是 0,假设第一个单词为 apple的话,那么它的单词长度是 5,加上结尾的 \0占 1字节,后面紧跟的解释数据偏移和大小两个 32位数字占 8字节,总共就是 14字节,所以第二个单词在 idx文件里的起始偏移肯定就是 6+8=14字节,因此数组的第二个元素的值就是 14。后面的单词偏移值都以此类推。

由于记录了每个单词在 idx文件里的偏移值,这样访问第 99个单词时只需读取数组里的第 99个数字和第 100个数字的值,第 99个数字的值就是第 99个单词的偏移,第 100个数字的值减去第 99个数字的值就是第 99个单词的大小。这样要访问第任意个单词,都可以非常快,只要相应的 fseek和 fread就行了。

Page 41: 星际译王 - 自由软件介绍

折半查找 在能迅速访问第任意个序号的单词后,加上单词已经事先排好了序,就可以用折半查找算法来查找对应的词了。

比如查找 apple这个词,同时词典里有 1000个词,我们先取出第500个词,假设是 banana,通过 strcasecmp比较,我们肯定 a开头的是在 b开头的单词的前面,所以我们继续读取第 250个单词,再进行比较,又确定是再读取比较第 125个单词还是第 375个单词。这样范围慢慢缩小,最后找到了 apple这个单词的位置,(如果未找到,就可以返回显示未找到了)比如是第 85个单词,我们就同时取到idx文件里 apple字符串后面的两个数字,有了偏移和大小,再访问 .dict文件里的数据块,这样就把解释也读出来了,然后再通过解析,就可以把意思显示到软件界面上来了。

实际中的星际译王是使用的稀疏索引折半查找算法,这样稍微复杂些,但需要的索引数字的数组大小可以只要原来的 1/32,这样就达到节省内存的目的。这个数组的内容还可以保存为 .idx.oft文件,下次直接mmap加载到内存中,以加快词典加载速度。

Page 42: 星际译王 - 自由软件介绍

代码查看 这段稀疏索引折半查找的代码只有 80行,相对于总共的 80000行代码,只占千分之一,可见一个软件虽然原理简单,但要做到好用,往往要涉及到其它的各方各面的细节,然后整体架构就会比较复杂了。

这也就是 Unix的 KISS原则, Keep it simple, stupid的意义所在了。因为复杂只有构建在简单上,才能掌控其复杂性。

Page 43: 星际译王 - 自由软件介绍

dictzip词典压缩技术 对词典的文本解释数据进行压缩是很常见的需要,但一般的压缩方法只能从头到尾进行顺序解压,而词典需要快速访问某一特定偏移和大小的数据,因此 dictd软件项目设计了基于 gzip的压缩技术,在 gzip文件里的附加信息块里保留各个压缩分块的偏移信息,以达到前面的目的。同时解压却可以仍然使用 gunzip工具,保持了兼容性,从而很方便。

由于 dictd也是使用 GPL协议的自由软件,所以星际译王可以自由地修改和采用她的代码,只要继续保持开放就行了。这样自由软件之间进行技术共享就很大地方便了开发者,大大减少了工作量,不必重复开发,重复发明轮子。

Page 44: 星际译王 - 自由软件介绍

屏幕取词技术 星际译王在 Linux下使用的是选中区取词,利用的是

x-window的机制。用户只需双击选中单词就行了。 星际译王的windows版本也实现了金山词霸那样的屏幕取词功能。这个功能以前一直是一个不公开的难点技术。后来有人告诉我有个俄国的开源软件实现了这个技术,通过阅读它的 delphi源码,我编写了 c语言的 dll代码,同时阅读了一些相关技术文档,对它进行了改进,使其成为独立的模块,从而攻克也公开了这个技术。现在任何感兴趣的人都可以阅读和使用这些代码了。

Page 45: 星际译王 - 自由软件介绍

网络词典

星际译王的在线词典网站目前由 stardictd词典服务端 , stardict-client客户端和 stardict.org php代码三部分组成。

StarDict软件也可以直接连接到 stardictd端口来查询单词和进行用户设置等。

一般的词典网站是利用数据库来提供查询,但开发专门的词典数据服务端能更高效,查询机制也可以更专业。目前 stardictd在加载 30G的词典数据后也只需 16M的内存,而且运行非常稳定快速。

Page 46: 星际译王 - 自由软件介绍

插件系统

在软件里增加插件系统能大大提高软件的扩展性和灵活性,使代码更加模块化,降低复杂性。一些不在核心但可以独立的功能可以开发为插件,这样用户可以选择是否加载对应插件来取舍这些功能。

插件系统就是一个加载,管理,调用插件的复杂类,并设计了各种插件类型和对应的调用接口。在软件里的合适位置再进行调用。

Page 47: 星际译王 - 自由软件介绍

星际译王的源码

星际译王的源码还是开发得比较仔细严密,代码质量比较高,一直以来很少有bug。对于感兴趣的同学,可以下载研究阅读一下其代码,肯定会有不少收获。因为软件的所有设计思想,技术精华等等都全部包含在源码里了。

Page 48: 星际译王 - 自由软件介绍

开发历史和经历

星际译王的源码包里有一个 ChangeLog文件,里面记录了每个版本的修改历程。

Page 49: 星际译王 - 自由软件介绍

大学时的开发经历

2003年 3月,大二下学期,开始星际译王项目。 大三上学期完善了 StarDict,推出 2.4.2版,星际译王成为了一个完整的词典软件。

然后休息了一年半,大四毕业时推出了 2.4.5版。 因为学分不够,延期一年毕业,因此多读了一年,在上课之余主要开发 StarDict,每三个月出一个版本, 2.4.6, 2.4.7,最后毕业时推出了 2.4.8版,一年里基本上就只做了这一件事,但为软件的成熟打下了基础。星际译王作为一个本地的词典软件已经很有竞争力了。

Page 50: 星际译王 - 自由软件介绍

工作后的开发

在飞漫公司时利用业余时间开发出了在线词典网站和词典服务端。

到红帽公司后,花半年时间开发出了 3.0.0版。主要是加了插件系统和网络词典,以及大量的修改和完善。

之后又过了三个月,推出 3.0.1版。这个版本加了语音朗读,WordNet图形化词典等功能,以及 bug修复等。

Page 51: 星际译王 - 自由软件介绍

开发软件项目的工作量 软件的开发需要耗费非常多的时间和精力,因此一个简单的词典软件也需要近五年的时间,还好开发好后可以全球几百万人使用,这样效益就可以体现出来了。

8万行代码,用 A4的纸打印出来,就是一千多页,这是非常厚的一本书了。而且是一行行写出来的,还得保证整体的严密统一,要求没有任何逻辑错误等等,不然就是 Bug。可见其中要包含的心力是非常多的。

收集的两千多个词典,也是一个个加起来的。一直不断积累才可以达到这个数量,维护整理也是要花去很多时间。经常要编写专门的转换工具。

这几年回复处理的相关邮件有五六千封,平均每天都有好些封。 3.0.1发布后,平时一打开邮箱就是二十几封新邮件待处理。

付出就是回报!这个世界没有不劳而获,也没有劳而无获。其中有很 多乐趣,也很有意义。经历了就不会觉得难,所以其实也不算什么

:)

Page 52: 星际译王 - 自由软件介绍

参与自由软件能认识很多朋友

你会与很多国外的不认识的朋友一起做事情和交流,增进了大家的友谊,也扩大了见识面。

你会认识很多大学里的 Linux爱好者,因为Linux崇尚的开源共享和自由精神,大家都是很友善很好的人,相处会很愉快。

可以进入国内的一些 Linux圈子和参加聚会活动,让生活更加丰富多彩。

Page 53: 星际译王 - 自由软件介绍

开发的其他软件 reciteword-0.8.4,一个界面漂亮 ,功能强大的跨平台的背单词软件。

Page 54: 星际译王 - 自由软件介绍

开发历史和起因 大一时为了背四级单词,经常要用一个叫《轻轻松松背单词 2》的软件 ,可每次要背单词都要重新启动进windows实在是麻烦 ,而且对《轻轻松松背单词 2》的一些地方也不满意,于是我就自己编了个软件用,模仿了其主要功能,而且使用了她的图片作为皮肤。

前后花了一年时间。现在已经只维护了,但一直可用。前一阵推出了 0.8.4维护版。

觉得开发背单词,词典这样的软件的一个好处就是一二十年后仍然会有人要使用,需求会很持久。这也是我做项目的一个主要考虑方面。

Page 55: 星际译王 - 自由软件介绍

选书

Page 56: 星际译王 - 自由软件介绍

单词初记 -分组

Page 57: 星际译王 - 自由软件介绍

单词初记 -浏览

Page 58: 星际译王 - 自由软件介绍

单词初记 -测试

Page 59: 星际译王 - 自由软件介绍

强化复习 -选组

Page 60: 星际译王 - 自由软件介绍

强化复习 -测试

Page 61: 星际译王 - 自由软件介绍

强化复习 -单词再现

Page 62: 星际译王 - 自由软件介绍

单词打靶

Page 63: 星际译王 - 自由软件介绍

打字神功

Page 64: 星际译王 - 自由软件介绍

小词典

Page 65: 星际译王 - 自由软件介绍

另一套皮肤

Page 66: 星际译王 - 自由软件介绍

大二时日夜开发 ReciteWord

那时经常连续开发两三个月,有段时间每天凌晨三四点才睡,并因此得了阑尾炎,从此才学会再也不熬夜了,保持过有规律的生活!

Page 67: 星际译王 - 自由软件介绍

Myicq

Myicq是一个类似 QQ的即时通讯软件 ,张勇开发了服务端和windows客户端,我加入了这个项目,就先编了个 gaim的插件,这样就可以在linux下上myicq了 .

不过后来这个项目没有发展成功,毕竟跟 QQ, MSN竞争还是很难。

Page 68: 星际译王 - 自由软件介绍

友情强档 for linux,一个记录个人信息的软件。高中时编的。我也是高中时接触的 Linux.

Page 69: 星际译王 - 自由软件介绍

BBS 彩票系统

Page 70: 星际译王 - 自由软件介绍

地图浏览软件

Page 71: 星际译王 - 自由软件介绍

手写输入笔画数据库编辑软件 这个是用 python编的。

Page 72: 星际译王 - 自由软件介绍
Page 73: 星际译王 - 自由软件介绍

如何访问我的主页

Baidu或者 Google我的名字(胡正)就行了,第一个就是。

欢迎大家留言!

Page 74: 星际译王 - 自由软件介绍

我的两项技能 :写书和写软件

大学时一直保持写随笔。 因为遇到一些生活中的重大问题,开始研究哲学,并因此写了很多思考笔记。

现在还是在继续写一些文章。一般一两个月一篇。

最近几个月在学佛,因为实证了一些东西,所以对佛法很有信心,收获很大。

Page 75: 星际译王 - 自由软件介绍

以前写的几本书籍

《我的世界之源代码》 这本还好。 《大学随笔》 GeniusPhilosophy.pdf Jan-2004 2.6M TheUtmostTruth.pdf Apr-2004 765k SchizophreniaNotes.pdf Dec-2006 1.2M 我比较喜欢探索新奇未知的东西,所以很可能会因此很痛苦,但

实际上是以苦为乐 :)

Page 76: 星际译王 - 自由软件介绍

第六本书

目前写的算第六本了,还是有点乱。主要是讲佛法。

现在看来,觉得写的这些书都还不是很好,写得“ ”自己满意还是比较费功夫。觉得 行胜于言 更重

要。 以前的书写得都不是很正统,算记录生活和历程。

有兴趣的可以在我的主页上读到。 http://www.huzheng.org

Page 77: 星际译王 - 自由软件介绍

目前的生活

有时很好,有时很虚弱。因为比较累,待处理的事情很多。

生生灭灭的事情见得比较多,所以对佛法会很感兴趣,因为他可以解释我遇到的许多问题。比如以前花了很多精力和爱好开发的软件,几年以后就都没有用了。这些都不是永恒的。

现在是努力行菩萨道,就是自利利他,有(合理)求必 应。修大乘佛法 :)

已经决定辞职休息半年,读书、完成那些自己想做的事情和到各地游历,遍访高山名寺。

Page 78: 星际译王 - 自由软件介绍

书中有意思的话 Jessica: 对于道理没有好感。

Hu: 你不愿速知一切法吗?

我对你的要求跟对猪的要求一样:吃好,睡好,别思考。最好什么也不用做,以慢慢达到什么也 做不了的地步。这样以后淘汰你们才方便啊 :) ----这句话也太绝了啊

要花钱就要赚钱,这个道理一般人都明白,但要用软件就要编软件的道理,大多数人都不知道,他 /她们认为软件只要拿来用就行了。只花钱会造成自身的贫穷,而只用软件已经造成了他 /她们的无知,他 /她们却还不知道。为什么一定要让他们知道呢?没有他们的贫穷哪来我们的巨大财富,没有他们的无知哪来我们的垄断统治。富有的微软如是说,并且因此宣扬只使用软件,只调用 API的愚民政策。

东瀛第一剑客, Ruby 语言的作者,松本行弘 :) 我和他也有过交往,呵呵。至于开源界的中原 第一高手,目前还在深山里修炼和成长哈。大家加油积累! :)

Page 79: 星际译王 - 自由软件介绍

精神上的富有 Be open and mystic. Be nice and complex.

大清国当时何其强盛,闭关锁国则成落后挨打。微软帝国当年何其更新强大,闭源垄断则趋尘封消亡。

我对技术没兴趣,而是对开源精神有兴趣 :)

Linux is for people who want to know why it works.

Mac is for people who don't want to know why it works.

DOS is for people who want to know why it does not work.

Windows is for people who don't want to know why it does not work.

我真是富有啊,写了这么多文字 :)就是还不够精练,算是积累素材吧。慢慢来,终于有天会一 鸣惊人的 :_)

Page 80: 星际译王 - 自由软件介绍

平静的思想,平静的行动 得道的人话很少。

我的金钱观。我的金钱观很简单,就是浪费和缺乏是一,也就是说,不浪费就不会缺乏,浪费了就必然得到缺乏的果报,即使是亿万富翁也是一样。比如你现在浪费了一杯水,以后就会有口渴的时候。那怎样判断什么是浪费呢?我的说法是不用判断,如果一件事你觉得不是浪费而实际上是浪费,那么当对应的缺乏来临时,你也不会觉得是缺乏,既然不觉得是缺乏,那也就很好了。简单的道理,就像反作用力等于作用力一样。是否能够遵循就看你的修为了。

让你喜欢的人都对你很好,这是一门必须学会的艺术。

有人问我怎样得到大量的沙子,我告诉她去挖金子,这样你就会得到大量的沙子。我为什么不直接告诉你去挖沙子呢?这也是我不告诉你去直接追求快乐的原因。

如何面对这些高材生确实是一个问题。如果几十年后我超越了所有这些人,那一定是因为两点,了解奉献的秘密和掌握了更强大的思想。这就是我的道路。

Page 81: 星际译王 - 自由软件介绍

第六本书

第一章 开悟 第二章 初获六神通、证辟支佛果 第三章 金刚菩萨法门 第四章 无上成佛路

Page 82: 星际译王 - 自由软件介绍

Thank you!

谢谢!

最后是提问与交流。