2010年10月19日星期二

假如穿越

如果你穿越回古代,能做什么?

穿越文说:

懂点历史课本,就能算无遗策;
懂点唐诗宋词,就能名满天下;
懂点理工知识,就能玩高科技;
懂点小学算术,就能善理内政;
懂点人情世故,就能钩心斗角;
懂点农业知识,就能提高生产力;
懂点马列主义,就能令帝王刮目相待;
懂点传销广告,就能打造庞大商业帝国;
懂点广播体操,就能等闲二三十人近不得身。

其实,小说随便说说可以,要是真穿越了,一个现代人什么都不是,混吃等死大概是唯一的出路。

点子不值钱,执行很重要,什么样的社会环境,能有什么样的执行成果。拎两首诗词忽悠人,谈点民主政治,看上去最容易操作,似乎可行 - 可李白、白居易、卢梭、孟德斯鸠,那又如何?

2010年10月18日星期一

2010年10月16日星期六

小月月-木子月月鸟-中国政治改革

这个标题真有跳跃性。

我在Google reader上看到引自twitter的这句话:

RT @bojef RT @Hecaitou: 小朋友困惑地说:为什么在Google上搜索“小月月”会被重置?我回答他说:因为木子月月鸟。。。你在中国活得越长,能记忆和理解的垃圾信息就越多,他们甚至能超出你正常的知识储备。

From: http://twitter.com/rtmeme/statuses/27001106174

我纳了半天闷,然后才明白原来“木子月月鸟”是一个ID,于是搜索了一下他/她。信息鱼龙混杂,这个人也不算什么真正的名人,和很多乱七八糟的ID混在一起。好在我知道这家伙一定是个反X反XX的反动分子,所以还是毫不费力把他/她揪了出来。原来是一个写日记,爆6.4高层料的家伙。这类人写的文章我看的太多,看了开头就知道结尾,真伪难辨,姑且不论,倒是看到一篇文章有点想法:

http://victorliu17.spaces.live.com/blog/cns!3CA27CC2CEE1B99!2670.entry

6.4的事情我不想也不敢乱说(否则即得罪我党,又得罪广大民主人士,弄不好就成了过街老鼠,人人喊打,国内呆不了,国外也混不下去,难道去月亮上发呆不成)。我一直觉得惋惜的是:中国当年没有防暴警察,所以看到集会人员干瞪眼,放着闹太乱,耐心劝说别人懒得理你,结果就只能用机关枪坦克清理广场。这点老外经验就丰富的多,不愧是百年的积累,示威群众不好好游行,非要闹事的话,直接用催泪弹和高压水龙轰走,身穿防弹服,手持的大盾牌,无往不利。要是中国早点装备上,训练好人员,当年的事情也不至于弄成最后那样。

初,国党就吃了没有防暴警察的亏。每次我党发动学生上街,国党只好用机关枪伺候(史书上说,国党埋伏在某处,等爱国学生一到,就乱枪打死。想想也是可笑,对付一帮手无寸铁的学生,哪里用得上什么埋伏?其实就是游说不成,城管失了耐心,直接开火罢了,和6.4又有何不同,结果一样的“震惊中外”嘛)。我党上台以后,误以为将来群众游行,必然是支持我党的好事,所以到处建广场(这不是方便大家游行嘛),也没学西方弄些防暴警察(听起来有点和人民对抗的感觉,毕竟反动分子应该只是一小撮人才对,不好意思建啊),现在我党干部的斗争经验丰富了,更关键是观念转变了(基层干部明说:你是为党说话,还是为老百姓说话?这才是真心话啊!就是太冒险了点),防暴警察队伍也建立起来了,以后大家不必担心6.4这样的情况再发生,若再有这种集会,无非是蹲局子而已。当然,要是被劣质催泪弹砸死,或是被其他同学踩死,那属意外,命不好。

其实游行这玩意,对统治阶级永远都是挑战,我党广大干部一开始的想法未免单纯了点,毕竟是靠这个上台的,所以还有一些幻想。估计看了齐奥塞思库最后一次搞集会的下场以后,我党广大干部应该已有了深刻的反省。(真正的我党掌舵人,早就知道群众的游行集会是毒药,所以一早法律里面就卡死了,可惜宣传忽悠过了头,把广大干部也忽悠进去了)

唉,中国这摊事,难搞。这个世界上,没人真的知道这么大个系统该怎么调整。有能力搞的人哪敢乱搞,以为自己会搞的那些人,又哪里有能力搞?若是到了某一天,以为自己会搞的那些人上了台,想必也不敢乱搞了。说实话,我还真怕那些自以为自己能搞定的人,上了台,想法还没变。

