技术思考

最美的中文印刷字体

刚进小学的时候,课本上的字体都是楷体的,字体也比较大,觉得特别好看、特别喜欢。到了高年级后,书本上的字体开始统统改成了宋体,楷体越来越难觅踪迹了,但心里还是特别喜欢楷体。进了大学后,有时候在电脑上编辑一些文档,就喜欢用楷体作为正文的字体。

后来毕业了,使用微软Word的时候往往也只是想写些个人心得或者工作文档什么的,没有心思在排版上多花精力,就选用默认的宋体作为正文字体。再后来,电脑上装的都是英文版Windows,虽然也支持中文,但默认却没有安装楷体字体,以至于后来好长一段时间,Deminy都快忘了电脑上也是可以显示楷体字体的。

前两个星期,测试一款Linux操作系统Ubuntu,进入后的中文界面居然是楷体的,顿时感觉特别亲切、特别漂亮。前几日,忽然又想起来楷体字体了,于是在网上下载了一款“微软简楷体”,却发现Windows中不能将该字体设为默认的界面字体,而且有些复杂的中文字(例如“?”字)是无法用楷体显示的,颇有些失望。

于是我想到,楷体是中文世界中应用非常广泛的一种字体,古人的书籍、官方文档也多是以楷体写就的,为什么微软的操作系统就不把楷体自动纳入进去、但却自动纳入并不是很好看的宋体呢?

进而我想到,为什么我们的书本多是以楷体印刷的呢?

我想,楷体字体并不是横平竖直的,而宋体却是横平竖直的。因此,从造字模的角度来讲,宋体字模的成本要小好些,因此以前书本多是以宋体印刷的。在电脑上,字体是用点阵的方式构成的,显然,(从计算机历史发展的角度来讲)横平竖直的宋体更易设计,所以,微软也就采用了宋体。

但是,中国人是不是更应该使用楷体呢?

标签:

类别:

重新审视软件破解行为

昨日在网上忽然看到现在已经有软件1可以成功地反编译被zend编译过的PHP代码(简单讲来就是加密后的PHP代码也可以被解密还原成PHP源代码)。

哎,难以言表心中互相矛盾的想法。不过大体讲来,还是以不破解为宜。

就像我现在对软件破解的态度一样。虽然因为喜欢测试软件而经常使用一些现成的软件破解工具2,但是毕竟破解还是一个不良行为。

因此,现在开始逐渐改变自己对软件破解的立场了:不赞成破解的行为。

而我也会逐渐放弃Windows操作系统(计划在1年内完全过渡到Linux上),并逐渐淡化软件测试这个爱好。

[注1] 该软件叫deZender,可反编译被Zend编译过的PHP代码。

[注2] 我只是使用一些现成的软件破解工具,但很不熟悉软件破解技术,因此不要试图跟我讨论这个问题。

标签:

类别:

谈海外软件巨头在中国设立技术研究院

在“OCR与中文化”一文的最后,我提到“如果ABBYY和OmniPage能够突破OCR中文识别技术并进入中文市场,当前的国产OCR软件都将死得很惨,就如同曾经的文字处理软件WPS、CCED等”。

这里,我不由得想起来两个正在为信息技术本土化和中文化而做出努力的两大软件巨头:微软和Google。这两大巨头不约而同地先后在中国设立了技术研究院。

曾几何时,国人和信息产业部都为微软和Google在中国开设研究院而兴奋,认为这是中国市场在世界上得以提升、中国信息技术水平得到世界认可的标志之一。但是,为什么微软和Google要在中国开设研究院?一是中国的人才潜力,另外一个,则是因为文化问题阻碍了其产品市场的进一步拓展。东亚文化(主要指中文、日文和韩文)和以字母为载体的西方文化有着一些根本性的差异,微软和Google要进入东亚市场,有很多依靠他们自己难以克服的阻力。文化问题阻挡了微软和Google产品在东亚市场的进一步拓展。因此,微软和Google需要借助东亚人自己的技术力量和研究成果,让自己的产品更强有力地占据东亚市场。

Google的中文搜索始终达不到Baidu的中文搜索的某些效果,所以在中文搜索市场上无法把Baidu甩在身后;在微软Office办公软件的重压下,金山WPS系列产品还能活着,和金山WPS本土化程度更好也不无关系。

有朝一日微软和Google突破了信息技术中文本土化的一些主要问题,打败中国国产软件公司将变得颇为轻松。那时候,金山公司将可能会倒下,汉王公司将可能会倒下,相当一批国产软件公司将可能会倒下,毕竟,国产软件很多方面不如国外软件。如果是这样的话,中国信息技术的发展方向将被国外软件巨头捏得更紧。

