Monthly Archives: February 2007

走了

每年到这个时候总是会有一些伤感的,我不知道是该说“去了”还是“来了”,我甚至不知道我是准备离家还是回家,所以只能用“走了”这个更加中性一点的词。
明天就要到上海了,后天登上北上的火车。列车的终点站是哈尔滨,但是我的终点站是哪里呢?

总想写点东西,但是每当开始准备动笔的生活,却又不想写了。

回来一个多月了,见到了一些朋友。聊天时问起同学的情况,有的出国,有的读博,更多的是在各地工作。以前大家都在一个教室里面读书,现在却在天南海北,做着各不相同的事情。

很多要好的朋友都已经工作了。看着他们,我有时候会感到一种失落。人家已经在为自己的事业和家庭打拼了,而我还在这里,这样的生活不知道什么时候是尽头。

我已经告诉自己很多次,回忆是那些没有能力做事的人唯一剩下的东西,所以,如果你对明天还有憧憬,就不应该常常去回忆以往的时光。但是,回到家里,面对斯人斯景,却不由我不去追忆埋在内心深处的一些场景。

我问自己,你真的放下了吗?我说,我放下了。
我又问,那为什么没有约她呢……我无语,我想,我真的是放下了。
但是放下了不等于不存在,可以忘记一种感觉,但是无法忘记一幅画面。
妈妈说,她已经不再孤单了。我默然,除了祝福,又能做什么呢?

和初中同学K歌,很久之前那种感觉突然出现了,无拘无束的那种。那些歌,还有那些人,都是老朋友,有人高了,有人化妆了,但是我心中的那种感觉一直没有变,就像中考结束后的那场狂欢一样。我最希望来的人却没有来,我想理由可能是推辞,也可能是实情,whatever。

有时候会想,如果那次高考,我没有烧错那根该死的绳子,生活又会如何呢?我会进入另一个圈子,做着完全不同的事情,生活也会变得不同。可这不是说Life is not made of IFs吗,既然选择了,如何能否重来呢? 毕竟我没有hero中的那个日本小胖让时间倒转的能力。

今后三天又是很惨的三天,和中国铁路在一起的日子我实在是受够了。但是有时候你还是要笑面相迎,这就是生活。

写到这里吧,夜深了,该睡了

三生石

晚上又遇到nite了,这家伙看来最近老是在网上。真不知道该叫他什么好,这么多id……
聊了一会儿,他特意给我摘了他blog上很久以前的一些文章,写的很不错。可惜我是不会去看我写过的东西,技术的除外。很多东西都很伤感,不适合现在看。也许,以后当我老得什么都不能做了,就开始翻以前的日记写回忆录。
以前经常回忆过去的日子,觉得初中的那段时光真好,多么想再来一遍。直到最近我才明白,人是不能总活在回忆中,过去再美好,那也已经是过去。如果一个人只能回忆,那就说明他已经没有能力去做同样的事情了,老人们不是最喜欢干这样的事情吗。

nite 说看了精华区里面我的那篇文章,很久以前的事情了。那时我还把bbs当作一个能够表达自己情感的地方。写那篇文章的情景,现在依然很清晰的浮现在我的脑海中。2.14的凌晨,写完,睡觉,醒来之后发现十大,以后就没有关心了。直到若干年之后,我当上了那个版的版主,某一天蓦然发现它竟然被m上了,静静的留在了版面。感谢当时的版主,能够保留我的随心之作,能够让我重读当时的那份失落和感慨。
记得我在一个不眠之夜写下了几句,人世间,相遇是缘,相知是缘,相守是分。我悟到的缘分便是如此。缘是前世修来的因,佛说前世的五百次回眸,才换来今生的擦肩而过。缘是前世注定的,遇到谁认识谁,并不是我决定的。而分却是今生的努力的果,缘是我不能改变的,分却是可以争取的。
我开始相信爱要努力这句话,开始努力,之后开始动摇,最后我才知道,人们只习惯于说半句,其实整句话应该是,爱需要努力,但是不是所有的爱都能努力的。

大家说的一见钟情,是不是三生之盟?如果一对男女今生不能在一起,佛会不会让他们在下个轮回的开始就爱上彼此?如果一个男孩喜欢上一个女孩,会不会因为上辈子他爱她不够,以致下辈子还要非她不娶?或是他上辈子欠她了,一定要在下辈子还?

看过一个小说,很感动,一个女孩对一个男孩一见钟情,为了看他一眼,修炼了五百年,看完之后又想看一眼,忍痛又修炼了五百年,当这个愿望满足之后,佛问她,还想再看他吗?她微笑说,我能做到,但不用了。佛叹了口气,说还有个男孩可以少等一千年了,他为了能够看你一眼,已经修炼了两千年…

我不明白,为什么佛不能成为月老呢,难道得到一份属于两个人的感觉真的需要几个轮回吗?

valentine’s day

看到一个Urban Word of the Day上的一个解释,很寒:

valentine’s day:

The reason so many people are born in October.

