| Shell's profileShell's RoomPhotosBlogLists | Help |
|
|
11/11/2009 MSN强制升级 从前天开始,单位里的MSN8.5就无法登陆,老是提示我要升级。今天家里的MSN也无法使用了,被逼无奈,先用pidgin顶一阵再说。不过现在贝壳正在考虑MSN的用户搬迁工作,目标是迁移到Gtalk上,不行QQ。 有几个朋友问贝壳,升级不就好了,何必兴师动众呢?首先,MSN8.5的安装程序只有20M,而MSN9的安装程序高达132M。其中多出来的100多M东西可不是白装的,他们大概会吃掉你30-40M的内存。而且9里面有很多插件(其实8.5也有,不过就一个,总算还好屏蔽),安装上去后,工作的时候做调试麻烦异常,工作机器上装这个纯粹给自己找麻烦呢。而且微软素行不良,有劣迹在前。盗版黑屏问题大家还记得吧?升级提示上说是安全修补补丁,结果装上去屏幕就黑了。不说黑屏现在如何了,就说这种欺骗用户安装的手段,有谁还相信这次的强制升级是为了安全问题么?微软系统安全是出了名的差,一个安全公司用测试用蠕虫在win7上跑,只有20%不到能被微软自己拦截。其中固然有安全公司危言耸听,但是测试过程是全公开的,做假不来。这还是微软主推的最新操作系统,安全性据说很好。如果真是为了安全问题,先把Windows里面那堆雷死人的安全问题解决了才是王道。 反倒是QQ的强制升级政策我觉得尚算可以。 QQ协议分为2005/2006/2007/2008多个版本,通常而言可以使用当前版本和前一版本。就是说,现在用的协议是2008的话,那么2007协议还可用,而2006协议就不再支持了。通常而言,这种时候继续使用2006协议的人微乎其微,基本可以忽略不计。这个政策主要是给不愿意升级的人一个缓冲的空间。对于腾讯而言,实施这个政策其实比微软更有压力。因为微软的协议是公开的,而腾讯则是采取封闭协议,甚至打击第三方客户端的企业策略。我们姑且不论这个策略的得失,但是维持两个协议版本,就给破解协议的人留下了破解的时间和空间。因此对于腾讯而言,这个策略是和公司战略相违背的。 更深一层的问题是,强制升级问题说明了我们所依赖的服务的脆弱性。MSN在中国占据的客户群体并不算大,远远不比QQ。然而就是这样一个客户群现状,微软就敢于强制升级。今天是强制升级,明天收费呢?所以说任何事情依赖一个公司是不行的。我还是会使用MSN,但是会逐步将用户迁移到Gtalk和QQ上,并以开心网和Facebook做补充。力争做到这三个IM中任意两个能覆盖大部分朋友群体,开心和Facebook保留所有联系可能。这样可以适当制衡某些软件公司(不仅是微软,还有腾讯),也可以减小出问题时的损失。 其实要做到这点并没有任何困难。当你认识一个人的时候,只要和他保持两种以上的IM,并且在开心和Facebook(当然,这个没法强求了,毕竟中国的GFW...)上交换一下好友就好了。对抗强权,从小事做起就好。 10/21/2009 用python实现webserver(一)——Prefork 要实现webserver,首先需要一个tcp
server。作为python的设计原则,最好是使用SocketServer或者封装更好的BaseHTTPServer来复用。不过既然我们的目的
是为了学习,那么就不能用这两个内置对象。我们先实现一个最古典的每进程模式实现。而我们标题上的Prefork,则是apache服务器对这个模式的称
呼。 每进程模式,顾名思义,就是每个新连接开启一个进程进行处理。首先创建一个socket,bind到一个套接字上。当有请求时,accept。(好多英 文,不是我有意cheglish,全是api的名称)accept会返回一个通讯用的socket,这时fork出一个新的进程,处理这个socket。 主进程在每次进入accept后阻塞,子进程在每次进入recv后阻塞。这样会带来几方面的好处。首先是模型分离,即使一个子进程崩溃,也不会影响到其他 子进程。其次是身份分离,当你需要让http server以高于常规运行(常规都是以apache, www-data, nobody运行的)用户的权限进行工作时,每进程模式是唯一安全的模式。其他模式都会造成同一进程内的其他session也暂时获得这个权限的问题。但 是同样,这样有几方面的问题,主要就是性能问题。 由于每个连接都需要fork出一个新进程去处理。因此针对大量小连接的时候,fork和exit消耗了大量CPU。问题更严重的是,由于用户进程总数是有 限的(PEM或者ulimit都会限制这个数量),因此压力大到一定程度时(通常是1024或者2048),就会出现无法创建连接的情况。而对小型服务器 而言,在压力还没大道这个程度以前,服务器就会由于性能达到限制而造成段错误。以下是实际试验指令和结果: 测试指令: ab -n 10000 -c 100 http://localhost:8000/py-web-server 服务器报错: [20090924 05:51:18]: Traceback (most recent call last): [20090924 05:51:18]: File "main.py", line 19, in <module> [20090924 05:51:18]: [20090924 05:51:18]: sock.run (); [20090924 05:51:18]: File "/home/shell/py-web-server/server.py", line 30, in run [20090924 05:51:18]: [20090924 05:51:18]: while loop_func (): pass [20090924 05:51:18]: File "/home/shell/py-web-server/server.py", line 56, in do_loop [20090924 05:51:18]: [20090924 05:51:18]: if os.fork () == 0: [20090924 05:51:18]: OSError [20090924 05:51:18]: : [20090924 05:51:18]: [Errno 11] Resource temporarily unavailable 测试指令: ab -n 1000 -c 100 http://localhost:8000/py-web-server 返回结果: Document Path: /py-web-server Document Length: 1320 bytes Concurrency Level: 100 Time taken for tests: 14.189 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 1361000 bytes HTML transferred: 1320000 bytes Requests per second: 70.48 [#/sec] (mean) Time per request: 1418.851 [ms] (mean) Time per request: 14.189 [ms] (mean, across all concurrent requests) Transfer rate: 93.67 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 18 328.4 0 9000 Processing: 4 109 211.0 95 3335 Waiting: 4 100 211.1 86 3324 Total: 8 127 498.3 95 12332 为什么只有100并发?因为200并发的时候测试机上的服务器已经崩溃了。而且我们看到服务器的效率大约是70req/sec。等过两天,讲到 Thread模式的时候,大家可以对比一下Thread模式的效率。基本上说,针对普通服务器,个人觉得Prefork模式并发数量尽量控制在 100-800这个级别比较合适。更高的也许能承受,可是就可能发生不稳定(原因上面有说,就是进程数量限制)。那么Prefork模式通常用在哪里呢? 数据库!Oracle和Postgresql全是Prefork模式的(其中Oracle的Prefork模式还经过一次分发,更复杂一些)。压力通常在 100-200这个级别,连接基本不断开,连接的请求和销毁开销很小,但是处理的过程开销很大。并且,由于处理过程复杂,一个链接的处理错误不能殃及整个 系统。对于这种问题,最好采用Prefork模式进行处理。同类的问题还有一些EJB服务器,复杂中间件等等。 那么反过来,作为客户,我在面对Prefork模式的时候,如何才能高效处理呢?——对,大家都想到了,连接池模式。通过连接池存放空闲连接,避免连接的建立和释放开销,从而增加服务器性能。 另外,python实现其实性能是很有问题的,我们对比一下apache2的测试结果: 测试指令: ab -n 1000 -c 100 http://localhost:8000/py-web-server 返回结果: Document Path: / Document Length: 45 bytes Concurrency Level: 1000 Time taken for tests: 7.914 seconds Complete requests: 10000 Failed requests: 0 Write errors: 0 Total transferred: 3204355 bytes HTML transferred: 452025 bytes Requests per second: 1263.56 [#/sec] (mean) Time per request: 791.413 [ms] (mean) Time per request: 0.791 [ms] (mean, across all concurrent requests) Transfer rate: 395.40 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 70 432.8 3 3028 Processing: 0 193 733.0 88 6629 Waiting: 0 190 732.4 85 6621 Total: 46 263 950.7 93 7895 -- 与其相濡以沫,不如相忘于江湖 10/9/2009 用python实现webserver(零)——导言 本系列文章的所有代码,都发布在http://code.google.com/p/py-web-server/。项目的目的,是通过写作一个可用的http web server,学习服务器程序编写中的一些方法,以及http协议的细节。 如同我在项目介绍中说的,项目遵循以下几个设计原则。 有兴趣的,可以也通过本文的介绍,不看代码写一个类似的东西。而后对比代码,找出设计上的异同和优劣。如果您也设计了一个,请告诉我,我很高兴能够得到大家的指正。 9/14/2009 软件自由英雄谱 谨以此缅怀那些为了今日软件事业的自由做出贡献的先辈们。(注1: 多数人没牺牲,谢谢)(注2: 排名不分先后)(注3: 科普作品,大家别怕) 我在撰写这篇文章的时候,避免使用自由软件这个词,而改为更普遍意义上的软件自由。因为自由软件是RMS提出的一个专有词语,指软件的开源,复制,协作等 特质。而我试图通过软件自由这个词,表达人们在使用软件上的自由,以及使用软件来为我们获取自由。我们拥有知道软件一切内幕的自由,我们拥有修改软件的自 由,我们拥有思考的自由,我们拥有挑战老系统的自由,我们拥有拒绝通过软件收费的自由,我们拥有通过软件获得信息的自由,我们拥有不受任何人,包括政府监 控的自由。为了这种自由而付出的,不仅是自由程序的拥护者,也有商业程序的拥护者。 1.Richard Matthew Stallman 大名鼎鼎的RMS,GNU的核心人物,自由软件的布道者。要是在这个列表上没有他的名字,那我不知道还有谁能留在这张表上。具体可以看这里(http://zh.wikipedia.org/zh-cn/%E7%90%86%E6%9F%A5%E5%BE%B7%C2%B7%E6%96%AF%E6%89%98%E6%9B%BC)。简单来说这家伙最大的几个成就:创立了GNU和FSF,为自由软件的传播奠定了基础。制作了emacs,当今黑客世界两大编辑器之一(另一个是VIM)。制作了GCC,世界上使用最广泛的编译器。 RMS的核心想法是,因为软件而收费是罪恶的,这种人是撒旦(当然,Bill Gates是其中最大的那个)。他认为软件应当自由分享,程序员从中收取的应当是服务费。今天,RedHat正是继承了这一模式。通过免费的软件和收费的服务来进行持续的开发。 2.Linus Benedict Torvalds 常常和RMS并提的一个家伙,具体在这里(http://zh.wikipedia.org/zh-cn/%E6%9E%97%E7%BA%B3%E6%96%AF%C2%B7%E6%89%98%E7%93%A6%E5%85%B9)。 一个低调又火爆的家伙,没有什么太多言论,但经常语出惊人,最有名的是以“一群自慰的猴子”(OpenBSD crowd is a bunch of masturbating monkeys)来形容OpenBSD的团队。最大的成就就是写了个操作系统——没错,就是叫Linux的那个。 3.Donald Ervin Knuth 哈,这个人就不像上两个那么广为人知了。他(可不能叫这家伙,得敬老)有个中文名字,叫高德纳,页面在这里(http://zh.wikipedia.org/zh-cn/%E9%AB%98%E5%BE%B7%E7%BA%B3)。 最大的成就是写了本书,叫做《计算机程序设计艺术》。有意思的是,写到一半的时候,觉得现在(那是上世纪80年代的事情)的排版软件不爽——于是自己下 手,写了一个叫做Tex的排版系统——然后再回来继续写书。这本书算起来已经写了30多年了,估计成书时间和《浮士德》有的一拼。而Tex是当今高端排版 中最流行的系统(多数都不是直接拿来用,而是用了LaTex之类的包装),如果有向国际期刊投稿过的应该有印象。Tex也是被誉为最接近完美的程序,它的 介绍在这里(http://zh.wikipedia.org/zh-cn/TeX)。他的版本号是以圆周率为基准的,头一个版本叫3,后一个叫3.1, 以此类推。目前的版本号是3.1415926,刚好是祖冲之的密率。高伯伯曾表示,等他死之后,版本号就改为π,剩下的bug就作为程序的功能放在那里。 有一个未经证实的故事。据说上世纪Internet还没出现的时候,美国军方找人设计了TCP/IP协议,他们希望有人为他们实现基于Unix的TCP /IP协议栈。于是他们花了四千万美金,找人写了一个协议栈,并且拿到高伯伯的学校去用。对此高伯伯非常不满意——别误会,我指的是实现的效果。于是就自 己花了点时间写了一个,结果比原版的协议栈更快速而稳定。美国军方觉得非常困惑,问他是怎么做的。高伯伯说,读你们的协议,然后编码。 4.Andrew Stuart Tanenbaum 这个知道的人也不会太多,当然,职业玩家例外。当初AT&T禁止UNIX7的代码公布,因此大学里面都没什么实际产品可以用来教操作系统这门课。 于是,有个叫AST的老师就怒了,你不让我干,我自己干。于是写了一个叫做Minix的系统,并且还写了本书,叫做《操作系统:设计和实现》。后来有个学 生,觉得这个系统改改能干别的,于是给AST去信。AST说,改什么改,我写这东西是拿来教书的。于是这个学生就自己写了一个系统——对了,这个学生就是 上面的Linus,而那个系统,就是大名鼎鼎的Linux。 时至今日,Minux已经发展到了第三版(他的版本号是跟着书走的,第一版,第二版,第三版...),是大多数大学里面教授操作系统基础原理的标准教材。 同时,也在嵌入式系统等领域有非常大的应用。但是,由于AST还是坚持他的教学和精简原则,因此在桌面和服务器领域就别指望了。关于AST,大家可以看这 里(http://en.wikipedia.org/wiki/Andrew_S._Tanenbaum)。 5.Ian Murdock 这个人很多人都听过,不过看着名字还是认不出来。他是Debian系统的作者,具体可以看这里(http://en.wikipedia.org/wiki/Ian_Murdock)。 Debian有什么特殊呢?其实就本身来说,Debian并不算特别成功。但是Debian有庞大的衍生系统群,更有Ubuntu这样充满活力的发行。 Linux世界有所谓三大发行,四大包管理系统之说。其中三大发行指三个在世界上最广泛用于服务器的发行版本,即RedHat Enterprise Linux,SuSe, Debian,其中只有Debian是无服务商支持的。而四大包管理系统就是指RH的RPM系统,Debian的APT系统,arch的PCMAN系统, 和Gentoo的emerge系统。 6.Ken Thompson 有没有听说过?至少看着眼熟吧。这家伙是贝尔实验室的,最大成就就一个:Unix作者。详细内容请看这里(http://en.wikipedia.org/wiki/Ken_Thompson)。 7.Dennis Ritchie 没听说过?也很眼熟?这家伙和上面那位是朋友,最大成就也就一个:给上面那位提供了基础语言,C语言。详细内容请看这里(http://en.wikipedia.org/wiki/Dennis_Ritchie)。 8.Bjarne Stroustrup又是一个怎么看怎么眼熟的家伙?那当然。他和上面两位不怎么熟,不过他们都是一路的。他是C++的作者,详细内容请看这里(http://en.wikipedia.org/wiki/Bjarne_Stroustrup)。 9.Phil Katz 这个就很少有人知道了吧,不过大家肯定天天和他打交道。大家用记事本打开任意一个ZIP文件,开始的两个字肯定是PK,这就是Phil Katz,具体请看这里(http://en.wikipedia.org/wiki/Phil_Katz)。 这是一个有点悲剧的人物。在上个世纪的时候,大家还在BBS上混。由于速度有限,因此下载站的资源都是压缩提供的(当然,直到今天肯定还是如此)。最初的 压缩格式大多是ACE的,这是一家商业公司,直到今天还活着。由于PK不满意这家公司的压缩软件,压缩率低,速度慢,而且还不断提出高昂的收费。因此他决 定自己写一个压缩软件,就是最初的PKZIP。由于软件免费提供使用,压缩率高,解压速度快,因此很多站长自发的将数据格式转换为ZIP。后来PK就干脆 开了PKWARE软件公司,免费发行压缩程序代码,同时提供方便使用的图形界面版本。但是非常可悲的,由于格式开放,因此这个软件有个非常大的竞争 者,winzip。我想有些Win95时代的老用户还记得这个软件。PK在软件开发上很有天分,但是在市场策略上却不很成功。WinZip对ZIP格式的 熟悉其实比不上PK(那当然,人家是原作者),然而WinZip却拥有很多用户友好的特性,右键菜单解压,虚拟解压(将压缩包的内容临时虚拟成一个目录, 用户可以无缝的使用,XP中集成了这个功能,但是WinZip的虚拟解压很容易撤销)。所以最终PK的软件公司破产了。他本人在2000年4月14日因饮 酒过度,在一家小旅馆内死去。 至于WinZip呢?碰到了一个更强大的对手,WinRar。功能类似,但更简洁,最主要是支持大多数流行的压缩格式。因此目前压缩软件领域还是WinRar占据着主流,市场就是这么残酷。 10.Phil Zimmermann 这个人基本没人知道,但是却是这张表里面最典型和突出的一个人。他是PGP的作者,具体可以看这里(http://en.wikipedia.org/wiki/Philip_Zimmermann)。他的成就很难用一句话说明,要阐明他的成就,就必须从美国的国家安全出口管制说起。 在上个世纪,美国政府有一种观点,他们需要能随时随地的窃听任何一个人和其他人的通讯。同时,作为延伸,他们制定了国家安全出口法案,将密码产品作为军用 管制品,限制出口。这其实是很荒谬和不合逻辑的,任何公开的算法都可以被多个人独立的实现。只要算法是公开的,即使产品不允许出口,国外也可以没有任何阻 碍的实现出来。而如果算法是不公开的,则会出现两个弊端。一个是阻碍密码学的交流和进步,更麻烦的是,根据密码学的内在逻辑,这样的系统,由于验证不完 全,因此比公开的系统更加不安全。 在1991年前后,PZ制作了PGP软件,用于保障当时备受争议的电子邮件的安全(小常识: 电子邮件默认是明文的,安全程度和你写在明信片背面寄给你父母的句子差不多)。这个软件使用了1980年以来提出的现代密码系统几大密码系统,实现了签名 安全和秘密安全。这里我们小小的讲解一下电子邮件的两大安全系统,对此无爱的人自行跳到下一段。签名安全就是指,你收到一个邮件的时候,能够确信,这个信 的内容是原始发件人的真实意思表示,而不是被篡改过的。秘密安全就是指,当你收到一个信的时候,你能够确信,除了你没有别人能够偷看到内容。对此,一般采 用公钥系统来实现两者的安全。所谓公钥系统是这样一种系统,用公钥加密必须用私钥解密,用私钥加密必须用公钥解密,私钥很容易计算出公钥,公钥非常难计算 出私钥。当你要签名安全的时候,将邮件内容用自己的私钥加密再发送一次(实际是将内容hash了再加密的),接收者解密后对比。由于篡改者只有公钥,因此 虽然可以拦截和修改内容,但是无法伪造出一对匹配的内容,用公钥解密后刚好一致。而秘密安全则是用对方的公钥加密。对于更高层级的要求,你的公钥不仅要求 公布,而且必须在国家认可的部门公布,这样就由国家认定了你的公钥和你的身份的一致性。当你对一个内容签署的时候,只要能用公钥验证签名,就可以认定内容 是你的真实意思表述,并被法律所承认。 当时的PGP当然还没有这么复杂,但是对于当时缺乏任何安全性特征(当时连TLS都没有)的电子邮件来说,是非常必要的补充。可是我们上文说了,美国禁止 出口这些产品。于是,PZ免费的将软件的最初版本散发给同事和其他人使用,而这些人又可以免费的分发出去——这和自由模式非常的吻合,除了我找不到具体信 息标明当时PZ是否从授权上同意他们做这个事情。法律上说,PZ并没有“出口”密码产品,但是实际上,是他实现并且向全世界推广了高强度的电子邮件安全系 统。从某种意义上说,PZ可以说是叛国者。非法散布军用管制品,危害美国的国家安全(这还不像中国那种含糊不清的指控,这里的军用管制品定义是明确的,并 且是由国会制定的)。于是,PZ受到了三年的官司和五年的调查,直到96年的时候,克林顿签署了新的法案,放松了密码产品的出口限制。其实也没松多少,从 40位到56位——大概就是从5个字符到7个字符的区别。反之,我们改变观点,从世界的角度说,由于他的勇气和决心,我们每个人从中受益匪浅。 必须得说,其实这一改变很大程度上并不是PZ个人努力或者公民运动的结果,其中有巨大的商业力量。IBM,微软和Lotus之类的跨国软件巨头在出口产品 的时候,由于受到出口限制,因此在海外产品上的安全性一直很成问题。很多时候他们因为这个问题受到了巨大的挑战。在这一问题上,他们有足够的理由去游说白 宫,改变出口限制的要求。关于这个案件的其他资料,可以参考这里(http://cyberlaw.stanford.edu/~prz/ZH/faq/index.html)和这里(http://www.techcn.com.cn/index.php?doc-view-130949)。 在今日,PGP仍旧是一个非常强大的加密系统,并且是开源的——理所当然,如果不开源,我们会担心其中是否有漏洞和后门继续危害我们的安全。并且,从密码 学内在的逻辑来说,不公开的系统是不安全的。不过他仍旧受限于美国国家安全出口管制条例,原因是因为由于今日强大的计算能力,因此密钥通常的长度是 1024,2048,4096位长的——远远超过美国国家限制数十倍。因此这一软件的强密钥版本只有英文版,因为不用考虑出口。对于海外人士来说,我们更 推荐OpenPGP,同样是开源的,而且基于开源模式开发的GNU自由软件。能够充分保证你的信息安全。 11.Lawrence Edward Larry Page 哈,在所有人中,这个是最出名的。不过在这个列表中列出此人,并非因为Google的成功,而是因为其公司“不作恶”的信条。直到今日为止,Google还良好的保持着不作恶的信条。 结尾 我们遍数评论一个个的软件自由英雄的时候,才会发现,无论在哪里,通向真正自由的路都坎坷而血腥。RMS直到快50还一直单身,到处流浪。他没有自己的汽 车、电视和房产。PZ面临了政府的指控,三年的官司,五年的调查,以及叛国者的骂名。PK更是直接挂了。当然,其中也不乏成功者,Donald Knuth和Andrew.S.Tanenbaum的书都卖的不错。Linus Torvalds和Ian Murdock也算是软件白领,收入不菲。Larry Page更是名列世界级的富豪榜。然而我们必须知道两件事情,没有他们的存在,我们就没有安全的通讯,没有廉价而优质的软件。因此,照RMS的最大对手所说的,即使没有这些人,人类也应当把它们造出来。 9/8/2009 计算机中的海森堡效应和罗素悖论 有点标题党,海森堡测不准原理大家都知道吧,你观测一个东西以获得他精确的描述,然而你测量行为本身就会干扰这个东西的存在,从而永远无法准确测量。 近日贝壳碰到一个计算机中的海森堡效应,因为工作需要,贝壳需要获得/proc/loadavg中的load参数。这个参数在uptime时会显示,大致意义是这一秒内平均的活跃进程数。(对电脑无爱者请自行跳过以下内容到下一段)准确的计算方法是在一秒内的所有tick上,累加当前的待运行线程列表长度,而后除以一秒内的所有tick。当tick趋于无穷小时,相当于对活跃进程的定积分除以横轴长度,即平均值。 同个文件内有另外一个值,活跃进程数,是当前的待运行队列长度。从理论上说,如果贝壳要计算一个小时(或者其他大尺度时间)的loadavg,可以高速取样该值,在一小时内求平均,即复现load参数的意义? 想法很好,不过实际上差很多。开发服务器上的loadavg大约是0.01-0.05,但是贝壳按照后者算出来的load总大于1。问题在哪里? 记住一点,当你去获得loadavg的时候,你当前的线程永远是在运行的。因此你获取的行为会增长活跃进程的值,哪怕其他时间什么都不做,这样会将取值的瞬间的load提高至少1。而内核的计算的时候,是不会把自己的行为计算为活跃进程的。 那么将值减去1对不对?也未必。在知道上述问题的同时,我们可以想象。在高压力下,你的线程什么时候会获得运行的机会?只有在最高优先级的任务空闲的时候。因此,你取得的值会严格的小于真实的压力。 因此,不要相信当前活跃进程数,那个值永远大于1,并且不总正确。如果那个值是0,那逻辑上讲,你就碰到了罗素悖论。 咳咳,又来一个问题,什么是罗素悖论? 很简单。如果说真话的人永远说真话,说假话的人永远说假话。有人对你说:“我在说谎”。你就听到了罗素悖论。同理,如果理发师只给不给理发师理发的人理发,而所有理发师的头发都有人理,那你也碰到了罗素悖论。同样,如果有程序告诉你,我读取了当前的活跃进程数,但是这个数表明我不活跃。 同样,你也碰到了罗素悖论。 9/4/2009 搭建家用的OpenVPN服务器
啥都不说了,贝壳最近搞了一个家用的OpenVPN服务器,任何机器,随时随地可以穿到家里来,很方便。用VPN干啥?这就多了。我可以用vpn操作
Windows上的vnc,使用Windows的共享文件服务,直接向Linux
Server放文件(这样别人可以用http下载),查看摄像头(被网络公布了)。将来如果有其他网络设备(例如冰箱和空调),也可以一并管理。不过最直
观的——可以很方便的打游戏,我们根本就在一个网络里面。要点是,这些服务要分别开映射端口非常麻烦。而且有的服务从安全起见,根本不能开端口(例如臭名
昭著的Windows文件共享服务)。 具体原理上,贝壳有一台Windows,上面用Vmware搭建了一台Debian Linux,两者使用桥接模式。从概念上看,就是一台通向公网的路由器,里面放了一台Windows和一台Linux。现在,贝壳想通过某种方法,将外部 的一台机器接入内部的局域网中,就如同随身携带着一根通向家里路由器的网线一样。 下面直接上具体配置: -----------filename: /etc/network/interface------------------- auto lo iface lo inet loopback iface eth0 inet static address 0.0.0.0 iface tap0 inet static address 0.0.0.0 auto br0 iface br0 inet static bridge_ports eth0 tap0 address 192.168.1.IP netmask 255.255.255.0 network 192.168.1.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers 192.168.1.1 dns-search home ------------------------------------------------------------- 使用上述配置的原因是,vpn只能联通你机器上的逻辑网卡和服务器上的逻辑网卡。单就vpn自身而言,是无法让你连到服务器上的内网网卡的。因此,我们需要通过网桥的配置,将eth0和tap0配置成网桥。这样,你的服务器就如同一台交换机一般,联通了两个网段。 而后,我们设定服务器配置。 -----------filename: /etc/openvpn/server.conf---------------- local 192.168.1.51 port 1194 proto udp dev tap0 ca /etc/openvpn/keys/ca.crt cert /etc/openvpn/keys/server.crt key /etc/openvpn/keys/server.key dh /etc/openvpn/keys/dh2048.pem server-bridge 192.168.1.IP 255.255.255.0 192.168.1.100 192.168.1.149 push "route 192.168.1.0 255.255.255.0" keepalive 10 120 user nobody group nogroup persist-key persist-tun cipher DES-EDE3-CBC # Triple-DES comp-lzo verb 3 status /var/log/openvpn-status.log ;log openvpn.log log-append openvpn.log ------------------------------------------------------------- 其中的server-bridge是因为我们采用网桥的关系,100-149是向外部拨入分配的IP池。贝壳的2-100是内部固定IP保留,150-199是内部DHCP池,200-254保留。这个大家可以按照自己的情况配置。 需要特别注意的是,由于上文我们已经建立了tap0这个设备,因此才dev中必须指定tap0设备。如果你仅写tap,那有可能是新建一个设备出来。到时候就好玩大了... 上文中,我们使用了ca cert key dh四个密钥文件选项。下面我们说说如何产生这些密钥文件。 首先,你需要复制usr/share/doc/openvpn/examples/easy-rsa/2.0/到你的个人目录,并修改其中的vars文 件。将其中的一些东西修改为你需要的参数(很简单,我假定大多数人都会用,这个是基于SSL的),而后source vars,执行下述命令。 ./clean-all ./build-ca ./build-key-server server ./build-dh #需要輸入密碼的 ./build-key-pass username #不需要輸入密碼的 ./build-key username 最后两个可以随便签署,想发多少密钥就给多少人签署。不过请注意,easy-rsa的默认脚本中,是没有ns-cert-type server的设定的,因此*千万不要*在配置中加上这个设定。否则会导致TLS handshark failed。 最后,启动vpn,并且修改你的防火墙和路由器映射,贝壳这里使用的是udp1194端口(默认)。再给客户分发配置和key,具体如下: ------------------filename: home.ovpn----------------------- remote shell909090.3322.org 1194 client proto udp dev tap ca home.crt cert shell.crt key shell.key resolv-retry infinite persist-key persist-tun cipher DES-EDE3-CBC comp-lzo verb 3 ------------------------------------------------------------- 其中home.crt是服务器上的server.crt,shell.crt和shell.key是刚刚签署的用户密钥。如果有密码,需要设定密码,或在连接时提供。 -- 与其相濡以沫,不如相忘于江湖 8/20/2009 互联网的黄金时代
今天,一个朋友推荐我看了篇《创业成功80%是运气?》的文章,作者可能是雷军。里面说,99年是互联网成就的年代,几大互联网巨头都是在99年成就的。
因此作者推测,09年也是互联网成就的年代。前者我认为很有道理,后者就纯粹在胡扯,拉人去投资了。退一步说,即使是对的,也是蒙上的。 为什么?我们首先得看,为什么99年是互联网成就的年代。这就得讲到98年以前,电脑是什么样的一个形态。记得贝壳95年刚接触电脑的时候,那时用的是 286。和现在完全不同,电脑最主要的功能是文书处理。因为当时根本没有互联网建设,电脑用户沟通的途径主要通过点对点拨接的BBS(不用了解是什么东 西,贝壳自己都不怎么明白)。这种BBS和现在的BBS完全不是一个概念,但是BBS这个词却来自于当时的这个形态。这种沟通方式非常不方便,也非常贵。 因此用的人很少,基本都是专业人士和各个高校,这等于限制购买电脑后只能单机使用。由于电脑根本是单机使用,因此但凡要增加功能就必须买盗版盘。要 WPS,盗拷(最早还没有盗版光盘呢),要看电影,买盘。于是电脑的主要形态被限制到了预设的几个功能上,而不是根据客户的想法随意定制。而这几个功能中 呢,最常用和实用的就是文书处理。96年的时候,最火的就是UCDOS和WPS。凡讲电脑入门如果没有这两个那就是落伍,是怪胎。而在98年的时候,接连 发生了几个事情,因此才酝酿出了风起云涌的互联网大潮。 首先,98年前后,Win95/98在中国大量普及。在此之前,由于受到文字,版权,习惯,配置等诸多限制,大家还是停留在dos6.0的年代不肯出来。 Win9X系列的普及(当然,主要是盗版普及)对电脑降价和普及起了不可磨灭的作用。也许有人听不懂了,软件的普及能降低硬件的价格?话是这么说的。从总 体来说,DOS6.0的入门难度高,高到要维持一个能够运转的DOS系统,就非要经过专业的,正二八经的学习不可。而Win9X的入门和维护难度基本是 零,你就算不明白,也不阻碍你的使用。因此,有大量的普通用户可以使用电脑,电脑的组装量就大了。更具有决定作用的是,由于DOS的入门难度高,因此很多 客户必须购买专门的电脑公司的电脑系统,即所谓的“品牌机”。使用品牌机的最主要理由是需要电脑公司的服务,来维护电脑系统。而Win95安装维护简单, 任何一个人都可以拿着盘装套系统出来。除去偶发的硬件故障,着实没必要非买品牌机不可。于是,当时品牌机对市场的垄断被打破了。大量的小作坊稍微经过培 训,就可以拿着一堆电脑配件组装起一台电脑来。教客户几分钟,他就可以自行安装起Win9X和Office。而后机器如果出现故障,顾客也可以很轻松的重 装。于是大量的小作坊相互竞争,使得电脑的价格直线下滑。我记得96年时主流电脑的价格在2W上下,98年时只有1W上下,01年时更是只有5000。注 意这里比较的是主流电脑的价格,不是同等硬件。里面固然有着摩尔定理的作用,也相当的得益于Win9X的普及。 而此时,更具标志性的事件是国内大多主要城市,都开始了电话拨号上网的业务。虽说中国从89年就开始接入互联网了,然而真正标志着普通民众上网的事件还是 98年前后的163/169电话拨号上网业务。大家可以想像一下,要是没有网络了,你的电脑还能干什么?怕是只剩下看书(还得买盘),听歌(也是买盘), 放片而已了吧?我们今天所用的大多数功能,都是以网络为基础,或者要基于网络获取数据的。电话拨号业务一开,等于就开启了一扇通向无限可能的大门。虽然当 时的价格大约是1.6元/小时,而速度一般只有5K/s。这种流量下基本无法承载什么复杂业务,多数都是基于文字的业务。例如QQ,当时肯定只能做文字, 不能做视频聊天。又例如BBS,当时也是以文字为主,图片点缀一下。要是哪个搞不清楚放一堆图片上去,站长到还没头痛呢,用户先受不了了。 现在我们看到,98年的时候,互联网具备了大量的潜在用户,也打开了通向无限可能的大门。可谓是万事俱备,只欠东风。而东风从哪里来呢?所谓的东风,就是 亚洲金融风暴和2000年互联网泡沫中的时间差。在98年的时候,东南亚发生了非常严重的金融风暴,相信大多数人都有所耳闻。而98年的时候,正是互联网 飞速发展的时候。2000年的互联网泡沫还没有提前到来,投资回报比高到吓人。在金融风暴中损失惨重无处容身的热钱,碰到了一个飞速发展回报极高的产业, 就如同火柴碰到了汽油一般,瞬间就无可阻挡的燃烧起来。而引爆点,就是互联网门户和娱乐。腾讯,百度,携程等互联网公司,都在那个时候纷纷发展起来。金融 环境的影响究竟有多大呢?我们不妨想像一下,如果是2000年的时候,用户和网络才准备好。这时金融相对稳定,金融风暴中跑来跑去的热钱也该投资的投资, 走的差不多了。而互联网公司普遍表现不好,美国各大网络公司一片惨红。这时候,中国的各个网络公司才组建起来,他们还能顺利的拿到融资,完成由小到大的华 丽转身么? 当然,当年之所以成为互联网的黄金年代,还有其他的很多因素。但是就贝壳的浅见来说,当时互联网的成功,和广大的新增客户群,新出现的网络,还有相对良好 的投资环境是分不开的。现在,中国的网民已经发展到了极限,12亿人口4亿网民,即使还有发展空间,也是屈指可数的事情。不像我们的前任,永远会出现新的 客户(这里顺便提一下,实际上互联网大量出现用户的时间大约是在05-06年前后,宽带包月普及的时候)。我们的投资环境呢?不利,很不利。美国经济刚刚 打了个喷嚏,现在全世界人民都在重感冒,没空搭理中国一堆互联网公司的脑残想法。那么,我们的下一个黄金年代在那里? 接下来,我们有几件事情会引发互联网的大革命,不过贝壳和大家一样头痛的是,我们谁都不知道这些事情会什么时候到来,是否会一同到来。 首先,是真正的3G网络。现在所谓的3G网络都是花架子,没有什么实际意义的,3G最大的优势在于低廉的随时在线成本。当前,所有客户上网都是通过电脑拨 号,而电脑是需要了再开机的。但是我们的很多应用需要客户随时在线,例如IM类业务,对客户在线就有严格要求,微博客也有类似问题。为了能让用户随时在 线,就必须让客户在手机上使用电脑的应用。问题是,如果没有一个廉价的网络接入,哪个客户愿意付出N高的网络费用就为了用个IM?那还不如打电话。现在的 3G曾有个笑话,什么叫3G?一秒3元,所以叫3G。这个价格至少要下降到一个月100-200的范围内(流量不限制,甚至还要在其中包括有线的接入费用 和电话费),才有大量用户愿意入网。更好的接入模式是两台手机一根ADSL线路,包含电话/手机/电视/网络/3G在内的所有通信业务,总价200上下。 不过以目前的垄断形式而言,大家可以口水收起来了。 其次,是全球经济复苏。要是大家都没钱,是没人愿意投资电脑产业的,也没人愿意用。 而后是取消互联网备案和审查制度这滩狗屎,建立一个真正公平公正的法律环境。众所周知,互联网属于服务业,而服务业对于环境的公正性要求是最高的。即使经 济复苏,也绝对不会有一个投资者愿意把钱投资到一个政策整天变化,商业运作随时为政策让路的地方。以饭否为例,如果某个投资者投资了,而后饭否因为种种不 明原因关闭了,那么投资者的损失谁来负责?对于这类问题,必须有个公正的,公平的政策,提前说明。如果投资违背了政策,那么损失没什么好多说的。如果没有 违背政策,那就不应该让投资者受到损失。而不是暧昧不清的制订一个根本实行不了的政策,然后看谁不顺眼就关谁,对其他人的违法不闻不问。只要这个大山不真 正的走开,中国的互联网就不可能真正的走入下一个黄金时代。 7/29/2009 组合翻墙方案1.墙的存在和原理简述 1.1.墙的存在 在您访问某些网站的时候,经常会发现无法访问。通常来说,这是服务器挂了。但是现在,越来越多正常的服务器出现了无法访问的情况。这些服务器中有一些是因为色情和暴力问题,但是更多则是政治层面的因素,例如google和twitter。对于用户来说,可能不关心政治层面的因素。但是政治自然的关心了你,所以我们需要找一种方法,让我们依然能够使用网络上一些很重要的服务。例如gmail(本文即是在gmail中写成的)。本节中,我将简述国家网络防护工程(简称GFW, Great FireWall)的工作原理,并在下一节给出一些比较成熟的翻墙方案。 1.2.DNS污染 我们通过DNS(Domain Name Service)将域名转换为IP地址。通常而言,我们不会怀疑ISP的DNS服务器的可信性。然而在某些地方,DNS服务器被用来欺骗客户端,达到屏蔽的作用。例如,在上海的某些地方,fanfou.com曾经被指向127.0.0.1。如果机器按照这个地址访问,那么肯定无法获得预想的数据。 这个方案如果控制不当,可能造成全球性的后果。曾经有报道,伊朗将youtube的域名指向了自己的一台蜜罐(Honeypot)服务器。但是由于配置不良,因此DNS错误被扩散到了伊朗以外,导致全世界的youtube访问都被定向到了这台蜜罐。整个过程造成了youtube6小时以上的服务中断。 1.3.DNS替换欺骗 由于DNS污染会被下面2.1节的方法绕过,因此在某些地方针对OpenDNS的数据被进行了替换欺骗。UDP53端口的查询数据包被拦截和替换,其造成的结果就是即使使用了OpenDNS,返回结果和电信服务器的结果仍然一致。 1.4.IP禁止 对于某些IP,防护系统直接禁止了该IP的访问。这种手法一般见于早期,由于经常导致误杀和株连,同时对最普通的proxy都无效,因此现在已经不常使用。 1.5.关键词过滤 防护工程在中国网络的核心路由器上,都放置了一些探头。具体的方法为配置一个核心路由器的镜像端口,将所有通讯数据全部向端口转发一份。该端口指向一套深度包检测集群。如果数据没有异常,则不对通讯进行干扰。如果数据异常,则发送RST包拦截通讯。同时记录双方IP,拦截其后5分钟内的所有TCP SYN包。 这种方法的优势在于,无论多复杂的网络拓扑结构。只要能够开镜像端口,就可以工作。无论多大的规模和多高的流量,只要能添加服务器,就可以支持。同时由于屏蔽效果好,对普通访问的干扰小,因此目前已经成为最主要的屏蔽方式。 这种手法无法针对UDP工作,因为UDP不存在链接断开状态。同时如果双方都屏蔽RST包,则连接不会被中断。然而如果双方都屏蔽RST包,会导致一些主动断线在对方那里变成死连接,因此无法通过拦截RST包来防御。同时,按照当前的测试结果,IPv6的包并没有被拦截。相信这是因为核心路由器支持了IPv6,但包检测集群尚未支持IPv6包检测。 1.6.热点屏蔽 近来发现一种趋势,当某个链接的热度非常高的时候,通向此链接的访问会被屏蔽。由于是接受到RST包,因此不像是服务器超载。这是当前防护系统的新方向,尚没有更多资料。 2.翻墙方法简述 2.1.OpenDNS DNS污染可以通过修改自己的DNS服务器来屏蔽。以Linux为例,当前你的DNS服务器配置可以在/etc/resolv.conf中查看。你可以将其替换为OpenDNS的DNS服务器,而非电信的服务器。OpenDNS是一家商业公司,通过提供DNS服务来收费(不具体解释商业运作)。一般来说,他们的DNS服务还是比较准确的。 通过OpenDNS可以防御DNS污染,但是无法防御其余方式,而且会被DNS替换所干扰。因此建议一般作为常规网络配置,而非专门的翻墙方案。 2.2.hosts hosts的目地和OpenDNS一致,但可以防御DNS替换。其原理是通过将正确的DNS结果写入/etc/hosts文件,在绕过网络解析过程。从而避免DNS出错。 该方式无法防御1.4-1.6的屏蔽。 2.3.proxy和变形 针对DNS欺骗和IIP屏蔽,我们可以通过指定一个国外的代理来访问。由于DNS解析在代理商进行,因此一般不会被欺骗。由于不直接访问IP,因此IP屏蔽也失效。 一般而言,该方法无法屏蔽1.5的屏蔽,但是有一些变形产品(例如Firefox的gladder插件),通过变形URL请求,使用特殊代理的方式对1.5进行了部分绕过。但此种方式不保证100%成功。 2.4.ssh -D ssh是一种安全的远程命令行工具,具有很多端口转发选项。其中有一种动态端口转发选项,在服务器端开启后,使得ssh可以被作为一个socks5代理服务器使用。 此种方式需要有一个墙外的ssh服务器,一般可以购买墙外的空间,他们会附送一个。此种方式可以绕过全部屏蔽方式,但是由于ssh本身的稳定性,因此经常有掉线的问题。而且有的服务器关闭了动态性转发选项,或者对长期连入的ssh连接进行断线处理。同时,由于很多人接入同一个IP进行翻墙,因此很多网站(例如google)会认为你的访问不可信。 2.5.tor tor是一种分布式代理工具,可以在隐蔽源和目标的情况下访问服务器。该方法可以绕过所有屏蔽方式,但是通常而言,该方法的访问会比较慢。同时也存在访问不可信的问题。 2.6.gae gae是google的个人引擎服务,一般由很多服务器构成,而这些服务器一般位于国外。有人针对这个特点,制作了特殊的python程序,能够将客户的访问转换成特殊的加密包,在服务器上访问目标服务器。因此可以被视为一种特殊的代理协议。该方法可以绕过所有屏蔽方式,但是由于众所周知的原因,gae服务器本身有的时候也会被屏蔽,导致该方法无法工作。而且由于google本身的屏蔽,该方式对于某些网站也是无法访问的。该方式也存在访问不可信的问题。 2.7.vpn vpn是唯一一种能够快速有效,一劳永逸的翻墙方式。使用vpn后,等同于你的机器拉了根线接在国外的网络端口上。因此该方法可以穿越所有屏蔽方式,同时很少有访问不可信的问题。唯一的问题是vpn,尤其是快速的vpn很难得,而且通常很贵。 3.组合翻墙 3.1.问题 纵观全部翻墙方式,每种方式都有一定的缺陷。2.1-2.3并不总有效,ssh不稳定,tor慢,gae看运气,vpn又贵。同时,我们还要借助终端的客户端组件(foxyproxy之类)来区分被屏蔽的网站和普通网站(使得普通网站的访问不使用特殊的方式)。 3.2.目标 本文试图通过某种方法,同时使用2.4-2.6的一种或多种方法。达到访问透明,使用稳定,速度尽量快,流量尽量小的目标。 3.3.架构 我们使用squid和haproxy进行代理调度,达到上述目标。squid是一种老牌的开源代理服务器,其特征是会对代理内容进行缓存,减小访问流量。同时,可以将请求转发到其他代理上。从而会自动检测和管理多种代理服务器。haproxy是一种基于tcp和http的反向代理程序,在此我们需要使用它的TCP代理能力,将多种socks5代理集成为一个。 基本架构图如下: / -> tor web brower -> squid -> privoxy -> haproxy -> sshtunnel \ -> gappproxy 3.4.优势 相对单层代理,组合方式具有多个优势。 使用squid分离访问线路,并缓存访问数据。对大规模密集访问,可以有效的减小流量。而且对除Firefox外的浏览器,可以根据其访问范围控制代理线路,进一步减小代理流量。(Firefox可以使用AutoProxy或FoxyProxy) 使用haproxy反向代理了socks5服务,因此可以并行使用多个sshtunnel的带宽。同时自动检测这些ssh是否可用,保证了访问的连续,同时也非常容易添加和减少代理。 3.5.劣势 本方法有一个比较明显的问题,即squid无法直接使用socks5代理,因此需要通过privoxy进行转换和保密。但是此时squid只测试privoxy的存活,而不理会socks5的存活。因此当haproxy的后端全部失效的时候,squid仍旧会认为privoxy有效,进而导致出现privoxy的错误页面。 同时,由于haproxy只检测ssh端口是否相应。因此当远程服务器几乎不响应代理请求时,haproxy并不会将这一代理移除出列表。从而导致某些请求需要非常长的时间完成。 3.6.适用范围 本方式在完成设置后,可以稳定,快速,小流量的访问所有网站。客户端无需过多的设置。但是服务设置过于复杂,系统庞大,多数时候还需要一台专门的Linux。相对而言,这种方法更适合于3-5人以上,同时需要翻墙的情况。通过一台专门的虚拟服务器作为代理,可以顺利的让多人同时使用国际网络。 4.一个实现 4.1.基本系统 debian stable,aptitude install squid3 squid3-cgi lighttpd tor privoxy haproxy。 4.2.gappproxy 针对gappproxy项目,请自行去其主页上查看服务器组建方式。作为本次成果之一,贝壳封装了一个gappproxy的deb包。修改了部分源码,并形成了服务。需要的用户可以下载gappproxy-1.0.0beta_all.deb包,安装并修改配置文件即可直接使用。 4.3.sshtunnel的封装 一般而言,我们使用ssh -D来开启sshtunnel。但是这样做有几个缺陷。首先是tunnel无法跟随系统启动,其次是由于tty关闭后程序一同关闭,因此往往需要screen或nohug来保持连接,最后是ssh往往容易意外关闭,导致需要手工重启。 贝壳针对这种情况,包装了一套脚本,并形成sshtunnel_1.0.0beta_all.deb包。需要的用户可以下载并修改配置。服务启动后即一直运行,关闭后会自动重启。 5.远景目标 上述系统安装的细节并未详述,同时,对于新手也太过复杂。因此,考虑实现一套完整的最小虚拟机,提供完整的上述功能。并且给出一套界面,使得用户可以方便的配置和操作整个代理系统。 7/15/2009 地铁二号线今天大规模停运&生日 今天早上,贝壳沿着地铁四号线到世纪大道准备换乘二号线的时候,发现车站内有大量人员滞留。六号线卷门不开,二号线站台堆满人。地铁方面广播,二号线故障,暂时停开,恢复时间不定。因此贝壳无奈,只好上地面去方法。 贝壳先是在世纪大道上找出租,不过大家可以想象,这是徒劳的。而后去公交站,发现——我实在不想经历那种密度。最后,走到杨高路,和几个人合打了一部车,从杨高路走龙阳路到张江。结果,又很无奈的发现,龙阳路堵车。最后,花了50多,在11点的时候总算到了张江。 真是良好的生日的开端,希望我下一年不要这么倒霉。电脑诸神啊,赐我一个女友吧。不会C++也好,不用Linux也行,只要她别用Windows,而且还不怎么会用。Enter。 7/14/2009 游婺源 写这么多年blog,每次都当回事情,实在写的太累了。还是简单一点,不要费劲了,想到哪里,写到哪里吧。 简单来说,有朋友家在婺源,我过去玩了一次。地方不错,好山好水,绿茶不错。记得冬天去,夏天昆虫多,草也多。一个朋友给叮肿了一圈,另一个活像被鞭打过。而且太阳太大,一个成了活包公,贝壳回来褪了层皮。 另外,如果当地人告诉你,不远,不可怕,很好玩,不要随便相信。他们倒是不会害你,只是他们的标准和你的不大一样。超过60度的斜坡,连爬一个多小时,只是一个稍微有点累的常规路途而已。因此,如果你没有一定的体力和运动上的自信,不要随便和当地人去走小道。小道这东西有两个坏处,一个是走到一半不能回头,另外一个就是随时可能找不着或者被修路修掉滑坡断掉。 好吧,有意的话联系我。 7/7/2009 ssh翻墙服务 不多说了,上脚本。 -----------/etc/init.d/sshtunnel------------ #!/bin/bash PATH=/bin:/sbin:/usr/bin:/usr/sbin CONF="/etc/default/sshtunnel" source $CONF if ! [ -x /usr/bin/ssh ]; then exit 0 fi start () { echo -n "Starting tunnel.." ssh -CNq -D "$PROXYPORT" "$USERNAME@$SSHHOST" -p $SSHPORT -o ServerAliveInterval=30 & echo "done." } stop () { echo -n "Stopping tunnel.." PID=$(netstat -nlp -4 | grep ":$PROXYPORT") PID=$(echo $PID | sed "s/.*LISTEN\s*\(.*\)/\1/" | cut -f1 -d/) kill -9 $PID echo "done." } case "$1" in start|restart) start ;; stop) stop ;; restart) stop start ;; *) echo "Usage: $0 {start|stop|restart|clear}" exit 1 ;; esac exit 0 -----------------end of file------------------ ---------/etc/default/sshtunnel---------- PROXYPORT=7777 USERNAME=abc SSHHOST=abc SSHPORT=22 -----------------end of file------------------ 首先准备一个远程服务器,获得域名端口,用户名密码。而后将上述脚本放置于指定位置,修改/etc/default/sshtunnel的值,即完成配置。但是上述脚本并没有解决自动登录问题,因此,请生成一个没有密码的密钥,将公钥导入远程服务器。 在完成配置后,可用update-rc.d sshtunnel start 90 2 .进行自动启动服务的安装,其中的2请替换成服务器的默认启动级别。如果不知道可以用以下方法查询。 # cat inittab | grep ^id id:2:initdefault: 6/30/2009 系统下文转载自solidot。
以下是一点背景说明。 看来这个内容还不容易保留,我干脆全文转载。
欢迎大家转载,转载时请检查原作协议,未标明请先按照CC协议。 6/19/2009 IT市场统计分析
最近在看简历,根据简历和自己的经验总结一些东西出来。管窥蠡测一家之言,权给新手做个参考吧。 1.行业分类 从统计上看,web开发是人数最多的行业,占大约56%。其次是嵌入式市场,大约占18%。erp市场也差不多,18%。剩余的不足8%。 2.性别分布 众所周知,程序员是男性的职业,但是出乎大家意料的,程序员中有14%是女性(纯程序员,不包括美工)。不过根据贝壳的人工观察,其中只有一人的工作时间超过5年,多数都是3年不到的新人。看来女性程序员怀孕后转业的情况非常严重啊。 3.年龄分布 以大学毕业为基准水准计算,当前程序员的最低出生日期应当是1987。贝壳按照这个进行了统计,得出结果如下。 1983年17%,1984年8%,1985年14%,1986年16%,是人数最多的4年。低于1987年的占11%,1980到1982年间的人数占20%,高于1979年的占14%。 4.水准分类 水准是一个很难界定的指标,贝壳采用五级分类法,简单对其分类。大多数情况下,级和级之间没有明确的定界。 0.是完全没有任何技术背景和资历的人士,说白了就根本不是IT人。大约占8%。 1.初步具备IT行业人员的背景知识,能够做一些简单的软件产品,有跟随1-2个项目的经验。但是无法承担独立的项目,无法解决比较复杂的问题。在这个 层次上,程序员大多数时候根本不知道怎么做,以及该做什么,始终处于知识缺乏的状态。业界俗称,小白。大约占50%。 2.具有标准职业从业人员所需要的知识(当然,具体是什么知识视行业和语言而定),跟随过多个项目,其中有2-3个大型项目。可能领导过1-2个项目,但 是不清楚项目管理的概念和专业知识。这个级别的人在总体人数中最多,大多数人在工作1-3年后都可以达到这个水准。可以独立的解决问题,和客户交流,完成 软件生产的整个流程。在这个层次上,程序员大多数时候都知道怎么做。主要的问题在于多数人还不知道如何将这个过程简约成自己的标准过程。一般来说,这就是 标准程序员的典范。大约占32%。 3.精通C++,熟悉windows和linux系统管理和系统底层,掌握至少一门高级语言。熟悉项目流程和项目管理的概念和专业知识,能够带领团队协作 完成大型项目。能够独立建模,抽象问题,并通过算法解决问题。具备独立和客户沟通,协调解决问题的能力。一般有多个项目经验,曾经领导团队完成2-3个大 型项目。如果你天分不错,运气不错,又够勤奋,大概在工作3-5年后会达到这个水准。在这个层面上,算法和标准化过程这些书本上的东西首次超过了如何做, 做什么,成为程序员的首要问题。这个层级的人数也比较多,能够胜任项目经理的职位。大约占8%。 4.精通专属领域的多项核心技术,有广泛的业界联系,专属领域有一定的知名度。研发过一项或几项领域中的关键技术,对领域的发展做出过一定贡献。要到到这 个层次无法依靠时间的积累,很大程度是天分,运气。在这个层次上,解决问题已经不是一个问题。由于基本能解决领域内的多数问题,因此发现需要解决什么,和 创造性的解决这些问题成为这个层次最主要的问题。这个层次的人基本很少,一个子领域中全国不会超过百人。大约占2%。 5.曾经研发过改变世界的技术。这种人多数你听过,运气好这辈子能见到一个。大约占1%不到。 贝壳当前的水准在3上下浮动,估计奋斗一下,这辈子能够达到4的层次。至于5,这辈子不指望了。 5.工资分布 大多数情况下,工资和工龄都是挂钩的。 根据贝壳的统计,工资和年龄线性拟合后得到的一阶近似方程为:y=-1.089*(x-1990.50)。带入贝壳的年龄,y=8.16。恩,贝壳当前的工资还是不错的,比平均值高。 6.语言分类 由于简历是python的职位,因此python的比例异乎寻常的高,无法作为可用结果。贝壳按照经验比例适当缩小了python所占比重,得到一个估计 值。作为统计数据的修正,并列于下。根据贝壳的统计,使用java的人人数最多,占了38%,修正大约是40%。使用微软系列开发语言/工具的人其 次,28%上下,修正大约是30%。使用php的人再次之,12%,修正大约15%。最后是使用C++的,8%,修正10%。真正使用python和其他 动态语言的人,修正后大约是5%。由于职位不涉及前台,因此前台语言/技能不计入统计。 最后谈几个感想。 1.队伍水准不成比例 根据贝壳的经验,在多数的项目团队中,推荐的岗位配比是:1位项目经理,2位程序员,1位前台工程师,1位DBA,2位测试。如果可以,最好还有一个专门 的文档和行政。这个人数配置适用于6-12人的团队管理,如果人数不足,可以减少文档和程序员。如果人数有多,可以增加2位程序员,1位前台工程师,1位 测试。其中程序员、前台工程师的配比要基本保持2:1不变,程序员、前台加DBA对测试的比例要基本保持2:1不变。这可以说是项目团队的黄金比例,比例 失调往往容易造成窝工或工作不完整,质量有瑕疵。 但是需要看到,这样的话要求2位达到3这个层级的程序员(PM和DBA),但是最高只能带4名2这个层级的程序员。这个和当前的2,3层次的程序员的比例4:1严重不匹配。因此造成一个现象,3这个级别的程序员不足,1这个级别的程序员太多。 根据孟岩的blog,07-08年的IT从业人员大约是500-600万人,其中程序员大约100-130万。每年的IT行业毕业生大约是70-100 万,其中能进入程序员领域工作的大约20万人。当然,他的blog是一年多前的,而且说的是毕业生就业问题。但是根据全球IT形势,我估计这几年里面程序 员队伍规模即使增长也有限,不会超过150万人。也就是说,大约一年之内就要淘汰10%-20%的从业人员。根据上面的分布,贝壳猜想多数人都是倒在了2 到3的路上。 2.小白丛生,项目倒霉 上面一个问题带来的麻烦是,由于小白的人数太高,因此价格太低。其中不免一些人有非常好的测试表现。这要一分为二的看,部分人是真有这个水准的,以小白的 价格雇用到这些人是非常合算的(当然最多一年,不会太久)。但是多数人仅仅是表现不错而已,这些人工资低测试表现高,很容易进入项目。而进入项目后,一旦 担任关键职务,后患无穷。实际上,整个团队中,水准1的小白可以担任的职位只有测试(而且必须至少要有一个是真的专业测试)和文档。但是仅这两个职位而 言,远远达不到培养新人的目地。这也是很多小白倒在了达到普通程序员水准路上的原因。 更麻烦的是,如果突然招聘,很容易发生招到的程序员价格都偏高,而且很多都没定下来就先和其他公司签约了。这时候往往只有小白可以用,项目情况可想而知。 理论上可以开放一些职位旁观项目,实际上也有人这么做的。但是旁观项目是一个非常麻烦的事情。首先项目的旁观者不但对项目没有正面贡献,反而会拖慢进度 (因为要占用其他人时间进行沟通),因此旁观职位的工资应当是负数。而且多数公司项目第一,赶都来不及的时候谁会开放旁观职位。更不说光在项目中旁观是很 难确实体会到那个职位上要面对的问题的。 3.项目经理的条件就是要做过项目 项目经理是一个非常专业的角色,这个职位和技术总监(或者叫核心程序员,高级程序员)、DBA并称是一个团队的三大核心。核心程序员和DBA可以慢慢学, 但是项目经理是学不出来的。实际上,合格项目经理的必要条件就是带过一两个大型项目。问题是,如果想成为项目经理,你找谁让你带项目呢? 一种方法是跟随一两个项目,带一两个小项目,学整套的项目管理方法论,最后由一个成熟的项目经理指导你完成首个项目。但是实话说,这种方法只有对大公司有 效,而且还的看你的运气。小公司里面哪里弄那么多人开两个团队?(原本的项目经理一个,你一个,这要35人以上的公司规模呢)大公司则是牛人太多,轮也不 一定轮到你头上。 另一种方法是赶鸭子上架,等你毁过一两个项目后,也就学的差不多了。 实际上,国内由于PM(真正的PM,而不是挂这个名头的程序员或者其他捣浆糊人士)不足,而公司规模又不足,足了也没有培养人才的兴趣。因此大部分PM都是通过后一个途径培养出来的—— 4.语言生态扎堆 我们开放的职位叫做python程序员,可我的邮箱里面有一半上下的人都是java和C#的资历(我不看他会的语言,而是看他资历的),其中真正有 python资历的人十不足一。实际上国内大部分的人都在学java和C#,做web和erp程序开发,大部分的小白其实扎堆在这里。真正成为3,4这个 层级人才的,java/C#/C++/python的比例其实差不多,很接近。 实际上这和当前的语言生态有关。到也不是说这个生态有问题,而是这是当前现状市场化配置的必然结果。大量的小白(6成以上)集中到6成上下的低端web、 erp和嵌入市场。这些市场的目标需求不复杂,没有重大的技术问题,服务器压力不大,因此小白足以应付。既然是小白,那就需要选择一种使用人数最多的语言 (因为最好找人)。于是两大语言集团,java和ms系列的asp,asp.net就成为必然选择。 web行业和erp行业的几乎全是ms系列和java系列的语言,而嵌入式里面则大多数是C++(当然,也有j2me,不过那不完全输入嵌入式开发的领 域,很多应当属于游戏领域),这个是受限于嵌入式本身的技术特点。C++本身也有写的好和写的差之分,但是由于程序员要控制更多的东西,因此差的程序员很 容易被识别出来,也更难在行业中生存。因此嵌入式行业的总体开发成本比web行业要高。 在我的行业中,缺少游戏行业的分析。这主要是因为我的简历里面几乎没有游戏行业的从业人员。我无法解释这个现象的成因,也许游戏正在从软件行业中独立出去,成为一门独立的体系。 6/1/2009 电脑操作与人机工程学
贝壳大学念的是工业工程,毕业导师就是人机工程学方向的,贝壳的人机工程论文就是按钮的大小和操作效率。因此,今天贝壳罕见的回归本专业,谈谈电脑操作的速度问题。 首先一点就是,无节制的优化速度是万恶之源。为什么?道理和优化程序一样。你实施一个优化必定有一定成本和代价,为了一个一个月进行一次,一次三秒钟的操 作,进行一次优化。假定你搞定优化用了半个小时——一些情况下的却需要这么长时间。这样你需要100年才能收回你的投资,显然,这很愚蠢。 那么,什么是优化,为什么要优化? 操作优化,指的是你利用一些专业和非专业的方法,将日常最常用的操作简化。减少操作次数,减少操作时间,减少精力集中的负担等等。最常见的方法是“按键精 灵”或者是快捷键。而之所以要进行优化,则是因为——我懒——俗话说,只有懒人才是好程序员。也许有人会想,那设计者为什么不设计的效率高一些?拜托朋 友,你也讲讲道理。设计者怎么知道你是要经常复制还是要经常剪切?于是他只能假定你经常剪切(或者复制)。如果不幸,你恰恰相反。也许你就需要优化,也许 贝壳的文章就能给你的工作提供非常大的便利。 那么贝壳下面逐个讲解贝壳碰到的一些优化方法和范例,具体的运行则要靠大家的发挥,没有一定的模式。如果你觉得你的电脑操作工作平淡无聊,那就说明你需要 优化了。每种优化方法需要一定的专业知识配合,贝壳会给出评价。评价有三种,适合普通人,就是说一般稍微会一些电脑的人,可以根据网络上的讲解来使用。适 合专业用户,指用电脑3年上下,电脑比较熟练的人,可以经过试验配置成功。还有疯子专用,指这个方法基本就和您无缘,除非您正好是程序员或者疯子。 首先我们从最基本的开始,鼠标,按键,快捷键,快捷键排位。这个方法适用于普通人,但是下面一段是比较专业的论述,不感兴趣的可以跳过。 鼠标和键盘是我们最常用的输入工具,而根据贝壳的人机工程论文,鼠标的输入效率低于按键。但是要注意,这个结论并不永远成立。对于某些图形操作,尤其是高 精度操作来说,键盘上可以操控的方法变成上下左右四个键,效率大大降低。如果使用其他键来辅助,这不是人类能接受的方法,疯子也不行。此时使用鼠标比键盘 效率高多了。键盘输入快的根本原因在于一般人精神集中后,一秒可以按三个键——至少也有两个。而无论精神怎集中,区域怎么大,要输入一个点击至少要一秒。 按照信息量计算,键盘的可用信息量要比鼠标大一个量级。然而,除了输入文字,键盘并不好用。根本原因在于鼠标的模式是阅读-选择,而键盘是记忆。因此,键 盘操作是用户不友好的。 通常来说,我们可以用键来定义一些常用功能,这样会加速操作。通常而言,这个被称为快捷键。例如,Atl+Tab是切换窗口,相信大多数人都知道这个热 键。这个热键好用的根本原因在于快速的在两个窗口见切换——如果用鼠标会累到死。我们可以记忆一些常用热键来加速,毕竟之所以定义常用热键是有意义的。例 如Atl+F4的关闭程序,结合windows使用可以以<win>,Atl+F4,U的顺序来关机。整个操作只要一秒,单手就可以,真是酷 到不行。Atl+Space可以唤出系统菜单,因此Atl+Space,X可以最大化,Atl+Space,N可以最小化,这两个也可以单手操作。 单手操作热键的意义在于免去频繁的键盘/鼠标切换。当你需要双手执行热键的时候,你需要半秒将右手从鼠标上移动到键盘上,再花半秒移动回去。这样就平白多 了一秒的时间——这还是高手的时间,普通人更长。对于加速操作来说,这么移来移去很没有意义。而键盘/鼠标的配合才是操作电脑的理想境界。你可以在资源管 理器里面试试一个操作,在一个文件夹内选择一些文件复制到另外一个文件夹。这是贝壳最熟悉的配合动作——因为太频繁了。首先点中头一个文件,按下 Shift点最后一个。放开键盘鼠标,按下Ctrl+C。点击目标目录,按下Ctrl+V。速度快的原因在于,Shift放开后,按下Ctrl+C的动作 基本是下意识的。这样鼠标可以轻松的去找目标——同步的。按下Ctrl+V也是下意识的,所以整个动作的时间序列是——点头一个文件,点最后一个文件,点 目标。当然,拖曳选中区域,拖曳到目标目录一样可以,而且是单手鼠标操作。只是这样一来,首先你无法添加选择零散目录——用Ctrl键就可以做到。其次如 果不小心在移动的时候松开左键,就会触发麻烦的同文件夹文件复制。因此上述方法兼顾了稳定性和速度。 也许你觉得无聊,不就是文件复制么?我点右键也可以啊。问题是,如果点击右键,再点选菜单,至少需要1.5秒的时间。比这个方法至少慢了1秒。如果你每天的工作需要整理大量的文件,我想你不会高兴遇到这个问题的。当然,如果你基本不复制文件,好吧,当我没说过。 更多的时候,我们需要定位目录中的某个文件或者文件夹。对此,你可以输入文件的头两个字母。这时候光标会被带到符合这两个字母的头个文件——我想离你的目标不会太远了吧。这个同样是双手配合操作。 5/26/2009 用简体还是繁体
作为一个使用了24年以上简体(不要怀疑,贝壳三岁开始学写字的),并且暂时还要继续用下去的人来说,这几乎是一个不用问的问题。但是,最近,贝壳考虑是
否应当改用繁体,否则真有成为文盲的可能。何为文盲呢?中国规范常用字无法写出80%以上的,我觉得就应该算做文盲了。也许这些新时代的文盲可能具有非常
高的学历,甚至会是博士。但是5个字里就有一个字写不出,不是文盲是什么? 不过最近的汉字简化修改方案,似乎有把贝壳往文盲上推的嫌疑。凡能读这篇文章的人应当都知道,所谓的汉字简正之争。简正之争,由一个汉字方案的学术争议, 有逐渐演变为一个中国,谁是中国的国家和民族之争的现象。但是,无论谁是最终标准,应当都具备一个国际语言的基础特性,即一致性。例如汉字就应该是汉字, 不能今年是汉,明年就变成了漢,再下去又是不知道别的什么。中文固然因为语言使用区域非常广泛有非常多的别字别音,而且在某些地区还是主流,但在规范上应 当兼容扩充,而非来回修改。例如山东地区,打车叫打个的(de1,一声)。打的这个词按照贝壳所见到人的叙述,应当来自南方,香港和广州(当然,也可能因 为和贝壳讲的人本人就是香港人的关系)。原来是打的士(di1shi4),的士的读音在广东话中非常类似taxi,后者在英文中是滑行的意思,比拟出租在 街上四处溜达,寻找乘客。中国在改革开放后才有了taxi,因此叫法上都学香港,才有了的士,打的,的说法。这个不在规范之内,应当考虑统一的问题。否则 若是一个香港老板跑到山东,当地人秉承圣人之乡的理念,非常热情好客的说:我给您拦个的(de1)吧。岂不笑掉人家的大牙? 汉字规范之争其实涉及到非常多的政治和经济层面的问题,但是和小老百姓关系最大的是一致性。诸位可以想想,若是您学了30多年字,一朝之间2成的字突然被 人宣布不会是这么写了。您从一个正常人就猛的变成了文盲,换您您干么?为什么台湾反对简体字?因为一旦简体字推行,社会上多数人比文盲更加文盲——他们连 读都不会,要重上六年小学。您想想,换您您干么?现在和台湾还没较上劲,咱们自己先和自己较上了。文字要改,大改还是小改?如果是小改还好,如果大修,无 疑是直接宣判了贝壳的文盲。这种情况下,还不如直接学繁体字的好。 说到学繁体字,到也不是贝壳信口开河。而是当下,会电脑的人学繁体字的成本真的不高。你仔细想想,你到现在总共用笔写过多少字呢?反正今年过年到现在,贝 壳拿笔就写过三个字,自己的名字。凡是吃饭刷卡签合同,必定要写这三个字,其他都不会写了。贝壳又长期挂在网络上看各种资料,外加高中时期还特别研究了前 秦散文,三国志(不是三国演义!)。因此简体繁体都能看。现在换用繁体,无法就是输入法切换一下,把输出简体的转换为输出繁体。对于开源输入法而言,简单 到只是码表转换。而后学会写自己的名字,学会1000常用字。基本贝壳就能冒充会繁体字拉。 其实诸多字形的修改只是小事,问题是有很多讲法的统一和规范的推行落实才是当务之急。例如,以前贝壳小学时候还有专门的课程还分辨的地得。现在出了社会发现,有多少人管你的地得?很多人一些基础的文法都有问题,在这基础上还谈什么修改规范呢。 5/24/2009 AMD64下的Google Gears 到http://dev.laptop.org/~joel/gears/下载了用吧,debian testing下正常。当然,离线还没有测试过——
5/10/2009 关于杭州飙车事件 写在前面的话。 在德國,起初他們追殺共產主義者,我沒有說話--因為我不是共產主義者; 接著他們追殺猶太人,我沒有說話--因為我不是猶太人;後來他們追殺工會成員,我沒有說話--因為我不是工會成員;此後他們追殺天主教徒,我沒有說話-- 因為我是新教教徒;最後他們奔我而來,卻再也沒有人站起來為我說話了。 ————Martin Niemoller 贝壳一直是个胆小且懦弱的人,虽然看了形形色色的事情,但是从来没有发表一点评论,连路过都没有一句。也许因为从事技术工作,贝壳清楚当今网管能够做到什 么程度。然而针对这次的杭州飙车事件,实在无法闭口不言。事情发生的地方离贝壳的宿舍不足1公里,贝壳还到那里吃过饭。想像一下,如果当时过街的是贝 壳...... 首先,按照新闻原则,确认事件是否发生。gg一下,发现以下链接(http://tupian.zjol.com.cn/05tupian/system /2009/05/08/015492581.shtml),来源是浙江在线(搜狐也是转载这里)。就贝壳所知,这个是浙江日报的运营网站。贝壳 whois了一下,根据cnnic的结果显示,这个域名的DNS服务器地址是zjdaily.com.cn,而这一服务器正是浙江日报的官方服务器。更直 接的证据来自浙江在线的联系方式,新闻中心0571-85310961,8531正是浙江日报的局号。 根据上面的原则,我们可以认为这个事件应当是真实的。贝壳进一步跟踪了新闻来源(互联网抄袭现象阿...,过程显示浙江在线转载杭州网,杭州网转载都市快报),结果在这里找到了源头(http://hzdaily.hangzhou.com.cn/dskb/html/2009-05/08/content_666555.htm)。 杭州日报的记者们,我为你们骄傲。整整三个版的报道(http://hzdaily.hangzhou.com.cn/dskb/html /2009-05/08/content_666488.htm),经过清晰明了。而且注意贝壳使用的网址,这是实体报纸的电子版,和实际报纸基本严格对 应(这个应当是方正飞旋系统)。换句话说,这不是个网络报道,而是有记者参与的,见报的真实新闻。 OK,我们认定了事件的真实性,那么整个事情还有什么好说的呢?注意下面的消息,来源是中新网,其运营商是中新 社。(http://www.chinanews.com.cn/sh/news/2009/05-08/1683856.shtml)这次问题到不在记 者这里,而在交警认定这里。我不知道交警是如何认定和下结论的。但是我来简单计算一下,如果被撞起5米高,撞出20米外,到底是什么一个状态。 假定g=9.8,整个计算过程其实就是高一物理。撞起5米高,其向上的初始速度假定为v。整个过程满足v^2=2gs=2*9.8*5,求得向上的初始速 度约9.9m/s(我没算错,你也没看错,贝壳中学物理竞赛拿二等奖的)。向上的单程时间为v1-v0=gt,带入数值为9.9-0=9.8t,上下总时 间约2秒。2秒内横向行进20米,横向速度也为10m/s。根据速度合成公式,整个人初始的速度方向为斜向上45度,速度为14.14m/s。如果我们假 定整个人体重65公斤(我没看具体体型,不过这个是一个常规中国男性的平均体重,资料来源http://ask.koubei.com/question /1306122623215.html)。当时转换的瞬时冲量达到65kg * 14.14m/s = 919.1kg.m/s。假定冲击在0.3秒内完成,那么当时的力量就达到3063.7牛顿。什么概念呢?就是在瞬间,一个能够对你产生300多公斤压力 的锤子(自身大概有1000多公斤)向你以14米以上的速度砸过来,你们接触了至少0.3秒。漫画中打飞人的原型重现阿...... 而且根据碰撞原理,人重量远远小于车,因此人飞出去的时候的速度应当是车速的两倍。(高中碰撞公式,难为贝壳还记得)当时的车横向车速不会低于 5m/s,否则人根本不可能以10m/s的速度飞出去,更何况还没算空气阻力。即,在刹车后,碰撞发生的瞬间,该车的车速不会低于18公里/小时。不知道 当时有没有人能够测量刹车过程的刹车痕长度,以及当时刹车的时间?根据这个长度和时间,贝壳可以反向算出在刹车前,这个车到底跑了多快。不过贝壳可以透露 找到一个基础数据,如果在撞车的瞬间,您在车里忘记系安全带。那么车速达到30公里/小时的时候(折合8.3m/s),您就可能发生严重危险甚至危害生 命。至于您在车外,以18KM/H的速度和车接吻。无论您带了什么东西,基本都可以领便当了—— PS.补充于5月10日: 曾经风传媒体关于此事闭嘴的传言,估计不完全属实。10日的都市快报(向他们的主编致敬)发表了三版的后续报道(http://hzdaily.hangzhou.com.cn/dskb/html/2009-05/10/content_667288.htm)。可能是曾经封口过,但是又解禁了。 关于杭州飙车事件 写在前面的话。 在德國,起初他們追殺共產主義者,我沒有說話--因為我不是共產主義者; 接著他們追殺猶太人,我沒有說話--因為我不是猶太人;後來他們追殺工會成員,我沒有說話--因為我不是工會成員;此後他們追殺天主教徒,我沒有說話-- 因為我是新教教徒;最後他們奔我而來,卻再也沒有人站起來為我說話了。 ————Martin Niemoller 贝壳一直是个胆小且懦弱的人,虽然看了形形色色的事情,但是从来没有发表一点评论,连路过都没有一句。也许因为从事技术工作,贝壳清楚当今网管能够做到什 么程度。然而针对这次的杭州飙车事件,实在无法闭口不言。事情发生的地方离贝壳的宿舍不足1公里,贝壳还到那里吃过饭。想像一下,如果当时过街的是贝 壳...... 首先,按照新闻原则,确认事件是否发生。gg一下,发现以下链接(http://tupian.zjol.com.cn/05tupian/system /2009/05/08/015492581.shtml),来源是浙江在线(搜狐也是转载这里)。就贝壳所知,这个是浙江日报的运营网站。贝壳 whois了一下,根据cnnic的结果显示,这个域名的DNS服务器地址是zjdaily.com.cn,而这一服务器正是浙江日报的官方服务器。更直 接的证据来自浙江在线的联系方式,新闻中心0571-85310961,8531正是浙江日报的局号。 根据上面的原则,我们可以认为这个事件应当是真实的。贝壳进一步跟踪了新闻来源(互联网抄袭现象阿...,过程显示浙江在线转载杭州网,杭州网转载都市快报),结果在这里找到了源头(http://hzdaily.hangzhou.com.cn/dskb/html/2009-05/08/content_666555.htm)。 杭州日报的记者们,我为你们骄傲。整整三个版的报道(http://hzdaily.hangzhou.com.cn/dskb/html /2009-05/08/content_666488.htm),经过清晰明了。而且注意贝壳使用的网址,这是实体报纸的电子版,和实际报纸基本严格对 应(这个应当是方正飞旋系统)。换句话说,这不是个网络报道,而是有记者参与的,见报的真实新闻。 OK,我们认定了事件的真实性,那么整个事情还有什么好说的呢?注意下面的消息,来源是中新网,其运营商是中新 社。(http://www.chinanews.com.cn/sh/news/2009/05-08/1683856.shtml)这次问题到不在记 者这里,而在交警认定这里。我不知道交警是如何认定和下结论的。但是我来简单计算一下,如果被撞起5米高,撞出20米外,到底是什么一个状态。 假定g=9.8,整个计算过程其实就是高一物理。撞起5米高,其向上的初始速度假定为v。整个过程满足v^2=2gs=2*9.8*5,求得向上的初始速 度约9.9m/s(我没算错,你也没看错,贝壳中学物理竞赛拿二等奖的)。向上的单程时间为v1-v0=gt,带入数值为9.9-0=9.8t,上下总时 间约2秒。2秒内横向行进20米,横向速度也为10m/s。根据速度合成公式,整个人初始的速度方向为斜向上45度,速度为14.14m/s。如果我们假 定整个人体重65公斤(我没看具体体型,不过这个是一个常规中国男性的平均体重,资料来源http://ask.koubei.com/question /1306122623215.html)。当时转换的瞬时冲量达到65kg * 14.14m/s = 919.1kg.m/s。假定冲击在0.3秒内完成,那么当时的力量就达到3063.7牛顿。什么概念呢?就是在瞬间,一个能够对你产生300多公斤压力 的锤子(自身大概有1000多公斤)向你以14米以上的速度砸过来,你们接触了至少0.3秒。漫画中打飞人的原型重现阿...... 而且根据碰撞原理,人重量远远小于车,因此人飞出去的时候的速度应当是车速的两倍。(高中碰撞公式,难为贝壳还记得)当时的车横向车速不会低于 5m/s,否则人根本不可能以10m/s的速度飞出去,更何况还没算空气阻力。即,在刹车后,碰撞发生的瞬间,该车的车速不会低于18公里/小时。不知道 当时有没有人能够测量刹车过程的刹车痕长度,以及当时刹车的时间?根据这个长度和时间,贝壳可以反向算出在刹车前,这个车到底跑了多快。不过贝壳可以透露 找到一个基础数据,如果在撞车的瞬间,您在车里忘记系安全带。那么车速达到30公里/小时的时候(折合8.3m/s),您就可能发生严重危险甚至危害生 命。至于您在车外,以18KM/H的速度和车接吻。无论您带了什么东西,基本都可以领便当了—— 4/21/2009 Linux的环境
很多专业人士的Linux是万年不换的,贝壳没有这么专业,电脑最近老换来换去的。所以列一下有什么东西是一个Linux必装的,以免忘记。其他东西就算
了,需要了再说。另外说明一下,以下列表是针对日常使用,而不是专业开发。例如python环境中的一些组件,还有一些太基础的系统组件都没有列。贝壳认
为会到这里看这些东西的人这些基础常识都应该有了。 1.firefox + thunderbird。这两个是万年组件,好用跨系统。不多说了,列一下插件。 1.1.Flash Player,adobe的能用就用那个,不能就用swfdec。 1.2.CustomizeGoogle。 1.3.Firebug,要用debian提供的包,否则无法用。 1.4.FoxyProxy,移动系统要修改about:config。 1.5.GMarks。 1.6.Google Gears,x64有定制的安装包 1.7.Google Reader Notifier,Google的产品好多。 1.8.Greasemonkey。 1.9.NoScript。 1.10.Tree Style Tab。 1.11.TwitterFox。 1.12.Update Scanner。 1.13.Session manager。 1.14.QuickText,TB插件,能够使用模板定制信件。 1.15.WebMail,TB插件,能接收Hotmail邮件。 1.16.SendFilter,能够使用发送过滤。 1.17.Enigmail,邮件加密系统。 2.Gnome-do,快速启动程序,很方便。 3.pidgin,万用IM,很强大,最好加上两个插件 3.1.msn-pecan,msn的另类插件,功能比标准的多一些。 3.2.fetion,飞信 for pidgin的插件。 4.mplayer + audacious,经典电影播放器加还不错的音乐播放器。 5.amule,emule的Linux替代品,电驴软件。 6.ibus,很爽的输入法,不过比scim的系统结合程度要差一些,也还在发展中。 7.OpenOffice,想开.doc .docx文件么?装OO3以上。 8.eclipse,很强大的编辑器,唯一问题就是太大太强了。 9.emacs + vim,推荐emacs23,自编译。比22好用太多了。 10.apache2 + mysql,啥都不用说了,日常保存一些东西,共享文件,运行一些网页程序很方便。不过对已有的人是不需要的。 11.mercurial,这恐怕是今天最专业的一个组件了。这个组件的目的是分布式的管理文件版本。对于大多人来说,最大的好处是可以本地化的管理自己的一堆文件,以及处理各个版本。 12.comix,漫画浏览器,也是不错的图片浏览器。 13.cryptkeeper,这个是文件加密软件,内部使用encfs作为加密基础。很不错的。 14.Wine,只要想运行Windows程序,就非装不可。记得字体反虚化,否则会难看死。 15.revelation,密码管理器。 16.tsclient,远程到windows下。 17.dictd + gnome-dictionary,方便的词典系统,比stardict差点,但是不那么让人恶心。 |
|
|