微软和Google在中国设立技术研究院一些潜在的野心昭然若揭。这些技术研究院的设立会对中文信息技术发展起到推进作用,但也可能会摧残中国的民族软件产业。

类别:

OCR与中文化

有两大突破传统键盘输入技术的信息输入技术:一是语音,二是手写和OCR(意译为“文字识别”)。本文主要讨论OCR,但也适用于手写,因为两者使用的技术是一致的。

国际上第一流的OCR软件是ABBYY FineReader和ScanSoft OmniPage(ScanSoft公司前2个月更名为Nuance),其它OCR软件都明显不如这两款软件1。ABBYY FineReader是俄国人开发的。俄国人开发的著名软件不多,但却有2个是世界第一流的,一个是OCR软件ABBYY FineReader,还有一个就是Kaspersky Anti-Virus反病毒软件(原名AVP)。OmniPage是美国公司Nuance推出的,该公司在语音和图像识别技术上都有一定的功力。

这两款世界一流的OCR软件在文字识别上功能很强大,只是对于科技文献(尤其是含有各种数理表达式的文献)的识别有些弱。另外,这两个第一流的OCR软件都有一个共同点,就是支持多种文字语言,大约支持170种到190种文字语言。这两个软件还有一个共同点,就是都不支持东亚文字语言,例如中文繁简体、韩文和日文。这说明针对东亚文字的OCR技术是和针对字母的OCR技术是有一些明显的不同的。

如果要使用中文OCR软件,最有名的两个是清华文通的TH-OCR(原名清华紫光OCR)和汉王科技的文本王系列。其它的国产OCR软件要么是基于这2个软件的,要么效果比较差。例如超星阅读器内嵌的OCR功能就颇不能让人满意。

即使是这两个最著名的中文OCR软件,也是不能让人满意的,具体不细评价(何况我还没有测试过汉王科技的文本王系列)。总之,这些国产OCR产品的产品介绍是超出了它们在现实中所具有的能力的。

举例而言,汉王吹嘘文本王软件“对印刷文稿录入的识别率高达99.5%”。这是一种典型的吹嘘法2:用一个理想化的事例作为典型实例告诉听众(就像房地产商卖房子),但事实是听众大部分时候所需要处理的数据都不是处在理想化的状态的。因此可以讲,实际使用中大部分时候(远远)达不到99.5%的识别率。而且,正确识别了文字也不等于所识别的文字就有用。你可以把所有的字都识别的,但是如果这些被识别后的字是无序的,那么识别率就算是100%也是没有意义的。目前所有的OCR软件在文字识别后的格式处理都不尽如人意,这是OCR软件的一个软肋。

中文OCR应该仍然有很多需要解决的(关键性的)技术问题。

中文OCR的需求应该是非常强大的,因为中国是一个有着数千年历史积淀的国度,有着太多的纸质资料需要电子化。因此,中文OCR是一个很有前途的方向,但需要相应的技术实力去做。目前国产OCR软件还有很大的提升空间。如果结合国外先进的OCR技术进行中文化,会是一个比较好的中文OCR发展方向。

[补充说明1] 对于OCR软件的具体评测请参见“文字识别(OCR)软件评测”一文。

[补充说明2] 这种吹嘘的手法我们曾经在“对《金山快译2005》的评价”一文中见过。

[补充说明3] 用过“Google Scholar”的朋友可能会发现,Google也是一个潜在的OCR巨人,因为它的搜索技术能够搜索到通过扫描录入的论文内容。要做到这点,首先必须具备相应的OCR技术,而Google在任何一个它准备进入的领域都做得极其出色。只是不知道Google使用的OCR技术是自己的还是别人的。

[补充说明4] 如果ABBYY和OmniPage能够突破OCR中文识别技术并进入中文市场,当前的国产OCR软件都将死得很惨,就如同曾经的文字处理软件WPS、CCED等。

有意思的是,应用软件开发中,大部分国产软件处于溃败状态,敌不过国外软件。能够存活下来并且发展得比较好的,好些是那些对中文文字依赖度比较高的软件,例如金山词霸,还有就是OCR软件。

在杀毒软件市场,虽然国外软件技术上做得更好,但是由于国内杀毒公司能够提供更好的中文化服务和本地服务,并且使用方式更适合中国人的习惯,何况杀毒效果表面上看起来差异性不是太大,因此国产杀毒软件也能在市场上占据相当的地盘。但是纯粹从技术的角度来讲,国内的软件技术整体上始终是落后的。只是由于有文化这样的一个屏障,使得国产软件公司可以更轻松一点地喘口气。

