Shell's Home

盗版的盗版

Dec 9, 2010 - 1 minute read - Comments

最近追书,很不好意思的,在看盗版。 最新两章,有内容和上面对不上,而且是每个网站都对不上。 联想到上次晚上12点整出书,12:10分出所有网站盗版一起出来的情况—— ——这年头盗版商都是盗来盗去的。。。 是不是该考虑花钱看书了啊。

一个产品的预测

Dec 3, 2010 - 1 minute read - Comments

简单点说,我预测客厅电脑会在3-5年成为一个潮流。下面给出一个客厅电脑的可能特性。 1.具有wifi,并且可以做AP。 设备具有wifiAP的能力后,就可以直接取代路由器。不但具有节约一个设备,而且可以做一些比普通路由器更加强大的功能。例如下载托管(关掉主机继续跑ed/bt/http),流量控制,IDS防火墙等。 同时,对于其他设备,可以逐步支持wifi标准,通过wifi操控。例如照明的自动控制,音箱音量智能感知和控制。开放的wifi标准加上UDP做起来并不太难,最大的问题是wifi芯片的成本能降到多少。 2.平均功率<20W,峰值功率<40W,体积大致相当于笔记本。 设备需要扔在电视机顶端或者下面,一直开机的。如果大小太大,或者功率太大,就没有实用意义。 3.内置摄像头和麦克风。 游戏经常需要,同时也可以支持可视电话。 4.支持VGA,支持DVI/HDMI。 兼容高清电视和显示器。 5.最高计算能力。 在保持网络流量的同时可以播放1080p的高清电影。很明显,做不到是没意义的。 6.120G-320G常态硬盘。 一方面是大规模下载需要,另一方面也可以作为多台电脑共享存储的外置硬盘使用。 7.具有晃动光标的遥控器。 这东西是要给普通用户用的,没有遥控器是不行的。但是一些复杂的特性通过遥控器反应太慢,通过鼠标也傻了点。可以考虑采用遥控器模拟成概念上的激光教鞭的方式,沿着遥控器顶端延伸和电视平面交汇成为一个活动光标。 这个东西的实现难点在于,电视屏幕只能发送图形信号,无法接受信号。触摸屏对此没有任何帮助,暂时可以考虑使用android暂代遥控器来辅助。android内部一定带有重力感应系统。将android固定在一个点上,通过对准屏幕上不在一条线上的三个点点击校准,可以建立起以屏幕中心为基准三维坐标系。并且根据每时刻的传感器回馈,可以知道每个时刻的方位和指向。通过这些数据,可以轻易算出交汇点。当然,使用wii类似的系统是个更好的思路。 问题 1.wifi信道不足 要是多几个家庭使用,即使交错信道,每个信道上可用的带宽也会降低到10Mbps以下,折合大约1MB/s。这个速率对于高清电视太勉强了些。比较直观的解决方案是802.11n。 2.成本控制 上面的参数可以看的出,这种东西的主系统硬件不会小于1000。加上各种研发开销,运营成本,要把价格压到1500-2000才有竞争优势。否则主机也就2000-3000,买个客厅电脑,又没有显示器,又不能打游戏。 3.晃动鼠标的技术不成熟 设想很不错,技术不成熟。

在中国,高薪养廉是个伪命题

Dec 2, 2010 - 1 minute read - Comments

高薪养廉的基础逻辑是什么?公务员薪水不够高,就无法维持公务员的廉洁,所以需要给高薪。 恕我直言,在哪里,这都是个伪命题。我们可以看一下这个命题前半部分的逻辑,应用德.摩根率后,我们的结论是“公务员廉洁,他的薪水必定够高”,而不是“公务员薪水够高,就可以维持公务员的廉洁”。在中国,关于后者,有个再直观不过的反例。中国被判刑的高级公务员的涉案金额是多少?上千万算少的了吧,虽然这些钱不能算薪水。但是一个人,弄个千万还不能维持自己的生活么?如果可以,怎么会出现超过千万的贪腐的呢? 高薪养廉的基础,是公务员无法通过权力获得灰色收入。在这种情况下,如果只维持低薪,干的比狗累,活的比猪惨的工作势必会搞到没人想去。哪怕维持社会上的平均工资,公务员也是没有任何吸引力的。拿一样的钱,被一个老板盯着和被一群老板盯着是完全不同的两个概念。如此一来,要维持有足够的人来进行工作,势必需要将公务员的工资提高到正常工资以上。 新加坡在这类基础上,提出了一个类似保险的概念。通过加重查处贪腐的力度,和执行高强度的惩罚机制来抑制腐败。而且规定公务员很大程度上的工资都会被转移到公积金和养老金中,一旦被查出来,这些钱都会被归零。我们可以想见,高强度的惩罚机制会严重的吓阻人才进入公务员领域。花了公家2000要判刑四年?鬼才愿意去干。在这种重刑下,为了能保持公务员人数,唯一的路子只有“高薪”了,这才是高薪养廉的原始逻辑。 在中国,先把权力监督机制和执行高强度的惩罚做起来再说高薪养廉。

