Shell's Home

Jul 23, 2012 - 1 minute read - Comments

snappy的性能测定

要去马尔代夫渡蜜月了,闪人前最后一贴。 方法是用python准备数据,然后用timeit进行测试。虽然因为python框架的干扰,具体时值不是很准。但是用来做数量级对比和计算足够了。原生数据是一个屏幕截图,4M的数据块。 zlib.compress: 0.054105230093 snappy.compress: 0.00374100804329 zlib.decompress: 0.0157685602903 snappy.decompress: 0.0051297039032 从结果分析,zlib是典型的非对称压缩算法,压缩/解压速度比大约是3.5:1。而snappy的压缩和解压速度在同一个数量级上,甚至在具体的数值上,压缩比解压还要快那么一点。以解压速度为基础的对比,snappy大概比zlib快了3倍。而压缩速度上,则是快了14.5倍。 由于python的干扰是在每个的时间上面增加了一定开销,通常会使得速度比更接近1。也就是说,实际上snappy和zlib的速度比比这个还要大。 另外说一句题外话。按照我们测试下来的数值计算,snappy和zlib的压缩比大概在1:2之间。zlib压缩图形资料时的典型比例是0.05,而snappy则是0.1左右。对于熵比较高的数据,zlib大约是0.33左右的时候,snappy是0.5。都是比2倍大小略小。

Jul 18, 2012 - 1 minute read - Comments

论社区制度——答各路神仙

前面一篇“论社区制度”果然非议者众多。 混淆了直接民主和间接民主 这个真没有。仔细看引用的第三个材料的第一节,民主的形式。里面就讲了直接民主和间接民主。每篇引用的材料我都大致看过,还不至于犯这么严重的错误。 民主制度其实是个恶政,除去能够保证每个人的自由,他就是公民的暴政而已。这句话不是我的原创,而是从材料2中引用过来的。原文是温斯顿·丘吉尔的一句名言,“…民主是最差劲的政府模式——除了其他所有不断被拿来试验过的政府模式之外。…”。材料2做了转述,我做了引用。 我当然不想掺和白马非马的诡辩,但是讲到民主,总不能把直接民主踢出门外,光讲自由民主制吧。如果是这样,我会直接把标题从民主制度改为“自由民主制”。实际上,在民主制度的第一小节,每次提到民主的时候,我指的都是“非自由民主制度”。关于两者用词,我参考了材料2的“自由主义”一节。如果您觉得和您自己的理解有所差异,我们可以讨论辨析一下这几个词的细微差异。 #规则需要人来执行,并不等于规则是否严格都无所谓 # 对于这点,我不反对也不赞同。我的意见是,规则是否严格由管理员说了算。如果你觉得无法接受,你可以提要求完善。他们不接受,你可以走人。你不走人,那就只有接受。 原文核心的观点是——“试图依靠严密的,没有漏洞的规则来规范所有人的行为是行不通的”。 实际上,这一观点是从哥德尔不完备定理中得到的美学观点——试图通过一种大一统的,完备的定理体系来描述整个世界是不可行的。当然,由哥德尔不完备定理进行论证太扯淡了,所以原文根本提都没提。 #多数人暴政# 这个我首先把材料引了吧。多数人暴政 维基百科。 首先,如果你看了我上面的“直接民主和间接民主”,应该同意,直接民主是能产生多数人暴政的。真正对暴民政治作出修正的,是自由民主制。自由民主制的核心思想,是强调透过宪法保障个人免受政府权力的侵犯,或者说强调对于个人和少数派的自由和权利的保护。 然而,你得承认。即使是自由民主制,控制舆论引导民意可以操控权利这一套还是不变的,只是手段更加巧妙而已。中国有一种特殊的招聘,叫做量身定做招聘。即为了保证某人肯定中选,可以为招聘加上身高必须严格等于 ,年龄必须严格等于等条件。同样,为了限制对手,而在媒体上大肆宣传,夸大对手所具备的某个特性对大众的影响,这已经不是一个很少见的手段了。当然,这和多数人暴政又有所区别。 原文的核心观点是——“在民主社会,操控舆论者操控权利”。

Jul 16, 2012 - 1 minute read - Comments

论社区制度

