今天在等 regression 的时候,周围的几个人闲来无事,然后就聊起了大学时代的课堂上最经典的问题。

Steve 讲的故事:某一年级环境科学课堂上,一女生提问:“火箭上天的时候会不会把臭氧层弄个洞?”

Victor 讲的故事:某一年级物理课堂上,教授正在用电流原理讲串联电阻所负担的电压跟电阻的大小成正比,一女生提问:“既然电流是从正极流向负极,那么在电流通过一个电阻之后,它怎么知道后面还有一个电阻?”

Mark 讲的故事:当时 Mark 兄正在做电动小车项目,他们的车底下有三个轮子,两个前轮,一个后轮。驱动小车的电机是放在后轮上的。结果项目展出的时候很多人不约而同地问同一个问题:“如果两个前轮上都放上发电机,那么以两个发电机驱动一个电动机,小车不就可以一直跑下去了么?” 后来 Mark 兄实在解释不明白,只好说:“你们的主意不错,以后可以借鉴一下……”

然后我也讲了一个我遇到过的最经典的问题:某微积分课上,老师正在讲积分可以看成是很多矩形面积的加和,每一个矩形的面积可以用长乘以高来计算。某同学提问:“矩形的面积为什么要用长乘以高来计算?”

后来,老婆也给我讲了个经典的:某物理课上,老师讲到如果把铁加热到一定程度,铁也会熔化成液体。某女生提问:“加热的时候要不要放在水里?”

……

P.S. 如果这些能写道 co-op report 里面就好了……

前一阵子看了黄健翔的《像男人一样去战斗》。3·14之后又看到了全球媒体对西藏的不实报道。在这之后,全球的华人都像男人一样,手拉手并肩战斗。今天,4月13日,加拿大最大的华人集会在首都渥太华国会山举办。从主办方获得的统计,今天共有10000(1万)人到场,一起反对媒体(CBC、CTV)对西藏事件的失实报道,同时支持并祝愿北京奥运顺利举行。

本来还想采访一下无耻的加拿大电视台记者。但无奈的是,今天在集会现场转了好几圈都没看到记者。最后朋友告诉我,那些记者根本就没有进现场,而是在另外一个地方采访藏独支持者。于是,我就冲到藏独的现场,打算会会这些记者。但是,最终我还是被加拿大警方给“拿下”,赶了出去。具体视频稍后放出。

今天还是有所收获,至少拍了80分钟的集会实况,回头简单编辑一下放回网上。这次一定要Youtube和土豆双发,否则被Youtube和谐掉的可能性很大。

今天的集会可以说是很成功的,至少比多伦多和温哥华的还要成功。但这次活动还是有些不足,中文太多了,英文翻译也不尽人意,总感觉是一群中国人在自high。互动性也不够,明显感觉老外不是很关心这个活动。

不管怎么说,这次集会让加拿大的中国人都团结在一起。我的邻居、朋友、同学,凡是还在渥太华的,基本上都到场了。大家手拉手,一起唱国歌。第一次感觉到,中国人团结在一起的力量真伟大!

阅读全文 »

早就想写一篇关于80后的文章了,但一直没想好写什么。最近在写剧本的时候,发现自己的写作越来越吃力,这才感觉到,原来80后最致命的,就是文化的缺失。

回头想想,的确自己的文学功底很差,可以说基本上就是没有。经典小说没读过,历史书籍没动过,唯一摸过的,除了课本以外大概也就只有教学参考书了。虽然还没到提笔忘字的地步,但不知道什么叫做华丽的词藻。而且每一次看问题的时候都很难抓到重点,唯一能想到的就是无产阶级的革命精神。

我们需要革命精神么?我不知道。但我知道这种文化的缺失真的很糟糕。

破四旧的时候,我们扔掉了对传统的传承;文革的时候,我们放弃了对长辈的尊重;改革开放之后,我们又在金钱前面丧失了对道德的矜持;在“学习外国先进文化技术”的口号下,我们几乎完全摒弃了中华的文明。

