有趣的避讳

刚才在BBC上读到一则消息,说是河南登封市唐庄乡的居民集体要求更正姓名,他们的祖先姓"敬",而不是现在的"苟"姓,并且解释说在1400多年前魏晋南北朝时期,后晋一个"敬"姓大臣因冲了当时的皇帝石敬塘的名讳,为避免满门抄斩,保留"敬"姓血脉,"敬"姓宗族"忍辱"减"文"留"苟",改姓"苟",其中一些后人辗转逃到唐庄落户。 报道还援引唐庄乡玉台村一名村民的话说,姓"苟"给他造成的诸多尴尬,甚至买东西开发票时,姓氏被写成"狗"姓,让人感到很气愤。由于"苟"和"狗"的发音相同,中国人传统对狗有贬意,"苟"姓使得唐庄的村民被人当作开玩笑的对象,年轻男女也不愿意嫁娶“苟”姓的人,所以他们要改姓。

呵呵,读完了觉得挺好玩的,因为石敬瑭的原因改姓的人也不是没有,譬如文彦博祖上就是姓“敬”的,后来为了避讳改为“文”,到了后汉又改回“敬”,但是到了宋朝,因为宋太祖的祖父叫赵敬,为了避讳,不得不又改为“文”,呵呵,看来文彦博的祖先比这位“苟”姓的先人要高明些。

Free Tags: 
Blog分类: 

Drupal的垃圾攻防战:全新的Spam模块和更新的trackback模块

昨天又遭受了一次online poker的垃圾trackback袭击,8月2日经历过一次,那次Spam + Trackback 模块有效的阻止了垃圾trackback,而昨天, spam 和 trackback 去没有阻挡住瞬间上百条的垃圾trackback。因为Spam模块是Drupal核心模块设计的,所以它对组织垃圾留言和Blog内容非常有效,对于trackback,却一直都不支持。但是trackback的垃圾越来越严重,于是有用户更改了trackback,用一种比较笨拙的方式暂时防止了spam的袭击,后来trackback也作了更新,添加了对spam模块的支持。从逻辑上,这是一种颠倒,应该spam模块支持trackback模块才对,而不是颠倒过来,所以这种协作中存在着一个漏洞,而狡猾的垃圾trackback很快就知道该如何钻入这个漏洞,所以就出现了昨天的海量垃圾。

于是查阅解决方式。突然发现Spam模块已经被重新写过,最新的版本是今天才发布的2.0.10,但是这个版本并不在Drupal的总站上,因为Drupal总站发布的模块必须是基于GPL协议的,而新的Spam模块则是基于BSD协议的,不过我们可以在作者的网站找到这个模块。他提供了针对旧模块的数据表的升级脚本,但是我试了一下似乎有bug,升级数据库后,评论总是被全部或是部分的删除,幸好我在升级前备份了数据库,没有损失数据。所以索性彻底删除了旧的Spam模块和相关的数据表,重新安装新的Spam模块,反正原本也没有多少东西在旧的数据表里面。

新的Spam模块功能比先前强大了不少,它甚至可以扫描已有的内容,剔除杂糅其内的垃圾内容。但是美中不足的是它不能直接扫描已有的trackback,为了避免越俎代庖,不过这个版本的spam模块加强了对trackback模块的支持,在先前的几个版本中,还加入了对trackback模块的patch,以使两者能够更好的协作。8月22日,Trackback模块的作者将这个patch添加入他的模块中,所以现在只需要下在cvs版的trackback就可以了,而原先的patch文件也已经从Spam模块的正式下载文江中删除。

呵呵,希望这次可以多抵御一阵子spam的骚扰,道与魔不断的较量着技术手段,我等看热闹的就只好在被魔击中只好快些去道那里领取解药,呵呵,无奈,无奈:)

Blog分类: 

Google上搜索"French Military Victories"的结果

看到讨论战争的成败,想起了这个著名的Google炸弹,2003年就有了,刚才试了一下,居然还在,莫非是google故意的?先前的"Weapons of mass destruction"已经被移除了,不知道为什么这个"法国军事胜利"还留在这里。看到这个页面很简单,在google搜索里输入French Military Victories,然后点击 "I'm feeling Lucky",就转到这个页面来了,虽然这个页面模仿得非常象google的页面,但事实上这个页面并不是google做的,而是http://www.albinoblacksheep.com/,页面的最下面有版权声明:-)这个网页的背景应该是法国反对美国出兵伊拉克,于是美国人做了这个页面戏谑法国人。