时间才是王道。

2010年10月11日星期一

RUDP

前几天用GRPS、3G上游戏,感觉很是不爽,因为网络丢包率太高,而且很容易断线,这导致游戏会频繁的卡住或要重新登录。于是我萌发了做一个可靠的UDP传输协议的念头。(这个念头很早就有,只不过这的确不是一个优先级高的工作,而且,似乎只有回合制这类网游才用的上它,所以迟迟没有去开发)

很多年以前,我就做过这玩意,但是现在的需求有些不一样,还是要重来。确切的说,这类协议现成的代码很多,我现在无非是重复了一遍造轮子的过程。不过,针对我的需求而言,这个轮子还是有必要重新造造的。

我对RUDP的需求如下:

  1. 网络断开并且恢复后,不能断开RUDP连接,即运行中可以更换IP;
  2. 在高丢包率的网络环境下可以正常的工作;
  3. 轻量级的代码,并且易于嵌入VM。
最后一点,是我不采用现成代码的缘故。现在代码要么过于沉重(大而全的功能总是如此),要么接口不太适合VM。

总的来说,开发这个并不难,但是也不容易。如果只想完成一个可以简单通讯的代码非常容易,只需要一天就够了,但要进行充分的测试,并且适应各种网络情况的话,这个工作就要复杂得多。网络上通讯,几乎所有的情况都需要考虑到,任何情况都有可能发生,这至少让代码复杂了三倍以上。事实上,我编码的时间的确很短,但是调试的时间十倍于编码的时间,远比其他模块的测试比重来得大。

在考虑如何嵌入VM的设计方案时,我足足考虑了两天,最终采用的思路是:做一个和BSD socket完全一样的一套接口,并实现了一个轮询用的函数。这样VM的代码几乎不需要任何复杂改动,只需要增加一个中间键,将socket操作demux到不同的接口即可,除此之外,在主循环进行轮询即可让RUDP模块工作。这里有一个缺陷,那就是因为轮询有时间间隔,可能会长达10ms,这样使得RUDP处理时,天然就会有可能多达20ms的延迟(两端各10ms)。不过这并不是大问题,因为对游戏来说这足够了。

相关实现如下:

  1. RUDP采用了两次握手而非三次握手,理论上这有一定的安全隐患(可以冒充客户端IP),不过不要紧,对游戏服务来说这并不是什么安全隐患;
  2. 有滑动窗口,和基于字节的sequence no和ack机制,这是为了保证和原有的TCP流传输方式一致,不影响上层实现;(如果是单独实现,基于报文方式显然更佳)
  3. 没有慢启动等算法的实现,也就是说传输端会全力发包而没有退让,这是谦逊的TCP经常会陷入奇慢甚至是假死的原因;(当然,谦逊的TCP能适应各种网络环境,从0.1K到1G带宽都可以自适应)
  4. 断开的FIN/ACK机制,这样可以保证发送数据后立刻断开仍然可以确保所有数据被传送到对端。

在我集成到游戏时非常顺利,没有遇到太大问题。登录成功以后我一度还以为RUDP没有工作,使用的仍然是TCP协议。不过看到LOG和断开网络时的反应,可以确认RUDP的确工作了。当然,这么顺利的原因并不是运气,而是之前做了大量的测试工作。只是,这仅仅是个人在实验室中的测试,随着测试人员增多,环境变复杂,应该会暴露一些问题。

由于正好赶上游戏第二次发号测试,所以包含RUDP协议的服务器端还不能发布,我还不能实测其效果。不过,我倒是在另外一个场合先应用上了这个工作的成果。

因为我不在国内,需要使用VPN登录进入内网访问版本服务器,速度很慢。编译版本需要取美术资源文件(>1G),几乎是一个无法完成的任务。因为TCP的谦逊品质,从samba服务器复制的速度会越来越慢,而VPN可能时不时会断开,这导致我只能在特定的时间进行下载,否则难以成功。我用脚本写了一个非常简单的文件传输工具,通过RUDP传输文件。这样,虽然只有一个连接,但是速度和Flashget、迅雷这一类用多个TCP连接下载的速度一样,我只需要做一个非常简单的续传功能(用来防止VPN长时间断开),就可以轻易的实现一个高速的文件下载服务。这个工具缺点就是,如果网络带宽很大,使用默认的参数不能充分的利用下载带宽。不过,如果带宽如此之好,用系统默认的文件工具不就行了吗?