我说错了么?或许吧。

记得小学的时候,老师教育我们不能看小说,管那东西叫“精神鸦片”。如果要只有这样也就算了。语文课上,所有的“段意”和“中心思想”必须跟教学参考书一字不差,而且早自习晚自习的时候要点名让某某某站起来背诵。如果要只有这样也就那么回事了。每次写作文的时候,自己写的作文仅仅能拿90分,而照作文选抄出来的却能拿100分。这样的话……

小学的时候,上课要背手,举手姿势要端正。被老师训了还要说“谢谢老师”。每一次领导来检查之前都要大扫除。动不动就找家长,要不然就写上千字的“说明书”(说明自己犯的错误)。每次活动的时候家长也不能闲着,作了贡献还不能收钱……

从小学开始,我就学到形式主义、八股文和自卑。而且还有一点,最重要的一点,不能承担任何责任,否则的话让你吃不了兜着走(别人的责任都让一个人承担)。于是,在我自己身上表现出来就是,懒惰、自私、不负责任、好面子、自卑(崇洋媚外)、看不起长辈。

出国之后,这些从小学就习以为常的性格让我吃了很多苦头,也因此丢失了很多朋友。下定决心,改掉了很多坏习惯,但是文化的素养还是不尽人意。毕竟缺失了20年的文化,想补回来不是那么容易的。

这一阵子在网上所谓的“粪青”也越来越多,而且大多数都张口就问候别人全家,一点自己的主见都没有,而且这帮人都不署名。不是他们不署名,而是不敢署名。互联网的匿名性把长期以来畸形的文化全部都暴露出来了。套用互联网最经典的那句话:“在网上,没人知道你是条狗。”

文化的复兴,80后是无能为力了。对于我自身来讲,还是先完整的看一遍《三国演义》再说吧。

闲来无事,打算上几个 Live Space 和 Qzone 打发一下时间。打开 QQ,看到 315 个好友。Oh, my god! MSN 上也有 179 个好友。我开始问我自己一个问题,你究竟上哪搞了这么多的人?

这已经是历史问题了……

我的 MSN 前一阵运行不正常的时候,我已经清理过一次好友。现在剩下的 179 人中,有 56 个是连我自己都不知道身份的“网友”。而 QQ 中这个数字更多,达到 118 个。除去那些不认识的, MSN 中的好友很多都是出国之后的同学,分组也都注明了 CIC、UO、Carleton;QQ 中的好友很多都是从附中论坛认识的。那些不认识的,貌似是当年游荡在各动漫论坛的后遗症。

那些所谓的“网友”最让人头疼。删掉的话,没准是以前关系不错的朋友或同学,只不过改了个名字我不认识就放到“网友”里面了。不删的话,实在是浪费带宽、浪费内存、浪费资源。

实在没有办法,把“网友”组折叠起来,闭上眼睛当作没看见……

在国内可以浏览国外关于西藏的网站,但是从美国/加拿大无法查看中国关于西藏的网站。

为什么?看 CNN 就知道了。某些没头脑的人再一次华丽的被骗!

做人不能太 CNN!

(声明:本文仅用来阐述事实)


Update(2008-03-27 01:00 EST):目前中国的网站基本上都属于不可访问状态。

Update(2008-03-27 12:45 EST):I can't read any Tibet article on Chinese websites through company network, i.e. Canada banned those links!

Update(2008-03-28 01:00 EST):一部分中国网站恢复正常,另一部分无法访问。网易新闻、新浪新闻、搜狐新闻、QQ 新闻均只能打开首页而无法查看内容。新浪博客基本无法访问。cnBeta 间歇性无法访问。百度 MP3 间歇性无法访问。以上网站用美国网页代理访问正常。(也就是说,基本排除中美的问题)太平洋动漫竟然访问速度很快……无语中……什么世道!上个中国网站还要用美国代理!