网上还留传着一则英文笑话,也是嘲笑法国的军事历史的,摘录如下:

Gallic Wars: Lost. In a war whose ending foreshadows the next 2000 years of French history, France is conquered by of all things, an Italian.

Hundred Years War: Mostly lost, saved at last by a female schizophrenic who inadvertently creates The First Rule of French Warfare - "France's armies are victorious only when not led by a Frenchmen."

Italian Wars: Lost. France becomes the first and only country ever to lose two wars when fighting Italians.

Wars of Religion: France goes 0-5-4 against the Huguenots.

Thirty Years' War: France is technically not a participant, but manages to get invaded anyway. Claims a tie on the basis that eventually the other participants started ignoring her.

War of Devolution: Tied; Frenchmen take to wearing red flowerpots as chapeaux.

The Dutch War: Tied.

War of the Augsburg League/King William's War/French and Indian War: Lost, but claimed as a tie. Deluded Frogophiles the world over label the period as the height of French Military Power.

War of the Spanish Succession: Lost. The War also gave the French their first taste of a Marlborough, which they have loved ever since.

American Revolution: In a move that will become quite familiar to future Americans, France claims a win even though the English colonists saw far more action. This is later known as "de Gaulle Syndrome", and leads to the Second Rule of French Warfare: "France only wins when America does most of the fighting".

French Revolution: Won, primarily due to the fact that the opponent was also French.

The Napoleonic Wars: Lost. Temporary victories (remember the First Rule!) due to leadership of a Corsican, who ended up being no match for a British footwear designer.

The Franco-Prussian War: Lost. Germany first plays the role of drunk Frat boy to France's ugly girl home alone on a Saturday night.

WWI: Tied and on the way to losing, France is saved by the United States. Thousands of French women find out what it's like not only to sleep with a winner, but one who doesn't call her "Fraulein." Sadly, widespread use of condoms by American forces forestalls any improvement in the French bloodline.

WWII: Lost. Conquered French liberated by the United States and Britain just as they finish learning the Horst Wessel Song.

War in Indochina: Lost. French forces plead sickness, take to bed with Dien Bien Flu.

Algerian Rebellion: Lost. Loss marks the first defeat of a Western army by a Non-Turkic Muslim force since the Crusades, and produces the First Rule of Muslim Warfare -"We can always beat the French." This rule is identical to the First Rules of the Italians, Russians, Germans, English, Dutch, Spanish, Vietnamese, and Eskimos.

War on Terrorism: France, keeping in mind its recent history, surrenders to Germans and Muslims just to be safe.

这则笑话的最后一段倒是道出来了这则笑话的真实目的:)

Free Tags: 
Blog分类: 

随心所欲的摆放区块(block): flexiblock.module

[img_assist|fid=3461|thumb=1|alt=Flexiblock模块示意图|caption=flexiblock模块的示意图]
Drupal让我们体会到了搭积木的乐趣,方便的模块结构使用户可以随心搭建。Drupal页面设置也很灵活,无论是三栏结构,还是两栏结构,简单的点击一下就能彻底搞定。虽然一切都是那么的灵活,但是还有一丁点儿死板--那就是区块只能显示在左右两栏,可能会对页面的设计带来不便。举个例子, 譬如我使用的“Related Nodes”区块, 可以通过tag来显示和目前文章相关联的文章,这个区块的摆放最好是在文章的下面,方便读者浏览,可是按照Drupal原来的设计, 作为区块,它只能放在左右的sidebar里,这样一来很不容易注意到这个区块。虽然我们可以通过更改模块将这个“related nodes”区块显示在文章的下部,但是这样为以后的升级带来了不少的麻烦,因为每升一次级,就要相应的更改一次模块,如果模块的结构发生了改变,还要一切重来。

不过现在方便多了,因为有了flexiblock模块。它可以方便的把block显示在页面的任何地方,上下左右,甚至插在文章的中间都可以,譬如上面的截图所示,或者这篇帖子下面的Related Nodes。这个模块可以在Drupal的总站找到,但是现在暂时访问不了Drupal的总站(最近Drupal总站一直在准备升级,莫非已经开始了?),不过仍然可以从作者的主页现在到这个模块。

