生命和政治无关

2007年04月17日 17:11

美国再次发生校园枪击案,33人死亡。
南桥说,应该限制持枪。结果有人跳出来说"在生死攸关的问题上,民权算得了什么?",这话恰恰体现了中国人的价值观中从来没有人权的悲哀奴性.

我不想多说什么,只想说,如果一个制度连公民的生命都保护不了,我们辛辛苦苦建立这种制度,又是为了什么呢?

一个项目引发的联想

2007年04月16日 15:19

今天老鼠在群里发了一个网址:http://www.kangaroo-egg.com/,是一个Java-based的开源web server。
我对Java和这个Web Server并不是很感兴趣,不过还是被它下载页面里的说明所吸引了:

源代码说明
kangaroo-egg是一个完全拥有自主知识产权的web服务器,完全是从零开发,所以没有采用和参考任何其它开源项目,因此有可能在下一版本不进行开源。

我由此引发了一些不厚道的联想:
  1. 中国的高手还真是多啊,动不动就是"从零开发,没有采用和参考任何其他开源项目"。牛死了。
  2. 一个有趣的问题:这个人声称它的软件是以GPL的形式发放的,而他的下个版本应该很显然是基于当前这个版本的。那么,如果他新的版本不再开源了,他自己有没有违反GPL协议呢?

小人物的历史

2007年04月16日 10:29

有一阵子,我很喜欢玩Google Earth,其实住在中国的我,倒从来不曾真正从Google Earth中得到什么实质性的好处,但是它从远远的只看得到大陆骨架,慢慢或者快速的拉近,拉近,再拉近,到一座具体的建筑物呈现在你的眼前,那种由远而近,从大局到细节的变化,是很令人神往的。
昨天又把《鹿鼎记》看完了。尽管已经不是第一次“看完”这本书,但每次读的时候仍然是津津有味。这本书和金庸的其他作品风格颇为不同,其他作品,至多不过把历史作为点缀,星星点点嵌入书中,甚至有一些,根本就不提具体历史。而《鹿鼎记》一书,则是历史贯穿全书,甚至可以说,很多重大历史事件,都是由韦小宝这个虚拟的主人公创造的。看着自己熟悉的一个个重大事件如何被一个小人物在各种因缘际会下创造出来,实在是一件妙趣横生的事情。
说句实在话,对于清朝这一段历史,我并不是很熟悉,平常所见,也是各种“传说”、“秘史”、“疑案”为多,系统解读的相对较少。我只知道钱穆和金庸,对待这个朝代有两个截然不同的态度。钱穆认为这个朝代缺乏制度,是大大的糟糕;而金庸认为这个朝代盛产明主,起码比明朝是好的多了。
不过金庸毕竟有小说可以看,占了一点先天优势。小说里那些在历史课本上被符号化了的人物,一个个都鲜活了起来。其实在历史里谁对谁错,谁又能说得清?满清先前屠城,但后来也弄得国泰民安,跟汉人自己的昏庸皇帝相比,谁更好谁更坏?施琅先降郑后降清,但他全家被郑成功斩杀在先,他的所作所为是非对错,又如何界定?每个小人物当时都有自己的想法,在当时的环境中,你又怎么能说他们打算错了呢?
其实所有的历史,都是由无数这样的小人物所创造的,他们心中当时怎么打算,现在我们再也无从得知。我们所能做的,只是根据发生的事情,反推一些所谓的“规律”,然后再尝试将它们套用到其他的历史之上。殊不知物似人非,创造其他历史的小人物,已经不是先前的那一些了,他们的想法也不相同。以此之心度彼之意,总是有些不伦不类。

研究历史的人,不关心小人物,又有什么用呢?

数据备份很重要

2007年04月13日 18:30

今天TR老大买了个Vista安装了,结果Blog的数据全没了
这个教训告诉我们,备份真的很重要哪……,重装之前的准备工作也要足够充分才行。

回家写备份脚本去……

博弈游戏

2007年04月12日 11:14

