Profilo di Fwolf温暖的耗子窝BlogElenchi Strumenti Guida

Blog


29/10/2006

强大的Screen

使用过unix、linux、bsd系统的人应该都体验过shell的强大功能,尤其是配合openssh使用,可以方便的管理远程主机,这也几乎是远程维护服务器的最高效的方式了。

但是shell也有一个小缺陷,那就是缺少窗口界面下的"多窗口"功能,用户的操作是单线性的,无法暂停去处理其他事务,然后再回来,常用的解决办法应该是多开几个ssh窗口,这样是不是太笨了呢?注意我只是说用户操作是单线性的,系统的处理仍然是多用户多任务的,把任务放到后台处理不属于"用户操作"范畴。

其实,借助强大的Screen screen的另外一个家)这个程序,我们可以在简陋的命令行操作方式下模拟多窗口的运行模式。Screen的主要功能是使一个用户登录能够同时打开多个shell进行操作,每个shell互不影响,如果把shell比作"窗口"的话,Screen就可以让你打开无数个"窗口"。

有了Screen的帮助,就不需要再打开许多个terminal窗口了,只要打开一个,并且进入screen,就可以随用随开shell了。比如说,我要在a目录下编辑程序,然后在b目录下运行程序,然后在c目录下查看errorlog,那么在打开screen之后,在默认的shell中cd a目录,这是第一个"窗口",然后按Ctrl+a c键,注意是按住Ctrl键和a键,然后单独按一下c键,就打开了第二个"窗口",在这个shell中cd b目录即可,同理打开第三个shell,cd c目录。"窗口"之间的切换主要有两种方式,一种是Ctrl+a p跳到前一个窗口,Ctrl+a n跳到后一个窗口,另一种方式是用Ctrl+a "显示出窗口列表进行选择,方便吧,手指不用离开键盘就完成了。如果窗口太多分不清了,还可以用Ctrl+a A给窗口起标题。

从上面的例子可以看出Screen的命令都是以Ctrl+a开头的,常用的命令还有(注意开头的Ctrl+a省略了,并且要注意大小写和控制键):
C 清屏
Ctrl+D 或者 d 从当前的screen中跳出来,相当于"休眠",以后还可以再连接上
h 截屏,屏幕上的字符内容会存为一个hardcopy文件
? 显示帮助信息,常用的按键都有说明
k 关闭当前"窗口"
c 开一个新窗口
n 下一个窗口
p 上一个窗口
" 显示窗口列表
A 定义当前窗口的标题

按键看似复杂,用的多了自然就会熟悉并记住了,大家也可以参考一下另一份按键说明

Screen的另外一个用法要稍微特殊一些,这么说吧,比如你开了n个窗口正在工作,突然有事要停下来,暂时关闭掉作别的事,或者是在公司没作完回家接着作,抑或是到服务器的网络连接断掉了,那么你已经打开的n个窗口、你的工作状态能不能保留呢?答案当然是肯定的!这也是Screen的一大特色,遇到上述情况,你只要Ctrl+a d就从screen的工作界面中跳出来了,回到正常的shell环境,什么时候想回来了,再使用screen -r命令就又能连接到你刚才的工作状态继续工作了。即使是在公司的screen没有用Ctrl+a d命令进行deatach,还可以用screen -x把控制权"抢"过来,嘿嘿。

Screen还具有log功能,使用Screen -L命令启动,就会在用户的home目录下自动生成screenlog.?文件,其中?是你在screen中开的"窗口"号,默认第一个为0。这样用户在screen中的所有操作就都可以记录下来了,不管是为了写文章还是存档用都很方便。不过screenlog中还记录了 Escape Code信息,所以直接用vi或者less查看很不方便,cat出来倒是原汁原味,保存了彩色shell的所有颜色,但毕竟不方便,所以我自己写了一个把screenlog转换为html代码 的工具,自己觉得还有点用吧。

screenlog中的颜色和linux shell中的颜色一样,都是用Escape Code中的颜色代码来实现的,关于这些颜色代码, Pradeep Padala有一篇文章介绍的比较详细,值得学习一下。

熟悉和掌握screen对工作学习都有很大帮助的,记得原来讨论远程桌面vnc的时候,一位牛人就曾经说过ssh+screen是最强大的,现在自己也有了相应的环境,果然言如其实,nix主机的管理大可扔掉远程桌面软件了。

PS: 在写上面那个screenlog转换工具的时候顺便发掘了一个正则表达式检测工具,不知道是哪位不知名的前辈流传到网上的,十分好用,只是js代码不太标准,在firefox下无法使用,我就对它小小的动了一点手术,解决了兼容性的问题,反正我在Linux+Firefox下是可以用的,地址: http://www.fwolf.com/tools/regex_test.html

Source:http://www.fwolf.com/blog/post/250

23/10/2006

送别永远的舒马赫

今天的巴西大奖赛无疑是舒马赫精彩的收山之作,虽然他没有登上领奖台,但他在我心中仍然是这场比赛的胜者。

我看F1比较晚,是从大约2003、2004年开始的,舒马赫兄弟两人驾驶红色法拉利战车包揽一、二名的镜头仍然记忆犹新,还有一次是2004年陪lp逛商场,我就在商场的某个楼梯口看电视转播,lp自己去逛,谁让这时间和F1比赛冲突了呢,结果就看见巴里切罗在18个弯道的赛场的最后一圈的倒数第三个弯道超越特鲁力的精彩,从那以后,疯狂的迷上了F1,只是cctv总是掉链子。

上一场比赛我由于上班没有看,事后知道了舒马赫爆缸退赛的消息,和所有舒迷一样,即为他感到惋惜,又盼望奇迹出现。但老天还是公平的,今天的比赛虽然没有奇迹出现,老天还是给了舒马赫一次完美表演的机会。