引言 事情的起因是shlug上的一次吵架。具体内容我就不在这里摘抄了,也不做评价。我单单说一点其实大家都应当知道,但是很多人却不知道的社区常识。 不要以为你加入了社区,就可以参与社区讨论。更不是因为你对社区做出很大贡献,社区事务就可以由你来管的。你能管的唯一事情就是退出社区。 社区管理之殇 民主为什么在社区行不通 其实严格的说,社区可以民主。debian社区事务由所有DD一致投票决定,这难道不是民主么?所谓社区不民主,指的是,非管理层不能参与社区的管理,也没有投票决定权。 这是理所当然的!如果非管理层可以在社区里面发起投票,为了迫使社区接受一项决定,可能发生很多荒谬的事情。为了说明的更明显点,我们假定一项荒谬的决定,例如社区中的每个人必须拍一张遮住三点的猥琐裸照。然后看看,会发生什么事情。 通常来说,管理员会很快会否决这个提议。如果管理员有空,甚至会题上一句——你有病吧。但是,提议的人可能基于某种利益——例如社区解散会为他带来利益,而要求强行通过这个提议。他会怎么办呢? 他会找来社区数量几倍的人入会。 我不知道一般社区有多少人,但是我曾听说一些水军可以高达10W人。无论是哪个社区,都会在这些人手下快速的被淹没。再说,就算没有10W,你又无法验证本人。一人冒充10人乃至100人也不是太困难的事情。 于是会发生什么?我估计大部分的人会直接退出,然后社区会整个倒掉吧。 当然,为了防止某些人抓住这个荒谬的例子,宣称自己的行为不荒谬。我在这里补充一句。这个例子只是说明民主投票制度在社区行不通。基于上述的理由,无论你的行为是否荒谬,这个结论都不变。 为什么严格规定在社区不通行 另一个很容易陷入的误区,是规定制。规定是一个看起来很有道理,实现起来很有道理,但是没法完全照做的东西。 我们在各个社区,很容易看到各个社区的社区规定。不许po广告来,不许随地吐痰拉,blahblah… 但是这其实不是规定,而是指导规范! 我们都知道这些规矩,但是一个行为是否符合规矩,却无法由规矩本身判定,还是需要人来判定。我们举一个发广告的例子。例如,在shlug里面,广告必须OT,和社区无关的广告/招聘/讨论,完全禁止。然后某天,一个人来发了个网站广告,是个新闻娱乐网站。理所当然,马上被禁了。他于是就叫了,为什么禁我? 因为你发无关广告了。 谁说无关,这个网站的服务器是linux的。我发上来,希望大家帮我看看有没有漏洞什么的。 ——难道你跟他争这个? 因此,严格规定是行不通的。大部分通行的都是指导规范。所谓指导规范,核心要点是各个社区不同的地方。例如有的地方可以吹水,有的地方必须严格讨论。有的地方可以发招聘,有的不行。至于执行的力度,要看管理员的理解和心情。。。 权力分配的几种形态 封建制度 在普通公司中,最基本的权力是决定公司解散和盈利归属的权力。这个权力应当归属于股东,在很多企业中,总经理其实就是唯一股东或者绝对最大股东,所以公司的最基础权力都来自这个人。其他一切权力,都来自这个基本权力。因此,我们又叫这个人大BOSS。在国企/事业单位,一般也有这么个大BOSS。貌似这都是中国化管理的常态了。 由于所有权力都来自一个人,因此你的最终目标就是让这个人信任你,并最终为你行使权力,或者干脆将权利下放给你。例如经营管理权,人事任命权,等等。这个构成了一切公司内斗的基础,其本质就是对各种分支权力的争夺。在这个过程中,下级希望尽量扩大手中的权力(例如任命,提升),而上级希望他任命的下级通过转赋获得的权力完成他的工作,好让自己的上级赋予更多权力。当然,最高层并不需要获得更高的提拔和任用,盈利是他们最大的目标。 这种权力下放和争斗,几乎贯穿了中国封建社会以来的每一处。封建社会,什么叫封建?我们忽略马克思主义者的定义。根据维基百科的说法,封建社会,指由共主或中央王朝给王室成员、王族和功臣分封领地,是一种国家管理“制度”而不是一种“社会”,属于政治制度范畴。[1] 民主制度 民主制度其实是个恶政,除去能够保证每个人的自由,他就是公民的暴政而已。[2]韩寒似乎就曾经写过一篇blog,关于一个富人和10个穷人的故事。在民主制度下,可能发生的事情是10个穷人一致投票处死富人并瓜分财产。问题是,在近代社会中,每个底层的员工/社会的公民,都希望自由。于是我们设计出种种的民主制度,并赞以为好。[3] 民主制度的权力,实际上很虚无缥缈。因为从理论上权力来自每个人,但是又不是每个人都能去行使这个权力。因此实际上权力来自于“民意”。民意这个东西很抽象,但是也很实际。大多数情况下,可以通过舆论加以控制。早在古希腊时期,政治就很明显的会受到剧场中的“政治讽刺剧”的影响。[4]近代来说,希特勒的上台也是合法选举的(当然,上台后的那些事情就是另一回事)。 社区制度 当我们说社区制度的时候,我们并不是在说社区的管理员层制度。管理员层制度可能千变万化,如果论坛是一个公司,那么可能就是封建制度,如果是纯社区,那可能是民主制度。实际上这两种我都见过。在这个小结里面,我说的是社区的每个成员和社区管理层间的互动关系。 社区的规模和定位不同,管理员的风格和个性不同,管理的方式也可能不尽相同。有的社区有完整的社区指导,有的没有。有的有管理员内部投票,有的没有。有的社区对新加入人员亲切友好,有的不是。有的干脆禁止随意加入,要加入可以,找介绍人。 不服?可以。但是社区的每个成员,实际上对社区都是没有管理权的。这也是管理层为什么叫做管理层,或者管理员的原因所在。社区成员唯一制衡管理员的,就是离开。用google的话,就是“用脚投票”。你可以自行离开,然后组建一个社区。如果你的方法,或者个人感召力确实占优。你的社区会更出名。很多社群都经历过分裂。要想看传奇故事的话,大家可以看看DivX和XviD两种视频编码格式的恩怨。不过也仅此而已了。很多社群都是熟人来玩的,压根不在乎你搞多大的社群什么的。 总结 我觉得,这个结论,是很多人都应当想的到的。但是很多时候,还是有人跳出来。也许出于热心,也许没想那么多。但是社区的事情确实不是社区中每个人说了算的,这和天下事天下人可议还不一样。包括debian社区的“蝶变”音译问题,还有shlug的ban人制度之争论。本质上都是一回事情。 引用 封建社会 维基百科 自由民主制 维基百科 民主 维基百科 雅典式民主 维基百科