安装之前要注意这个模块只支持PHPtemplate和wgSmarty,并不支持drupal自带的Xtemplate。安装过程很简单,下载拷贝到Modules文件夹就可以了。但是如果想让这个模块正常工作,必须更改node.pl.php,在你想让block出现的地方放上显示代码即可,当然,你还可以修改一下style.css,然这个模块的显示更漂亮。

呵呵,有了这个模块,adsense一组好福气啊,因为这个模块可以方便你在恰当地地方插播文字广告:)

Blog分类: 

可爱的东周(1)

不久前回了一趟家,好长时间没有回去了,所以趁着时间还算充裕,又重新游览了一下四处的古迹。虽然洛阳的旅游宣传材料从来都声称自己是“十三朝古都”(而不是更广泛被认可的“九朝古都”,不过最近似乎也得到了承认,因为国家文物局网站上的介绍已经改口称“十三朝古都”了),并且援引《中国大百科全书·中国地理卷》(见“洛阳市”词条下)说自己是中国建都历史最长的城市(有趣的是《中国大百科全书·中国历史卷》称西安是中国建都历史最长的城市,见“京都”词条下,看来编撰《中国百科全书》的学者们没有很好的沟通,更有趣的是,《中国地理卷》一边称洛阳“建都时间934年,是中国历史上建都时间最长的城市”。一边又称西安作为都城“历时千余年”,看来编撰《中国地理卷》的学者们相互也没有很好的沟通), 但是遗留下来的古迹却并不是很多。洛阳市政府的主页上说洛阳的全国重点文物保护单位有10处,但是细细数来,不足10处,尽管他们把渑池县的仰韶文化也列入洛阳的古迹(实际上应该是三门峡市的),但是仍需将辟雍碑从汉魏洛阳城遗址中分离出来, 把白居易陵园从龙门石窟中分离出来才能凑够10处。所以比较准确的说,洛阳只有7处全国重点文物保护单位。

那么,这个7处又是一个什么样的概念呢?对比一下,历史上相对默默无闻的郑州就有26处全国重点文物保护单位,整个河南省有97处,全国有1271处。单从数量上看,洛阳的文物古迹并不能与她的悠久历史相匹配。

不过这七处历史古迹倒是代表了洛阳的历史发展轨迹: 二里头遗址代表了传说中的夏;尸乡沟商城遗址则代表了商;汉魏洛阳城和白马寺是东汉的遗存;龙门则涵盖了从北魏到唐宋的历史;隋唐洛阳城和千唐志斋是盛唐的体现。但是这中间也有缺失的一环,那就是--东周。

很长时间以来,没有东周的历史标记是洛阳的一个遗憾,东周洛阳城一直以来都只是一个市级文物保护单位,到了2000年才升为省级。虽然市中心有一个王城公园,但是对于一般人来说,那里不过是一个看狮子老虎的地方,因为它也是洛阳的动物园;很少有人能够把它和东周的“王城”联系起来。但是在2002年,在洛阳的市中心,在紧挨着洛阳市的主干道,在市百货大楼的对面居然挖出了一个东周王朝的车马坑,并且罕见的出现了架六马的天子车乘,意外之余,突然想到东周的可爱。

很久以来,想起东周,就想到“可爱”二字,不知道是因为它的袖珍,还是因为它的无奈,或者是因为它的顽强,也或者是它的睿智(尽管不总是这样)。或许还有另外一个原因:东周从一开始就被忽略,人们谈论的不是东周,而是春秋与战国;人们关心的不是周天子,而是五霸和七雄。东周宛若历史的配角,总是蜷缩在一角,等有主角上场需要“尊王攘夷”或是“挟天子以令诸侯”的时候,东周才露一下头,然后继续沉寂在历史中,偶尔再被提及,要么是出了内乱,要么就是“秦师过周北门,左右免胄而下。超乘者三百乘”,根本没有被放在眼里。

不过回顾一下东周的历史,其实在开始,东周并非如此的羸弱,它军事行动频繁,多少还有些西周的余烈,可惜后来的几次内乱与所处的地理位置使它最终沦落为历史的道具,不得不成为依人的小鸟。一起来回顾一下东周可爱的历史。