重载造成的隐蔽错误

Dec 1, 2010 - 1 minute read - Comments

大家看看下面的代码在什么情况下才会出错?情况很特殊,想自己思考的不要先看第二段。 if ton in self.ftol: self.ftol.remove(ton) ftol是一个list,报出的错误是ValueError。经过上文的打印,赫然发现——self.ftol中真的没有ton! 好吧,我们揭秘谜底。 ton是TimeoutObject类型,这种类型的对象通常放在一个list中进行堆排序,来确定最早的一个timeout对象。为了实现堆排序,我使用了heapq。而为了heapq是没有key或者是cmp参数的,因此我重载了TimeoutObject.__cmp__对象。然而根据python源码,list对象在进行in计算,以及基于in的remove计算的时候,__cmp__先于内置算法,内置算法先于id相同。因此,in函数在进行对象是否在列表中的计算的时候,实际上使用的是一个比较函数…这肯定无疑的会导致乱糟糟的结果。 为了解决这个问题,我又重载了__eq__函数,定义为self is o。问题立刻解决了。 之所以python内置的算法,会定义__cmp__先于内置算法,内置算法先于id相同,是因为有很多对象需要人工定义比较算法。如果id相同优先,那么这种自定义的能力将无法实现。然而为了in算符中为何会调用__cmp__,只能说是一个不解之谜。

要这么招人恨也挺不容易的

Nov 24, 2010 - 1 minute read - Comments

今天看看笔记本电池,突然想知道一下还有多少容量(不是还剩多少电,那个可以通过windows直接看到)。于是需要找一款笔记本电池查看软件。 我上网搜了一下”笔记本 电池软件”(一开始就没去baidu,刚刚查了一下,果然满屏幕卖电池和讲电池保养方案的),出来了很多中文网页。我看了看地址,是google.com.hk。 再看看这些软件,仔细看看他们的广告词,说的天花乱坠。我不由有点担心,这台电脑可不是linux,要是中毒还是挺麻烦的。 罢了,还是找google.com/ncr去搜一下battery status吧。找个外国软件虽然比较难用,不过基本不用担心里面有木马病毒什么的。 做人要做到这么招人恨也挺不容易的,明明还什么都没干呢,怀疑已经先来了。对比某些国家和地区在某个事件上的处境,我觉得不容易的人不少。

如何做一个mercurial的http发布

Nov 22, 2010 - 1 minute read - Comments

我假定你了解hg,了解python,理解nginx或者其他cgi/fcgi的配置过程。现在想用http发布自己的mercurial仓库,而且可能发布一群,怎么操作呢? 首先,复制模板文件过来,你可以挑选其中之一。以下是debian的文件位置,其他发布请自行查询。 /usr/share/doc/mercurial-common/examples/hgweb.wsgi /usr/share/doc/mercurial-common/examples/hgweb.fcgi /usr/share/doc/mercurial-common/examples/hgweb.cgi 我使用nginx+fastcgi模式部署,因此复制了hgweb.fcgi。我假定你的仓库在~/hg下面,有很多子仓库。复制hgweb.fcgi到~/hg/下,改名为hgweb.py,并修改以下两行。 config = "/path/to/you/config" WSGIServer(application, bindAddress='hgweb.sock').run() 其中bindAddress为你需要监听的unixsocket路径,没有前缀表示在当前目录生成。而后建立配置文件,大概为以下内容。 [web] allow_push = someone push_ssl = false [paths] /hg/proj1=/path/to/proj1 /hg/proj2=/path/to/proj2 以上就完成了hgweb的服务配置,/hg/proj1是你的url映射路径,/path/to/proj1是物理路径。someone是允许进行push的人,而push_ssl是允许http推送。而后,启动服务。 python hgweb.py & chmod 666 hgweb.sock 注意,这里要用screen之类的程序来启动hgweb,否则term关闭后服务进程停止,就没的玩了。修改权限是因为debian下的nginx使用www-data运行,对/home/user/hg没有读写权限,导致无法使用unixsock。 在nginx中做以下配置。 location ^~ /hg/ { limit_except GET { auth_basic "Restricted"; auth_basic_user_file /home/user/hg/users; } fastcgi_pass unix:/home/user/hg/hgweb.sock; include fastcgi_params; } 如果你不需要auth,可以自行参照nginx的配置修改。其他web服务器以此类推。重启服务后,http://domains/hg/proj1 就可以访问到proj1了。 当然,其实最后还要提一句,如果你不需要web界面,可以直接设定将文件内容直接发出去,这样也是可以做pull/push的。 参考: http://mercurial.selenic.com/wiki/PublishingRepositories

为什么高性能框架都是http的

Nov 16, 2010 - 1 minute read - Comments

很多高性能的web框架,例如沈崴的euraisa,fackbook的tornado(这两个都是python)框架,都是http的。这和我们的印象相反,python,或者其他高级语言不是都很慢么?为什么都用这个来做http服务器呢? 这个我们得从服务器架构开始说起。最初的时候,没得说,所有的都在同一个机器上,甚至可能使用cgi模式。在访问压力上去后,为了增强性能,首先被拆出去的应该是数据库服务器。而后会考虑使用fastcgi或者scgi进行部署,前面使用apache或者nginx做前端。在这个时候,fastcgi是有道理的。因为apache在静态文件处理的性能上远高于python框架(而且快数倍),而nginx在大规模静止长连接的情况下性能更优异。而且,更进一步说,在性能压力加大的时候,应用服务器会被拆分,这时候apache/nginx做反向代理很容易做到负载均衡集群。 然而,如果压力再上去呢?在这种情况下,通常考虑的两件事情是静态文件拆分单独的服务器和应用服务器的硬件负载均衡(没钱的话也得考虑LVS了)。道理很简单,即使服务器性能能无限提升,网络接口的性能也不会无限制的上升的。完成这两步后,我们再来看整个架构,会发现反向代理变成了一个鸡肋。静态文件处理?不在这些服务器上了。负载均衡,系统级有了。apache/nginx有什么用呢?难道就是把http协议转换为fastcgi协议? 所以说,要达到高性能,框架应当是直接处理http的,并且支持大量的客户进行长连接。当压力小的时候,使用nginx的反向代理模式进行工作(而不是fastcgi协议)。当压力大的时候,拆开静态文件,直接上去服务全社会。

中国有IT业么

Nov 10, 2010 - 1 minute read - Comments

中国有IT业么?大家这么多年,看着IT业红红火火,其实神马都是浮云。 1.中国有宽带接入么? 没有,你可以找中国的强制法律文件,什么是宽带。结果只有字典上的定义,而没有强制标准。如果没有一个法律意义上的强制标准区分宽带,怎么能说什么是宽带,什么不是呢?结论就是,任何人都可以说——我在用宽带。这不等于没有?在唯一的一个WIFI接入加密标准和其他国家不同的国家,一个什么标准都要自定的国家,却没有宽带标准,真TMD扯淡。即使我们不说国家强制标准,我们说国际标准。目前上国际对宽带的定义已经是4Mbps,而中国目前大多数家庭所使用的标准还是1Mbps,偶尔见到有2Mbps的。而且大多数人的网络接入价格还和5-6年前没有任何变化。即使考虑通胀,我们说电信资费其实在缓慢下降,这和电信接入高速发展的事实也毫不相符。 2.没有宽带接入又如何? 我们要知道一个事实,中国的10亿网民,事实上都在使用窄带接入。宽带和窄带的最大差别在于,窄带只能承载文字和图片内容,而宽带可以承载高清视频/声音。中国大多数网民都是无法享受高清视频/声音的,也没有机会享受in touch的信息服务。缓慢的网络速度注定你在使用网络的时候,下载到一个图片,就要在本地保存起来。下载一个光盘,就要保存起来。你不能像云端一样,将数据托管在网上,当需要的时候再下载。我们的硬盘,变成了巨型的互联网缓存器。 3.现在的互联网业不是挺红火? 贝壳原先听说过一个笑话,说眼镜一定要好好配,否则怎么怎么的。台下有人说,我的眼镜配的很好,眼睛去验光和眼镜完全一致。台上讲师冷冷的说了一句,配的不好的眼镜还有个缺点,戴个一年你的眼睛状况就会跟着眼镜走。。。 互联网也是一个类似的情况。贝壳调查的结果,很多用户并不介意接入商是否封锁P2P下载,很多用户也不介意带宽不足,因为他们只用QQ,上天涯和猫扑,早上要起床偷个菜。所以网络一定要随时通,其他就不要紧了。我们说我们的互联网业,其实是在中国的网络状况下,发展出来的畸形品。天涯,猫扑,QQ,都是低带宽时代的服务,但是直到今天经久不衰。用户黏性是一个原因,另一个原因是更强大的,具备下一代特征的服务根本跑不起来。QQ也发展过视频聊天,结果也就是网友准备找419乃至更极端的援交前要“验货”的时候用。你见过有人和朋友天天开个音频聊个不停么?有人说国外也没有啊,问题是人家手机通讯什么价钱,我们什么价钱。你见过开土豆和优酷慢到死的,土豆还专门出了客户端加速。你见过开youtube卡到死的么?中国不算。youtube在研究什么技术?高清视频分享。你试试让土豆出个720p视频分享看看?不说CDN费用,光是等待时间就会让用户跑光。 4.将来呢? 我不知道。如果中国宽带仍旧保持现状的话,在网络高速发展的背景下,中国的网络应用也许会在3-5年内就会再落后人家一代。在人家用着随手可得的高清视频的时候,我们还只能接受IPTV这种专用替代品。不过严格论起来,这也没什么,毕竟中国从来没心思在这方面真的赶超英美。。。

小公司的架构选择

Nov 9, 2010 - 1 minute read - Comments

很多大公司都是从小公司起步的,往大做的时候,往往会受到很多制约因素。架构选择不对造成的问题很多,所以很多小公司都在架构选择上精打细算。其实架构问题,在公司规模小的时候,更大程度上是一个行政问题而不是一个技术问题。 小公司的特点是人少,往往就那么几个人。这种情况下,与其说是你选架构,不如说你看看有什么可用的架构。通常来说,你要考虑的问题是。 1.你有没有可以信任的核心工程师? 2.能不能找到足够的人手做大部分的事情? 3.能不能在你要求的时间范围内把事情做掉? 4.这个架构有没有成功的例子,能不能支持大规模的访问? 当这些问题都没问题的时候,你才应该考虑,这个架构性能够高么?容易扩展么? 如果你没有可信的人作为核心工程师,项目管理和控制根本无法进行。就算要评估一下手下这些人是不是真的需要这些时间来做事,得到的结果都是不可靠和不可信的。如果找不到足够的人手做事,那除非你的核心团队能够一个人或者几个人把网站整个做出来,例如豆瓣的阿北,否则项目做做就没人,就玩不下去了。如果架构很好,但是无法在要求的时间内做出事情来,等于没用。满足了上述几点,你还得兼顾考虑一下,这个架构如果没有成功案例,是否存在隐性的风险。如果不支持大规模访问,将来的扩展问题。 好吧,作为一家小公司,我相信你考虑完以上几点后,能凑出一个框架来已经很不错了。往往是你的核心团队没有一个核心工程师,大家会几种不同的架构,而且没人能保证评估结果。 这时候,不要废话,先找个核心工程师,然后用最土的,被无数人验证过的技术来把你想做的事情做掉。 除非你的核心团队有且仅有一个核心工程师,并且这个工程师的技术能力很强,管理者和投资人也支持他冒风险。否则大部分使用激进架构选择都会带来不良的结果,毕竟大部分公司都不是以开发框架和研发技术为最终目地的公司。

QQ和360之争

Nov 8, 2010 - 1 minute read - Comments

两个流氓狗咬狗,老子一个都不用了。老子是Linux用户。。。