Jul 9, 2012 - 1 minute read - Comments

debian wheezy下以uwsgi安装graphite

abstract graphite是一个python写的性能监控系统。这个系统是由多个分离的部分组成的。 graphite-web: 由django写的web界面系统。 carbon: 数据收集的守护进程。 whisper: 一种python写的数据库,类似rrd,便于大量的性能日志数据收集和处理。上两个组件会调用这个库。 collectd: 数据收集守护进程,向carbon中喂数据的数据源。 另外,有一点黑色幽默的就是,graphite的意思是石墨,是炭(carbon)的一种同素异形体。因此在graphite项目中,多次出现carbon这个名字。当然,另两个同素异形体是钻石(diamond)和足球烯(footballene),你就暂时别指望看到他们的身影了。 另一个用python写的,以元素命名的著名软件是mercurial。化学元素中的汞,俗称水银,符号hg。因此mercurial的命令行简写才是hg。 以上几个的结构大概是这样的: collectd(source) -network-> carbon -> writing-> whisper database -> reading-> graphite-web 下文描述了在debian wheezy下,以nginx+uwsgi模式安装graphite的过程。之所以用这个模式,是因为我的大部分系统都是python写的,同样安装在uwsgi下面。一事不烦二主。 carbon carbon有对应的debian包,可以很简单的安装。 sudo aptitude install graphite-carbon 默认的数据端口是2003,默认的数据路径是/var/lib/graphite/,这个在下文需要用到。 graphite virtual graphite有部分需要安装到系统中,因此最好用virtualenv进行安装。 cd /var/web/ sudo aptitude install python-virtualenv virtualenv --system-site-packages graphite 我假定你的安装路径是/var/web/graphite,这个在下面要反复用到。 install 在安装路径下,执行以下内容 source bin/activite pip install graphite-web --install-option="--prefix=/var/web/graphite" --install-option="--install-lib=/var/web/graphite/webapp" 注意,/var/web/graphite需要根据上面的设定自行修改,webapp是你的django基础路径。 configure 在/var/web/graphite/webapp/graphite下面,执行以下内容 cp local_settings.py.example local_settings.py 然后编辑local_settings.py GRAPHITE_ROOT = '/var/web/graphite' WHISPER_DIR = '/var/lib/graphite/whisper' DATABASES = .

Jul 2, 2012 - 1 minute read - Comments

一次韵达投诉经历