TR老大最近在读中国通史,还能写出心得,我是很敬佩的。我也看过一些历史的东西,但并不是十分系统。买了一本钱穆的《国史大纲》,看了大半,也因为各种原因一直耽搁了没有继续下去。
今天看到TR写的分分合合,也是颇有一些想法,不吐不快。
中国历史上分者又合,合者再分的现象,一向为各大史学名家关注。钱穆年少时就曾说过要找到一个杜绝此类现象的方法,然而年纪大了,对历史研究深了,反而觉得中国历史十分复杂,那方法之事,再也不提。
我历史所知不多,倒是可以胡扯两句。至于对错,反正我也不是名家大腕,说过的话也不是甚么金玉之言,以后知道的多了,发现说错了,改口就是。
我觉得凡是政治云云,实际上就是一个博弈。吴思有著《血酬定律》说道,百姓其实知道自己占弱,因此官家来欺,但还能活命,也只好忍了;然而若是逼得他不能活了,百姓无可奈何,只好以血相拼。这就是TR所谓的底线了。政治博弈,无不是在这根底线周围,来来回回。官家百姓,一下子东风压倒了西风,一下子又西风压倒了东风。因此朝代更替,绵绵不绝。当然中国历史也不全是自家人在闹,五胡乱华,蒙古入侵,满清入关,那又不同了。所以说历史实际上很复杂。不过我们既然胡说,就只好把这些不合论点之事,暂且略过不提。
但凡这个政治博弈,古今中外,无不使然。为什么古代西方,如罗马之强盛,竟至亡国,而现代西方,又大多强盛;反观中国,古代多灾多难,倒也能一脉相承,近代和谐,却不及西方发达。我以为,问题还是在这博弈二字上。
罗马之时,一味以武力征服,战败者沦为奴隶,永世不得翻身,就好比博弈时一味强攻,丝毫不给自己留退路,自己占优时倒还感觉披荆斩棘战无不胜,一旦对方抓住机会,就会发现自己处处受制,退无可退。因此一旦失败,就土崩瓦解灰飞烟灭。因此玩博弈游戏,且不可一味冒进,要给自己留退路,压榨百姓越甚,将来自己越受其害。中国就不然,早在春秋时期,有不少圣人就已经提出很多治国之法,虽然简陋,但是毕竟是系统理论。自汉朝开始,儒家学说昌盛,虽然命运多舛,倒还能一脉相承,直至今日。儒学的思想,就是要和谐,要仁政,不要赶尽杀绝,要给人留后路。也因此中国才能延续至今不致灭亡。
然而儒学虽然强调仁政,但却没有一个明确的标线,于是刚拿下江山的皇帝,知道百姓以何为仁,往往能够哄得百姓安居乐业,国泰民安。然而过一段时间之后,太平日子久了,大家便忘了这个线到底在哪里了。于是为了自身油水,往往向百姓加压,压来压去压到百姓没有生路,就只好起来造反,这时只要有一个可以答应百姓过好日子的人站出来,往往大家就一心拥他为帝,一个轮回,便又开始上演。而现代西方则不然,受资本主义思想的启蒙,欧洲很多国家走的是一条民主法制的道路,皇帝大臣,王子百姓,都要遵守法律。法律这个东西是死的,是明确的,即使改朝换代,法律却不可立变。再加上法律制定也要百姓(代表)参与,一部法律人人服气,自然这博弈,就显得平衡了。问题也就少多了。

所以说找一个明确的博弈规则,让大家一起来玩游戏,应该可以解决很多的问题。

关于“输入法事件”的一点看法

2007年04月11日 09:28

自从google拼音诞生日起,我就看到了有关抄袭搜狗词库的消息。
我们群里有人一直在关注这个事情。我也在第一天就在群里表达了我的个人看法。但是这么多天下来,这个风波非但没有平息,反而有愈演愈烈之势,再加上最近技术blog写得太多,应该写些别的东西了,就拿这个事情说两句好了。

早在第一天看到这个消息的时候,我就说,如果词库有版权,那么搜狗应该去告google,而不只是在blog上喊冤;如果词库没有版权,那么这个事情也就不会是什么大事。后来嚷嚷了很多天,也没见搜狗有什么实质上的行动,我就想,应该是没有什么版权问题,搜狗只是得理不让人,逞一时的口舌之快而已。

没想到在Google发表道歉声明之后,搜狗仍然咬住这个事件不放,甚至扬言要告上法庭。我看了之后不禁莞尔。无论从公关角度,从打击对手的角度,从博得公众同情的角度,都是一击致命比较好,要是能告的话,早就可以告了,何必要弄得公众都失去耐心了才跳出来说要告呢?从现在的反馈来看,果然有很多人已经开始反感搜狗的做法了 ()、()、(),这又何苦来哉。

其实在Google输入法之前,我正是用的搜狗拼音。不客气的说,现在的Google拼音离搜狗拼音还是有不小的距离的,不论是可定制性还是功能。但是Google拼音的起点的确不低,而且有几项功能确实是我很喜欢而且搜狗没有的。因此我不厚道的猜测,搜狗此举是为了给Google造成负面影响,在对手没有成长之前打击对手。但凡事应该适可而止,做过了头,就变成泼妇骂街,不能引起别人的同情心了。