I was born on October first because my parents celebrated valentine’s day.

xlyrics

最近在听音乐,横向评测了几款linux下的音频播放器。觉得xmms实在是比较落伍了,现在用的比较好的是bmp,不过貌似bmp也停止开发了,取而代之的是bmpx,也就是Beep Media Player eXperimental。我用了一下,感觉还不错,尤其是听各种频道。不过感觉现在功能完成的还是比较少,中文支持也不好,希望以后的开发过程中能够加进对歌曲中文的支持。
其他还有amarok和audacious,不过前者是KDE下面的,而后者我感觉和bmp差不多,所以没有怎么用。现在我主要还是用bmp。现在就来说说bmp吧。

xmms 的诟病就是对于中文的支持了,尤其是在英文的locale下面,我到现在还没有搞定中文的歌名显示。不过bmp 对中文支持还可以,中文歌名支持如下:首选项->插件->媒体-> MPEG 音频插件->标题->勾选“将非UTF-8 ID3标签转换成UTF-8,ID3编码为GB2312,在选择完之后,我重新载入了列表,这下就可以显示中文了。

今天看到一个可以显示歌词的东东xlyrics,它可以作为xmms和bmp的插件,最新版本0.4.6支持从网上下载歌词。用了一下感觉还不错。不过在使用的时候有几个问题,看了一下代码,修改一下,现在用的比较顺。

首先是编码的问题,

在处理中文歌名的时候会有一些问题,修改xlyrics-0.4.6/src/lyrics_download.c

57 if(gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)){
58 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 1, &resrc, -1);
59 gtk_widget_destroy(download_window);
60 tpid = fork();
61 if(tpid == 0){
62 char buf[256];
63 gchar *utf8;
64 strcpy(buf,resrc);
65 utf8 = locale2utf8(buf);
66 execlp(“/usr/lib/xlyrics/downloadlyrics.pl”,
67 //”downloadlyrics.pl”, resrc, redes, 0);
68 “downloadlyrics.pl”, utf8, redes, 0);
69 exit(-1);
70 }
71 wait_user = 0;
72 final = 1;

之后编译,将编译好的xlyrics复制到/usr/local/bin下面覆盖原来的xlyrics文件。

修改/usr/lib/xlyrics/downloadlyrics.pl:

use HTTP::Lite;
$http = new HTTP::Lite;


use Encode;
use Encode::CN;


$gbmusic = encode(“euc-cn”,decode_utf8($music));
$pattern = “[0-9]+ “;
$gbmusic =~ s/$pattern//g;