最近婚礼,碰到个挺憋屈的事情。 婚礼不是要印请贴么?老妈说亲戚都是远道来的,请贴印的高级点,把照片印上去。再把路线什么的也打一张纸,一起邮过去。我在淘宝上订购了一家婚礼请贴公司的服务,结果邮寄过来一看,货倒是对版的,但是字太小,颜色还有色偏,偏红,纸质也不算高档。没办法,1.4元就这个质量,我也没功夫去投诉什么的。直接找了另一家,好像叫上海络客,老妈跑去现场沟通印刷的。4元一份,50份,总价200。 我找韵达给邮了过去,5.21号发件,过程还挺顺的,没出别的事情。第二天,快递员给我打电话,说对方不在。我说不在阿,不好意思,您能回头送么?他说已经放门卫那里了,让我通知对方。我心说你怎么随随便便就放那里了。但是放都放了,还是尽快给老姐打电话吧。 电话到了,张姐也知道了。事情看起来到此为止咯。不,事情才刚刚开始。 我6.10号接到老妈电话,说老爹那里没收到快递。我说张姐不是说知道了么。她说,张姐去找了,没找到。我说都半个月了,才说阿。老妈说,她联系你爸的事情忙(我爸还有别的事情请她帮忙),把这个给忘了。 我X,这下篓子大了。请人过来,连请柬都没一张,像话不像话?而且还有线路图,证婚人证词,全丢了。 没办法,还有6天就是婚礼了。老妈跑过即加急补印了一套,然后重新打线路图,还有证词,再发过去。全家总动员,一天内搞定了所有材料,结果在快递上又出了问题。 韵达是不敢用了,我找的联邦。联邦总机没说啥,快递员告诉我,请柬算文件,按照邮政法不得快递。我想没办法阿,找EMS。和EMS的快递员扯淡半天,发现:他们的件都是三天内达,到时候人都在上海了。隔日达的限于特定区域,例如长三角。但是张家港又不在这个业务的覆盖范围之内。我说我加急费用行不行。他们回答我:抱歉,没这个业务,加费用也不行。我一想没办法,用毛巾包起请柬,打给联邦说我邮一条毛巾过去。联邦的业务员说,好,你别包起来,我要检查的。。。 我X,这TM扯淡劲的?咋办? 和老爹打了半天电话,听他念了半天,最后决定:他去和所有亲戚道歉,到了上海再给人家请柬。 结果婚礼那天,没线路图,四辆车(分批次走的)里面有两辆走偏。老爹车上有GPS不会用,开去了外高桥。老姐车上的GPS数据不够新,开到浦东没下出口,一路开去了浦西再开回来。 事情闹这么大,怎么也得有个说法对吧。这里面有两个问题,一个是张姐忘记和我说了,一个是韵达丢件。张姐那里是我们有求于人没办法。韵达丢件是实打实的,所以我打给韵达总部去投诉,并且看了一下单子上的快递条件。未保价的,按照运费5倍赔偿。 请柬大概10张,一张就是4元,总价40。还有各项其他材料,小礼品。加起来大概是60朝上。我报了个80。实话说损失远不止这点。光是开错去外高桥的车的油钱就多少?加上加急印刷,我接近两天的时间浪费,总数合计可能要破千。更不提这件事情麻烦而且丢面子。但是运费只有6元,最高只能赔偿30。好吧,既然是合同,我无话可说。而且主要责任确实不是韵达的,所以我就打算弄一个投诉,拿这点小钱,小惩以戒。 投诉上去,隔天(大概13号)有人打给我,说是上海网点的人。去找了,但是这么久了,找不到了。我说那怎么办。她说你想怎么办。我说这个当然是你们说怎么办。她还是问我怎么办。我说按照你们标准来吧。我估计是她被人搞的怕了,听到这个松了口气,说明天我给你带去。 结果第二天她没来,倒是有个号码疯狂的打我手机。我的手机婚礼后就被各种人狂打,估计是婚礼中方方面面的人都拿到了我的个人资料。所以我开了防火墙,就一直没接到。第二天下午(大概是6.18号)接起来,是那个送件的快递员。他打过来要我别投诉了,说可以按照东西价格赔偿。 我当场就发飙了。东西才多少钱?后果值多少钱?我让你赔个精神损失费10000你赔么?我邮递个东西,就给你们随随便便的放门卫那里,还很不耐烦的让我通知对方去拿。放门卫是你的选择,选择了就要承担后果。你要是摸着良心说你尽到责任了,我当场就打电话去取消投诉。 结果他答不出来,但是还是吭哧吭哧的道歉。刚刚做这个不容易拉。我说,这和我没关系。我投诉的是韵达,要求赔偿的也是韵达。你的处罚是韵达的决定。因为你不容易要求我解除对韵达的投诉是没有道理的。你要是真不容易,找你们领导求情阿,真不容易假不容易他最清楚。 说完我就挂了。 结果没两天,我姐给我打电话,说小伙子跑她家里去了。这下我就更来气了。事情本来就是你自己问题,最多是你和韵达的问题,你老骚扰委托人算是怎么回事呢?我坚决的没撤销投诉,隔手又打给韵达总部,投诉快递员骚扰。 总部的接线员很无奈的道歉,我们会加强对快递员的管理。我说你们处理问题的时候,左一个电话右一个电话就算了。现在快递员都跑到家里去了,我可以不可以投诉他骚扰。接线员犹豫了一下,说可以,但是这样就会加重对对方的处罚,快递员也不是很容易,问我是不是要投诉。我想想,人家也挺不容易,就和接线员实话实说了。你想法联系他,让他别再一趟趟的求情了。我再知道这种事情就肯定投诉了。 好,这个JP快递员的事情暂时告一段落。我们说回上海网点。不知道是韵达上海网点的执行会导致快递员受罚还是怎么回事,我12号投诉的,13号接到电话说隔天赔偿。到19号一点动静都没有。没办法,再打去韵达那里投诉。这次投诉他们赔偿协议不执行。然后韵达上海网点的人终于来了,说今天不过去了,三天内赔付到位。我说三个工作日吧,下面三天放假,我都不在。他们说,周一保证送过去。我说好吧,事情总算完了。 就快递一份东西,加起来耗费两天时间,全家总动员,还打了三个投诉电话,才解决问题。我细数一下里面的问题和教训,给大家做个参考,也希望知道的朋友解答一下我的问题: 按照邮政法,快递是否可以邮递文件?请贴是否算文件?如果可以,那么联邦快递有问题。如果不行,那么韵达有问题。无论如何,我可能还得多一个投诉。 如果快递不能送文件,这就是彻头彻尾的垄断腐败。 个人资料泄漏阿,结个婚,最近我的电话都快爆了。幸好早改成接听免费了。我听到广告就说,您大声点,我听不大清。然后放一边—— 如果东西比较重要,一定要保价,而且要按照结果保价。也不贵,韵达是3%收取的。如果考虑到丢件,当时我保价100,也不过是3元而已。快递总价不过是6元涨到9元,但是基本可以保证东西不丢了。如果真考虑这东西比较重要,我会走联邦(如果可以的话),而且大概会足额保价。 韵达对网点和快递员的控制和监管很差。网点有没有和我达成协议,总部不知道。网点赔偿没赔偿,总部不知道。快递员出了问题,还可以和委托人讨价还价。这根本是淘宝的加盟模式。 对快递员的处理只有赔钱,完全没有培训过快递员,什么情况下可以放门卫。如果他是先问我,是否可以放门卫,我说可以。那我这个投诉电话也不打了。 谢天谢地的是,总算投诉是有效的,投诉后对方是有反应的。如果我投诉了,责任方完全没半点反应。这家快递可以从我的联系人中除名了。