类别:

技术是永远的双刃剑

周一在569课程上我作汇报,讲述web services的几个不实传言,其中提到“动态链接”功能看似不错,其实是个双刃剑。

其实,很多技术都是双刃剑。

最简单的例子就是枪。枪可以用来防身,但弄不好就成了作案工具了。

如果从技术上来讲,Windows操作系统也是一个双刃剑。它的不断升级使得其功能越来越强大,但是它对硬件的要求也越来越高、系统的复杂程度也越来越复杂了。

好了,回过头来说说我为什么想到双刃剑这个问题。

/robots.txt这个文件可以用来防止搜索引擎把自己不想发布的一些网站信息发布到搜索引擎当中去。看上去,/robots这个文件是挺有作用的。

但是这个“有作用”是仅仅针对(按逻辑出牌的)搜索引擎来讲的,对人来讲是不适用的。

就拿deminy.net来讲,deminy.net的/robots.txt定义了好些子目录不该被搜索引擎收录,但是一个刻意搜寻deminy.net信息的技术人员却可以通过这个文件发现deminy.net下面很多不公开的内容。

也就是说,/robots.txt既可以成为防止信息散布的工具,但却本身也可以成为信息散布的途径。

[补充说明] 为了避免这个问题,今天deminy对某些目录增加了HTTP身份验证机制。

类别:

《完全用Linux工作》读后感(2)

王垠的文章里面还有好几个有趣的观点,介绍Unix的一些设计理念(此处我暂时无法转述其相关文字,因为没有详细阅读和摘录),而这些理念是一个真正的信息技术研究者所应该重视的,而他所批评的一些理念也正是我的一些缺点所在。

我前几天写了点草稿文字,把我和我的一位技术方面的网友yahao之间的差异做了点比较。我说,“在技术上,deminy和yahao最明显的区别是,yahao很专情,而deminy则很滥情。yahao很专注于微软的技术,而且前2年尤其专注于如何提高M$ web和数据库服务器程序性能,为此他做了好些研究,思考了很多,在这方面也做出了非常明显的成绩;而deminy呢,在技术上喜欢尝试各种新鲜玩艺,一个新东西、新技术拿到手后,把玩得差不多了,就丢一边去了,眼界是越来越高了,具体手艺则有些生疏了。”

举例来讲,deminy以前觉得,要能站在技术的前沿,就要同时也能看得多、看得广、看到最前沿的。拿软件来讲,就应该多使用不同的软件,多试用最新的、最好的软件。熟读唐诗三百首,不会作诗也会吟嘛。这一点是没有大错的,但是,当自己的眼界到了一定的地步后,就应该开始专情一点,而不能继续滥情,因为从技术研究的角度来讲,滥情是没有好的结果的。

作为一个技术研究者,最好深入地去研究一些东西,做一些更实际的工作,而不要泛泛地总是做一些“粗浅”的工作。始终仅仅是尝试最新的技术/软件,而不深入去研究某些技术,是一种舍本求末的做法,是一种功利的做法。

(此处省略一些对LaTeX的文字,以后补上。)

我原来猜测,王垠退学有教育体制的因素,但可能也有个人心理和性格方面的因素,因此,没有必要关注太多的。但是看了他的这篇文字,我对此人有了一些别样的认识。他真的是一个有真才实学、有思想的技术人员。他有充足的理由、充足的资本和充足的认识去扔掉那个博士学位。他至少是一个让人欣赏的技术研究者。

真想不到这几年的四川大学居然也能出这样的人才,也想不到这个看上去不让人怎么爽的 王垠真的是一个很好的技术研究者。

[补充说明1] 请参阅“《完全用Linux工作》读后感(1)”。

[补充说明2] 未来我对自己的定位很可能是技术使用者,而不是技术研究者,因此,我很可能不会专门去具体研究某些技术。但Deminy会考虑放弃软件测试这个爱好。

[补充说明3] 本文观点暂不成熟,不宜当成deminy对相关问题的个人观点。

类别:

《完全用Linux工作》读后感(1)

刚刚读了近期从清华退学的王垠的那篇大作《完全用Linux工作》,很是佩服,也帮助我解决了最近自己一直在考虑几个问题。

第一个问题是,对于我自己来讲,使用盗版软件是否是可以接受的一种行为? 我可以现实地中止自己的这种行为吗?软件的功能是如此强大,以至于很多时候,自己都无法拒绝软件的魅力。但盗版毕竟是不合法、也不大合理的一种行为。从个人的角度来讲,这种行为迟早是要中止的。