Update(2008-03-28 20:00 EST):今天终于可以在公司正常浏览网易新闻和 QQ 新闻了,家里的网络也恢复了。但是只能看文字和图片,视频全部被水产。

Update(2008-03-28 22:00 EST):I like this guy, http://kadfly.blogspot.com/.

终于下定决心写点什么了。这几天奋笔疾书(“奋键疾输”才对)写完了前三章内容,看着1/5的完成度自己很有成就感。

长这么大第一次写一口气写这么多方块字啊。(中国人的悲哀 = =)

联系了几个 SMC 的工作人员,都比较有兴趣回来继续做新片。呵呵,这意思就是说,编剧老人家,你就赶快把剧本写出来吧,大家都等着呢。

拜托大家,我知道大家等着着急,急也要慢慢来啊,俗话说慢工出细活。去年的错误今年不会再犯,但是这个预告还是个没有准头的预告。

HDAV 计划搁置,IS 准备中。5月底第一稿,8月份开机。明年8月份全片完成。人员安排:本人编剧,Rick 导演。照例,蓝色蒲公英出品。预告完毕。

天神星士兵甲:这是什么?士兵乙:是黑魔王的说明书!

看完这段我已经笑得喘不过气了!


牛奶@咖啡又出新歌了。下来听了听,比较喜欢《快乐星猫》。闲来上网搜搜,原来国内又出了个动画片,叫做《快乐星猫》。而《快乐星猫》就是《快乐星猫》的片头曲(@ @)。反正无聊,从官网下了几集看看。

貌似官方的定位是 5~12 岁之间观看,12+有爱为可接受候补。估计我已经过了有爱的年龄,怎么看怎么觉得搞笑。

杂乱的音效,十分不标准的台普配音(据说某位主角是刘纯燕配的),唯独能一好遮百丑的也就只有 3D 效果了。这次的 3D 的确做得不错,剧情也控制在 5~12 可接受范围之内,但是这个音效咋就这么差呢?貌似我还听见了星际争霸神族选定农民时的声音(估计是我幻听了)。一开始的配音还以为是《鲨鱼黑帮》,大力猫的出现我给当成了《猫的报恩》(没办法,学得太像了)。还有那个“欧应万”,我怎么听都像是“All-in-one”。(难道这就是传说中的九十八和1?抑或是“Owing-won”?)

星猫为什么叫星猫,估计因为制作单位叫 Star Q 吧。创意没问题,策划没问题,就是制作的时候怎么说也要注意一些吧。比如说片头,一开始的剪辑根本对不上片头曲,后半部分还行。人物表情和动作都做得不错,但是配音总要标准普通话吧,拿个四川的台普出来,这不是误导少年儿童么。情节这样就可以了,正义战胜邪恶,天经地义,千万不要搞什么革命出来啊。话说这次周边很成功,据说毛绒玩具已经热卖了。音像制品啥的就不要搞了吧,如果想搞的话多弄点广播剧出来还差不多。

呵呵,说了这么多乱七八糟的,该总结一下了。总而言之,这次的制作综合起来还不错,但绝对不能成为“巨作”。国产动画还有很大的成长空间。想要把动画产业做成熟,慢慢努力吧。(表说我站着说话不腰疼,这几天某人正在连续熬夜写剧本中)

最后,要说回牛奶@咖啡了。个人觉得《快乐星猫》这首歌十分适合 Kiki 的路线,整张专辑里只有这首歌把 Kiki 的声线完全表达出来了。(旁边那位表丢砖~)当然,从《燃烧吧!小宇宙》开始,本人就觉得 Kiki 适合走可爱的小女生路线。千万不要学范晓萱和金莎,非要“变成熟”。

力挺牛奶@咖啡。快乐星猫,燃烧吧!小宇宙!

今天闲来无聊,上 Google 搜了一下自己的名字,竟然有 5030 条。翻了 10 页,只找到一个关于 snailium 的,而且还是别人的转载。