Jun 25, 2012 - 1 minute read - Comments

预言和伪预言的几项判定

人类很信算命,世界各地各种预言层出不穷。我碰到过真的预言,也碰到过假的。当然,真的预言并不代表我相信对方的宗教,或者其他的什么。只是说,对方的预言是有效和正确的。而假的预言,不消说,就是指预测是无效或者错误的。有很多预言披着各种外皮,让你觉得像真的一样。所以我提出几个观点,来区分两者。 预言的结果总是增加信息量。这是预言判定的大纲。如果一个预言没有增加信息量,那么就不是一个有效预言。 预言是对未发生事情的断言。预言的主体事件必须清晰明确。反例如:明天下午,你身上会发生一些事情。废话,只要我醒着肯定会发生事情,这种预言无论对错,是无效且无用的。 预言不得以隐喻,暗示方式说出,解释上亦不得附会。例如:推背图,爱怎么解释怎么解释。 预言的时间和地点可有可无,但是如果有则必须符合事实。如果时间,地点,事情细节不完全吻合,可以称为“带误差的命中”。 预言必须是可验证的,不可验证的事情不叫预言。反例如:下辈子你会投胎成什么。。。这怎么验证呢? 预言不可以是自实现的。反例如:很有名的股市预测者预测股市涨跌,这属于“自我实现的预言”。这种情况很特殊,因为预言本身是有效的,而且是会实现的。但是不是以某种神秘的方式,而是可知的心理学。 预言的总体必须是常人无法推测的小概率事件。反例如:你一个月内将会吃到一次米饭。废话,这TM不叫预言,叫2B。 对预言者的分析,必须注意“多次预言”,或者隐性的”多次预言“。反例如:找1000个人,然后分别为他们预测股市。你只要对一半人预测涨,一半预测跌。理论上说,应当有一个人会连续预测中10次。这是符合上述规则的预言,但是是无效的。类似手法经常用于短信诈骗,群发短信预测股市,对预测正确的再进行预测,最后就有一批人会觉得预测者很神奇,从而容易轻信对方要求代为理财的言语。 因此,承8。对不同人,预言同一事物,必须做出一样预测。 承9,如果你不能确定预言者散布预言的范围,以及范围内是否都听到同样的预言,那就是一个无效的预言。 同样承8。在预言帝,章鱼哥之类的事务面前,你要考虑总数有多少类似的预言者在进行预言,其中有一个人做出了全部正确预测是不是一件很奇怪的事情。当然,这并不否认预言者可能是真的具备预知能力。只是以统计而言,无法区分是真的具备预言能力还是仅仅是统计上的胜利。 承1, 8,判定预言的终极方式,是将预言者对于某一事务的所有预言进行收集,计算其正确率。如果这个正确率高于热噪声选择的平均正确率向上修正三倍方差,那么这个预言者就是有效预言者。