第二个问题是,以软件测试和研究为名义而试用和使用各种软件是否妥当?

第三个问题是,对于我这个对软件应用极其热爱的爱好者来讲,我能不能放弃不用最新潮的软件、最好的软件习惯?

第四个问题是,如果我彻底放弃试用软件的爱好、放弃不免费的Windows系统的话,免费的Linux能够完美地替代Windows吗?在过去的几年里,我一直在考虑放弃Windows,但是Linux的易用性和中文支持程度始终让我不满意。前几个月我又安装了一套Linux操作系统RedHat 9。结果,在中文支持、软件配置、编程环境设置等多方面都浪费了我好些时间,让我颇有些失望。

王垠的这篇《完全用Linux工作》很长,我没有完全看完,但是从文章里透露出来的他对Linux技术的理解和解释使得我充分相信,从技术研究者的需求的角度出发,用Linux取代Windows是完全可以的。

不过,我对自己的未来的定位是一个技术使用者,而不是技术研究者。因此,未来我很可能会尽量少用Windows,但不会拒绝Windows。

[补充说明1] 请参阅“《完全用Linux工作》读后感(2)——放弃软件测试这个爱好”。

[补充说明2] 本文观点暂不成熟,不宜当成deminy对相关问题的个人观点。

类别:

从无线网络“入侵”引起的相关话题

引言

前一阵海外发生了一起因为随意使用他人无线网络而被判罪的IT新闻,由此Deminy开始进一步考虑下面的一些问题。

在下面的讨论中,会抛开法律的约束,不考虑法律条文的限制,而试图用道德来进行讨论。所有的讨论局限于普通的日常生活,而不讨论任何极端的特例。


1. 先讨论一些基本的问题

别人的Windows 2K/XP电脑没有取消默认系统共享,是否就意味着你可以随便通过局域网查看他电脑上所有的个人资料?答案:No!

一个村子夜不闭户,是否意味着主人欢迎你访问?是否意味着允许你进去随便拿东西?答案:No!

如果你具有破解他人密码的能力,你是否可以去破解其密码?答案:No!

2. 再来点复杂的

你替他人保管其资料,是否意味着你有权在未经他/她明确授权的情况下翻阅其资料?答案:No!

你收到了一封不属于你的但又无法退回或转交的信件,你可以在未经对方授权的情况下打开信封查看吗?答案:No!

你不小心知道别人的Email密码等,是否就意味着你就可以未经她/他的同意而进入其Email系统?答案:No!

3. 更复杂的

别人的门开着,是否就意味着你可以不敲门就进入? 答案:应该敲门。

别人的无线网络没有加密,是否就意味着你可以随便使用他的无线网络资源?答案:No!

网上有商业软件可以免费下载,是否你就可以下载这些盗版软件使用?答案:……

4. 最复杂的

商场有盗版软件在卖。国家反对盗版,电子市场管理者却允许盗版的存在,警察和盗版软件贩卖主也有默契,那么,是否你可以买盗版?答案:这个……

中国明文禁止色情光盘销售,海外允许色情光盘销售,那么,在中国是否买色情光盘是否妥当?在海外呢?答案:……

类别:

对“电子商务系统osCommerce评测”的补充

1. 从哲学的角度来思考为什么osCommerce可能如此“糟糕”

好的开源软件非常多。但在开源软件中,肯定会出现一些夭折儿或者挂羊头卖狗肉的系软件,或者是盛名之下难副其实的软件。这是符合辩证法的逻辑的。

2. osCommerce的开端

在2000年前后,互联网、电子商务风起云涌之际,有这么几个程序员顺应时代的潮流,开发了一套免费的电子商务系统osCommerce。

遗憾的是,这批程序员有着良好的编程素质,却缺乏良好的系统设计能力。也许他们跟很多程序员一样,追求自由的编程习惯,但却把这个“恶习”用到了一个开源系统里面来。

这个恶习导致的直接恶果就是系统的结构设计是不好的,有硬伤。

3. osCommerce迅速普及的客观原因

似乎做电子商务的程序员相对来讲更以金钱和物质来衡量自己的工作(有部分说笑意味),导致电子商务类的开源系统相对不太多,出色的更少。而因为人民群众对电子商务软件的需求是如此的热烈,因此使得osCommerce被广大用户采用,迅速普及。

4. 人民群众对osCommerce的贡献

电子商务系统是一个功能需求差异很大、功能需求不断增加的系统。而作为一个通用型的电子商务系统,osCommerce的核心模块是不可能考虑、不可能包含这么多功能的,因此,有众多的使用者在osCommerce基础上(被迫)开发了很多附属模块。

