Shell's Home

一个老段子,房价是什么

Apr 18, 2011 - 1 minute read - Comments

人生就是一场PK,我们出生后就是这么被教育的。你们需要通过PK,来赢得人生,朋友,女人,孩子…. 现在我们开始第一轮的PK,本轮考试优胜者将得到100分的奖励,而且可以在第二轮PK中获得更有利的条件…. 现在我们开始第二轮PK,本轮优胜者将获得200分的奖励,并且可以在第三轮PK中获得更有利条件…. 现在我们开始第三轮PK,这是你们努力12年的目标,本轮优胜者将得到1000分的奖励,1000分! 我们还有额外复活赛环节,参加复活赛的可以继续PK,赢得额外的500分满分奖励…. 好了,最后,我们进入场外互动环节。我们将随机抽取,给予每人1-100W分的随机奖励分………………………

python解0-1背包问题

Apr 14, 2011 - 1 minute read - Comments

女朋友的单位需要解一个背包问题,说白了就是算票。通过有限的票,凑出最接近一个数字的组合来。 这个是经典问题,不过票数比较多,我本来用随机划分,然后一次优化一步的随机算法,凑出一个接近的数字。这样算法比较快,不过不是很准。 女朋友领导发话了,时间长点可以接受,但是最好准点。 照做吧,幸好这个算法算100张票子也就是10秒不到,这还是mini-itx。 下面上算法,具体算法猛击这里(http://www.oiers.cn/pack/Index.html )和这里(http://zh.wikipedia.org/wiki/%E8%83%8C%E5%8C%85%E9%97%AE%E9%A2%98 )。输入是数字列表和目标,输出是组合和误差。f[i]是目前为止,最大代价为i所能获得的最高收益,以及组合方式。numlist是二维数组,分别是代价和收益。 def resolv_dym(numlist, target): f = [[0, []] for i in range(0, target + 1)] for c, w in numlist: for v in range(target, c - 1, -1): if f[v - c][0] + w > f[v][0]: f[v][0] = f[v - c][0] + w f[v][1] = f[v - c][1] + [(c, w), ] return f[target][1], float(abs(target - f[target][0])) 当然,在这个特例里面,代价和收益相等,所以下面是真实代码。 def resolv_dym(numlist, target): f = [[0, []] for i in range(0, target + 1)] for i in numlist: for v in range(target, i - 1, -1): if f[v - i][0] + i > f[v][0]: f[v][0] = f[v - i][0] + i f[v][1] = f[v - i][1] + [i, ] return f[target][1], float(abs(target - f[target][0])) 完毕。

论不同系统和客户端的证书管理

Apr 13, 2011 - 1 minute read - Comments

上面刚说完x509证书链系统,现在我们说说各种系统和客户端下的证书管理吧。理论上说,系统只要保留一份根证书系统,其余的会自动进行计算。但是杯具的是,不同系统的不同应用,使用的是不同的数据库。这导致你的根证书导入之路漫漫而修远。 windows系统: 1.系统证书管理 在运行中输入certmgr.msc,就可以看到证书管理系统了。根证书管理在“受信任的根证书颁发机构->证书”下面。对证书文件进行查看,导入,然后导入到这个区域,就可以变成根证书了。要吊销一份证书,删除是不行的,因为会自动加回来。加入“不受信任的证书”好像也无效。我找到的比较实用的方法是右击看属性,“停用这个证书的所有目地”。再试试看?证书应当无效了。 2.firefox 火狐的证书系统是独立于系统证书的,因此在windows中做的修改对firefox无效。需要到“选项->高级->加密->查看证书”中(windows下在工具菜单下),在“证书机构”选项卡,导入证书,而后启用所有用途,让证书生效。如果要吊销,跑到同一个地方,删除证书,或者编辑,取消所有用途。需要注意的是,当你删除证书后,再次查看证书列表时,证书会回来。但是此时编辑证书,可以看到,所有用途都被取消了。 3.chrome chrome在windows下使用系统证书,因此不要用chrome自身的证书管理系统,直接修改系统证书就可以。 linux系统(debian): 1.系统证书管理 运行dpkg-reconfigure ca-certificates,会出现让你配置系统证书的界面。这是系统的证书数据库,自动配置的话好像不能添加,只能取消。你反选某个选项后,/etc/ca-certificates.conf中,对应这个选项的行在行首就会出现!。此时系统内就不再认可这份证书。因此推测,如果你需要自己加入一份证书,需要将证书添加到合适位置,编辑/etc/ca-certificates.conf,加入路径,再执行dpkg-reconfigure ca-certificates或者update-ca-certificates进行更新,此时程序会更新/etc/ssl的某些内容,证书就安装上去了。 2.firefox 同样是独立于系统的配置,基本操作和windows差不多,不过linux下面“选项”在“编辑”下面。 3.chrome linux下面的chrome可以在“首选项->高级->证书管理器”中,选择“授权中心”。导入后修改权限即加入。注意需要使用禁用,而非删除对应证书,来阻止某些证书。 这里面说的加入证书,基本是加入自己的证书。至于移除,基本说的是cnnic。cnnic证书有什么危害?目前没有。如果你相信中国的互联网是世界上最开放的互联网,那么下面一堆不看也罢。不过,如果你不相信中国政府颁发出的证书,还是移除的好。在系统内保留一个不受信任的根证书,可能受到证书替换钓鱼。简单来说,你访问一个安全网站的时候,这个网站的证书是如何颁发的,你留心过么?在地址栏网站logo那里右击,查看证书,再找到证书链,你就可以看到,这个证书属于谁,是谁颁发的,这样一个链条。想象一下,你在用gmail的时候,心血来潮看了看域名证书,发现颁发者是CNNIC SSL(google的颁发者是Thawte)。很明显,你访问的网站不是真的gmail,而是一个伪装的网站,将你的请求再转到gmail服务器上。这个网站没有gmail的证书,不过用CNNIC签了一个。于是你的所有请求,收到的邮件内容,发出去的内容,全部被公开了。你也不知道这个替换什么时候进行的,由于安全验证可以通过,系统也没有警告你。是不是有种看到日本恐怖片里面,贞子爬出屏幕的感觉? 当然,这个是一个特例,有点危言耸听。因为对于某些国外CA,证书也是乱发的。基本只要交钱,给一份材料复印件,一样可以通过审查,得到一本CA证书。然而,这种证书通常比较容易被发现,CA也会很快吊销这些证书。如果不是这样,这些CA往往也会被各种系统加入吊销名单。不过对于蓄意产生的CA证书么,就难说的很了。附上一个用于检测CNNIC证书的网站,https://www.enum.cn/。 另一个风险证书则是comodo,早些时候,这个公司被黑客入侵,导致黑客给自己签发了一堆证书。虽然目前这些证书已经被吊销,不过这种安全公司让人一点信任感都没有。最好果断删除。

说说x509证书链

Apr 11, 2011 - 1 minute read - Comments

x509证书一般会用到三类文件,key,csr,crt。key是私用密钥,openssl格式,通常是rsa算法,爱咋用咋用的。csr是证书请求文件,用于申请证书。在申请的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。crt是证书文件(windows下面的csr,其实是crt),是签署人用自己的key给你签署的凭证。通常签名证书的时候都需要一个序列号,避免两个证书重复,当指明序列文件后,被签名证书会使用这个文件,并且文件会发生变化。另外一个额外说明的东西是dh参数,做openvpn的时候需要这个东西,大致是什么算法的初始参数,在下面有生成方法。 key的生成方法: openssl genrsa -des3 -out in.key 2048 这样是生成rsa私钥,des3算法,openssl格式,2048位强度。ca.key是文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法去除。 openssl rsa -in in.key -out out.key 输入密钥后,out.key就是没有密码的版本了。 csr的生成方法: openssl req -new -key server.key -out server.csr 需要依次输入国家,地区,组织,email。最重要的是,有一个common name,可以写你的名字或者域名。如果为了https申请,这个必须和域名吻合,否则会引发浏览器警报。 crt生成方法: openssl x509 -md5 -days 3560 -req -CA ca.crt -CAkey ca.key -CAcreateserial -CAserial ca.srl -in server.csr -out server.crt 输入key的密钥后,完成证书生成。-CA选项指明用于签名的ca证书,-CAkey选项指明用于签名的密钥。-CAserial指明序列号文件,而-CAcreateserial指明文件不存在时自动生成。 openssl req -new -x509 -days 3650 -key ca.key -out ca.crt 这个是用于生成自签名证书的。 dh参数生成方法: openssl dhparam -out dh1024.pem 1024是位数,一般1024已经够了。 x509的证书链是这样的。crt上有证书持有人的信息,持有人的公钥,签署者的签名。当你安装了一个证书后,就信任了这份证书。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。 在系统开始的时候,会自动安装信任一些证书机构,这些被称为根证书机构(CA)。根证书机构会为其他公司颁发证书,用于各种用途。当然,被签署的证书也可能是一份“可签署证书”,这样就要检查对方的资质。这样逐层签署,就会形成一个叫做“证书链”的东西。从拓扑结构上来说,其实应该是森林结构。

为什么我觉得拿版权较真的人都在扯淡

Apr 8, 2011 - 1 minute read - Comments

重申一遍,我不反对版权,我只反对使用版权牟取暴利。 什么叫暴利?我是个程序员,我做一个软件出来,我希望用我软件的人能给我点钱,对得起我的工作。或者最起码,不要拿着我的软件改的面目全非,在里面安放病毒什么的。这就是我对知识产权/版权的全部诉求——我希望得到收益,这个是一种尊重,也会激励我更好的做别的软件。 然而今天,我们往往碰到这么一个情况。在校的时候,我们看到漫天的,学XX语言吧。同学老师都在讨论XX技术,彷佛美好的未来向自己招手。等到了工作时,发现,原来XX技术是XXX公司的专利,以此技术为核心构架程序,尤其是企业级程序必须向XXX公司交费。好吧,用东西付钱天经地义,哥回头也做个值钱的东西出来。做着做着,XXX公司又往往会三天两头变来变去,做一些你觉得技术上说不通的,很恶心的变更。当然,人家的东西,人家说了算。等自己做了很久后,发现自己用心做出的XXXX技术压根无人问津,因为XXX公司又推出了和这个技术相近的XXXX技术。他们曾经开出一个天价——天下最低的价——来购买你的技术的全部权利,并且宣称,自己的收购价这么低而权利费这么高,是因为在策划,宣传,包装,完善上花费了巨额投入的原因。这时你才发现,原来当初在学校里面,还有OOO语言可以选择。一切都是免费的,你不需要付钱来用别人的技术,当然产品多数也是免费给别人使用的,通常也只能收服务费。一切都和你想的差不多,只是——你当时根本不知道。 宣传,策划,包装,完善到底要花多少钱呢?这个和中国移动到底从我们的手机账单中支出多少到基础设备建设,支出多少到服务一样,是个很难揣测的概念。然而我们可以知道另一个东西——他们的资产回报比——一般是多高。一切拿着策划,宣传,包装,需要花费巨额费用来说事,但是自己却有超高资产回报比的公司,哥都认为是在扯淡。 更不提因为XXX技术和OOO技术针对的客户群接近,就无视两者根本没有血亲的事实,打官司指控OOO技术抄袭XXX技术,企图将松散的社区送上死路的动作。这其实不是为了给程序员更高的回报,而是出于资本的贪婪。版权/著作权应当保护作者的利益,而不是资本的利益。这就是我对版权/著作权的态度。 夸张?松茸叔叔说过一个很有趣的内容,因为是豆瓣广播,链接不好找,我就不贴了。“从前有群人喜欢吃狗不理包子,他们搞了个狗不理包子同好会。后来有天来个人说,我是狗不理新老板,你们借用狗不理的名字,这是亲,呃,侵了我的权,你们得散了。于是他们只好改名为包子同好会。好笑吗?如果JavaEye没说谎,这就是Oracle对他们干的事情。”

决定了,以后增加一个标签叫评论

Apr 7, 2011 - 1 minute read - Comments

看了看日志,发现很多人还是在乎别人的评价是什么的,经常有搜索“XX怎么样”之类的关键字跳到我的blog上。最近在挑一些东西的时候,发现,确实,别人的评论很重要,尤其是负面评论。 所以,决定了,以后就增加一类叫做评论,专门就是评论看到的各种东西的。当然,负面评论多正面评论少。不过大家别以为负面评论少是好事。10块买个手电筒,负面评论最多是“不够亮”。6000买个ipad2,你看看能出多少负面评价。 ——可是你愿意弄个ipad2还是弄个手电筒?

baidu和google的选择

Apr 6, 2011 - 1 minute read - Comments

baidu是个很垃圾的公司,我坚信。 但是再垃圾的公司也有他的用途,例如baidu mp3是个很好用的服务。google会和你JJYY版权问题,百度不会。 不过,有利也有弊,google上只是有广告,baidu上只要有钱,出什么都不奇怪。例如这个: http://www.douban.com/note/128688737/ 所以,如同文章说的。你要找信息的时候还是找google吧,baidu上全是广告。你想投资,怕被骗?别去baidu,那里全是广告,至少是软文。也别去天涯mop,那里也全是软文。即使你一对一的去问人,也不知道那ID后面是不是枪手的马甲。上google,搜全世界的blog,独立主机,那里也许有你感兴趣的东西。 当然,你要找广告的话就别找google了,不够多。 另外,该骂的,骂出来。老子布衣一个,还能怕谁呢?

twip在LiteSpeed上碰到403问题的解法

Apr 2, 2011 - 1 minute read - Comments

这是一个老bug了,具体问题看这里(http://code.google.com/p/twip/issues/detail?id=80 )。 当你使用o模式,到twitter上同意后跳回来,就会撞上403。 不管他,当时你的url应当是http://xxx.com/path/getapi.php?api=http://xxx.com/path/o/username/token。xxx.com是你的域名,path是路径,username是用户名,token是一个随机的数字。 用http://xxx.com/path/o/username/token,直接上去。

作家们和百度的战争

Apr 1, 2011 - 1 minute read - Comments

作家们和百度打起来了,真是让我情何以堪呐。 照理说,作为一个码工,怎么也算是码字工的同行,应当对作家们表示一下支持。但是我又是个开源免费的爱好者。为防止有人搞不大明白啥叫开源免费,我简单解释一下。简单来说,就是拿着自己的东西在那里叫卖,来吧都来看吧,白给不要钱,还送设计图。作为正常中国人,也许很难理解这种脑残行为。不过事实上,这一切真的发生了,而且在全球范围内轰轰烈烈。 不过这让我的立场就尴尬了。唔,怎么说呢?我们还是把这件事情拆开说吧。 1.百度有错么? 我没仔细看,不过依据我的推测,作家在看到自己的作品出现在百度文库中之后,告知了百度,百度却没有积极的配合移除。实话说,这个比较符合我对百度的一贯认识。上次百度因为类似问题,还和盛大吵起来过。当时百度那位发言人的言论,让我颇为惊叹——这么好的人才怎么就没去中宣部或者外交部呢? 系统里有他人作品并不是原罪,但是别人告诉你,别收录,你还不当回事情就是了。想不被收录进去还要交钱,你当自己是中国黄页么? 另外做一个不负责任的猜测,说百度和此事无关,也未必完全无关。百度当年曾有要求其他公司购买自己排名,不买就把对方的关键词指到自己身上的记录。我怀着恶意的猜测,若是百度文库的产品经理发现自己产品没人用,找一堆枪手以普通用户身份上传也是有可能的。可惜事出有因,查无实据。本段落仅供一笑,切莫当真。 2.普通人的态度? 我和女朋友说过这个事情,她的态度是,趁着百度没关,赶快上去看看。还看到一款百度和爱国者推出的电子书,等于免费看很多作品。于是感慨早知道不买kindle,买这个了。我坚决的劝下了她,这种擦边球是不稳定的,投资硬件实属风险,买下来谁知道哪天就白买了。verycd殷鉴在先,百度文库也难说的很——果然,没几天李彦宏出来说话,管不好就关。算不算数倒是另说,要是买了那个电子书,怕是又要担心能不能用了吧。 有便宜不占是很正常的思路,不过在占便宜前,先考虑一下这句话:起初他们追杀共产主义者,我没有说话-因为我不是共产主义者;后来他们追杀工会成员,我没有说话-因为我不是工会成员;接着他们追杀犹太人,我没有说话-因为我不是犹太人;最后他们奔我而来,却再也没有人站出来为我说话了。(http://www.kaieconblog.net/2011/03/29/10343/)我觉得郭凯说的很好,你可能觉得百度很好,白看东西不花钱。这次你支持了百度,下次就有人搞软件下载中心,上面全是破解软件。再下次就有人搞不知道什么中心——中国已经够山寨了,别搞的全国皆山寨,OK? 可能你说,我种地,我不靠脑子吃饭,搞不到我头上来。那也请你多想一步。搞死中国的作家,我们就只能看免费的社论。搞死了中国的程序员,我们就只能高价买别人的程序。你把中国做创造的都搞死了,你就等着老外涨价吧。山寨老外的?当WTO吃干饭的阿?WTO已经因为中国没有按约定开放出版市场提出抗议了(猛击这里:http://www.etu.net.cn/Article_Show.asp?ArticleID=579),重复这么搞下去,还想不想出口了? 3.作家维权,结果如何? 我觉得,这是另一方面。百度固然有错,但是我却不看好作家的维权行动。如我上文所说,中国人现在的习惯就是,窃书不算偷,读书人的事,能算偷么?对着这样的民众,我常有有力无处使的感觉。实话说,我是非常不看好维权的结果的。这种土壤中,即使一个百度倒下去,千百个白读站起来。 4.有什么建议? 别搞纸质书了,那个注定是昨日黄花。一本纸质书,作家能拿多少?一本电子书能拿多少?假定读者不变,作家收入不变的情况下,电子书定价可以达到纸质书的一到两折,而且没有什么前期费用。作为用户而言,家里堆一堆纸海也是浪费且不低碳的生活。我实在搞不懂为什么要弄纸质书。盗版问题?电子书是比较容易盗版,纸质书就不会受到电子盗版的冲击么?要真不会也没有这次事情了。而且,在一本书一两折的低折扣下,读者反倒会比较多。一本深入浅出MFC,我八年前买的时候是90,现在恐怕要到150上下。一两折只有20-30,买也无关痛痒。读者增多,作家收入还会增加。 不过现实的一个问题是,传统认为,花钱买一刀纸回去叫消费,天经地义。花钱买一本电子书就不好接受了,总想弄免费的。不过我得说——未来笼罩在迷雾中,一切都会变的,观念也是—— 5.我为什么情何以堪? 因为我比较赞同开源运动的精神,所以也对保护版权的问题提不起精神来。 开源运动据说起于上世纪美国的嬉皮士文化,主要观点是,代码应当属于全人类,而不是被某个人圈起来贩卖牟利。开源运动开始之所以风行,是因为很多大学教授碰到了版权上的实际问题——版权条约禁止代码用于教学。最有名的例子是UNIX做了闭源限定后催生了minix,后者催生了linux。程序员必须阅读很多的源码,来增加自己的水平,而版权限制这点。 到了后期,很多大公司也开始支持开源运动。因为这一运动对上游和下游都非常有利,它只损害以版权牟取暴利的人。作为上游厂商,雇用一个熟悉开源系统的硬件程序员,就可以直接开发这一系统的硬件驱动。而不用像微软模式一样,雇用通过微软认证,并且和微软签署不可泄漏协议的硬件专家——这些人的工资中有相当部分是交给微软的保护费。使用开源可以直接的降低成本。而作为下游,则更看中开源系统代码透明,不容易植入有害代码(这点上,微软一直盛传被植入了后门,但是始终无法有力辩驳就可以知道),而且很容易基于自己的需要定制修改。中游厂商则是通过服务收取有限费用,而不是暴利。 实际上,版权从始至终,都是在保护创造作品的人的积极性。在软件业,开源运动找到了另一种方式来激励创作者的积极性,而不是一味的把东西保护起来。这让我们反思对影视产品的保护力度问题。软件业只享有20年的保护,而出版业,唱片业享有70年的保护。我们是否应当执行如此强力的版权保护政策呢? 问题归于出版领域,这篇博文(猛击这里:http://weiwuhui.com/4190.html)印证了我的想法。出版业的大头都在出版社这里,这才是使用版权赚取金钱的大头。

python源码解析读书笔记(四)——杂项

Mar 31, 2011 - 1 minute read - Comments

1.GIL的影响 很多人讨论python性能的时候都提到一个概念,GIL。我在python源码中搜了一下,这个函数调用并不多,但是位置很要命。每个线程,生成的时候请求一下,退出的时候释放一下。在每次运行字节码前也会短暂的释放一下,让其他线程有获得运行的机会。说白了,除非程序显式的调用release_lock去释放资源,否则python是没有任何多线程能力的。这种机会并不很多,通常只发生在阻塞的时候。 而python原子化的粒度也比较清晰,就是每个字节码内部一定是原子的,字节码和字节码之间是非原子的。当我们操作l.append的时候,不用担心线程竞争导致数据结构损坏。但是如果我们操作del l[len(l)]的时候,存在发生异常的概率。 2.对象缓存池 python对小内存对象(碎片对象)提供了小内存对象缓存池。默认情况下,256字节以下的内存由小内存缓存池管理,以上的直接向系统申请,申请大小每8字节对齐。 对象缓存池的分配和收集技术采用了自由资源链表,在2.5之后,当某个尺度的资源不再需要时,会整体释放。 3.python的GC机制 python的GC机制是基于引用计数的,因此当引用计数归零,对象一定会被释放(如果是碎片对象,内存不一定直接释放,可能归对象缓存池)。 python的辅助垃圾收集算法是三色标记法和分代垃圾收集模型(generation),由于要跟踪所有的容器对象,因此容器对象上有跟踪链表。 4.字符编码处理方案 无论从何种来源,只要是字符串,并可能交给一个和当前代码并不紧密耦合的代码处理,就应当被转换为unicode。或者换一个更简洁的说法,应当使用unicode作为接口数据类型。 str对象是很难猜测编码的,当离开了数据源代码后,再分析编码是个不靠谱的方案。