Jun 15, 2012 - 1 minute read - Comments

快速深入一门语言的几个问题

劳资明天要结婚了,今天婚前最后一个blog。 1.hello, world 目标:屏幕上打印出hello, world。 原因:不解释。 进阶:当命令行给与不同参数的时候,打印hello, 名字。给与开关的时候,打印hello, 123。 2.正则提取 目标:写一个正则表达式(或者类似的东西),从一段网页源码中找到某个标签的内容,去掉前后空格,显示。 原因:测试字符串处理能力。 进阶:支持正则扩展 3.扫描排重 目标:将某个目录和子目录下的所有文件扫描,排除重复的文件。 原因:测试文件系统操作能力。 进阶:多线程处理,注意吞吐颠簸。 4.做24点自动计算程序 目标:写一个程序,能够计算24点。要求能够自定义扩展算符。 原因:检查深度优先搜索,栈,结构设计,抽象处理能力等等。 进阶:做并发处理。有数种语言可能无法实现并发,或并发实现难度大,不美观,例如python。 5.做一个计算器 目标:做一个计算器,要求能计算1+2*3=7,并支持()。 原因:表达式解析和处理需要用到程序的方方面面,字符串处理等等。 进阶:做一个本语言的eval函数出来。 7.抓网页 目标:实现一个服务,定期下载符合规则的一批网页,解析,获得格式化的数据,并存入数据库。 原因:测试系统开发能力,基础网络库,字符串处理能力。 进阶:分布化抓取。 8.留言板 目标:设计一个留言板,将所有人提交的话保存起来,能一并展示。提交不需验证,展示不需分页。 原因:测试网络服务能力,数据库支持和多国语言支持。 进阶:防止XSS攻击。 9.异步大并发服务器 目标:设计一个异步http服务器,能对请求做出响应,添加,删除,修改数据库中的数据。不得使用现有的http框架和容器。 原因:集成性测试 进阶:不使用现有数据库,自己写一个。。。

Jun 11, 2012 - 1 minute read - Comments

multiseat简说