这么多跟我重名的,竟然一半以上都是女的,89年的。还有一个很有名的貌似是沈阳新东方的老师。

郁闷。看来我只是大海中的一粒沙(不要提醒我,我知道我说错了)。

不过有一点值得欣慰的是,前十页里面没有一条是通缉令(什么思想 = =)。

我还是改搜 snailium 吧……

P.S.倒是搜我弟弟名字的时候,在第 10 页看到他本人了。果然我已经算火星了。

100 系列(信息)
100 Continue(客户端可以继续发送未发完的请求)
101 Switch Protocals(服务端/客户端所使用的协议不一致)
200 系列(成功)
200 OK(成功)
201 Created(已按请求创建新资源)
202 Accepted(请求已被接受)
203 Non-Authoritative Information(从第三方获取的信息)
204 No Content(服务端没有可返回的数据)
205 Reset Content(客户端需重置请求内容)
206 Partial Content(服务端返回部分数据)
300 系列(重定向)
300 Multiple Choices(多个资源可用)
301 Moved Permanently(资源已被移动)
302 Found(临时在其他地址找到相应资源)
303 See Other(在其他地址找到相应资源)
304 Not Modified
305 Use Proxy
306 (Unused)
307 Temporary Redirect
400 系列(错误)
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Request Entity Too Large
414 Request-URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
500 系列(服务器错误)
500 Server Internal Error
501 Not Implemented
502 Bad Gateway
503 Service Unavailable
504 Gateway Timeout
505 HTTP Version Not Supported


参考资料:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

开始还满怀信心的打算拿 Perl 写一个文件上传管理程序,可是在写完了登陆部分之后就泄气了。原因很简单,服务器不支持 CGI::Session,而我又不想花时间去研究 Perl Cookie。

[code lang="perl" title="login.cgi"]
#!/usr/bin/perl -w
# ***********************************************
# * Handle User Login *
# ***********************************************
use strict;

use DBI;
#use CGI::Session;
use CGI;
use Digest::MD5 qw(md5_hex);

# Get the CGI form data
my $cgi = new CGI;
# Fetch login username and password
my $user_name = $cgi->param('username');
my $user_pass = $cgi->param('password');
$user_name =~ s/(?:\012\015|\012|\015)//g;
$user_pass =~ s/(?:\012\015|\012|\015)//g;
$user_pass = md5_hex($user_pass);
my $user_login = 0

require "config.pm"

# Import Database configuration
our $db_host;
our $db_use;
our $db_user;
our $db_pass;
our $db_table;

# Connect to database
my $db_conn = DBI->connect("DBI:mysql:database=$db_use;host=$db_host","$db_user","$db_pass", {'RaiseError' => 1});
print "Location: /error-503\n\n" unless $db_conn;

# Check if we have such password in database
my $sql = $db_conn->prepare("SELECT username FROM `$db_table` WHERE user_password='$user_pass'");
$sql->execute() or print "Location: /error-503\n\n";

# Process query result
while(my @result = $sql->fetchrow_array()) {
if($user_name eq $result[0]) {
# Here we go. A user is found with the same username and password.
$user_login = 1
last;
}
}

# Disconnect from database
$db_conn->disconnect();

# Not pass user check? Kick it out!
print "Location: /error-401\n\n" unless $user_login;

# User check successful! Log it in!
print "Content-type: text/plain\n\nYes !";

exit(0);
[/code]

其中登陆部分采用了《突发奇想,小改动解决安全问题》其中的方法。

看来要重操 PHP 旧业了……