# search lyrics in basic database
%vars = (
“souqu” => “歌名”,
“souci” => $gbmusic,
“ku” => “db”,
“B1” => “提交”
);
$http->prepare_post(%vars);
$http->request(“http://www.hjqing.com/lrc/index.asp”)
or die “Unable to get document: $!”;
if($http->body() =~ /没有你想找的歌词/){
# try the addtion database
glob $http = new HTTP::Lite;
%vars = (
“souqu” => “歌名”,
“souci” => $gbmusic,
#”souci” => $music,
“ku” => “dbadd”,
“B1” => “提交”
);
$http->prepare_post(%vars);
$http->request(“http://www.hjqing.com/lrc/index.asp”)
or die “Unable to get documents $!”;
$http->body() =~ /没有你想找的歌词/ && die(“find nothing”);
}
其中,红色的部分是用于编码转换的。蓝色的部分不是必需的,我电脑上有的专辑的歌曲都是10 xxx这种形式,开头有数字加空格,这种形式搜不到歌词,所以需要将开头部分去掉,就需要使用蓝色部分。

此外,xlyrics工作在gb2312的编码下面,所以需要将原来的 /usr/local/bin/xlyrics 文件进行备份成 /usr/local/bin/xlyrics.old,这里文件的具体位置和你的安装有关。接着创建 /usr/local/bin/xlyrics:

export LANG=zh_CN.GB2312
/usr/local/bin/xlyrics.old

这样,就可以听歌看歌词了,感觉很不错。

自由软件就是好,没事情做一下源代码级的hack @@

致招商银行的公开信(转载)

致招商银行的公开信

作者:徐继哲

大概在一年以前,我有了写这篇文章的想法,由于诸多事情,一拖再拖。最近,终于下决心要完成这封公开信。可我却用了三周的业余时间才完成这个短小的文章, 这和我以前的写作经历相比,简直是蜗牛的速度。为什么这么艰难呢?因为在这篇文章里,我试图和大家讨论一个很多人被迫接受的、不合理的、甚至已经习以为常 的事实,并期望和大家一起努力来改变这个事实。

多年以来,我一直都是招商银行的用户,同时也一直在忍受招商银行不平等的网上银行服务。无论是什么网络服务,都要遵循互联网的行业标准和技术标准, 这是大家都知道的基本道理。可是不知为何,招商银行的网上银行服务却没有遵守W3C等互联网标准,而是采用了微软公司的专有软件技术,ActiveX。采 用微软的ActiveX专有软件技术提供公共服务意味着什么?这意味着用户只有使用微软专有的IE(Internet Explorer)浏览器才能正常使用招商银行的网上银行服务;这意味着用户在使用网上银行时,招商银行将用户限制到了专有的、昂贵的、漏洞百出的专有软 件Windows上,时下正在肆虐的“熊猫烧香”病毒不 知又折磨了多少微软Windows用户;这意味着招商银行极大地提高了用户使用网上银行的成本,因为你只有花费上千元人民币购买微软的Windows操作 系统才能使用招商银行的网上银行;这意味着招商银行引导用户降低了自己的道德水准,同时增加了用户的法律诉讼风险,因为我不认为我们普通老百姓有足够的财 力去购买微软的Windows操作系统,绝大多数用户最终会选择盗版;这意味着像我这样的只使用GNU/Linux、*BSD、Firefox(大量的 Windows用户也在使用Firefox,因为它更安全)的大量自由软件用户无法正常使用我们应得的网上银行服务,因为我们拒绝专有软件,我们抵制软件 专利,我们需要使用、学习、修改、再发行软件的自由;这意味着招商银行正在不公平地对待你的每一位用户,正在歧视自由软件用户;这意味着招商银行是一家业 余的、虚弱的、不负责任的公司。

现在,作为一名招商银行用户和自由软件用户,我请求招商银行立刻放弃微软的专有软件技术,而是采用符合W3C、RFC等开放的、自由的互联网标准来 开发网上银行服务。使用开放的、自由的标准意味着每个人都可以使用你的服务,无论他使用的是微软的专有软件还是GNU/Linux、*BSD、 Firefox等自由软件;意味着招商银行平等对待了每一位用户、无论是自由软件用户还是专有软件用户;意味着招商银行真的有能力“因您而变”,而不是空 喊口号、欺骗大家;意味着招商银行是一家专业的、有责任感的公司;意味着现有的自由软件用户会继续使用招商银行,而不是转投其他银行,或者因为使用盗版专 有软件而被起诉;意味着招商银行是一家心胸开阔、善于进取、值得信任的公司。

虽然使用ActiveX专有软件技术来提供公众服务是错误的,但我们也能看到招商银行的动机是好的:试图保障用户的帐户安全。在技术方面, ActiveX是微软专有的、过时的、兼容性极差的技术;任何采用ActiveX的网站都是人为地给用户引入一个潜在的入侵通道,为用户埋下了一个地雷。 最近也有很多网友在讨论现有招商银行网上银行的安全隐患,比如:直接采用了某个可公开下载的二进制动态库文件,在发行自己的软件的时候没有做数字签名,这 种低级的技术手段直接导致了用户的电脑可能被植入木马,等等。可是我认为我们根本没有必要讨论现有的技术实现是否安全。为什么呢?因为招商银行解决安全问 题的思路是完全错误的,所以即使是安全的,我们也不能接受。下面我举个例子来说明招商银行解决安全问题的思路对于用户来说是多么的不方便、不友好和荒谬。 招商很行宾馆创始于1999年,一直以来生意还不错,不过最近旅店发生了几起客房被盗的刑事案件,被盗旅客损失惨重,其他的旅客也都认为这是一个很严重的 安全问题,敦促招商很行宾馆立即采取有效的安全措施,保障旅客的生命财产安全。招商很行宾馆的管理层召开了紧急会议,讨论解决之道,想来想去,管理者们一 致认为:“向每个客房派驻一名训练有素的职业保镖是个万全之策!”。于是他们如获至宝,没有查阅国家对于宾馆行业制订的相关管理办法,也没有调查国际知名 的宾馆都是如何解决这类问题的,就决定这么干了。并连夜联系到了城里最有名的保安公司:微硬公司。第二天,微硬公司经过积极努力,为招商很行旅馆调齐了 250名职业保镖,当天下午,招商很行宾馆就将这些保镖安排到了对应的客房,开始上岗服务。晚上,旅客们陆续回到宾馆。当小李和热恋中的女友打开房门的时 候,恍惚感觉房间里有个黑影一闪,进屋一看,沙发上竟然坐着一个彪形大汉,小李脑袋当时嗡地一下,心想:“坏了,今天轮到偷我了,为啥啊?老天太不公平 啦,我是好孩子啊,我还没有结婚,我已经连续一个星期吃素了。。。。。”不过小李的女朋友就没这么好的心里素质了。。。。。

  • 就在这时,这位身着黑西服的大汉站起来,咔嚓,给了小李一个敬礼:“晚上好,李先生,ActiveY号保镖为您服务!”
  • 小李更懵了,“咋回事儿啊?Active什么Y,保什么镖?我家穷的连8环房子的首付都给不起,还能给我雇保镖?不会真这么彪吧!”
  • 不过小李好歹也是个80多斤的年轻小汉,还没有被瞎晕过去,于是就问:“您您是?”
  • 黑衣人立即回答:“我是微硬公司的职业保镖,代号ActiveY,受招商很行宾馆邀请,来保障您的生命财产安全!”
  • 小李这下知道咋回事儿了:“哦,原来是这样。吓死我了!您坐吧!对了,能看看您的证件么?”
  • 黑衣人立刻从沙发上站起来,把身上所有的兜都掏出来,说:“您放心,我们职业保镖是不会动您的东西的!”
  • 小李说:“您误会了,我的意思是我想看看您的工作证!”
  • 黑衣人把所有的兜都塞回去,搭了着脑袋说:“没有!”
  • 小李说:“这不行啊,那我怎么能相信您是保镖啊?这可不行!”
  • 黑衣人说:“你就放心吧,我是来保护你的,不用怀疑,别怕!不能有假,放心!”
  • 小李说:“那不行,走,你跟我去趟前台,问个究竟!”

两人来到了宾馆前台,一问,还真是这回事儿。

  • 小李的心稍微放下点了,不过立即向前台小姐补充到:“你们应该为每一位保镖颁发一个工作证,否则我无法识别这个人是保镖还是强盗!”
  • 宾馆的前台小姐认为这是一个好的建议,心想:“我们咋就没想到呢?”,于是说:“谢谢您的宝贵建议,我们会考虑的!祝您晚安!”。
  • 小李说:“这是一个很严重的安全漏洞,你们应该立即解决这个问题,同时很多旅客都会面临这个问题!”
  • 小姐说:“很抱歉,现在我无法给您准确的承诺,我们一定会尽快处理这个问题。”
  • 小李说:“算了,那我请求将这位保镖同志还给你们,晚上我要和女朋友自己睡”
  • 小姐说:“那可不行,我们最新的服务条款规定,每个房间必须全天候配备保镖,以保障您的安全,这是必须必的。”
  • 小李怒了:“那我要是非不要这个保镖呢?”
  • 小姐也失去了耐心,狠扎了一下鼠标:“那就请您退房吧,这人怎么好赖不知呢!”

都夜里8点了,去哪找宾馆啊!无奈,小李只能带着ActiveY回到了自己的屋里,虽然100个不愿意。俩人回到屋里,ActiveY继续端坐在沙 发上,无语。小李和女友在外跑了一天,也累了,扶起还坐在地上的女友后,一屁股就坐到了床上。只见小李嗷地一声从床上弹起来,手捂着屁股大叫,好疼。 ActiveY马上过来看看怎么了,俯首一看,坏了,一个“Microhard”徽章扎进了小李的屁股,都流血了。小李说:“咋回事儿啊?” ActiveY果断地把徽章拔下,说:“很抱歉,李先生,刚才我在沙发上坐累了,想偷懒,就在您的床上躺了一会儿,不知怎么,我们公司的徽章掉到您的床上 了!咋从我身上掉下来了呢?我们公司的服装都是印度公司外包的,高质量啊,咋会出这种事儿呢?”。小李气的差点晕倒,一怒之下,当晚在自己的博客上公开了 在招商很行宾馆的遭遇。写完博客,都半夜了,小李和女朋友都累了,俩人熄灯脱衣,钻进被窝,睡觉。这时,一只手伸进了俩人的被窝,ActiveY也进来 了。

  • 小李的女朋友杀猪一样叫了一声,喊到:“啊!非礼啊,非礼!”
  • ActiveY赶紧解释:“别,别喊,非什么礼,这是服务,安全服务!这是必须必的。”
  • 此时的小李已经彻底崩溃了,说道:“服务吧,不过您能别睡在我俩中间么?”
  • !@#$%^&*($%^&*((*&^%$#$%^&*(*&^)((^$$#…………………………….

几天之后,旅客们发现招商很行宾馆悄悄地给每个保镖颁发了一个工作证,从此保镖更加理直气壮地躺在旅客的床上。。。。。

如果你和你的女朋友不能接受招商很行宾馆的ActiveY,那么你的电脑也不能接受招商银行的ActiveX,哪怕是以解决安全问题为借口。任何以 提供某种服务为借口强迫的或者偷偷的向计算机安装各类插件的行为都是流氓行为,你的计算机和你的女朋友一样都无法接受这样的流氓行为。我们有必要讨论流氓 行为的安全性吗?所以请像爱护你的女朋友一样,爱护你的计算机,因为它里面包括你的大量隐私,重要数据,这些对你非常重要。别人无权乱“插”你的计算机!

另外,无论是招商很行宾馆,还是招商银行,要想真正赢得用户,让大家热爱你的服务、喜爱你的品牌,一个基本前提就是企业要具备良好的社会责任感。对于我们 这样的发展中国家,普通老百姓实在无力购买昂贵的专有软件,比如微软的Windows操作系统,而自由软件为我们提供了千载难逢的机会,无论对于个人还是 国家。众所周知,经历了24年(1983年-2007年)的艰苦奋斗,自由软件运动早已开花结果,在计算机工业、科学研究、教育、法律等领域都取得了丰硕 的成果,自由软件赋予了每个人运行、学习、修改、再发行软件的自由(请参考我的文章《Richard Stallman和自由软件运动》获 得更多关于自由软件的信息)。现在,使用自由软件可以完成生活、工作中的各类任务,从构建服务器集群到个人计算机桌面,几乎无所不能。所以越来越多的计算 机厂商开始预装GNU/Linux,而不是微软的Windows,越来越多的用户开始选择使用以GNU/Linux、*BSD、Firefox等为代表的 自由软件。这不但显著地降低了成本,还获得了更多的使用计算机的自由度,可是由于开头讲到的技术问题,现在自由软件用户却无法使用招商银行的网上银行服 务。当然招商银行也能找到自己的理由继续不支持自由软件用户,那么这必将促使一部分自由软件用户转移到其他的采用互联网技术标准的网上银行。更严重的是将 迫使很多人走向盗版市场或者妨碍正在饱受盗版专有软件良心拷问的用户转换到自由软件上来,大家的无奈选择必将潜移默化地降低社会总体法律意识和道德水准, 最后都认为用盗版软件是很正常的。所以,如果招商银行继续固执地使用ActiveX等专有软件技术,那么将引导大家甚至整个社会开始依赖某种专有软件技 术,依赖某一家专有软件公司,带领大家进入了某家专有软件公司的圈套,直到有用户由于使用盗版软件被起诉,这是多么的危险啊。

最近在韩国发生了这样的事情, 韩国的很多网站,比如:网络门户、电子商务、游戏、银行,甚至政府的网站都大量采用了ActiveX技术,最近微软就要发布Vista操作系统,结果发生 了什么呢?已经有很多计算机厂商开始预装Vista操作系统,也有大量用户计划升级到Vista系统,可是经过测试,如果用户使用Vista操作系统,那 么将无法正常使用现有的这些网络服务,无法正常访问网上银行,无法正常获取信息,无法正常访问政府的网站,很多事情一下子都无法做了。这是因为微软最新发 布的Vista操作系统与这些ActiveX插件不兼容,导致这些功能全部失效。韩国的几个官方机构已经意识到了这个问题的严重性,同时很多网站正在微软 公司的帮助下解决这个问题。亲爱的朋友,请仔细想想,一家外国的专有软件公司正在帮助一个社会,一个国家来解决关系到日常生活、工作、社会运转的问题,这 意味着大量的用户已经落入了微软的陷阱,这不就是数字殖民吗?所以,我们一定要引以为戒,一定不要在专有软件技术上构建虚假的繁荣,落入他人的圈套。我们 的未来要掌握在自己的手里,而不是微软公司!另外,难道招商银行是微软的代理商吗?正在帮助微软在中国销售Windows吗?否则我实在找不到别的继续固 执使用微软专有软件技术提供开放服务的理由!所以请招商银行能够站在更高的层面来思考和决策自己的技术策略,能够成为一家具有社会责任感的公司,而不是唯 利是图的小贩。我相信这对招商银行来讲不是一个简单的技术问题,更是一个荣誉问题,前途和未来的问题!

说到此,我相信已经有很多用户有过同样的遭遇和看法,并在不同的场合表达过自己的心声。现在,无论你是GNU/Linux用户,比如: gNewSense、Debian、gentoo、ubuntu、SUSE、Mandriva等GNU/Linux发行版用户,还是 FreeBSD/NetBSD/OpenBSD/DragonFlyBSD/Darwin/Mac OS X用户,还是Windows下的饱受IE安全漏洞困扰、喜欢并正在使用Firefox、Mozilla的用户,还是正在被迫使用盗版Windows专有软 件,饱受道德诘难的用户,我强烈呼吁我们能够团结起来,发起一次请求招商银行支持自由软件的公开行动。我们要集合大家的声音,一起大声疾呼,请求招商银行 放弃专有软件,采用开放的、自由的互联网标准实现网上银行服务,平等地对待每一个用户。作为正式的意见收集渠道,请将“你自己的致招商银行的公开信”通过 邮件发到campaign@billxu.com,我将收集、汇总、发布大家的公开信,将大家的公开信正式集合起来,公开到网上, 这是一个动态更新的网页,请大家关注。并将收到的部分邮件打印出来,正式交给招商银行,让招商银行严肃地对待这个问题。在大家公开信的时候,请使用纯文本 格式,不接受任何Microsoft Office Word等专有格式,在自己的公开信里最好包括你的姓名、职业、城市等信息,当然也欢迎更多的信息,以便将来我们一起与招商银行展开正式的线下沟通。如果 你担心有别的影响,也可以用网名或者匿名来发表你的意见。同时,欢迎大家逐字逐句地转载这篇文章,在各个网站、论坛、邮件列表、IRC等展开公开的讨论, 释放自由软件社团的声音。我也欢迎采用传统信件来陈述你的观点,我的邮政地址是:

  • 邮编:100080
  • 地址:北京市 海淀区 北四环西路 58号 理想国际大厦 18层
  • 徐继哲 (收)
  • 电话:139 1051 1732

你的来信将仅在此次公开行动中使用,不会被用作它途,你的邮件地址将会被保密,不会用作它途。同时我发现一些采用互联网标准开发的网上银行能够满足自由软件用户的需求,所以我在这里公开一个支持自由软件的网上银行列表和不支持自由软件的网上银行列表, 供大家选择。这是一个动态更新的列表,比如招商银行开始放弃专有软件,采纳互联网技术标准来开发网上银行服务,能够支持自由软件用户,那么我将把招商银行 从不支持自由软件的银行列表转移到支持自由软件的银行列表,反之亦然。由于我没有太多的银行帐号,所以并不知道所有的已经存在的网上银行服务是否支持自由 软件,如果你有使用经验,那么请发送邮件到www@billxu.com,我会及时更新这个列表。

对于每个人来说,网上银行都是一项重要的服务,所以我们和招商银行都要严肃地看待这个问题。请招商银行能够对此公开行动在招商银行的网站上给出公开的、明 确的、正式的答复,以及具体的时间表。如果招商银行要继续一意孤行、继续不平等地对待每一个用户,那么用户也可以做出自己的选择,毕竟换个银行和换个旅馆 一样方便。在呼吁大家更换到支持自由软件的银行之前,我和所有的自由软件用户期待招商银行的“因您而变”!期待能够和招商银行一起解决这个问题!

“致招商银行的公开信”公开行动接收公开邮件的截止时间是2007年3月14日。现在征集20名自由软件支持者和1名律师自愿者,我们将在2007年3月15日,星期四,这个消费者权益保护日,一起带着大家的观点和打印出来的邮件,与招商银行展开线下的对话,共同解决这个问题!如果你希望能够参加这个线下的对话,请来信www@billxu.com告 诉我,然后我们统一行动。此次公开行动对于每一个自由软件用户、爱好者、支持者来说都意义重大,我们必须指出和改正招商银行这种错误的做法,否则越来越多 的网络服务将重蹈覆辙,落入专有软件的陷阱,开发出越来越多专有的、不标准的、不自由的、自由软件用户无法使用的服务,最终全社都将丧失使用互联网的自由 度。所以请每一位自由软件用户花上30分钟的时间,思考一下这个问题,写出你的观点,发送给我们。我们要一起行动起来!我们要一起公开自己的观点!我们要 让招商银行感受到来自自由软件社团的共振!

最后,我再次呼吁中国自由软件用户、爱好者、支持者能够团结起来,以往在论坛里的抱怨或者长吁短叹根本无法解决问题,我们一定要积极投入到这次公开行动中来,集合我们的声音,集合我们的力量,改变招商银行这一不平等的服务!

注:招商银行没有招我,主要是因为工行做的比较e,相信如果招商银行走出第一步的话,其他银行应该会有所改观的。

驱上了好多东东

努力了半天搞定了本子的几个东西。

指纹识别

以前看到Linux on T60的文章,说fingerprint的软件不是很成熟,所以当时都没有怎么看。今天到thinkwiki上看了看,发现有两个驱动:thinkfingerBioAPI。前者是开源的,而后者是闭源的。我在编译BioAPI的时候,出现错误,所以我用thinkfinger,一切顺利。希望它能早点进入debian的官方源。

现在我可以用thinkfinger和unix两种pam方式,所以在gdm和su登录的时候,会出现两种方式,例如su:

如果想要用指纹的话,可以在系统提示“Password or swipe finger”的时候,扫一下指纹;如果不想用指纹,可以在系统提示“Password or swipe finger”的时候,按一下回车,系统会提示“Password:”,这个时候输入密码就好了。例如:

marvel@mvision:~$ su –
Password or swipe finger:
Password:

指点杆

系统默认指点杆中键和鼠标的中键一样,都是粘贴,这个在看书看网页的时候不太方便。如果内核以前,需要找一个patch,而在内核以后,这个功能需要在X系统中实现。只要修改一下X的配置文件:

Section “InputDevice”
Identifier “Configured Mouse”
Driver “mouse”
Option “CorePointer”
Option “Device” “/dev/input/mice”
Option “Protocol” “ImPS/2”
Option “Emulate3Buttons” “on”
Option “Emulate3TimeOut” “50”
Option “EmulateWheel” “on”
Option “EmulateWheelTimeOut” “200”
Option “EmulateWheelButton” “2”
Option “YAxisMapping” “4 5”
Option “XAxisMapping” “6 7”
Option “ZAxisMapping” “4 5”
EndSection

重启X。

之后可以更改鼠标的灵敏度和速度:

echo -n 140 > /sys/devices/platform/i8042/serio1/serio2/speed
echo -n 250 > /sys/devices/platform/i8042/serio1/serio2/sensitivity
以上的serio1/serio2目录与具体的内核有关:

  • With kernels 2.6.19 and above config files for this driver are located in /sys/devices/platform/i8042/serio1.
  • With kernels 2.6.13 (inclusive) to 2.6.19 (exclusive) config files for this driver are located in /sys/devices/platform/i8042/serio0/serio2.
  • With kernels 2.6.11 (inclusive) to 2.6.13 (exclusive) config files for this driver are located in /sys/devices/platform/i8042/serio0.
  • With kernels 2.6.9 (inclusive) to 2.6.11 (exclusive) config files for this driver are located in /proc/trackpoint.
  • Prior to kernel 2.6.9, configuration was not done through files but through command-line options to the psmouse module. (Note this means you must compile psmouse as a module!)

CPU频率调节

在内核 2.6.10以前,需要加一个patch才可以支持dothan,不过我用的最新的内核2.6.20可以直接支持了。我在acpi中,编译了以下模块:

ac.ko container.ko hotkey.ko processor.ko video.ko battery.ko dock.ko i2c_ec.ko sbs.ko button.ko fan.ko ibm_acpi.ko thermal.ko

acpi-cpufreq.ko

在/etc/modules中添加这些模块即可,重启,选择新内核。

然后,安装 cpufreqd,启动之。安装gnome-applets,在gnome的任务栏中添加CPU Frequecy Scaling Monitor。之后运行:

chmod +s /usr/bin/cpufreq-selector

这样,就可以使用CPU Frequecy Scaling Monitor调节频率了。

tpb

tpb是用于fn键控制的,其实apt-get安装之后就基本上OK了。但是还要记得编译的内核中需要包含nvram的支持,然后把当前的用户加到nvram组中。 这样用户才能读/dev/nvram设备。

试用mono( 三)新建Web应用篇

今天我介绍mono的三个部分:ASP.Net项目。Mono上的ASP.Net Web应用可以有两种方式运行,第一种是apache+mono module的方式,第二种是xsp standalone的方式。我用的是第二种,xsp是一个用C#写的简单(或者说轻量级>也可)的web服务器,用于运行ASP.NET 1.1和2.0的程序。

在的mono版本已经完全实现了ASP.NET的所有功能,也就是说,你在windows下写的ASP.NET程序在linux下的mono下也可以运行。当然这里的“linux”只不过是强调一下,作为一个轻>量级的C# Server,xsp也可以在windows下运行的。

我们开始吧,首先选择File -> New Project… -> C# -> ASP.NET -> Web Application。这样,mono会生成一个简单的ASP.NET程序,Default页面中带有一个TextBox和一个Button>。我们进行扩展一下。

ASP.NET Dev

左面的Solution工具栏中双击Default.aspx,这时出现Default.aspx的前端代码。我们添加一个Label,同时把页面修改一下,加一些标题和分割符。如下:

Default

This is an ASP.Net Web application test on mono

Solution工具栏中双击Default.aspx里面的Inherits Default in Default.aspx.cs,这>时出现了Default.aspx的后端处理代码,我们添加一个控件Label,并修改一下事件代码:

using System;
using System.Web;
using System.Web.UI;
namespace local1
{
public class Default : Page
{
protected System.Web.UI.HtmlControls.HtmlForm form1;
protected System.Web.UI.WebControls.TextBox textBox1;
protected System.Web.UI.WebControls.Button button1;
protected System.Web.UI.WebControls.Label label1;
public virtual void onButtonClick(object sender, EventArgs e)
{
this.label1.Text = “Welcome : ” + textBox1.Text + ““;
}
}
}

ASP.NET Web Page

编译F5,之后浏览器会出现一个Default.aspx的页面。我们文本框中输入一个字符串,点击按钮,label显示欢迎字符串,如上图所示。

建议被zf采纳了

前几天去打球,绕了整个镇活活没有找到打球的地方,郁闷死了。回来的时候就在路上想
,去找市长电话,如果没有或者用不了的话,就把那个gov的网站给黑了,贴一封建议信上
去。现在想起来冲动真是魔鬼啊。
还好,真的能找到市长信箱,而且是一个web提交系统,做得还不错。于是写了一份建议。
今天收到回复了:

On 2/5/07, 市长电话  wrote:

先生你好,首先感谢你对家乡的关心,告诉你好消息,你的建议已列入今年
市人代会政府工作报告07年实事工程之一。到时将有秩开放梧桐市区公共体育设施,让广
大市民享受。

不知道咱们工大的校长信箱什么时候那么灵就好了,呵呵

char*和char[]

一直就认为C中的char*和char几乎是一样的,要是说区别,那就是char[]在声明之后,地址值是只读的,而char*的值是可变的。

不过今天看到两个程序:

A:

char* get_str(void)
{
char str[] = {“abcdefghijk”};
return str;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf(“%sn”,p);
return 0;
}

B:

char* get_str(void)
{
char *str = {“abcdefghijk”};
return str;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf(“%sn”,p);
return 0;
}

理论上,两个程序好像都不可以,因为都是返回一个局部变量。可结果是,第一个有warning,运行的确什么都没有打印出来;而第二个一切正常,能打印出字母来。这是为什么呢?我的gcc版本是 version 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

将c代码转化成汇编:

gcc-local-varibles.png
我们可以看出,两个程序只有在get_str 函数有区别,前者是将.LC0,即字符串重新复制了一遍,进行修改;而后者直接将字符串的地址赋给了局部变量。movl -4(%ebp), %eax 则是将这个地址返回给main。

看来gcc编译器不是像我们想象的那样,在函数中生成一个字符串,在进行操作;而是有一个全局的字符串,如果是char[],则会生成一个副本,如果是char*,则只是简单的生成一个引用。

可是问题没有结束,关键在于这个字符串是在 .section .rodata下面的,也就是只读的,有意思的是如果我们将B中的get_str改成:

char* get_str(void)
{
char *str = {“abcdefghijk”};
str[1]=’p’;
return str;
}

之后,运行会出现 Segmentation fault,而进行相同修改的A代码可以运行,但是打印出来的是无意义的字符串。

这个问题解决了,还有一些很有意思的东西。gcc 现在的版本为了加快运行速度,都将变量按照16字节边界存储。例如下面的代码:

void doit(void)
{
}
int main(int argc, char* argv[])
{
char a[10];
doit();
return 0;
}

生成的汇编代码main部分为:

main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $16, %esp
call doit
addl $16, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
我们可以发现main函数在初始化的时候 预留了16个字节的空间给局部变量。如果我们在main中再添加一个char b,结果还是16个字节,因为gcc会将所有变量总共需要的空间算出来,再转化为16的倍数。是不是所有的情况都是这样呢?看看下面的代码:

void doit(int n)
{
}
int main(int argc, char* argv[])
{
char a[120];
doit(9);
return 0;
}
这个时候相关汇编代码变成了:

subl $132, %esp
movl $9, (%esp)
call doit
movl $0, %eax
addl $132, %esp
为什么是132而不是128呢?因为main函数调用get_str的时候需要预先填入其所需的参数,然后才执行call填入IP,所以gcc就偷懒一起留了,因为 参数是一个int,为4个字节,所以总共需要留出128+4=132个字节。

具体的内存分布图参见下图

试用mono(二)新建GUI项目篇

上次介绍了如何导入一个现有的VS .Net项目并运行,这次我们来看看mono如何创建一个新的项目。

首先在mono的welcome界面中点击Start a New Project,这时会出现下面的界面。其中,Console Project是新建一个C#的控制台项目;Empty Project是创建一个空的项目,没有任何文件;Library是新建一个库项目。在C#的子项ASP.NET中,还有一个Web Application,这个可以新建一个ASP.Net 的项目。以上四项与VS .Net中都是对应的。不过,在这里大家会发现会有一个Gtk# 2.0,这个是什么东东呢?到官方完站上看了一下,这个部分下次再介绍。
New Solution

选择新建一个Cosnole Project,系统自动创建一个项目。项目中除了用于设定生成的有关程序集的常规信息参数必需的AssemblyInfo.cs文件之外,还有一个文件Main.cs,这是项目的主体。mono自动生成了一个Hello World的示例:

右击Solution工具栏中的项目,出现Add菜单,里面有New Dialog,New Window,New Widget和New Action Group。这点很有意思,在VS .Net中,Console项目是不能创建GUI的,至于那些Drawing命名空间则完全屏蔽了。而在mono中可以自由地创建GUI控件。本来想再写一个GUI篇,看来没有必要了,写在一起就好了。

我们选择新建一个窗口,此时会出现一个窗口如下:

New Window

这里有一个GTK# Window,还有一个Window。其实本质上它俩都是基于GTK#的window控件。GTK# Window是基于GTK#的控件,GTK#是gtk+的.Net绑定集,可以用它来编写生成gtk的原生程序。GTK#的文档可以从官方得到,而window则是gtk+中的控件,它与Visual C# .Net的window不是一个东西了。

如果新建一个GTK# Window,那么自动生成的代码是:

using System;
using Gtk;
using GtkSharp;

namespace con1
{
public class Form2 : Window
{
public Form2 () : base (“MyWindow”)
{
}
}
}

如果新建一个window,系统生成的代码是:

using System;

namespace con1
{

public class Form1 : Gtk.Window
{

public Form1() :
base(“”)
{
Stetic.Gui.Build(this, typeof(con1.Form1));
}
}
}

其实,从语义上来说,两者都是一样的。我们注意到第二个窗口的代码中有Stetic.Gui.Build方法,那么Stetic是什么呢?Stetic 的官方解释是:Stetic is the new GUI designer for creating Gtk# applications.我们可以把它理解成一个GUI的设计器,正因为如此,我们可以发现,Form1的界面有Source code和Designer两部分

GUI Design

在GUI的设计方面,包括控件和定位,我感觉就是gtk的风格。例如控件不是绝对定位,有x、y坐标和长宽,而是类似flow一个挨一个的。因为gtk的定位一直觉得很让人郁闷,所以这部分就不做了。至于控件的类库,倒是和C#.Net的很类似,这里就不说了。

最后是编译执行,会在bin/Debug或bin/Release下面生成一个exe文件,直接运行就可以了。下图是运行结果。

MyWindow.png