简述 这篇文章说的是如何实现multiseat,必须的条件和步骤等等。 首先简介一下multiseat。multiseat又叫做多座电脑,和瘦客户端(thinclient)一样,是一种降低电脑平均使用成本的方案。基本思路是,买一台稍好的物理机,然后买两个显示器和键盘鼠标,让两个(或者多个)人同时使用一台电脑。和瘦客户端一样,multiseat一般只用于对电脑计算能力要求不高的场合,打游戏的一般就别考虑了。和瘦客户端不同的是,multiseat的处理都在近程,所以在体验上会略好一些,部署时也不依赖于中心化网络。不过这些年网络设备都在改善,相差也不多。 硬件解说 显示系统 显示系统通常分为显卡和显示器两部分。multiseat至少需要两个显示器,但是两台显示器输出有多种情况。 单卡单核心双输出。一块显卡,一块核心,pci上就一个物理设备,但是可以输出到两台显示器上。例如笔记本,一个输出到本子上,一个输出到投影上。大部分机器都是这种情况。 单卡双核心单输出。又叫做单卡双核心交火。交火是一个ati术语,在nv那里叫做sli。是指用两块显卡为同一个显示进行加速,达到比一块显卡更快的情况。这一般是顶级显卡。 单卡双核心双输出。在单卡双核心单输出的卡上,一般都有两个输出。如果接入两个设备,那就是双核心双输出了。 双卡双核心单输出。又叫做双卡交火,在pci上有两个物理设备。同样是为了游戏而生的电脑。 双卡双核心双输出,两个pci-e。在上面的基础上,多接一台显示器。 双卡双核心双输出,一个pci。很少见,一般都是图形工作站。 之所以在这个问题上说这么细,是因为多X方案必须工作在两个以上核心上,每个核心分别输出一路。也就是说,上文中的3, 5, 6三种情况。我们最常见的1是不可以用多X方案的。而方案5, 6,是这么分的。一般的显卡都是pci-e的,而一块主板上只有一个pci-e插槽。所以普通主板是配不上两块普通显卡的。也不要考虑板载显卡和外接显卡的问题,卖电脑的说,大部分主板上都做了自动屏蔽。外接显卡一插上去,板载显卡自动屏蔽。 键盘和鼠标 multiseat至少两套键盘和鼠标,这是常识。 声音和外设 做的好的multiseat,尤其是搭配硬件卖的商业方案,一般都会做声音和外设隔离。你接上去的u盘不会出现在另一个人的电脑里。不过有些方案的隔离就不是那么完美,有可能只有主座有声音拉,或者是声音不能用拉。或者是自己指定声音输出到哪个设备,然后再抢耳机拉,或者是干脆多装一块声卡拉。这个问题自己留心。 windows windows下可以用softxpand[2]或者betwin[3],俗称拖机软件,不过两者的破解都不是很好找,尤其是win7可用的。windows下拖机的后果可能是,D3D加速有问题,两个人同时用的时候CPU使用率升高,其中一个人没有声音等。具体情况你设法下到试试再说。 linux 以下linux,没特别说明的话都是指debian,默认的发行版本是wheezy。 多X方案 所谓多X,就是开启两个以上的X,每个显卡一个X。这样形成的multiseat保留了原生的一切能力,包括3D加速。只要你原生显卡支持,都可以做到。多X方案的第一个显卡可以看到console,第二个只能看到图形界面,不能通过C-M-F1切换到console。 但是多X的条件也非常严格,上面列的情况1是没戏的。大部分人的电脑都被划到了这种情况。即使你有幸,弄到了3, 5, 6三种情况中的一个,也要注意,两块显卡必须是同一厂家,最好是同一型号。这点尤其对pci显卡更需要注意,pci显卡和pci-e显卡显然不能是同一型号,但是*必须是同一厂家*。 这个方案最鸡肋的地方在于,3, 5两种情况只有在针对游戏特别配置的电脑上才有效,而这种电脑本身是非常昂贵的。这和降低系统成本的初衷相违背。 Xephyr方案 Xephry是一个X的模块,他的目的是使用内存作为X的输出设备。因此Xephry做出来的X可以将显示内容再显示到其他地方,例如作为其他X中的一个窗口出现,等等。 利用这个特点来做multiseat的思路基本是这样的。首先我们将两个显示器合并成一个虚桌面,如同我们常规做的那样,左边的窗口拖一下可以到右边。然后再开两个Xephry,每个里面包含一个标准的X,包括display manager,session,window manager等等。最后每个X分别用一套键盘/鼠标。这样出现的效果和multiseat是完全一样的。 这个方案的优点是,支持众多的机器,尤其是我们最常见的1情况。但是,其缺点和优点一样明显。由于我们操作的是Xephry,而不是实际的显卡,因此会缺少一些X扩展,例如3D。而且相比原生设备,Xephry方案会有少量延迟。贝壳做过实际测量,至少在播放普通视频的时候,60Hz的刷新率没什么问题,播放无卡顿。 这个方案有一个封装好的实现,帮你做了整个过程。(不过我没有测试)叫做MDM[4]。 虚拟化拖机 无论是windows还是linux,都有一个不算方案的方案。安装一套vmware,然后将vmware在其中一个显示器全屏,再把其中一个鼠标和键盘指定给这台虚拟机。这样也可以做到multiseat的效果。使用Virtualbox/Vitrual PC也是完全一样的原理。 vmware中原生是不可以将鼠标/键盘指定给虚拟机的。关于这点,文档[6]给出了完整的解决方案。在.vmx中加入下面一行即可。 usb.generic.allowHID = "TRUE" 参考 Multiseat Documentation in x.org Softxpand BeTwin Multiseat Display Manager ourbetwin VMware拖机方法