这几天一直在琢磨用 Perl CGI 架设网站,正好在网上看到了一篇关于 CGI 安全的文章,里面提到了数据库注入和远程执行等等安全问题。也就是说,比较安全的方法是屏蔽一系列特殊字符(比如说,管道“|”、引号“" '”、斜线“/”等等)。今天偶然间突发奇想,如果换一种思路,不需要过滤特殊字符也能做到脚本安全。

具体方法如下。(假设:用户名与密码存在 user 表中,密码用 md5 加密)

[code lang="php" title="Pseudo-code"]
$username = http_get("username"); // Get username from browser
$password = http_get("password"); // Get password from browser

$password = md5($password); // Make md5 hash for password

$mysql->connect(); // Connect to database
// Get all users that have this password

$rows = $mysql->query("SELECT username FROM `user` WHERE password='$password'");

// If no one match, must be username/password problem
while($r = $rows->next()) {
if($r->username == $username) login_success();
}
die("Username/password incorrect!");
[/code]

由于 md5 hash 不包括任何特殊字符,所以这段脚本对数据库无害。

优点总结:由于传递给数据库的字符串当中不包括任何特殊字符,因此没有任何注入危险。

缺点总结:一般来说,用户数据表都是拿用户名做索引,所以按密码查询效率相对低一些。但是考虑到用户登录的频繁程度,这个缺点就无所谓了。

152_school_days_preview.jpg

终于看完了第12集。整个片子的压抑气氛跟《Elfan Lied》相比有过之而无不及。从11集开始的气氛骤降压得人喘不过气,12集的结局更是雪上加霜。如果我的内心像世界一样,12集过后我也会拿起刀。

回头重观整部动画,世界在我心中的印象大大改变。如果说在片子开头我喜欢的是柔弱的言叶(事实上在出国前的确是这样),那么到最后,占据着内心的却是世界(就像现在这样)。

回想2004年热火朝天的《君が望む永遠》,当时我还是遥的坚定拥护者,水月结局曾让我失落过一个时间。现在看看,比起这会儿把三个 Bad Ending 捏在一起,至少那会儿还是个 Good Ending。呵呵,如果真的要个 Good Ending 的话,恐怕就是刹那或者光的天下了。

总之,在这穷乡僻壤,很久没见到这么震撼人心的片子了(虽然是动画)。就让我跟世界同在吧,我才不要人渣诚的终结……

153_school-days-ending-theme.jpg

Linux BusyBox 果真是个强大的东西。只要想做,什么都能做出来。正好最近正愁 My Book 的服务总是莫名其妙的挂掉,搞的在单位都无法访问文件。操起简单的 vi,开始制作 Bash Watchdog。(之所以没用 Perl,是考虑到 Perl 在预编译的时候比较耗费系统资源)

经过三个小时的现学现卖,雏形版的 Bash Watchdog - swatchdog 出炉。

[code lang="bash" title="/usr/sbin/swatchdog"]
#! /bin/bash
#
# Watchdog for system service
#

while [ 0 ]
do
for PROC
do
PID=`ps -aef | grep -v grep | grep -v swatchdog | grep "$PROC"`
if [ -z "$PID" ] ; then
TIME=`date "+%Y-%m-%d %H:%M:%S %Z"`
echo "[$TIME] $PROC is not found, rebooting..." >> /etc/swatchdog/reboot.log
reboot
exit 1;
fi
done
sleep 600
done

exit 0;
[/code]

原理很简单,无限循环,检查命令行传入的进程是否存在。如果不存在则重启。

使用也很简单。

[code lang="bash"]
swatchdog cvm transmission amuled
[/code]

自动侦测 cvm(mionet)、transmission 和 amuled。

意外的惊喜!感谢实习单位里的一位姐姐,每个人都拿到了一套 Tundra 的芯片。当然,这些芯片基本上都是 RMA 回来的,已经不能工作了。但至少可以作为个人收藏(毕竟是我的第一份工作)。

废话少说,上照片!

151_dsc00047.jpg

从上到下依次是:
Tsi106, Tsi340, Tsi350, Tsi574, Tsi578
Tsi107, Tsi400, QSpan, Tsi576, Tsi564
Tsi108, Tsi109, 未知芯片(应该是Tsi107), Tsi107芯片基板

OK, for some reasons, I write this article in English. I bet you Chinese can understand it.

The problem was simple. Globat's servers got down on Feb. 21, because of switch problem. Well, that was not the critical impact.

On Feb 23 afternoon, I found my database got problem, probably database crashed. I talked to their technical support. They told me they were working on it, and needed sometime. I thought it was acceptable. But then, things got much worse.

On Feb 23 evening, the database was still down. Technical support suggested me to issue a ticket. I did. Then, I still hoped it would be better.

On Feb 23 night, I got the first (and the only) response to that ticket. It was said they were taking care my issue.

On Feb 24, they told me they had fixed the problem. But again, my database was still reporting errors. Then, they changed to another word, saying they were trying to fix the problem.

On Feb 25, the problem was still hanging my websites. They were still saying to fix it.

On Feb 26, they told me, hopefully, they would fix the problem by both recovering from previous backup and fixing existing database. I got confused and totally lost my patience.

On Feb 27, I tried use phpMyAdmin to repair tables, and got all tables recovered except one of them. Finally, I got a happy ending by myself. Definitely, they were still "fixing the problem".

As of that time, all my websites have been down for almost a week. Those websites include, snailium.net, blue-dv.net and sdfzlt.cn.

I tried to search "Globat problems" in Google. It seems Globat has problem to deal with customers frequently. I have no more passion on a troublesome web server. Therefore, I temporarily moved to Lunarpages, under xiaoqiangnet.com.

150_snailium_net_down.jpg

Further, I will shut down all my websites on Globat and move them all to a new server, although they are still fixing the problem.

Here is HOWTO add nethostfs on Western Digital My Book World Edition. For Chinese version, visit here(中文版).

Prerequisite: Enable SSH on My Book.

Step 1. Download nethostfs v1.5 source code, unpack and compile.

[code lang="bash"]
wget http://www.snailium.net/mbwe/nethostfs15src.tar.gz
tar -xzvf nethostfs15src.tar.gz
cd nethostfs15src
make
cp nethostfs /usr/sbin
chmod 755 /usr/sbin/nethostfs
chown root:root /usr/sbin/nethostfs
[/code]

Step 2. Create shared folder /PSP/ through My Book Storage Manager.

Step 3. Create service script nethostfs under /etc/init.d/.

[code lang="bash" title="/etc/init.d/nethostfs"]
#!/bin/sh
#
# Starts or stops the nethostfs for remote PSP access.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="nethostfs"
DESC="Remote PSP access"

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
nice -n 10 nethostfs /shares/internal/PSP &
echo "..."
;;
stop)
echo -n "Stopping $DESC: $NAME"
killall nethostfs
echo "."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop}" >&2
exit 2
esac

