« February 2010 | Main | April 2010 »

March 24, 2010

五毛的末日

Google走了,对于我来说,这是意料之中的事情。

我在2个月前的一篇文章里面清楚的阐明了观点,说明了这个星球最大的信息传播者和最大的信息阻碍者之间的矛盾是如何的不可调和。所以Google走是必然的,也是好的。

信息审查本来是一个藏着掖着的事,这次被直挺挺的扔到了公众面前。就算新华社的通稿也不得不说:Google不愿在中国运营"受到审查的互联网搜索引擎"。而,这篇官方通稿,只敢提要遵守法律,不敢提具体条款。他们当然不敢,因为根本没有条款。

我相信,有条款,就算荒唐,也可以执行,没有条款就不可能执行。所以这篇官方通稿只不过是慌乱之中的掩耳盗铃。

我们看到了四处一面倒的舆论,这没什么大不了的,宣传机器全开,加上大量的威胁和金钱利诱,确实能看上去一片欣欣向荣,好像那四万亿扔下去的公路。可惜过 一段时间之后,潮水退去,下面是金子还是沙子,有目共睹。

某党被亿万人念诵其名,是大神,这没错。但Google被更多的人念诵其名,是超越大神的神。这故事,刚刚有了个开头。

不客气的说,整个互联网行业最近几年,是被Google照亮着道路。没有Google的时代,很快会看出来败向。而墙外的野草会得到更多的养料。

温室内的花朵会逐渐萎缩。那时候,就是五毛的末日,他们只剩下和自己玩了。

March 15, 2010

"原理小解"读后感

强烈推荐阅读youxu这篇原理分析的文章,写得相当好懂,读的过程中解答了我两个疑问,读完想明白了,写这里做笔记了。

一 墙是不是经过简单升级就可以对付西厢

西厢其实并没有对墙做任何事,只是巧妙的利用了TCP协议的规则。正如墙利用了三次握手的不校验这个特点(这不是漏洞,而是特点)强行插入reset包一样,西厢也利用了这个特点,让客户端和服务器发送出了墙希望看到的数据包。这里的强大之处在于,一切都是在规则之内的。所以说,如果我们从更高的角度看来,墙和西厢是一种东西,TCP协议如果进行了校验,那就不会有西厢,同样也不会有墙。如果没有墙,也不会有西厢这种用法。

二 墙能用什么办法来对付西厢

TCP协议的三次握手而不校验,留下了可以被强行插入包这个弱点,产生了墙。这个地方这样处理的原因主要是为了性能。TCP是一种高性能协议,所以必须以信任为基础,不能做太多的干涉,否则性能就会大大下降。所以我们目前采用的TCP协议都不对包做什么校验。如前面所说,西厢同样利用了这个特点来获得所需要的数据包。墙如果想知道那些连接是真的断开,哪些是被西厢模拟断开,就必须维护连接状态,进行深度包检测。这样一来效率就会大大下降。众所周知,如果一个系统中存在一个点,可以令系统性能大大下降,会出现什么结果

三 其他系统是否有移植机会

从现在的情况看来,代码并不复杂。整个系统的难度其实在于对TCP协议的深入了解,对墙工作原理的深入了解。这些部分完成之后,原理并不复杂。

可以把目前的alpha版本看作一份用代码写成的论文,其中是详细的论证过程。从代码的wiki看来,原作者据说不继续开发了,不过没关系,论文写完了,其实也就不需要他们那么nb的人来写产品了。您总不指望着科学家来做产品吧?

至于最终的产品,就期待别人了。熟悉网络开发的人,估计很快就可以写出来各种版本了。期待。

不知道我说的对不对,欢迎大家讨论。

March 6, 2010

修正Quicksilver的Trigger"无法保存"问题

Quicksilver 是 OS X上的神器。如果没有这个工具,OS X对我的吸引力至少降低1/3。强烈推荐给所有新用户使用,并且去youtube上看看其他用户使用这个工具
的视频,绝对大开眼界。

我推荐给笑来这个软件的时候,他说自定义的Trigger无法保存,一退出就没。我就试了一下,发现果然如此。这实在让人受不了。于是从svn拿了代码debug(这么强大的软件竟然是开源的)

很容易就在QSTriggerCenter.m找到了writeTriggers方法,其中performSelector的时候竟然是afterDelay:10.0,也就是说延迟10秒运行。这样创建了一堆触发器,如果没等够10秒退出了Quicksilver就不会保存了。

这地方的处理很奇怪,这地方保存的数据量和开销都很小,没必要延时。我就给改成了0,编译了一个版本出来。不一定适合所有人,所以也没向Quicksilver提交patch。

有兴趣自己修改的,可修改:
Quicksilver/Code-QuickStepCore/QSTriggerCenter.m

第144行

- (void)writeTriggers {
[self performSelector:@selector(writeTriggersNow) withObject:nil afterDelay:10.0 extend:YES];
}

把10.0修改成0.0就是立刻保存了,用XCode编译,然后把之前使用的Quicksilver中的Plugins目录( Quicksilver.app/Contents/PlugIns/ )复制过来,就可以正常使用了。

不想自己动手的可以下载我这个做好补丁,放入了基本的Plugi的版本 for 10.6 i368 http://dl.dropbox.com/u/3181901/Quicksilver.zip (请自行翻墙)

about me:
me.jpg
CC License. Some rights reserved.
署名·非商业用途·保持一致
本站之所有未作特别说明的内容均使用 创作共用协议.
POWERED_BY_MT_3.2