其实这次谷歌的公关做得也不甚成功,留下了很多漏洞给对方攻击。但遗憾的是搜狗没有能够抓住,反而用相当不恰当的手段把自己推到了不利的一面。我们不谈道德,只谈商业,起码在商业公关方面,搜狗还是有很多东西需要学习的了。

增加分类统计功能

2007年04月10日 12:59

昨天刚刚搞定分类,TR就留言说应该要有一个分类统计的功能。想想也是,每个分类后面加上blog的数目的确清楚得多。
Pivot 模板标记文档查了一圈,没有发现能够实现这个功能的,只找到一个 [[livearchive_list]] 标签可以列出所有的分类。
看来只能自己写了。去论坛看了一圈,发现Pivot支持一种叫做snippet的东西,可以定制所需的标签。大概的看了一下,规范并不十分复杂。我所理解的规范如下:

  1. 文件放在extension/snippets目录下

  2. 文件以snippet_开头,后面加上你希望的标签名

  3. 文件里需要公开的函数也以snippet_开头,后面加上标签名,然后可以设定参数,参数在模板中以类似[[标签名:参数:参数]]这样的格式传递


看了一些实例后,我决定自己写一个 livearchive_list 的增强版,就是后面跟着blog数的版本。
最简单当然就是从livearchive_list的代码改了。grep了一下,找到了livearchive_list的代码,在modules/module_snippets.php里。
于是把那段代码复制出来,新建一个自己的snippet,就叫livearchive_list_ex吧。
这是代码,蓝色部分就是我增加的。

<?
//----------------------------------------------------------------------
//FILENAME: snippet_livearchive_live_ex.php
//
// Just like [[livearchive_live]], just add the count of entries of each category
// Usage: [[livearchive_live_ex]]
// Author: ch.linghu
//----------------------------------------------------------------------
function snippet_livearchive_list_ex ($filename="", $format="", $weblog="", $template="") {
global $Weblogs, $Current_weblog, $Cfg, $Paths, $allcats;

if ($filename == "") { $filename = $Paths['pivot_url']."archive.php"; }

if ($format == "") {
$format = "<a href='%file%?c=%catid%&w=%weblogid%&t=%template%'>%cat% (%entriescount%)</a><br />";
}

$allcats = cfg_cats();

if ($weblog == "current") {
$cats = find_cats_in_weblog($Current_weblog);
$weblog = $Current_weblog;
} else if ( ($weblog != "") && (isset($Weblogs[$weblog])) ) {
$cats = find_cats_in_weblog($weblog);
} else {
// use all cats..
$cats = cfg_getarray('cats');
}

#---------------by ch.linghu: Count the entries in category
$myDb = new db();
$entries_array = $myDb->getlist_range("0000-00-00-00-00", "2099-01-01-00-00","","", FALSE);
#---------------


usort($cats, "category_simplesort");

foreach ($cats as $cat) {

// skip cat if it's 'not-public'.
if ($allcats[$cat]['hidden'] == 1) { continue; }

// skip if name is empty
if ($cat == "") { continue; }

// skip cat if it doesn't exist anymore
if (!isset($allcats[$cat])) { continue; }

#----------------by ch.linghu: Count the entries in category
$entries_count=0;
$temp="";
foreach($entries_array as $entry)
{
// Only list published entries, not timed posts or held entreis
if (strcmp($entry['status'], 'publish') != 0)
continue; // skip to next entry

// Only consider entries posted to the requested category
if (in_array($cat, $entry['category']))
$entries_count++;
}
#------------------


$my_output = $format;
$my_output = str_replace('%file%', $filename, $my_output);
$my_output = str_replace('%catid%', para_category($cat), $my_output);
$my_output = str_replace('%cat%', encode_text($cat), $my_output);
$my_output = str_replace('%weblogid%', para_weblog($weblog), $my_output);
$my_output = str_replace('%weblog%', $Weblogs[$weblog]['name'], $my_output);
$my_output = str_replace('%template%', $template, $my_output);
$my_output = str_replace('%entriescount%', $entries_count, $my_output);
$output .= $my_output;
}

return $output;

}

?>


源代码在此下载,右键另存为,将后缀的txt去掉即可。

搞定了blog的分类

2007年04月09日 16:15

终于把blog的分类搞定了,原来分类使用的是Weblogs的Extra template模板,原先不知道这个做什么用,随便设置了一下设成了entrypage_template,所以参数都匹配不上了。
改成frontpage_template就好了。汗。
BTW: 现在感觉Pivot的后台的确BT,设置被分裂到N多的地方,又没有一个特别好的文档,真是够晕的。
Design downloaded from free website templates.