Jun 7, 2012 - 1 minute read - Comments

从术前和术后红包说起

六六的《心术》里面曾经说到,医生比较喜欢术后红包。因为术后红包心理负担小,只是患者表达感谢而已。 听上去是有道理的,毕竟我们还是可以相信,大部分人在其他条件相同的情况下,更倾向于选择不作恶。或者说,肚子吃饱的情况下,人会选择让自己的心里好受点。从另一方面说,术后红包毕竟风险小很多。术前红包是有风险的,如果手术失败,家属可能没法和医生打手术官司,但是完全可以打红包官司。即使不打官司,给过红包的家庭比不给的家庭更容易闹事。然而术后,好坏都定了,好的就收,不好就算。 从患者角度说,听上去也很不错。做好了有红包,做不好就算。很符合我们物质激励的特性。名气大的,成功率高的医生,自然红包拿的多。而名气小的,成功率低的,则红包拿的少。这其实是一种变相的小费制度。如果把医生的工资理解为基础工资,红包理解为小费。那么要拿红包就必须有足够的成功率,所以我们预期得到的是越来越好的服务。 为什么不行? 因为手术做都做好了,谁会给红包阿,同志。 住个医院都贵的要死,一个手术下来几万没了。这是一个家庭一年乃至更多年的积蓄阿。要说再去给医生红包,很多时候红包真的就变成红包了——也就100,200图个吉利,很多时候还毛都见不着。 其实术后红包的不风行,正是能证明医生有意图希望收到红包的证据。毕竟医生也是人,9年医科念出来,再熬个10年乃至更长,他也是希望获得与之相称的收入的。什么叫做与之相称呢?医科大学不好念,能进去的学生,同等分数的,读一般学校,熬20年后是什么水平?一年30W都算混的差的。医生不收红包的情况下,一年有30W么?同样,我们再拿专家说。普通医生再熬个20年,一年收入期望多少?你说专家不收红包,一年收入多少? 不收红包人家心里能平衡么?要收的话,能等术后么? 所以,即使有风险,也肯定需要收你的红包。如果不缴怎么办?肯定要变着法的杀鸡儆猴,否则这事情就没法干了。 所以,很容易的想到。既然目前术前红包是潮流,那么: 1. 医生肯定是希望收红包的。 2. 无论比例多少,肯定有被杀掉的鸡。 但是,我并不是说,红包就一定是糟糕的。如同我刚刚说的那样,如果我们能像交小费一样的缴红包,如果红包的机制透明化,无疑,对双方都是一个很有利的事情。成了才收钱,不成就退掉,只收成本。把医院的收入和手术的直接成功率挂钩起来,这样才能提高医院的水平——当然,贵的事情另当别论。 其实,中国的医改,正在扭曲和纠结的路上越走越远。看病贵,本来是医保的事情,要医院解决。医院是什么地方?同志,医院是营利性社会机构,不是福利院阿。就算你说医院是社会性的,医院应该便宜,医院应该像福利院一样,那也得政府给钱阿。别跟我说医保,医保针对的是个人,你进去看10W,国家报销8W,和医院没什么太大关系的。你有医保,看病确实像福利一样便宜,没有?那就像扒皮一样贵了。 而且医保降低了一些人的价格的同时,又产生了供需问题。你可以看看,天天往医院跑的,有多少是老干部,有多少是民工?往往老干部连破了个伤口都跑趟医院的同时,民工连大病都不敢去医院。这道理想想就能明白。一样的包子,卖你2块,卖他10块,你说天天往这里跑的是谁?实际上,老干部被过度医疗了,而民工则是医疗不足。不得不说,这是对中国“劳动最光荣”的极度讽刺。

Jun 6, 2012 - 1 minute read - Comments

一个超微模板系统

re_tmpl = re.compile(’<%(.*?)%>‘) def template(s, d): return re_tmpl.sub(lambda m: str(eval(m.group(1), globals(), d)), s) template(’<%“ddd” if abc else “eee”%>‘, {‘abc’: 1}) 限制挺多,只能在<%%>中写一行代码,不能多行。不能用跨区块的if for等控制结构。但是对于功能需求不复杂,需要可变性强,又不希望引入额外库的地方还是非常实用的。