Free Tags: 
Blog分类: 

升级到Drupal 4.6.3

Drupal 4.7.0大致9月份可以推出,今天则推出了4.6.x的第四个版本 4.6.3。最近的这两个版本都是侧重于修补安全漏洞的。4.6.2推出的时候,并没有太在意,所以没有升级,但是前阵子发现了首页被更改的问题,不知道是不是和4.6.1的安全漏洞有关系,今天正好一下子升级到4.6.3。

4.6.3与上一个版本相比没有太大的更改,较为主要的更改有:

Patch #27864: Correctly distinguish 403s from 404s for nodes.
Patch #23560: Sort watchdog date by wid to ensure unique ordering.
Patch #24030: Category selection does not work with Movable Type blogapi.
Patch #23750: Use the creation date rather than the update date in RSS feeds.
Patch #27863: Fixed order of parameters passed to imagecopy(). Could result in black images.
Patch #26822: Fix logo upload being broken.
Fixed a security bug in the XML-RPC libraries.

而最关键的还是最后这条“Security Bug”,所以Drupal强烈推荐升级。

Free Tags: 
Blog分类: 

“天子驾六”游记(1)

暑假回家,一心惦记着要去看看新建的天子驾六博物馆,却总也找不到空闲,直到走之前才专门跑去仔细的参观了一番。

虽然最后才有机会参观这座博物馆,但是几乎每次出门都要从它前面路过,因为它的位置正好在洛阳市中心,并且紧挨着洛阳的主干道--中州路(图1)。解放以后,洛阳的城市格局一直都是狭长的一条,而中州路几乎是唯一一条贯穿着这狭长的五个区的干道,车流量非常大,直到环城路修好,中州路的压力才减小了一些,可是谁也想不到,在交通繁忙的中州路边居然还沉睡着2000多年前的车马。

[image:884 class=img_c]
“天子驾六”博物的四周几乎都是水泥森林,东边紧挨着洛阳市百货大楼(图2)。几乎所有的城市的中心都会耸立一座“百货楼”,这是当年计划经济的遗存,但是也体现了城市的中心位置。博物馆的西侧则是工商银行洛阳的总行,不远处,很多新的大厦都在建设中,据说这附近要建成洛阳的CBD(这个缩写是这次回国看到的最多的字眼之一)。

[image:885 class=img_c]

这座博物馆的原址是一个大喷泉--就像过去很多典型的中国城市一样。2002年的时候,这里要拆了建设一个“集行政、文化、商业、金融、信息、游乐等各项功能于一体的现代化广场”--就像现在很多典型的中国城市一样(春熙路,解放碑,南京路,王府井等等都会有一个小广场,看来洛阳也想学一下),但是洛阳还是稍有不同:按照惯例,每次动工前都先要进行考古勘测。这一无心的勘测却导致了震惊全国的大发现。

或者,“震惊全国”这四个字并不恰当,因为一开始它并未震惊全国;或者,一开始根本没有太多的人在意它,而它的命运也可能只是被填埋并继续建造“现代化广场”。之所以这样说是因为想起了2000年时洛阳的另一桩考古发现---“亞字大墓”。

洛阳市二十七中要盖家属楼,于是例行考古勘测,结果却发现了一座“亞字大墓”,按照当年殷墟的发掘经验,“亞字大墓”或是“中字大墓” 必为天子墓。这是洛阳发现的第一座也是唯一一座“亞字大墓”,而之前曾被疯狂盗掘过的出土过无数珍贵文物的洛阳金村8座周天子墓不过是“甲字墓”,通常“甲字墓”比““亞字墓”低两个等级,所以二十七中里沉睡的这位天子应该是一位显赫的周王:他会是谁呢?

这座“亞字大墓”有8个盗洞,但是仍然保留了一些珍贵文物,譬如可以断定是天子墓的“王作宝彝”(图3,现藏于“天子驾六”博物馆) ,并且墓道的结构保存的非常完好...
[image:886 class=img_c]

但是不久,这样一座天子墓却在建筑机械的轰鸣声中彻底消失了,现在耸立在原址上的是一栋7层家属楼。如今我们能够看到的也只有“天子驾六”博物馆中这座大墓的模型了(图4)。
[image:887 class=img_c]