exit 0
[/code]

Step 4. Make start/stop link under /etc/init.d/.

[code lang="bash"]
cd /etc/init.d/
ln -s /etc/init.d/nethostfs S91nethostfs
ln -s /etc/init.d/nethostfs K09nethostfs
[/code]

Step 5. Reboot My Book World Edition


Note 1 - nice -n 10 is used in service script to adjust process priorities, in order to avoid nethostfs consumes too much CPU resource.
Note 2 - This works perfect for iRshell, as well as PPA (which uses iRshell's WiFi code)

Western Digital My Book 所使用的 BusyBox 可塑性还是很高的。

想到正好在用 PPA 在 PSP 上通过 WiFi 看电影,干脆把 nethostfs 服务也集成到 My Book 里面好了。(English Version

前期准备:在 My Book 上加装 SSH 服务

第一步:按照下面的方法下载 nethostfs v1.5 源代码,解包,编译。

[code lang="bash"]
wget http://www.snailium.net/mbwe/nethostfs15src.tar.gz
tar -xzvf nethostfs15src.tar.gz
cd nethostfs15src
make
cp nethostfs /usr/sbin
chmod 755 /usr/sbin/nethostfs
chown root:root /usr/sbin/nethostfs
[/code]

第二步:通过 My Book 共享储存管理器建立 PSP 共享文件夹。

第三步:在 /etc/init.d/ 下建立 nethostfs 服务脚本。

[code lang="bash" title="/etc/init.d/nethostfs"]
#!/bin/sh
#
# Starts or stops the nethostfs for remote PSP access.

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME="nethostfs"
DESC="Remote PSP access"

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
nice -n 10 nethostfs /shares/internal/PSP &
echo "..."
;;
stop)
echo -n "Stopping $DESC: $NAME"
killall nethostfs
echo "."
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop}" >&2
exit 2
esac

