Category: 工作


今天做的模块又用到了Hash函数,突然想起Hash函数可能会比较占CPU资源,所以希望使用一种速度最快的摘要函数。但是PHP中的Hash函数很多,MD4、MD5、SHA-1、SHA-256、SHA-384以及SHA-512,都是比较常见的安全领域的HASH应用。于是写了个程序对比了一下PHP支持的各种Hash函数:

<?php
define('testtime', 50000);
$algos = hash_algos();
foreach($algos as $algo) {
	$st = microtime();
	for($i = 0; $i < testtime; $i++) {
		hash($algo, microtime().$i);
	}
	$et = microtime();
	list($ss, $si) = explode(' ', $st);
	list($es, $ei) = explode(' ', $et);
	$time[$algo] = $ei + $es - $si - $ss;
}
asort($time, SORT_NUMERIC);
print_r($time);
?>

此程序测试每种hash函数支持的算法,对50000个字符串执行hash计算,然后将耗时按从低到高排序,结果如下:

Array
(
    [crc32b] => 1.14942403926
    [crc32] => 1.15080493481
    [adler32] => 1.17250810205
    [md4] => 1.21484698894
    [md5] => 1.25582505324
    [sha256] => 1.31992111638
    [ripemd256] => 1.34005199425
    [ripemd128] => 1.34174097336
    [sha1] => 1.34424093234
    [ripemd160] => 1.36161398381
    [haval128,3] => 1.37490507759
    [haval160,3] => 1.37925811601
    [haval192,3] => 1.37971906387
    [haval224,3] => 1.38690299403
    [haval256,3] => 1.38968507692
    [tiger128,3] => 1.40321999939
    [tiger192,3] => 1.42025405684
    [tiger160,3] => 1.42113689062
    [ripemd320] => 1.42461802158
    [haval128,4] => 1.4465580045
    [haval160,4] => 1.44935391309
    [haval192,4] => 1.45606506625
    [haval224,4] => 1.4650528846
    [tiger128,4] => 1.47951410777
    [tiger192,4] => 1.49081709387
    [haval256,4] => 1.50713596634
    [haval160,5] => 1.51613600436
    [haval224,5] => 1.51645894888
    [haval192,5] => 1.51678603177
    [haval256,5] => 1.51900808377
    [tiger160,4] => 1.52507308815
    [haval128,5] => 1.53689793875
    [whirlpool] => 1.82801189377
    [snefru] => 1.85931909387
    [gost] => 1.89863007236
    [sha384] => 1.95804009064
    [sha512] => 1.97130295938
    [md2] => 4.99702701607
)

CRC是冗余验证算法,不适合用来做唯一标识符Hash计算,MD4是最快的摘要算法,MD5次之,SHA系列算法居然是SHA-256最快,比SHA-1还快一些。由此得出结论:要把唯一标识符转换成定长字串可以考虑使用MD4,而密码加密则SHA-1或SHA-256更合适。MD5就没有多少使用的必要了,速度比不过MD4,安全性比不过SHA,还是趁早放弃的好。

购入VIA嵌入式主板一块

今天去了一趟五道口,购入了一块VIA的Mini-ITX主板。这一次CPU我选了带风扇的Nano,据说速度比C7大有提升,功耗小有提升。芯片组采用CN896,集成显卡和千兆以太网卡,支持DX9和MPEG解码加速。

早在几年前就曾经选择过无风扇的VIA C7作为个人服务器解决方案。同时启动了网关、VPN、FTP和HTTP服务。能在学校里作为上网的跳板,想用宿舍的网通宽带,另外PHP开发测试环境也不需要在自己电脑上专门部署了。可惜后来那块板子在一次电力故障中挂了,否则现在依然可以好好用着。

还没想好新买的这个板子该做何使用,现下考虑还是部署一套PHP环境,作为开发用服务器,另外的用途依然考虑让他作为文件服务器工作。但主系统应该是安装Windows XP的吧,毕竟如果在此机器上安装Ubuntu,就很难作为桌面系统使用了。

使用230上的配置方案也是一个思路:在虚拟机中安装Linux系统,然后根据需要选择,作为服务器使用的时候就启动Linux的虚拟机;作为桌面Internet Box用的时候,就关闭虚拟机。虚拟机软件也需要好好选择一下,VMWare是庞大而迅速的;Qemu不错,够小巧,但是似乎最近维护升级不多;VirtualBox倒是不错的选择,但是似乎速度不够理想。

咳,具体的情况还是等电源适配器买回来在考虑吧。

中文分词太难

最近在做自动标签生成功能模块,需要统计文章中各个实词的出现频度,以自动筛选出合适的标签。这就需要中文分词技术支持了,毕竟中文语句不像英文,有空格做单词的分隔符。上网搜了一堆讲中文分词算法的文章,发现这个东西做起来确实十分复杂,要有效地解决这个问题,差不多可以写出10篇研究生论文。

中文分词有三大难题。第一是需要足够大的词库进行词语匹配,无法自动应对语言的发展;第二是中文句子断句方法众多,需要根据上下文语义选择消除歧义;第三是中文分词算法多半依赖中文词库,很难做出适合Javascript浏览器使用的实现。

价值何在?

今天回家时谈到薪资问题:为何在过去长达一年的时间里,网络部员工的薪水提升还比不上CPI增长?根本原因在于我们缺少可衡量网络部员工价值的手段。

谈加薪必先谈贡献,公司不认可员工价值的通行评价标准。而网络部的贡献又很难直接反映在公司的效益中。程序员无法对产品销售业绩负责,也无法从销售业绩中分一杯羹。

公司不愿为未来买单,网络部要对未来负责,却不可预支未来的利润。

一切都在制约网络部的价值评价,也在制约个人成长。

安好,只求自保

何必为了找工作的事情花那么多的心思呢?我不过是想要一份简单的工作,可以维持生活现状的收入,和一点自由的业余时间。

可是找了工作才知道这会有多难。世界上最难摆平的是人,形形色色的人会有着形形色色的想法,总是得自觉不自觉地改变自己或别人的想法,才能将一切进行下去。生活的现状也不那么好维持,总要担心明天是否会生病,下个月房东是否愿意续约,还不得不考虑天天高涨的物价。

那便是只有自由的心理时间可以追寻了。我很看中这一点,因为我需要思考,包括工作上的问题,个人的状况,以及和朋友们分享快乐。

昨天和朋友聊起工作的事情,保险与合约似乎是他们最关心的。要我说的话,只要多给些薪水,保险可以自己上。至于合约,那更是一种心灵上的负荷。大家觉得愉快,便好好合作,有了解不开的分歧便各自散伙,似乎要比用白纸黑字的合约维系着强颜欢笑要好吧。

Powered by WordPress. Theme: Motion by 85ideas.