第10位发车,一路追到了费斯切拉后面,超越之后,却被费斯切拉蹭了一下左后轮爆胎。带着浓厚的个人情感和不太好使的眼神,我觉得这是费斯切拉故意之为,唉,留给后人评说吧。舒马赫不负众望得用三个轮胎把赛车开到了维修站,这点难度对他来说已经不算什么了,修整过后,重新杀回赛场,名列最后一位——17位。

之后就是一系列的超车,或许是车手们都为舒马赫的执着所感动,或许为他的人格所折服,或许是杀红了眼的舒马赫确实锐不可挡,超车都很顺利,甚至在超越Heifield的时候,我感觉Heifield很敬重的让车王通过了,籍此表达车手之间的敬意。

对费斯切拉的第二次超越简直就是神来之笔,主持人说的"兵不血刃"也丝毫不夸张,有了第一次超车失败的教训之后,舒马赫没有再次莽撞,而是紧盯对手,给予对方极大的压力,然后在上一次超车同一个弯道虚晃一枪,从回放看得很清楚,舒马赫根本就没有加速的迹象,迫使极度紧张的对手犯下了致命的错误,为了封堵车道在高速下坡弯道选择了晚刹车,结果费斯切拉带着一缕青烟冲出了塞道,舒马赫顺利超越。

然后就是对kimi莱科宁的超越了,这位年轻而实力不凡的车手面对舒马赫并没有丝毫让步,死死的守着自己的位置,而舒马赫也终于不负众望,硬生生的杀出了一条血路,把莱科宁挤到了外道上并成功超越,当时两车的距离近得比周星驰的脖子离紫霞的剑还要近,相信很多观众也和我一样瞪大了眼睛,担心会撞到一起。老天保佑,两位车手相安无事,舒马赫成功完成了超越,相信莱科宁也会心服口服。

接下来的比赛已经没有几圈了,马萨成为13年来首位在本土夺得分站赛冠军的巴西车手,阿隆索也如愿卫冕年度车手总冠军成功。

虽然舒马赫的最后一场F1比赛只获得了第4名,但是,舒马赫用他的实际行动,向他的车迷,向所有法拉利车迷,向所有热爱F1的人们证明了,他是一位永不放弃的德国人,他是我们心中永远的胜者,永远的车神。

舒马赫,用自己的坚韧,为F1历史写下了光辉的一页,让我们永远记住他吧,Michael Schumacher,永远的舒马赫。

Source:http://www.fwolf.com/blog/post/248

22/10/2006

Fwolf’s Blog > Dash

Fwolf's Blog > Dash

今天突然在firefox的标签中看到了"Fwolf's Blog > Dash"。

应该有很多人知道Dash吧,不知道的也应该知道 VeryCD,至少也知道电驴,或者再差一点下载总应该听说过吧。

Dash就是 VeryCD的老大,尽管很多人担心VeryCD的版权问题,也有人抱怨他们对驴子作了一些不太好的改动, Dash仍然很坚定的走着自己的路。现在VeryCD已经成为国内电驴下载的中心了,论坛的邀请也成了紧俏货,祝他们一路走好吧,还是那句话,电影还是要看的嘛。

Dash这个网名怎么起的不知道,但先来学习一下这个英文单词的含义吧:

dash
/ dAF; dAF/ n 1 [sing] ~ (for sth) sudden forward movement 突进; 猛冲: to make a dash for freedom, shelter 为获自由、 遮掩处而急奔 * We jumped into the car and made a dash for the ferry. 我们跳上汽车, 冲向码头. * Mother said lunch was ready and there was a mad dash for the table. 母亲说午饭做好了, 大家一下子都向饭桌奔去. 2 [C usu sing 通常作单数] (esp US) short race; sprint 短跑; 短距离赛跑: the 100-metres dash 100米赛跑. 3 [C esp sing 尤作单数] a ~ (of sth) small amount of sth added or mixed 少量搀和物或混合物: a dash of salt 少许盐 * red with a dash of blue 略为发蓝的红色 * The flag adds a dash of colour to the grey building. 那面旗子装点著灰秃秃的大楼. 4 [sing] ~ (of sth) (sound of) liquid striking or being thrown against sth 冲击或溅洒液体(的声音): the dash of waves on the rocks 波浪拍打岩石的声音 * A dash of water in his face will revive him. 向他脸上泼水能使他苏醒. 5 [C] horizontal stroke () used in writing, printing and Morse code 破折号(–). =>App 3 见附录3. 6 [U] ability to act vigorously; energy 活力; 冲劲儿; 精力; 干劲: an officer famous for his skill and dash 以干练和干劲闻名的官员. 7 [C] (infml 口) = dashboard. 8 (idm 习语) cut a `dash be exciting and stylish (in appearance or behaviour) (外表或举止)神气, 有气派, 帅: He really cuts a dash in his smart new uniform. 他穿著漂亮的新制服真是神气十足. make a bolt/dash/run for it => bolt2.

/ dAF; dAF/ v 1 [I, Ipr, Ip] move suddenly and quickly; rush 猛冲; 突进: I must dash (ie leave quickly), I'm late. 我得赶紧走了, 已经晚了. * He dashed off with the money. 他带著钱跑了. * She dashed into the shop. 她冲进商店里. * An ambulance dashed to the scene of the accident. 救护车风驰电掣赶往事故现场. 2 [Ipr, Tn.pr, Tn.p] (cause sth to) strike forcefully (使某物)猛撞, 撞击, 碰撞: Waves dashed against the harbour wall. 波浪撞击著港口的墙基. * He dashed the glass to the ground. 他把玻璃杯狠狠摔在地上. * The boat was dashed against the rocks. 小船猛撞在礁石上. * A passing car dashed mud all over us. 一辆汽车飞驰而过, 溅了我们满身泥. 3 (idm 习语) dash (it)! (infml euph 口, 婉) (used as a milder way of saying damn 用如damn一词, 语气稍轻): Dash it! I've broken my pen. 糟了! 我把钢笔弄断了. 4 dash/shatter sb's hopes => hope. 5 (phr v) dash sth off write or draw sth quickly 匆匆地写或画某事物: She dashed off a letter to her mother. 她给母亲匆匆写了一封信.

==>确实符合勇往直前的作风,呵呵,其实说了这么一大堆,真正的目的只是为了把答案从第一屏上挤下去,翻页才能看见,下面再来学习一个单词,然后揭晓真相。

dashboard (also facia, fascia)
n board or panel below the windscreen of a motor vehicle, carrying various instruments and controls (机动车辆的)仪表板. =>illus at App 1 见附录1之插图, page xii.

Fwolf's Blog > Dash 真相

呵呵,希望Dash不要劳累过度,在 GFans里面也不要总是潜水。

Source:http://www.fwolf.com/blog/post/247

19/10/2006

如何区分php脚本是在shell下运行还是在web上浏览

一般我们使用php是作web开发用的,但php也能够在shell下运行,就像bash、python脚本一样,方式一是通过php -r或php -f命令(nix和win下都可用),另一种方式是在php文件的前面加上"#! /usr/bin/php",并chmod +x xxx.php。

虽然php程序在这两种情况下运行的结果基本一致,但还是有所区别的,首先他们使用不同的php.ini配置文件,这个以前就说过了;其次两种情形下输出信息的时候要略微不同,在cli方式下运行,输出信息的分行一般使用回车就够了,而在web下浏览的时候,还要多加上一个
;最后得到参数的方式不同,cli下可以直接取argv数组,而web下则要通过$_GET数组。

那么有什么方法让我的脚本自动判断是处于哪种运行模式下,从而选择不同的处理方法呢?通过对比cli和web方式下phpinfo()反馈信息的不同,我发现基本可以用环境变量$_ENV["_"]来判断,当采用php -f方式执行的时候,$_ENV["_"]的值是/usr/bin/php,即执行文件的名称,当设置了"#! /usr/bin/php"并运行xxx.php时,$_ENV["_"]的值是./xxx.php,也是执行文件的名称,最后在web方式下浏览的时候,$_ENV["_"]的值是/usr/sbin/apache2,即解析php文件并反馈信息的web服务器执行文件的名称。那么,基于这个环境变量的值,我们就可以判断出程序的运行模式,并选择不同的处理方法了。下面是一个简单例子的源代码(cli_web.php),输出结果为得到的所有命令行或者get参数。


#! /usr/bin/php
if (('/usr/bin/php' ==  $_ENV["_"])     //php -r …
    
|| ($_SERVER["SCRIPT_FILENAME" ] == $_ENV['_' ]))    //chmod +x xxx.php and run itself
    
$is_cli  true;
else
    
$is_cli false ;

//Set line break string and argument array
if ($is_cli )
{
    
$s_br "\n";
    
$ar $_SERVER['argv' ];
    unset(
$ar[0]);     //self-name of this script
}
else
{
    
$s_br  "
\n"
;
    
$ar $_GET ;
}

$s implode( $s_br$ar);
$s  .= $s_br;
echo 
"Got arguments: $s_br$s";
?>

上面的代码在cli模式下运行结果为:

$ ./cli_web.php a b c d
Got arguments:
a
b
c
d

在web浏览方式下返回html代码为(访问形式为http://…../cli_web.php?a=1&b=2):

#! /usr/bin/php
Got arguments:

1

2

基本达到设计要求,只是web浏览方式下的"#! /usr/bin/php"不知怎么才能去掉,它不在包含范围内,无法使用ob_clean()清除,希望哪位路过的达人不吝赐教。

Source:http://www.fwolf.com/blog/post/243

18/10/2006

Click/人生遥控器/神奇遥控器

上班很烦吧?工作很烦吧?塞车很烦吧?(貌似中国很多人享受不到)和老婆吵架很烦吧?要是能把这些烦恼都跳过,只能感觉到人生中的美好时刻是不是很幸福呢?Click的导演帮你实现了梦想,人生就像看电影,不开心的时候可以快进,爽的时候可以暂停,你还会有什么好烦的呢?

电影真是个好东西,人类那么多稀奇古怪的想法都能在电影中成为现实,如果有机器猫中的那个把自己变成主角的工具,我一定要把自己弄到这个电影中去,也去免费要一个那种万能遥控器,然后再像Last Action Hero/幻影英雄 里的阿诺德.施瓦辛格那样,回到现实生活中来爽。以后要到商店买东西,不用给钱,按一下"暂停",然后直接搬回家就可以了。要是看到美女,色心大动,也按下暂停就可以安全的一亲芳泽了。。。

关于时间暂停,最早见到是在"恐龙特急-可塞号"这部现在看来及其弱智的电视中,其实科学家已经帮我们证明了时间旅行是理论上可行的,同理暂停也是能够实现的,但同时又出来了一个平行空间理论,如果时间暂停了,那么你所在的这个暂停了的时空是一个,原来的时空仍然继续前进,就是形成了两个并行的时空,看来虽然理论上是可行的,通过时空旅行改变人生的目标恐怕仍然难以达到,因为平行的时空永远也不可能相遇(就像平行线永远保持相同的距离),这个问题的解决要等科学家们研究出 The One里面的那把椅子了。

话题再回到电影,内容我就不透露了,不然大家看起来会没意思的。但是,通过电影你要认识到,第一,人生就是酸甜苦辣的集合体,所有的感觉都是人生体验,都是不可缺少的,不然我们直接从出生直接快进到入土得了,一了百了。第二,无论家庭发生多大的变化,老爸仍然是老爸,老妈仍然是老妈,也许会觉得他们老土、笨、固执,但亲情是永远都会埋藏在内心深处的,这东西要养成时不时拿出来用一下的好习惯,不然父母仙逝之后会变质成遗憾的。

Source:http://www.fwolf.com/blog/post/242

如何为网站添加sitemap文件

什么是sitemap?简单的说,就是一个xml文件,定义了你网站"主要栏目"的结构,以方便搜索引擎更好的建立索引和抓取文件。是对一些从其他页面不怎么链接得到的页面尤其有用,更详细的信息可以查阅Wikipedia上的说明

Google是支持sitemap的,Google帮助中的How do I create a Sitemap file? 一文列举了一些生成sitemap的方式和工具,我采取的是第一种——sitemap protocol方式,详细说明在这里 ,英文好的朋友可以直接去啃,不用看我在下面罗嗦了。

第一步,准备工作

由于Google Sitemap Generator是使用python语言编写的,所以需要python 2.2以上的版本支持,其余的要求如要有文件的访问权等等不再详述。由于我的操作系统是Ubuntu,所以python支持也没问题。

http://www.sourceforge.net/project/showfiles.php?group_id=137793&package_id=153422 下载Google Sitemap Generator的程序文件,在本机建一个目录把它解压缩。

第二步,创建配置文件

把刚才解压缩得到的example_config.xml文件另存为config.xml,并编辑之:

base_url="http://www.example.com/"
store_into="/var/www/docroot/sitemap.xml.gz"
verbose="1″
>

其中base_url是网站地址,store_into是sitemap文件的地址,最好使用绝对路径,于是上面的内容修改为:

base_url="http://www.fwolf.com/"
store_into="/home/fwolf/sitemap.xml.gz"
verbose="1″
>

接下来修改** MODIFY or DELETE **开头的sitemap生成方式定义部分,要删除掉不打算使用的生成方式,按照xml语法标签来分,生成方式有以下几种:

  • url,网页地址,附加定义为最后修改时间,更新周期,优先级,个人认为这种方式比较麻烦。
  • urllist,通过一个包含网页地址列表的文件,可以定义文件优先级,个人认为这种方式还不如直接使用urllist文件省事。
  • directory,文件地址,附加定义为文件、对应网址、默认索引页,个人认为这种方式比较适合我们,因为在本机一般都会有一套比较完整的网站文件,用他们来生成sitemap再合适不过了。
  • accesslog,网站日志文件,有必要么?
  • sitemap,sitemap节点文件,主要用于把多个分散的sitemap文件集合起来。

在这里我们删除掉其他的方式,只保留directory方式,并对其进行修改,结果如下:

path="/home/fwolf/website"
url="http://www.fwolf.com/"
default_file="index.html"
/>
path="/home/fwolf/website/wordpress"
url="http://www.fwolf.com/blog"
default_file="index.php"
/>
path="/home/fwolf/website/bnt"
url="http://www.fwolf.com/bnt"
default_file="index.php"
/>
path="/home/fwolf/website/dokuwiki"
url="http://www.fwolf.com/dokuwiki"
default_file="index.php"
/>

注意一般简单的网站只要有一个directory就可以了,但也可以有多个directory段,仅当你的网站是用子目录来划分栏目,也就是对应到本机不一定放在一个目录下调试的情况下才建议使用。可以用default_file来定义首页文件。

接下来修改FILTERS段,索引文件过滤部分。过滤规则是自上而下匹配的,匹配动作action有两种drop和pass,drop明确不索引文件,pass则是索引文件(但也有可能被后面的规则排除),匹配规则type可以是wildcard或者regexp,wildcard是使用通配符*和?来匹配文件,regexp自然就是正则表达式了。注意默认的匹配动作是drop不索引文件,所以要想简单的索引所有文件,这一段留空就可以了。

这里我只简单的屏蔽掉信息产业部备案文件保存的那个目录,注意pattern是要和完整的网址进行匹配,略微不同于apache conf文件中的rewrite规则写法。

第三步,运行Google Sitemap Generator

很简单,./sitemap_gen.py –config=config.xml 就可以了,生成的sitemap文件会保存在刚才定义的store_into目录中,要想解压缩查看的话,用gunzip -d sitemap.xml.gz解开就可以了。一定要仔细查看这个sitemap文件,并根据它的内容,再去修改config.xml,反复直到满意为止。

最后,登录Google Webmaster Tools提交你的sitemap文件即可。

Google Sitemap Generator生成的sitemap文件中还是存在很多不必要的文件的,比如dokuwiki和wordpress的源文件、说明文档有上千个,手工和用FILTERS来去除我觉得都不是很方便, 所以再介绍一种更简单的添加sitemap的方式,就是纯文本文件,例如:

上述内容保存为sitemap.txt,然后上传到网站根目录,就可以到Google Webmaster Tools里面提交了,使用地址http://www.fwolf.com/sitemap.txt,注意每行一个网址,不能有其他任何内容,最好放在网站的根目录下。相对于使用 Google Sitemap Generator生成sitemap.xml来说,我觉得这种纯文本文件的方式更简单、实用,包含的内容也更容易控制,应该更适合小型网站使用。

Source:http://www.fwolf.com/blog/post/241

17/10/2006

用php的pathinfo函数处理中文文件名的小bug

php的一些小函数,尤其是文件系统的小函数,总是有一些不能正常处理中文的情况发生,在使用的时候要注意了,要么尽量避免使用中文文件名,要么自己写一些放心的小函数替代他们。今天又发现了一个,pathinfo在处理带有英文连字符"-"的中文文件名时,得到的结果是错误的,比如如下代码:
php -r "print_r(pathinfo('test-str.txt'));"
Array
(
[dirname] => .
[basename] => test-str.txt
[extension] => txt
)

php -r "print_r(pathinfo('中文-测试.txt'));"
Array
(
[dirname] => .
[basename] => -测试.txt
[extension] => txt
)

可以看到,当连字符"-"出现在英文文件名当中时是没有问题的,但如果文件名是非英文字符,pathinfo函数返回的结果就有可能出现错误。pathinfo的在线手册上还列出了另外一个错误,看代码吧:

php -r "print_r(pathinfo('./fwolf.com/'));"
Array
(
[dirname] => .
[basename] => fwolf.com
[extension] => com
)

不分青红皂白只用最后一个点来判断扩展名extension,同样的错误还适用于xxx.tar.gz等包含有多个.的文件名,不过倒也可以接受。

所以只能用自己的方式来取了:

$filename = '/home/fwolf/中文-测试.tar.gz';
$dirname = substr($filename, 0, strrpos($filename, '/'));
$basename = substr($filename, strrpos($filename, '/') + 1);
$extension = substr(strrchr($filename, '.'), 1);
$filename = substr($basename, 0, strrpos($basename, '.'));

运行环境:Ubuntu 6.06, php cli version 5.1.2

Source:http://www.fwolf.com/blog/post/240

14/10/2006

Linux下的Bt客户端

Linux也要用,电影也是要看的,没有bt怎么行?

最早是使用Azureus,这个东西是Java开发的,应该说功能非常的全面,好像老外用得挺多,一向在 sf.net的Most Downloaded中排在前面。但是通过我自己的使用,首先感觉是慢、吃内存,这是Java程序的通病;其次就是操作上还是有不方便的地方,虽然完美支持多种编码的种子文件,但遇到转码失败产生的带?的文件名时会出错,加上下载文件的选择也不方便,我曾经在一台机器上安装,只能对大文件进行选择,而重装系统之后,不知什么原因,只能对小文件选择是否下载了(并非在设置优先级处设置,而是添加种子时候的选择);最后就是那个恼人的提示框了,怎么也关不掉,由于挡住了桌面上的一些内容,唯一的办法就是关闭Azureus再重新打开,其他的非法操作也一样。因此,忍耐了很久之后,开始寻找其他的替代品。

看到很多人都选择使用wine+bitcomet或者wine+utorrent,个人不喜欢这种非纯血统的方式,能不用就不用,所以未尝试。

曾经尝试过MLDonkey,这个独特的家伙,支持好几种p2p协议,后台运行,前台通过网页下达指令的怪异方式,不过,因为其对非拉丁编码的糟糕支持而放弃。不知道是不是由于这款软件太强大太杂食了,它的网站好像从国内无法访问了。

现在,有位争气的同胞开发了个BitStorm Lite,在sf.net上的名字叫Bbom,作者还有一个 blog,但更新的并不是很勤,更及时更详细的信息是在中国Linux公社 论坛BitStorm项目专栏。听说不错,但没有试用过,因为同时看到有人介绍 KTorrent。不过需要尝试的朋友注意,BitStorm Lite目前只支持Linux Kernel 2.6+、GTK2.6+的平台,并要先安装以下开发包:ibcurl3-dev、libgtk2.0-dev、libboost-dev, 参考

最后落脚到KTorrent上,由于我已经在Gnome下使用了kde光盘刻录程序K3b,所以再多一个也不介意,安装的时候证明确实也不用再安装其他的包了。KTorrent不知道是什么时候冒出来的(好像是2005年9月发布的第一个0.9版本),功能上是简单了一些,但是软件速度不错,相比于笨重的Azureus来说,我更愿意使用前者。在功能上KTorrent还不完善,比如我就没有找到磁盘缓存功能,但相信随着开发者的改进会加上的,下载速度也不错,对中文支持目前不错(日文的av还没有试过),见图:

Bt Client - KTorrent

峰值速度达到了600k以上,不过后来又降下来了。不管怎样,我还是基本满意的,就用它了,遇到什么情况再来这里补充。

Source:http://www.fwolf.com/blog/post/239

07/10/2006

谁说Linux玩不了游戏?(二)超级经典的战棋游戏wesnoth及外2+2篇

很显然现在没有几个适合我玩的游戏了,纵观那些热门的游戏,不是网络游戏,就是FPS第一人称射击游戏,就连RTS即时战略游戏(类红警,我一直认为更贴切的叫法是即时战术游戏)的市场都在萎缩。这或许是符合当今时代和现在年轻人的需要吧,但不要忘记那些陪伴过我们的一些老游戏,比如大宇资讯的 天使帝国,它的1、2、3代可都是拥有大量忠实玩家的,虽然6格战棋的游戏模式有些古老了,但华丽的2d画面、精心的升级转职设计、平衡的兵种、有趣的剧情都表明这是一款曾经代表台湾游戏产业水平的游戏。

今天我要说的就是在linux游戏排名网站The Linux Game Tome上rating最高的 Battle for Wesnoth

Battle for Wesnoth - 封面

Wesnoth是一款6格回合制战棋游戏,官方网站为http://www.wesnoth.org/,完全开放源代码,甚至连设置于存档、地图文件都是文本的,可以任意编辑(不知道这可不可以用来在联机对战中作弊,但据说开发人员正在制定相应的对策),你可以看一看下面这些文本,它是什么?答案将在后文中公布。

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
ggvgvgvgvgvgvgvgvgvgvgvgvgvvvgvgvgvgvgvgvvvvvgvgvvvvvvvvvvvg
gggggCgggggCgggggCgggggCgggggCgggggCgggggCgggggCgggggCgggggg
ggggC2CgggC3CgggC4CgggC5CgggC6CgggC7CgggC8CgggC9CgggC0Cggggg
ggggCCCgggCCCgggCCCgggCCCgggCCCgggCCCgggCCCgggCCCgggCCCggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggvvvgggggggggvvvgggggggggggggggggggg
ggggggggggggggggggggggggvvvvvgggggggvvvvvggggggggggggggggggg
ggggggggggggggggggggggggvvvvvgggggggvvvvvggggggggggggggggggg
ggggggggggggggggggggggggvvvvvgggggggvvvvvggggggggggggggggggg
ggggggggggggggggggggggggggvgggggggggggvggggggggggggggggggggg
WWWWWWWWWWWWWWWWWWWWWWWWgsvvvvvvvvvvvvvsgWWWWWWWWWWWWWWWWWWW
ggggggggggggggggggggggggsssgggggggggggsssggggggggggggggggggg
ggggggggggggggggggggggggsssgggggggggggsssggggggggggggggggggg
ggggggggggggggggggggggggsssgggggggggggsssggggggggggggggggggg
ssssssssssssssssgsgsgsgssssgggggggggggssssgsgsgsgsgsgsgsgsgs
sssssssssssssssssssssssssssgggggggggggssssssssssssssssssssss
sssssssssssssssssssssssssssgggggggggggssssssssssssssssssssss
HHHHHHHHHHHHHHHHHHHHHHHHHHHHnnnnnnnnnHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHnnnnnnnHHHHHHHHHHHHHHHHHHHHHHHH
HHHHHHHHHHHHHHHHHHHHHHHHHHHHHnnnnnnnHHHHHHHHHHHHHHHHHHHHHHHH
ssssssssssssssssssssssssssgggggggggggggsssssssssssssssssssss
ssssssssssssssssssssssssssgvgvgvgvgvgvgsssssssssssssssssssss
sgsgsgsgsgsgsgsgsgsgsgsgsgvgvgvgvgvgvgvgsgsgsgsgsgsgsgsgsgsg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggvgggggggggggggvgggggggggggggggggggg
gggggggggggggggggggggggvvvvvgggggggggvvvvvgggggggggggggggggg
gggggggggggggggggggggggvvvvvgggggggggvvvvvgggggggggggggggggg
gggggggggggggggggggggggvvvvvgggggggggvvvvvgggggggggggggggggg
ggggggggggggggggggggggggvvvggggCCCggggvvvggggggggggggggggggg
gggggggggggggggggggggggggggggggC1Cgggggggggggggggggggggggggg
ggggggggggggggggggggggggggggggggCggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg
gvvvvvvvvvgvgvgvgvgvvvvvvvgvgvgvgvvvvvvvgvgvgvvvvvgvgvgvgvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv

作为一部背景设在wesnoth大陆的中世纪风格战棋游戏,wesnoth中既有人类、精灵、不死族、黑暗、矮人等种族,也有剑士、骑兵、巫师、术士、树妖、水怪等兵种,每个种族有自己的特有兵种,每个兵种也有不同的升级路线,遗憾的是暂时还不可以转职,升级的级别也少了些,基本上从1级升级到4级就到头了, 这里列出了几乎所有种族的所有兵种的升级树。

wesnoth的金融系统比叫简单,模式上类似经典游戏"魔法门之英雄无敌",在"魔法门之英雄无敌"中,资源被分为了金钱、矿石、水晶等各个种类,而wesnoth则直接简化为村庄,资源也只有金钱一种,占领村庄,插上本方的小红旗,就能够得到金钱(在这里休息还能够得到8点疗伤),而金钱不仅是购买部队的唯一用品,部队还需要军费(upkeep)来维持。这就是wesnoth的简单金融系统了。

相比于金融系统,wesnoth的地形、能力、攻击类型、技能上就要复杂和成熟多了。地形分为山地、高山、草地、雪地、浅水、深水、沙地、城堡等许多中,每一种地形对移动和防御都有影响。单位的能力有潜伏、治疗、自疗、遭遇(可以不受临近敌方单位的影响自由移动)、领导力等,不同的兵种的能力互不相同不可选择。除了大部分兵种都有近程和远程攻击能力之外,攻击类型分为刀、冷、火、祝福、冲击、尖刺等多种,而每个单位在雇佣的时候还会随机分配诸多能力比如智慧、速度、抵抗、强壮、忠诚、不死、灵巧中的两种,这些结合在一起,组成了丰富的单位系统,基本上在小型的战斗中完全一样的单位还是不多的,使得游戏的趣味性大增。

伴随这丰富的兵种设计,wesnoth还有一项足以和魔兽争霸媲美的平衡机制,不同的种族拥有的兵种总体上来说和其他种族是相对平衡的,不会出现像"魔法门之英雄无敌"里恐怖的鬼魂那样无敌的单位(虽然单个ghost攻击防御值很低,但它一对一可以吸收转化被杀死的敌人为ghost,从打农民开始,积攒到几k一个小队以后就可以挑战黑龙了),当然平衡也不是绝对孤立的,游戏有白天和黑夜的区别,人类种族在白天拥有优势,不死和黑暗族则是夜晚的魔鬼。同时游戏也给了玩家很大的发挥空间,即使是在多人游戏中,一个熟练的玩家操作在白天不占优势的不死族,配合合适的战略,也能够给予圣骑士以致命的打击。总而言之,游戏设计是非常平衡的,战斗的胜利要靠玩家的技巧了。

从画面上来讲,wesnoth也许要落后了些,不过一方面它已经是我见过的linux游戏中相对设计比叫精美的了,另一方面对于一款回合制战略游戏,这并不是十分重要对吧?音乐和音效也只能用勉强来形容,不过这毕竟是别人免费提供的辛勤劳动成果,也就不要计较了吧。而游戏的帮助系统(F1)不能不说是很完备的,玩过"文明"的人都对文明的百科全书印象深刻,wesnoth的帮助也像百科全书那样,覆盖到了游戏的方方面面,使得这款缺乏商业支持的游戏上手要容易了很多。

The Battle for Wesnoth -  完善的帮助系统

游戏除了能够与计算机对战,以及上网找人厮杀(没玩过,不过我想联网战棋游戏等待别人回合时一定很痛苦),wesnoth还有几个官方的故事(campaign)可玩,比如Eastern Invasion、Heir to the Throne、Son of the Black Eye、The Rise of Wesnoth等都是官方的campaign,由于任务都有回合数的限制,我没太大的兴趣,喜欢自虐的自行探索好了,但建议刚开始一定不要自诩战棋高手,上来就选择hardest最高难度,因为它们真的很难的哦。

对于新手来说,通过战斗来了解游戏是最有效的方式,所以我通过游戏自带的地图编辑器编辑了一个对玩家来说比叫简单的地图——通过地形限制,保证资金来源,并且把敌人进攻的通道限制在一个比叫小的范围内,使他们人数虽多,却施展不开,玩家就可以以比较少的兵力、比叫简单的方式成功防守了,还能顺便锻炼队伍,进一步熟悉和掌握游戏,需要下载的到 这里下载好了。

The Battle for Wesnoth -  我编辑的简单地图

现在,诸位猜到我上面贴的那一大堆字母是什么含义了么?对了,就是游戏的地图,很简单的用纯文本存储,其中v代表村庄viliage,g代表草地grassland,C代表城堡castle,数字1-0代表玩家1到10的初始位置等等。游戏的开放性给喜欢修改游戏的一族充分的空间,再也不用祭出什么fpe、游戏巫师、金山游侠了,直接修改存档或者配置文件就可以了,比如我的老乡许军就是这方面的狂人,呵呵。

好了,wesnoth就介绍到这里,需要玩的可以到它的官方网站http://www.wesnoth.org/下载,ubuntu源中也有,aptitude search wesnoth就可以看到了,只是版本旧一些。下面介绍几个其他的游戏。

Crimson Fields


官方网站http://crimson.seul.org/,也是一个6格回合制策略游戏,和日系经典游戏"大战略"非常的相似,但遗憾的说,画面和游戏复杂程度还是要差很多,也许是开发时间不长的缘故吧,但愿随着时间的推移会改进的。

Globulation 2


官方网站http://globulation2.org/,据说这个游戏很有新意,为啥是据说呢,因为我根本就没有玩懂,把建筑挨个造了一遍,四处采矿,刚刚侦察到敌方的位置,还没等派兵过去呢,游戏就显示我已经"胜利"了。

这是一款即时战略游戏,图形设计有些稀奇古怪的,建筑还能勉强和名字建立起联系(比如游泳池就是带着一大滩蓝色的"水"的东东),打着滚儿走路的小人就让我无法接受了,不管怎样,它毕竟还是一款很流畅的游戏的,安装也很方便,ubuntu源中也有,aptitude search glob2就能看到了,喜欢猎奇的朋友自行研究吧。

下来再介绍两款web游戏:HoBoWars和TORN CITY。

HoBoWars和TORN CITY

HoBoWars和TORN CITY

官方网站分别为http://www.hobowars.com/ http://www.torncity.com/,两款游戏比较类似Omerta,属于黑帮类的在线网页游戏。玩家们需要不断"犯罪"来获得金钱、声望等,然后组建帮派,占领地盘。两个游戏不同点是TORN CITY从你可以找到正当的职业(当然不干坏事是赚不了大钱的了),而HoBoWars中你只能当一个小流浪汉。

国外这类黑帮游戏很多的,比如GangStars, Mafiosi, GangSter Nation, Gangster Paradise, Bloody Nation, InTheMafia, MafiaLife, 等等,国内。。。不可能出现了。同样遗憾的是,这两款游戏网速都一般,还都只有英文版,英语不太好的朋友要自备词典了。

Source: http://www.fwolf.com/blog/post/238

03/10/2006

Fwd: Death Trance/棺材的传说

先把丑话说在前头,这部电影实在是没有什么情节,包括什么枪棺材,什么代表我女儿的布娃娃统统去掉我看也丝毫没有影响;但从另外一方面来讲,影片的视觉效果实在不错,而且又没有太多的血腥,华丽而且在大众所能接受的范围之内,还是值得欣赏的。说句大话,自从港片之后,很久没有看到这么好看的武打片了,什么卧虎藏龙、十面埋伏简直就是丢中国功夫片的脸。同时和北野武纯暴力血腥美风情的电影相比,不仅画面健康了许多,动作设计也很充实,"武术指导"作得不错。

下面说说对电影的零星感受吧,实在不知道能从哪里说起,因为情节实在是没什么好说的。

化妆怪异,人物变态,情节虚无,风景很美,打斗很精彩,要是把剑换成北野武《盲侠》中的那把剑就好了。

古今结合,手枪摩托车全有,还有微冲,不过是和中国的那种武器结合为一体了,那种武器我实在不知道叫什么,就是丁字型的断棍,反正威力挺大,李连杰在《给爸爸的信》中用了好一阵。

中外结合,不仅有和尚,还有僵尸。不过和尚从来不念经,僵尸更像是《指环王》中的兽兵。

武士当棍子用从来不用的剑,拔出来居然是把枪。

再一次见到了最终幻想里面的大阔剑,只可惜拿剑的人太不济了,用剑的方式还没有使菜刀好看。

武士好仁慈啊,打人几乎不用刀,要不能打得这么累么,被打的人休息一会儿就又扑过来了,最后武士实在忍不住了,下手也够黑的,用枪也不比小马哥差!

那个小女孩完全没用,被封印的女神应该直接从棺材里面跳出来多方便呀。

以上纯属瞎说,诸位看官自己去感受好了,呵呵。

– EOF –

顺便说一下,恐怖系统/ILS这部所谓的法国恐怖电影我劝大家就不要看了,除了一开头的"这是一个真实的故事"和片尾暴露的真相,还能看出这是一部反映青少年犯罪的文艺片之外,故事情节实在是毫无可看之处,连棺材这不电影都不如,真是浪费时间。






Source:http://www.fwolf.com/blog/post/233

R.V./房车之旅/休旅任务/我愛旅遊爸

房车大概是美国人的一种生活方式,片中漂亮的房车与和谐的房车营地看起来不错,但并非本片的主旋律,故事也没有海报上(车在山尖上)的那么悬,不过,罗宾·威廉斯还是为我们讲述了一个非常动人的故事。诚然,并非所有的人都能够完全理解,尤其是未婚的朋友们。

老外的家庭和中国的家庭在本质上还是没有大区别的,虽然人家没有计划生育,虽然人家的教育制度允许孩子在童年时代与父母有充分的时间交流,但随着时间的推移,孩子们一样会长大,观念一样会变,代沟一样会有。不过,这个全世界家长都很棘手的问题最终被作父亲的罗宾·威廉斯完美的解决了。这部电影还从另一个侧面反应了中外对青少年教育方式的不同,同样反映家庭问题的电影,《R.V.》和 《考试一家亲》对照着看,必是十分有趣的。

再来说说罗宾·威廉斯扮演的这位父亲,坚持晚婚晚育,孩子刚要上大学的时候自己已经快50了,此时作为一个仍然在为别人打工的男人,面临老板、妻子、儿女这新"三座大山",难免累弯了腰。在休假的时候还要为公司赶文件,白天开一天的车,玩上还要到厕所偷偷加班,还要从拼命从水里把大拖车捞出来,还要骑着自行车从山上扑下来追赶汽车,这位父亲不是超人,奔50的人了,作父亲的容易么?

好在结局还是让人满意的,我们又看到了罗宾·威廉斯一家开心的笑容——虽然又碾平了两辆车,但那和一家的团结和一份称心的工作相比,已经不算什么了。

Source: http://www.fwolf.com/blog/post/236

Eight Below/零下八度/南极物语/南极大冒险/极地长征

小帅哥Paul Walker近来比较红啊,不仅能够在into the blue/碧海追踪中与美女Jessica Alba激情合作,今年又和可爱的雪橇狗亲密上了,不过以我的观点来看,这部电影的主角不是Paul Walker,而是那可爱的八只狗狗。

《人与自然》(就是以前的动物世界)中经常喜欢描述动物的生活、生存与抗争的故事,但都不如Eight Below拍得好:),片中的八只雪橇狗不仅是人类的好帮手,在不幸被隔离在冰封大陆之后,又成为了为生存并肩作战的一家人,在几乎只有企鹅才能够正常生存的南极,安然度过了大半年的时光,从人类春季的紧急撤退捱到了秋季的提前入场(南极的季节和北半球是相反的),并且至少我们在影片中没有看到哪只狗狗饿瘦了,大概是托那只死鲸的福吧。当然大自然对狗狗们没有给予特别的照顾,老杰克自己选择了安乐死(老死),杜伟看到美丽的极光而失足摔死,余下狗狗的首领玛雅后腿受伤,终于狗狗们也在大自然的考验下得到了成长,年轻的Max也从一个不懂事的后生小伙成长为了新的首领。

相比于狗狗,我们人类在大自然面前显得太微弱了,如果没有破冰船,没有直升机,没有意大利的雪地车,人们还能重返那个地方么?狗狗们就在雪地里絮个小窝睡觉,人类的营地白天却有暖气供应。还有我片中情节有一个疑问就是,狗狗是很重要也很昂贵的财产,怎么就没有人冒险去把他们救回来呢?真的是因为力所不逮么?要知道这些纯种的雪橇狗是很贵很贵的,而训练好了的每只应该都可以换回一辆宝马吧?

一句话,狗狗们不愧是狼的后代与人类的挚友,如果我的小Ben还在就好了啊~~

Source:http://www.fwolf.com/blog/post/235

02/10/2006

不要把照片遗忘在数码相机中

9月中旬去桂林玩了一圈,景色还是非常不错的,只是漓江的水被过多的游船搞得有些污染了。我们一行几人实在挡不住风景的诱惑,虽然摄影技术差了点,6台数码相机还是拍下了近3千张照片。谁的相机卡里也存不下这么多图片,加上个人的风景留恋大多是互相拍摄的,于是我们几人便协商好把照片都存到一个数码伴侣中,回来之后由一个人负责专门整理,再分发给大家。

虽然照片不是我整理的,但一项珍视数据的我还是把所有人的照片都拷贝了下来,借着yupoo国庆中秋双节期间不限流量的机会 ,一股脑儿都塞到网络相册里面去。一边上传一边看,却发现一个同事的相机中有很多不是本次旅行的照片,而是断断续续从6月份一直到现在的各类照片。

我没有窥探别人家庭隐私的习惯,但还是把他那些于本次旅行无关的照片存了起来,也许哪天他自己找不到了的时候会有用,同时,我还想对他说,其实也是说给其他有这种习惯的朋友,不要把照片丢在数码相机中不管,照完了就马上拿出来处理掉。

或许对于电脑不太熟悉的人来说,相片存放在数码相机中,可以随时查看,甚是不错,但你们知道不知道,其实在电脑上观看的效果会更好(如果你的数码相机屏幕足够大,当我没说),还有就是当你把数码相机借给别人使用的时候,不会泄露自己家的小秘密,第三,相片存储在计算机上,或者存放在网络相册当中,不仅更安全,也更方便共享,还可以进行编辑处理,干嘛还要抱着数码相机不放呢,毕竟它们的任务只是"照"相而不是"看"相。

想看桂林的美景?都在这里呢。

Source:http://www.fwolf.com/blog/post/234