« 2005年12月 | (回到Blog入口) | 2006年02月 »

2006年01月 归档

2006年01月12日

脑筋急转弯 你答对了几个?(需要用IE浏览器)

作者: 王天平


每道题目只有4秒钟,请分配好您的答题时间哦,总剩余时间(秒):


1. 英国有没有七月四日(美国独立纪念日)?

不知道
只有美国才有啦



2. 一个人一辈子有几个生日?

不知道
一年一个呀
0个吧
1个吧


3. 大月有31天,小月有30天,那麽一年中几个月有28天?

不知道
1个吧
12个吧
4年才1个吧


4. 棒球比赛每一局有几人出局?

不知道
3
6


5. 在美国加州,一个男人可否和他的寡妇的姊姊或妹妹合法结婚?

不知道

不能


6. 30除以二分之一再加上10等於多少?

不知道
10.113
60
70
40


7. 桌上有3个苹果,你拿起2个,你还有几个?

不知道
3
2
1
0


8. 医生给你3个药丸,要你每30分钟吃1个,这些药丸多久後会被吃完?

不知道
90
60
30


9. 农夫有17只羊,除了9只以外都病死了,农夫还剩几只羊?

不知道
17
9
8


10. 摩西将每种动物选了几只带上方舟?

不知道
2
1
0


11. 一打每张叁元的邮票共有几张?

不知道
3
12
36




按此阅读全文 "脑筋急转弯 你答对了几个?(需要用IE浏览器)" »

2006年01月13日

Wiki发布系统的选型

虽然经历过使用Wakka被色情网站盗链当作图片服务的攻击,但一直没有放弃寻找一个Wiki平台的努力。知道最近休假期间,分别尝试了2个Wiki平台的搭建过程,算是对Wiki系统的发展有了一个初步的了解。尤其是初步试用了TWiki的DakarRelease的发布(稳定Beta版)和MediaWiki的1.5的发布。感觉Wiki发布系统在2005年成熟了很多。

和很多开源产品一样,开始的多种系统会向少数优秀平台集中:好比Blog发布工具,最后都集中到MovableType(Perl)和WordPress(PHP)这2个平台上,Wiki的发布系统也在向少数平台集中。我了解了Perl/PHP/Python/Java这几种开发语言的主流Wiki平台
Perl: TWiki 非常著名的企业Wiki写作,在很多大公司有广泛的应用,非常完善的权限管理
PHP: MediaWiki(就是WikiPedia维基百科等项目的后台发布系统),非常适合大规模/丰富主题的Wiki平台搭建;豆酷DokuWiki:完全使用文件实现,也是一个非常完善的小组wiki平台
Java: Confluence虽然商业版本的收费(开源),但是对于非盈利组织是免费的,Apache基金会的很多项目都是用Confluence+JIRA(变更管理工具)协作开发;
Python: TRACTrac和SVN的集成是Python内部协同开发环境的绝妙搭配;MoinMoin:也是一款非常经典的Wiki平台。

按此阅读全文 "Wiki发布系统的选型" »

2006年01月15日

TWiki DakarRelease安装备忘

上周和建硕聊天的时候,我提到了新年打算不再花太多时间写BLOG,blog毕竟只是一些碎片,而更有意义的是将这些碎片整理起来。我尝试了很多方法,发现还是使用wiki这种方式比较好。

Wiki的发布工具去年年底有2个比较重要的发布:都显示了各种wiki系统的成熟
MediaWiki(Wikipedia的后台): 1.5版本发布

TWiki 的后台平台是用:Perl写的,TWiki从2001年的发布版本开始:使用城市的名字作为版本命名,每次重大的版本相隔1年左右
2001年叫雅典(Athens),
2003年的北京(Beijing),
2004年的开罗(Cairo):也是目前用的最多的稳定发布版
2005年底发布Beta测试版的达喀尔(Dakar):已经是稳定版了。这个版本的优势在于:
1 国际化:重构的框架使得本地化的界面更加方便,我已经完整翻译了中文界面
2 更方便的安装:有了一个全局变量的configure界面是web方式管理的。但是实际上仍然比较麻烦,因为需要了解很多的apache的配置,如果对 .htaccess配置不熟悉,还是比较麻烦的;
3 子目录的支持等;
4 可视化的编辑器:WSYIWSG的编辑TWIKI 对于TWiki语法的高门槛来说,可视化编辑是非常重要的改进;