exit 0
[/code]

第四步:在 /etc/init.d/ 下建立相关启动/关闭服务链接。

[code lang="bash"]
cd /etc/init.d/
ln -s /etc/init.d/nethostfs S91nethostfs
ln -s /etc/init.d/nethostfs K09nethostfs
[/code]

第五步:重启 My Book。


注意 1:在服务脚本中,使用了 nice -n 10 调整进程的优先级,防止 nethostfs 占用过多资源。
注意 2:此方法也适用于 iRshell。(PPA 的 WiFi 部分使用的是 iRshell 的源代码)

玩了很长时间的《无双·远吕智》(无双大蛇),对其中的 CG 和 BGM 已经厌烦了。最近无意间看到有恶搞的无双大蛇幸运星OP,干脆拿来集成一下。

说做就做。把网上下来的镜像挂上开始 dump 文件。

但是光荣也不是吃素的,打开光盘之后发现里面都是打包好的文件,分别是 LINKDATA.ANS、LINKDATA.BNS、LINKDATA.CNS 和 LINKDATA.DNS。又是无意间,发现专门为《战国无双2猛将传》准备的 CNS 解包工具。下载、解压缩、sm2m /cu 解开 CNS,获得一堆 .pss 文件(美版是10个,日版24个,多出来的都是无双系列前几部的宣传片)。这里要插一句,PSS 文件和 MPG 文件差不多,都是 MPEG2 的封装器,用 MPC 内置的 MPEG2 Splitter 可以分离观看。但是无双系列的 CG 音频都是压缩过的 ADPCM 格式,找解码器比较麻烦。但是无所谓,用下面讲到的 PSS Plex 可以转换成 WAV 音频。再回来说这10个 PSS 文件,都是片头片尾和各国结局 CG。其中比较小的几个是光荣的 Logo、ProLogic II Logo 和 w-force Logo。

确定了 PSS 之后,就要准备替换了。下面要介绍 PSS 分离/合成软件 PSS Plex。十分简单的小程序,带图形界面。拿到工具之后,当然要先分离一个 PSS 看一下参数。640x448 分辨率、MPEG2 编码、4500kbps 码流。确定好之后开始准备替换影片。

将下载好的 .flv 影片用 Procoder 压缩成 MPEG2 影片(m2v+wav)。具体怎么压缩在这里就不说了,毕竟 320x240 的 .flv 画质很不好,需要用很多滤镜才能保证画质清晰无色块。压缩完了之后,用 PSS Plex 合成 .pss 文件,注意要选上“Compress sound (ADPCM)”选项。然后将 008.pss(w-force Logo)替换掉。

在合成 LINKDATA.CNS 的时候需要注意,sm2m /cp 需要94个文件(000.pss - 093.pss),所以从 010.pss 开始,建立94个垃圾文件(用命令行更方便些)。然后再 sm2m /cp 合成 LINKDATA.CNS。

最后,拿出 CD/DVD Generator 2.0cdvd iml2iso,制作光盘镜像。《无双·远吕智》并不是用 LBA 寻址,所以文件的顺序无所谓,DUMMY.BIN 还是要加入的。记得先用 CD/DVD Generator 导出 .iml 文件,然后用 iml2iso 生成镜像。