而“天子驾六”也险些遭受同样的命运,考古发掘尚未结束,挖土机等大型施工机械却已开动,要赶在“牡丹花会”前建好“现代化广场”。施工队不顾洛阳当地文物局的劝阻,24小时不间断连续作业。万幸的是国家文物局及时地进行了干预,原先的“现代化广场”项目被停止,取而代之的是新的“东周文化广场”,主体就是“天子驾六”博物馆--但是这仍然是一个妥协的方案,因为它只保留了天子驾六车马坑和一个小型的车马坑,对于其他几处的车马坑和马坑都进行了“回填”,这在车马坑的发掘史上倒还是第一次,这些坑现在估计已经都被毁了。

Free Tags: 
Blog分类: 

和“麦莎”同时登陆上海

[img_assist|fid=2633|thumb=1|alt=遭遇“麦莎”|caption=在上海遭遇“麦莎”]

悠长的假期渐入尾声,快要告别乐土回到枯燥的生活中。回来的时候一时新奇,选择在北京落地在上海离开,但是没有想到这个决定却让我和MM吃足了苦头,现在MM已经在机场里被困了18个小时,焦急的等待着飞往上海的航班的进一步消息;而我也只能坐在宾馆的窗边看下雨--还好我赶在了台风“麦莎”前几个小时到了上海。

昨天到的上海,由于安徽洪涝,火车晚点了两个多小时,来的时候还是一片晴好,到宾馆坐定,打开电视就看到上海本地新闻动员市民防范台风。傍晚的时候出去吃饭,风开始大起来,不久就倾盆大雨,许久没有到过上海了,走了很远都没有发现一家看起来解馋的饭馆,只好乘着风雨回到了宾馆的餐厅,匆匆吃过饭后,准备去虹桥机场接MM,但是却被告知飞机由于台风而晚点,苦等几个小时,机场干脆通知航班取消,ft。

昨夜一场大雨,今天上午雨小了些,约好了不少在上海工作学习的同学聚会,定好了地方,顺便逛逛南京路步行街,逛了一半又开始风雨大作,撑着一把伞,顿时有一种“我欲乘风归去”的感觉,然后就折断了伞的龙骨,跳跃着上了一辆出租车,觉得会轻功真好。

回到宾馆就赶紧再和同学联系,取消聚会,风雨太大,而此时,MM还困在机场里,不知道何时才能抵沪。

看着下雨,倒也轻松;依这天气,八日返回的飞机也未必能飞,与其担心倒不如小楼听雨眠:)

更新照片:

[img_assist|fid=2828|thumb=1|alt=遭遇“麦莎”(2)|caption=被台风“麦莎”吹断的行道树]

Free Tags: 
Blog分类: 

Drupal模块主题下载前20名

说模块以前,先说一句题外话:Drupal的核心开发人员Dries要结婚了,现在访问Drupal的主站,蓝色的水滴头像已经被一对佳偶代替,呵呵,衷心祝福他们:)

Drupal统计出来的下载前20名的模块和主题。

PHPTemplate theme engine (5500 downloads/month)
这个倒是在意料之中,Drupal自己带的Xtemplate支持的主题实在有限,很多从WP移植过来的主题必须phptemplate支持,并且phptemplate更改起来也非常的方便,我的Drupal的主题使用的就是phptemplae.

Image module
方便的图片支持是blog工具不可或缺的功能之一,Drupal的核心程序也支持通过附件的形式添加图片的功能,但是不利于管理上穿的图片,所以就有了image模块。image模块不仅方便管理图片,在img_assist的协助下更提供了强大的图片插入与编排功能。

Blix theme
这个是我最喜欢的主题之一,我的链接部分就是仿照这个主题制作的,也是从WP移植过来的。

FriendsElectric theme
一个不错的支持三栏的主题,shunz的Drupal用的应该就是这个主题。

Gallery module
这个模块把著名的图片管理程序Gallery与Drupal“亲密”的连接在了一起,非常方便你管理大量的图片!

Flexinode module
必不可少的模块之一,方便你创建适合自己使用的node类型,譬如我这里的菜谱,呵呵,名副其实,给使用者更大的灵活性。