2月1日:
TWiki如期发布了4.0

以下就是我的安装手记:

按此阅读全文 "TWiki DakarRelease安装备忘" »

2006年01月18日

分布式应用日志的集中化存储

对于很多分布式的大流量产品(比如:计数器)来说,随着服务器的分布,日志的集中管理就变得有些麻烦:比如前端多台Web Server的日志统计,传统的解决方法是定期(每小时,每天)截断日志,然后通过FTP 传到一台服务器上进行统一处理,在有些日志的计算处理前,还需要考虑日志的排序问题。

 [App Server]   [App Server]  [App Server]  [App Server]
\ | | /
via FTP / SCP daily cron
| |
[Logging Server] (sort merge)
/ \
[other stats] [other stats]



这样的日志同步可以支持几台到十几台规模的并发服务。单当管理的服务器达到几十台,而且有大量的服务器中间会有上线/下线变更的时候,集中的日志定期同步更显得非常难于管理,而日志的同步由于要避开白天的高峰,往往需要用凌晨的低峰时段进行同步,24小时下来,上G的日志同步也是风险很高的操作。而成为瓶颈的日志排序合并操作也会妨碍其他后续计算的周期。



如果能实现应用分布但日志集中式的远程存储,以上的定期(压缩)同步和合并排序就都显得不必要了,而且日志的主要瓶颈:排序汇总也能省略。集中式的日志服务显然不是通过网络文件系统(NFS),保证日志的效率和系统的容错性的关键在于:日志的处理不是要求5个9以上的精确度(少量的出入是可以接受的),因此通过UDP协议或者方式实现在小局域网内部的日志广播,然后在后面多台服务器上实现各种日志处理的并发计算。而日志的截断等操作,也可以在后台实现,从而保证前台服务的不中断进行情况下的后台并发实时计算。使用集中化的日志(centralized logging)服务后,网络结构如下:
 [App Server]   [App Server]  [App Server]  [App Server]
\ | | /
via UDP or Broadcasting
| | |
[Logging Server(syslogd)] <=backup=> [Logging Server(udplogd)] [Real time monitor]

按此阅读全文 "分布式应用日志的集中化存储" »

2006年01月20日

FeedBurner的更新频度: 30分钟同步一次

今天看了一下FeedBurner的同步策略: 他们在带宽的节省方面还是下了很大的工夫的。

首先最近3天的日志中:只有少量的是 真正产生流量的200访问,大部分都向服务器发送了缓存校验,服务器返回是304(未更新) 只有当有新条目生成的时 才返回新的内容。而收到新条目后,FeedBurner还会发送HEAD校验一下新条目URL是否存在。

grep http://www.FeedBurner.com chedong_access_log.200601*|awk '{print $0}'|grep -v 304
chedong_access_log.20060117:66.150.96.109 - - [17/Jan/2006:06:00:52 +0800] "HEAD /blog/archives/001065.html HTTP/1.1" 200 0 "-" "FeedBurner/1.0 (http://www.FeedBurner.com)" 66.150.96.109.36261137448852425
chedong_access_log.20060118:66.150.96.109 - - [18/Jan/2006:11:47:43 +0800] "GET /blog/index.rdf HTTP/1.1" 200 29845 "-" "FeedBurner/1.0 (http://www.FeedBurner.com)" 66.150.96.109.312341137556063122
chedong_access_log.20060118:66.150.96.109 - - [18/Jan/2006:12:49:59 +0800] "GET /blog/index.rdf HTTP/1.1" 200 32033 "-" "FeedBurner/1.0 (http://www.FeedBurner.com)" 66.150.96.109.234351137559798399
chedong_access_log.20060119:66.150.96.109 - - [19/Jan/2006:13:03:27 +0800] "HEAD /blog/archives/001111.html HTTP/1.1" 200 0 "-" "FeedBurner/1.0 (http://www.FeedBurner.com)" 66.150.96.109.127431137647007148