最后的最后,当然就是刻盘啦。不过刻盘之前最好先用 PS2 模拟器模拟一下,确保 ISO 没有问题。

好啦,第一回合结束。过几天再研究一下其他的 CG。

注意:如果分离 PSS 之后发现有 .sub 文件(字幕?),那么说明这个文件暂时不能替换。因为 PSS Plex 的 bug,在合并 .sub 文件的时候会出现异常。而如果不加入 .sub 文件,运行游戏 100% 死机。


参考资料:
1. From A9VG:[心得]給有心自製D5版Z52M的板友們

广电总局发文了,要封掉网络上的色情、暴力和恶搞。于是乎,就出了个张舒凡的“很黄很暴力”。就此事,网上恶搞早已泛滥,在我看来,真正在恶搞的不是各位网友,而是CCTV。

真的有很黄很暴力的网站么?或许有吧,我实在不敢肯定。个人经历而言,从95年开始上网以来,查阅资料无数,也没蹦出过“很黄很暴力”的网页。很黄的网站倒是进去过,但是没见过暴力的。很暴力的网站从来就没找到过,倒是以前在CIC局域网中找到过暴力视频。

即便很黄很暴力的网站存在,存在就会有存在的道理。这位小恐龙的思想道德准则还很高,看到就给关了。看来她自己也知道,这种网站不是为她建立的。如果这位小恐龙很欣赏此类网站,进去看看也未尝不可。萝卜白菜各有所爱嘛。

总之,此事可鉴定为CCTV对此片面夸大、过分炒作。这也应该属于恶搞的一种吧。建议广电总局先把CCTV给封了,杀鸡儆猴,估计就没人再敢很黄很暴力了。

P.S.下一部电影的Project Code已经定为HDAV,是否属于“很黄很暴力”呢?

阅读全文 »

今天喝酒的时候朋友提到了Facebook的强大,很多朋友都可以在Facebook上找到。后来自己申请了一个帐号研究了一下,发现Facebook不过是美国版的某“白领网”罢了。本文大略分析了一下Facebook是怎样工作的。

首先,要呈请的一点是,Facebook并不是“交友网站”,而是“社交网站”。两者的区别就在于交朋友是不是带有目的性。

好了,言归正传,下面简单论述一下Facebook是怎么工作的。

首先,注册之后,Facebook给我显示几个“朋友”。此时的“朋友”都是Facebook用户并且我在他们的名单中。名单是怎么生成的请往下看。

然后,Facebook提示我加入一个Network。这个所谓的“Network”真正的作用是优化Facebook的搜索结果。

进了主页之后,Facebook向我提示几个潜在的朋友。这些潜在的朋友实际上就是朋友的朋友,然后根据reference(人与人的联系)的进行评分,分数高的证明这个人朋友多、是我朋友的机率大。事实上,Facebook给我的潜在朋友预测只有两个是对的。

然后,Facebook促使我进行朋友搜索。但是朋友搜索是有前提条件的,那就是输入Windows Live (MSN)的帐号和密码。这样一来,Facebook就可以登录Windows Live服务器取回我的联系人列表,进行精确查找。这个国内某“白领网”用的方法一模一样。有些人在这一步选择了Outlook联系人列表,这一下Facebook得到的信息就更多了。

最后,Facebook要我输入学校/公司的Email地址。这一步是为了得到更可靠的联系方式。

综上总结,Facebook只是在诱导用户填入自己的朋友圈子,在得到足够多的用户信息之后进行分类总结,最后精确找出朋友。这一切早在几年前就有中国的网站在做了。当时总是莫名其妙的收到一些交友邮件,其实就是网站利用MSN平台进行有选择的推送。这些东西在Google上搜一下有很多,我就不再多说了。

之所以中国的网站被网民骂得很惨,但Facebook却有这么多人支持,最根本的一点,因为Facebook是美国的网站。其他的话就不用多说了吧?