Event module
社区blog不可缺少的功能之一,方便组织集体活动。

Leaf theme
比较清新的一款主题,也是从WP移植过来的。

SpreadFirefox theme
著名的spreadfirefox.com使用的也是以Drupal为核心的CMS程序,而这款主题就是来自于spreadfirefox网站。

Img_assist module
呵呵,上面介绍过的Image模块的搭档:)

Kubrick theme
WP移植过来的主题,早期Drupal流行主题之一,我的blog的顶部是模仿kubrick的风格。

Box_grey theme
这个主题非常的简洁,但是我不是很喜欢。

Tinymce module
一款WYSIWYG编辑器,移植的TinyMCE WYSIWYG editor,口碑比HTMLarea好。

E-Commerce module
不错的电子商务解决方案,看到有人在blog上卖自己拍摄的DV的,挺有趣的:)不过好像对国内的付款方式不支持,只是支持信用卡和paypal。

Feedback module
反馈模块,便于同访客沟通。

Fckeditor module
另一款编辑器,移植的Fckeditor,体积比较小,载入的速度要快很多。

Article module
组织文章的模块

Album module
影集模块,我觉得不是很好用,虽然可以批量上传图片并保存为image node,但是node的名称居然无法设定node的名称,而是上传时随机生成的复杂数字名称,不好。
Filemanager module
管理上传文件的模块。

Democratica theme (1700 downloads/month)
三栏的主题,乍一看和FE比较相似:)

Blog分类: 

回国记(1):恐怖飞行

暑假机票难买,只好在旧金山转机。起了个大早,6点钟便坐在去O'Hare机场的计程车上,一个朋友说,O'hare应该翻译为“兔崽子“,妙!出租车司机是一个摩洛哥人,居然是一个功夫迷,一路上眉飞色舞,动辄就双手离开方向盘,比划功夫。

从芝加哥出发,大约四个小时到旧金山,飞机本该降落在terminal 3,但是由于早到,直接停在了international terminal,省去不少麻烦,不然换terminal还要坐火车。旧金山的international terminal非常小,也没有几家店,但是却要在那里打发几个小时的时间。先去了免税商店,给老爸买了几条烟,中华32元一条,比国内便宜不少;还有一家日餐店,拿中国的汤面当Udon,贵且极难吃。

歪在长椅上玩了一会儿暗黑破坏神,总算熬到了登机的时间。飞机坐的很满,但是我旁边的两个位子却是空的,枕在舷窗上一会儿就沉沉的睡去。

不知道睡了多久,突然被一阵颠簸弄醒,飞机在下降。以为到了北京,可是睁眼向窗外一望,却见飞机的翅膀拖起浓浓的白烟,又向下一望,连绵的群山白雪皑皑--不对,应该是在靠近北极的地方。一下子慌了神,但是看到周围的旅客并没有慌张,马上平静下来--不对称信息的游戏:既然没有睡觉的informed的agent没有慌乱,俺这个睡着了的uninformed的agent也不该慌乱。因为旁边没有别的乘客,叫来了空中大妈,问明情况,原来是一位客人突发急症,必须要紧急降落,实施急救,于是飞机只好折回阿拉斯加的安克雷奇,降落前必须把飞机的燃料全部倾倒,防止降落时可能出现的危险。而排放燃料的管道就在机翅的顶端,我看到的白烟其实就是倾斜的燃料。

飞机降落在荒芜的安克雷奇机场。打开手机,却发现tmobile在阿拉斯加没有信号,奇怪的是居然可以接入cingular的服务,试了一下,可以使用,于是拨了mm的手机,故弄玄虚的告诉她我在阿拉斯加,飞机失事了,我是唯一的一个幸存者。可惜当场就被mm戳穿,因为她一直在网上注视着我们这班飞机的状态,还在我睡觉的时候就已经知道飞机要在安克雷奇紧急降落。

耽搁了3个小时以后有些慌了,因为按计划21日晚到北京,22日上午签证,如果飞机在安克雷奇停留的太久,一连串的事情都要错过。不过担心也解决不了问题,索性继续睡去,再次醒来时,座位上的屏幕显示飞机已经接近沈阳。旅行的小插曲在睡梦中不知不觉地过去:)

Free Tags: 
Blog分类: