Shell's Home

Nov 22, 2010 - 1 minute read - Comments

如何做一个mercurial的http发布

我假定你了解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

Nov 16, 2010 - 1 minute read - Comments

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

很多高性能的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协议)。当压力大的时候,拆开静态文件,直接上去服务全社会。

Nov 10, 2010 - 1 minute read - Comments

中国有IT业么

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

Nov 8, 2010 - 1 minute read - Comments

QQ和360之争

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

Nov 4, 2010 - 1 minute read - Comments

单纯评价制度的影响

下面的讨论对事不对人,请不要自行套上OOXX的内容,谢谢。 我们假定有个游乐园,叫做OOXX游乐园。有很多投资人,时髦点,叫做股东。他们不亲自管理游乐园,于是他们找了个经理。大家知道,游乐园经营的好坏,经理起很大作用。所以股东要评定经理的能力,并给予相应的报酬,这样才能刺激经理努力工作。那么我们如何评定经理能力呢? 首先我们想出的最简单指标是入园人数,不过很快,也被我们推翻了。很简单,如果我们和经理约定好他的工资和入园人数挂钩,他上去干的第一件事情就是打折和送票,哪怕每张票是亏的都好,只要入园人数满了7KW,他就可以拿高薪了。亏本和他有什么关系呢? 第二个方案是通过总收入来衡定。好,这个方案看似没漏洞,不过很快,也被我们找到了一个漏洞。经理可以给员工高额回扣进行门票销售。例如,一张门票的通常价格是20,经理可以将门票价格提升到100,但是员工内部卖出去的票,给予员工80的回扣。在计算的时候,回扣是按照人力资源成本来计算的,门票是按照纯收入来计算的。 第三个方案是通过盈利来衡定。这个稍微难钻空子点,不过只要这个经理有任职年限,也还是有办法的。这个经理可以在每年的年底,预销售一些游乐园的打折券和团体券,并且每年逐步扩大预销售规模。这样会让每年的财报非常好看,但是,出来混,迟早要还的。这个经理拿了全部的奖金,直接离职走人,下一任看到数以百万计的人拿着打折预销门票入园,为了保住自己的饭碗,只有卖更多的打折预销门票。直到整个年度的所有客流全变成预销门票的时候,戏法就变不下去了。 也许有人会说,怎么有那么傻的事情啊,这些方法看一看就知道了。是啊,问题是,我们的题目正是,单纯评价制度的影响。如果不通过常务股东大会来制衡,动态的改变博弈方式,而仅仅通过单一的参数评定方法。那么经理有无数的方法来钻漏洞,走空子。

Nov 3, 2010 - 1 minute read - Comments

twip在hawkhost上问题的解决

这两天twip的api不正常,跑上去看看,有个错误。 **Fatal error**: Cannot redeclare class OAuthException in **/home/shellcom/public\_html/apis/include/OAuth.php** on line **8** 这时候,找到include/OAuth.php,改成这样。 #class OAuthException extends Exception { # // pass #} 问题就暂时解决了。 这是因为主机上新装了什么库,这个库自己也定义了OAuthException(会定义这种异常的,估计是OAuth库)。所以,把这个自定义的异常移除,问题就暂时解决了。

Nov 2, 2010 - 1 minute read - Comments

圣元蒙牛,谁冤枉了谁

止尿喝三鹿,丰胸饮圣元。圣元奶粉性早熟事件还没过去,又出来蒙牛陷害说,大家打架打的真热闹。最终用户可不管到底是谁冤枉了谁,总之,圣元蒙牛统统不买。现在国家立法尚屡禁不绝的外国邮购奶粉就是证明。 圣元和蒙牛陷入罗生门,显然是国家,或者说行业失去信用的标志。如果行业有足够的信用,只需要相关部门辟谣,就可以澄清问题,挽回影响。然而现在我们看到的情况是,相关部门越辟谣,越是没人买。想想也没什么奇怪的,阜阳大头娃娃,三鹿,熊猫,中国在过去的五年内出了太多的奶粉问题。光是出问题到罢了,关键是出了问题后对责任人的追究和对受害人的补偿。三鹿倒闭和收购,对受害人的清付实际为0。换句话说,受害人,凡是拿到赔付的,都是从我们的税中来的。说到这里我就气不打一处来,卖奶粉的造的孽,你让我一个玩IT的顶缸。而且凡是对国家赔偿不满意的受害者,现在也没什么实际的追偿渠道了。这实际上告诉所有人,国家给你的,你就拿着,想多要的,这点都不给你。 这种蛮横和无理的做法,果不其然遭到了天下所有家长的反对,邮购奶粉盛行一时。没追偿机制,我不喝总行了吧?结果国家又制定法律,从国外邮购需要收税,而且很明白就是冲着奶粉去的。实话说收税到不是什么错误,邮购国外产品早该收税了。但是这能让不放心的用户买国产货么? 你们继续打你们的去吧,我去喝米汤。。。

Nov 1, 2010 - 1 minute read - Comments

ubuntu release party

会开完了,流水帐就不记了,总结几点问题,以后注意。 1.抽奖程序可以当场写,逻辑一定要事先验证。这次抽奖程序的逻辑出现了重大误差,所有值抽完后才去更新命中集合,导致样本空间和总空间相差不大的时候重复中奖。 2.人无任事事不应人。志愿者不知道应该做什么,求助者不知道应该找谁。那天Thomas说他忙不过来,但是其他人又聚堆聊天就是个明证。 看上去找个专门的人进行前台咨询是个很有道理的做法,最好找个MM,问明白求助者的意图后推给合适的志愿者。 3.位置错误。大会上的人基本分成两群,一群是lug里面的,或者在圈子里面的熟人。另一帮则是专门跑过来的新手,还有当地的学生。前者在左侧大门聊天,阻挡后者的视线。大会的基本目地就是增进交流,聚众聊天无可厚非。但是聚集在显示屏前位置很不合适,这主要是因为圈子里的人基本在第一排入座,互相一找就聚在了显示屏前。 这种问题纯是现场场地问题,下次应该找个不干扰的开阔地给圈子里的人扯淡用。 4.秩序混乱。在一等奖领奖的时候,出现了一个人上去拿了东西,发现给错人的状况。 主席还不知道cheng说了一点很要精确的观点,我们没有事先登记。类似大会应当设立前台登记并发放名片卡和编号,这样做有几个好处。首先是组织方获得了潜在的用户名单,其次是大家互相交流的时候比较直接,至少知道对方怎么称呼,最后是抽奖的时候不会出现自行核对号码的难题。这次是按照座位号,没有出现太大混乱只能说受众素质还不算太低,或者我们的奖品他们不感兴趣。否则以中国人的聪明,只要座号相似,大家上去浑水摸鱼主办方也是有口难言。 5.缺乏引导。这个问题最严重,主要是30人的三等奖领取混乱,礼品发放混乱和哄抢。 礼品发放混乱和哄抢和三等奖的领取混乱是类似问题,都是组织者没有合适引导。Thomas认为这是个素质问题,我觉得这应该是组织方问题。任何open party,对应低素质人群是基本预案。中国人的一大毛病是只会听别人口号行事,没人喊口号就不知道该怎么动了。三等奖的时候大家还不错,总算都是从左边上台。虽然情况稍稍有些凌乱,还在可接受的范围内。要是有几个右边上台的,情况就更乱了。而且没人说的话,台上的人也不知道要不要留一下,让下面拍个照什么的,还是直接下去。奖品发放也有类似问题,没人告诉拿奖品的人,奖品数量,怎么排队,怎么退场。就看到半个场子的人一拥而上,Thomas瞬间被淹没了,然后在那里狂喊大家守秩序,有点素质。问题是这时候,谁知道秩序是什么东西呢?通常应当事先告诉拿奖品的,有多少奖品,从右边排队,领取后不要停留,左边快速退场,并且派人规劝。虽然即使这么做了,也不一定保证顺利,但是场面功夫还是要做的。 总结一下几点可改进的要点: 1.事先一定找人发卡片,让用户填写后挂在自己身上。组织方可以自行留录副本。 2.找个专门的,不影响活动的区域给志愿者。 3.找个前台MM,所有问题都找她,她再介绍专家。 4.事先验证抽奖程序的逻辑,这个是我的问题,自行解决。。。 5.除了主持人外,要有适当的人作为台下的协调和引导者。 不过总体来说,这次release party的效果还不错,社区组织发生混乱本来就在意料之中。多来几次组织者有经验就好了。 另外,事后我们集体跑去Thomas(不是台上的鬼鬼小朋友,而是Debian的DD,他的名字是法文,s不发音)家里扯淡吃东西,打德州扑克打到三点。贝壳第一次玩,赢光了其他所有人的钱,哈哈哈哈哈哈哈哈。

Oct 20, 2010 - 1 minute read - Comments

疯言疯语(六)

1.我们怎么确证世界存在 我们如何确认世界是存在的,而不是被想象出来的呢?首先,我们不能询问世界上的某个人,因为既然这些人是被想像出来的,那么在询问的时候,存在可能,这些被想象出来的幻影会集体欺骗你。其次,我们不能通过查探世界的特性而确证,因为这个世界的逻辑和存在,可能被调和成某个内在逻辑基本一致的情况。直白的说,这个想象的主体,只要自己有一套世界存在的观点,并且坚信自己的观点,那么你对世界特性的任何查探,都将是基本一致的。 结论是,我们无法确证世界的存在,我们只能相信它。 2.科学也是一种信仰 科学家必须相信,逻辑是稳定的,一致的。无论我们是在一个真实的世界中,还是在一个虚幻的世界中,我们都可以研究周围事物的特性。然而作为科学的必要条件,集合论和逻辑学等思考科学必须是一致的和稳定的。例如,我们通过观测,一只比门洞大的猫无法通过门洞,一只比门洞小的猫可以通过门洞,并且重复观测到多次。经过同行确认后,我们可以归纳出结论,凡是比门洞大的猫都无法通过门洞。其中的逻辑就是一般归纳法。然而,如果一般归纳法是错误的呢? 当然,我们也许可以说,这显然是成立的。然而在这里,你就犯下了逻辑思考的第一个错误。你已经“相信”归纳法的成立,在你确证它成立之前。然而,我们反过来,如果我们不相信任何思考科学的成立,那么我们什么都无法做。于是,我们凭借常识,*believe*基础逻辑学和集合论。所以,我们观测和归纳世界,得出整个科学系统。 显然,这种系统也是一种基于信仰的系统。如果我们换位言之,我们不相信逻辑学和集合论的显然存在(而且这可以被逻辑学部分的自证),相反信仰一个超自然的存在。当然,在这里使用某个具体的神祗并不合适,所以我借用飞天面条神。那么,根据神的信仰系统,我们的观测,和逻辑系统,都是被神故意设定成如此的。由此,我们也可以得到一个部分自洽的系统。除了——唔,当然,要我相信逻辑学是成立的比让我相信某个飞天面条怪物的存在更容易一些。 3.我们的终极问题 世界是真实存在的么? 世界从哪里来? 世界最终会结束么? 物质可以无限细分么?无限细分的结果是什么? 世界有边界么?边界之外是什么? 我为什么成为我?