按此阅读全文 "FeedBurner的更新频度: 30分钟同步一次" »

2006年01月25日

AJAX技术如何节省应用的带宽:多次交互,每次少量更新

Using AJAX to Improve the Bandwidth Performance of Web Applications这篇文章十分量化的说明了AJAX技术如何节省应用的带宽。我将文章中的2次测试的效果截图用画图组合对比了一下:这样看效果更明显一些
ajax_bandwidth.gif

这里有几个基本的结果:
1 包含ajax的应用首次下载要比一般页面刷新方式的应用大:Usage Analyser的ajax版大小12387,原大小9741字节
2 AJAX应用在后面的交互中:只刷新部分需要更新数据 2-3k 而传统的整页刷新模式需要整页重载: 10k左右
3 交互次数越多,AJAX应用的带宽节省效果越明显;
4 整页刷新模式虽然需要重新载入图片等:但由于通知了客户端使用本地缓存的图片和JS等:因此没有重新产生流量,

在此次条件的试验过程中:ajax技术总计节省了超过61%。远远超过预期的50% 而且随着交互次数增加,节省率还会更高。

按此阅读全文 "AJAX技术如何节省应用的带宽:多次交互,每次少量更新" »

2006年01月31日

poEdit: Windows下的.po文件编辑器

twiki在DakarRelease中加强了本地化的支持,可以给TWiki设置不同的本地语言界面,这个设置是通过locale/目录下的.po文件实现的,.po是GNU gettext项目的一套应用规范。是一种比较规范的l10n方案。'.po'是: Portable Object(可跨平台对象)的缩写,而创建/编辑.po文件过程中会生成相应的机器码binary的格式文件:'.mo' MO是Machine Object。


元旦放假时翻译是用Notepad对着德文版的翻译一行一行翻译的。几个星期过去了,2月1日TWiki 4.0(DakarRelease)就要发布了,目前的状态是:


Our current status is this:
locale/da.po: 628 translated messages.
locale/de.po: 628 translated messages.
locale/es.po: 270 translated messages, 58 fuzzy translations, 300 untranslated messages.
locale/fr.po: 542 translated messages, 58 fuzzy translations, 28 untranslated messages.
locale/nl.po: 626 translated messages, 2 untranslated messages.
locale/pt.po: 628 translated messages.
locale/zh-cn.po: 548 translated messages, 72 fuzzy translations, 8 untranslated messages.
locale/zh-tw.po: 548 translated messages, 72 fuzzy translations, 8 untranslated messages.

Instructions for posting patch against translations are available at:
http://twiki.org/cgi-bin/view/Codev/DakarReleaseTranslations

由于中间开发过程中又有一些文字的修改,这时候再用Notepad编辑,中间已经有些内容很难定位和识别状态了。以前知道Linux平台下有2个分别在KDE和gnome平台下的PO编辑器GTranslatorKBabel,我尝试了找了一下,发现了另外一个可以运行在Windows下面的.po编辑器:poEdit,使用界面如图

poedit.png


有了gettext系列工具的支持:翻译后的.po还可以通过工具进行校验


msgfmt --statistics --output=/dev/null zh-cn.po

按此阅读全文 "poEdit: Windows下的.po文件编辑器" »

关于 2006年01月

此页面包含了在2006年01月发表于车东[Blog^2]的所有日记,它们从老到新列出。

前一个存档 2005年12月

后一个存档 2006年02月

更多信息可在 主索引 页和 归档 页看到。

Creative Commons License
此 Blog 中的日记遵循以下授权 Creative Commons(创作共用)授权.
Powered by
Movable Type 3.36