实际上,使用者开发了非常多的模块,这一方面,说明用户对电子商务系统需求的旺盛,另一方面,也说明了osCommerce存在的一些缺陷。

osCommerce未遵循模块化的设计方式。万一osCommerce升级的话,这些第三方的模块大部分将成为废品。

5. osCommerce船大难掉头

船大难掉头,用这个来形容osCommerce近两年的处境不为过。

其实想想看,一套用户数如此广泛、而且用户需求不断变化和增加的开源系统居然2年多的时间里没有更新过,这里面本身就有很多需要思考的地方。

从业务功能上来讲,现在osCommerce已经比较完善了,因为osCommerce核心缺乏的功能好些都有相应的第三方的模块来实现。

但osCommerce的一些硬伤是必须要解决的,因为不可能要求每个使用者都是程序员,都来自己解决osCommerce一些使用方面的问题。

可是osCommerce很难在原有基础上再升级了,原因如前文所述,有三点:

5.a. 设计上的缺陷导致该系统很难做有效的更新了;

5.b. 如果要更新的话,只能像别的很多系统一样,完全推倒以前的设计重新来过;但是这样一来,原先很多别的使用者、程序员开发的第三方模块都无法再用了

5.c. 更何况,我们可以想象以osCommerce现有的技术团队的实力是不堪此重任的。而osCommerce的开发团队的组织很可能是有问题的。(他们可能无法让新的开发者融合进去。)

基于以上主观和客观的原因,osCommerce的开发者们没有像apache和phpBB这样的开源系统的开发者们有壮士断腕、重起炉灶的勇气,能够进行后续的进一步的开发。至少到目前为止,他们仍然没有给广大用户有任何打算改进的信号。

[补充说明] 接前文“电子商务系统osCommerce评测”。

类别:

为什么程序效率仍然很重要

引言

好像有人觉得,现在的硬件系统和10来年前比起来,已经有了很大的飞跃,再也不用拼命考虑程序效率的问题了。是这样的吗?

1. 首先来进行一个数学计算

程序的实际运行时间 = CPU执行时间 + 等候CPU资源时间(简称等候时间)等。

假设一个程序需要的CPU执行时间是t,CPU的每个运行周期的时长是l。为了简化起见,这里假设t=l,也就是说,程序可以恰好在一个CPU运行周期内运行完成。

假设同时有n个请求运行该程序。那么平均起来,每个程序的等候时间是:
(0+l+2*l+...(n-1)*l)/n = ((n-1)/2)*l = ((n-1)/2)*t

假设n=1000,也就是说我们有1000个请求同时请求该程序。那么,当程序需要的CPU执行时间t增加1倍时,对于每个请求实际的等候时间将增加500倍左右,每个请求所需要的实际运行时间将增加501倍!*

2. 为什么程序效率仍然很重要

一个程序,如果在设计上有所疏忽,比如说使用的循环多跑了1倍时间的话,虽然表面上看起来只是CPU执行的时候多执行了一倍的时间,但是在系统(例如web服务器)负荷较大的情况下,会导致程序的等候时间大大增加,而且程序所需要的等候时间的增加远远超过程序在CPU中的执行时间的增加!

因此,即使是在现在硬件不断提升的情况下,程序效率的考虑依然十分重要,尤其是对于需要支持(大量)并发请求的应用程序来讲。

好的程序员应该不满足于仅仅实现某个功能,而应该同时注重如何提高程序的运行效率。一个效率不高的程序很可能成为系统开发中的一个恶梦。

3. 一个例子

vBulletin是非常著名的一套商业版的BBS系统。该系统功能强大,4年前Deminy曾在其基础上做过一定的开发工作。该系统传承了传统的软件开发模式,但是忽略了网络系统开发所面对的新问题,过多地注重了系统的功能性而几乎完全忽略了系统的运行效率问题,不能够好好的处理大量并发请求。该BBS系统访问量略一上升,将导致每个访问请求的等候时间大大延长,系统的性能大幅度下降。vBulletin这个BBS系统对于大访问量的网站来讲,是个恶梦般的系统。这是一个非常经典的例子,用来说明为什么开发中程序效率的考虑是非常重要的。

上面这个例子是4年前的例子,希望现在的vBulletin已经修正了这个问题。

4. 一点感想

如果有人写《程序员编程效率指南》这类的书籍,一定会很经典。希望早日看到这类书籍。

[补充说明*] 该数学模型不是非常精确,但是可以很清楚地说明问题。

标签:

类别:

页面