原文:http://blog.ianbicking.org/2008/03/30/python-html-parser-performance/
作者:Ian Bicking
译者:Yaker Gong
本文链接:http://www.yakergong.com/blog/?p=487 转载请保留出处
在准备我的 PyCon上关于HTML的演讲 的时候我觉得我应该对现有的一些解析器和文档模型做个性能对比。
实际上,情况有点复杂,因为处理HTML需要几个步骤:
- 解析这个 HTML
- 把它解析为一个对象(比如一个文档对象)
- 把它序列化
有些解析器只处理第一步,有些只处理第二步,有些能处理所有的三个步骤…。例如,ElementSoup 使用 ElementTree 来表示文档,却使用 BeautifulSoup 作为实际的解析器。而 BeautifulSoup 内部也拥有一个文档对象。 HTMLParser 仅仅做解析(不解析出任何对象),然而 html5lib 却能够生成几种不同的文档树(DOM树)。序列化也分为XML和HTML两种方式。
所以我选取了下面这些解析器的库做基准性能测试:
- lxml:包含一个解析器,能够产生文档对象,支持HTML序列化。它也可以不适用内置的解析器而使用 BeautifulSoup 或者 html5lib 进行解析。
Read more on [翻译]Python HTML 解析器性能评测…
twa.sh(也就是之前的dabr.nl)继dabr.co.uk被封了,只好自己搭建了一个。基本上按照choc.li的帖子的说明来架设的,修正了无法logout的问题,对glype的允许的主机列表也做了修改。
这个dabr只对受邀请的用户开放,一些比较熟(并且经常上twitter)的朋友已经加在列表里了。如果需要用的话可以在帖子下面留言给我,说明你的twitter id。
首先要有一个能翻墙的主机,比如hellogfw.com。然后在上面架设好glype和dabr,比如分别在目录/glype和/dabr下。安装/glype只需要把upload目录上传并重命名即可,需要cache功能的话注意在/glype/tmp目录下建立名字为cache的文件夹并设置读写权限。安装dabr需要设置http服务器的url_rewrite,需要注册一个browser模式的twitter api,按照官方说明即可。
首先访问http://hellogfw.com/glype测试代理是否可用。然后开始配置glype。编辑/glype/include目录下的settings.php文件。
// 如果想要这个在线代理只能用来访问twitter的话
$CONFIG['whitelist'] = array("twitter.com","twimg.com","amazonaws.com","hellogfw.com");
在glype/plugins目录下编写hellogfw.com.php文件,内容为
<?php
$redirect = $URL['href'];
header(”Location: $redirect”);
exit;
修改glype目录下的browse.php文件,在
if ( $this->browsingOptions['tempCookies'] && $expires > $_SERVER['REQUEST_TIME'] ) {
$expires = 0;
}
的后面(在glype1.1里是1449行)加上
Read more on 使用Glype架设免翻墙oauth认证的dabr…
今天在实验室做网页文本分类,要下载一段SVM(支持向量机)的代码,点开链接,咦,发现浏览器一片空白,然后显示Unable to connect…
要是一个正常的美国人或者香港人,第一反应是肯定网站坏了,作为一个正常的中国人,第一反应是很可能被墙了。打开代理(感谢xliu送的代理),点开网页就看到这么一段:
Many researchers have told me that my site is not available in China. According to the company that is hosting my DNS entry, this is due to a Chinese access restrictions. To work around this problem, simply use the URL
http://www.cs.cornell.edu/People/tj/svm_light/
to enter the website. From this url, you can also navigate to SVM-struct, SVM-perf, and all my other software. When you want to download some file, replace “download.joachims.org” with “kodiak.cs.cornell.edu” in the URL.
Read more on 又撞墙了…
最近读了《顾准文集》,这书买了半年了,一直在看,前前后后总共看了两三遍,总算把后半部分《从理想主义到经验主义》看完了。我阅读的速度并不慢,这个书理解起来比较费力,有太多问题需要考虑。这本书确实帮我解决了很多困惑(我一直挺迷惘的),比如如何看待老子的学说(不是整个道家),评孔子和韩非,中国和西方在文化上的差异,基督教的发展,如何看待马克思及其学说。凡事都有前因后果,要理解当代中国,就要了解春秋战国时代各家思想,要理解现代西方的民主和政治,就要从希腊开始,要理解马克思的学说,也总要看看他都站在什么人的肩膀上。
后面附带了一篇经济文稿《关于社会主义经济中价值及价值规律的问题》,可能因为专业知识不足,没有读懂。
给几个朋友推荐了这本书,下面做点摘抄:
其实,所谓科学精神,不过是哲学上多元主义的另一种说法而已。哲学上的多元主义,就是否认绝对真理的存在,否认有什么事物的第一原因和宇宙、人类的什么终极目的…现在,人们所认识的是:人,通过世世代代的努力,一点一滴的积累,他的处境改善了,还要改善下去,改善的程度,是没有止境的–历史上许多伟大人物曾经设想过人类改变的目标,确实有许多已被超越了。
中国文化的渊源,并非和工商业无关,然而它是史官文化。
你还可以觉得政党、政派,无非是政客组成的集团,可以认为他们当主角的这种民主,很不光彩,感到和“人民做主”这个原则不合,因此还是要直接民主。你也可以认为,人民教育水平不足,也许不幸只好如此,到共产主义时代,谁都知识丰富,目光明澈,那就不会如此了…人民群众在政治上永远是消极被动的,能够做到当前掌握行政权的人不发展为皇帝及其朝廷,已经很如容易了。奢望什么人民当家做主,要不是空洞的理想,就会沦入借民主之手实行独裁的人的拥护者之列。
马克思的哲学是培根和黑格尔神妙的结合…所以,《神圣家族》时代的马克思,几乎是反对唯理主义的,而就本性而言,马克思这个革命理想主义者不能不是唯理主义者…马克思取自黑格尔的,是他的唯理主义。略微说得具体一些,是黑格尔的“真理是整体”,黑格尔的一元主义…人是世界的主体,神性寓于人性之中,这个世界是一元地被决定的,真理是不可分的,这对于革命的理想主义确实都是不可少的…马克思对黑格尔加上了极重要的培根主义的改造…马克思要把黑格尔的哲学命题拉到政治经济学中来解决。

喝茶,不知不觉,把开学时带过来的一桶茶叶喝掉了一半。一般都是晚上回来泡一杯,算是养成习惯了。计划每天要做的一些事情,读英语什么的,好多都没坚持下来。这个没怎么用心,反倒做到了。以前想喝茶,觉得对修身养性有好处,现在对我来说,茶是种咖啡的替代品罢了。
看美剧,lost s06大结局了。说说这个结局吧,我挺喜欢的,因为我本来就不拿lost当科幻片看。结局里jack成为jacob的继任者,用自己的牺牲挽救了众人,躺在竹林里的一幕和本剧的开始遥相呼应。关于结局我做过一些设想,小岛上的超级能量之谜揭开,或者是一个基督教的寓言,暗喻了圣经旧约里的一段故事(按那个故事来,黑烟的名字就是esau)。我有时也觉得sayid,jack,sun,sawyer…每个人都代表了人性的一面,暴力/救死扶伤/爱情/仇恨,不过这种解释很牵强。lost不是科幻小说,描述的是人在特殊境遇下的抉择,而且,很多事情并不需要一个理由的。其实jack和jacob在最后一个episode里的对话对全剧就是个很好的解释,jack之外的几个candidate都在问各种问题,我为什么在这里,这岛是怎么回事:
jack:I will do it.That’s why I’m here.This is..This is what I’m suppose to do
jacob:is that a question,jack?
jack:No.
jacob:Good.
打dota,玩了有四五年了,也是根深蒂固的习惯了,只是打的有感觉越来越难了,要阵容合理水平接近才有点意思。前几天在掌门人打了一盘,网通 RDSP1房,AM,DP,VIS,AA,TH vs SVEN,SF,OM,POM,TK,我们在天灾。我用TH,开始比较劣势,20分钟3杀8死,DP和VIS都超鬼,只有冰魂有几个人头,AM一路打钱。 对面TK抢了很多人头,反正超神了。然后发生了几次团战,对面缺团控吃了点亏,DP的大也显示出威力来。之后SF和SVEN都憋出了BKB,我出了刷新, 然后就是推来推去。89分钟,近卫被破一路,天灾被破两路,之后互拆主基的时候我们主基先挂了。DP前期装备有点问题,太倾向于魔法恢复装备,先锋血精狗皮龙心这种路线感觉更靠谱。还有就是VIS被削弱了很多,团战作用不大,后期太乏力了。
在实验室配置配置了一个svn仓库,另外还部署了svn mananger和viewvc分别用于web管理和查看。为了节省一些管理工作,就想让不同的svn repository共享配置文件,这样每次创建新repository的时候就不用再为每个用户单独创建密码。我本来是想通过svnadmin的–config-dir(手动指定配置文件)来实现这个功能的,试了几次不成功,看了下svnadmin的代码:svnadmin/main.c
看起来config-dir这个功能svnadmin并没有实现,只是在getopt的时候读取了一下,后面也没有继续处理。我的svn仓库搭建在linux上,于是写了个小脚本解决了这个问题,首先建立一个配置文件目录,然后将SVNROOT下每一个repository的conf目录做成一个指向配置文件目录的软链接。简单修改了svn manager的代码,每次创建和导入项目之后调用这个脚本。
脚本如下 fix_svn_conf,很简单,自己修改下SVNROOT和SVNCONF变量即可运行。
标准的在同一台机器上运行多个svn repository的方法是在SVNROOT(svn repository的根目录)下运行svnadmin create命令为不同的项目建立子目录。
以前在同一台机器上运行多个svn repository经常用的办法是启动多个svnserv进程,每个进程指定不同的端口号,这个解决办法不是很优雅,因为端口号不如名字好记,每次访问svn用类似svn://*.*.*.*:8888这样的地址也挺别扭的。最开始我在同一个repository里放置多个工程的目录,看起来访问svn用类似svn://*.*.*.*/my_project这样的地址,其实这样做危害很大,这些工程共享版本号,本来互不相关的工程就这样关联起来。
还有就是svn manager项目从09年8月(ver 1.0.8)就一直没更新,配置起来有一些小问题,修改源代码才能正常运行。
前些日子加入了黄师兄办的计算所桌游协会之后,玩的桌游种类更多了,研究得也更深入一些。我自己比较偏爱策略性的游戏,这篇里面也只谈这个。毕竟玩桌游有两年多了,桌游技巧自然懂一些,要说的话也可以写很多,不过这里要写的是一些桌游之间横向的对比。
我对桌游做了一个粗略的分类:动作性的/交流性的/策略性的。其实常见的桌游都是混合型的,既有策略的成份,也有交互的成份,有的还有动作的成份。不同种类的桌游它给你带来乐趣的方式是不同的,比如动作性的(比如通缉令),训练反应速度,我觉得它的乐趣根植于运动。交流性的桌游,比如经典的杀人游戏(包括狼人),大家一起坐下来,扮演自己的角色去说话,本身就是一种乐趣,所以它的乐趣在于交流。策略性的游戏则不同,主要的乐趣来源于对一个成功模式的重复应用,关于这个理论可以参考《游戏设计-原理与实践》。比如三国杀里你了解到黄忠配备特定攻击距离的武器之后对任何人打出杀都是命中的,下一次再使用这个角色的时候你就会注意到这一点,应用这个技巧并且成功会给你带来快乐。“植物大战僵尸”对于解释游戏的乐趣来源是个很好的例子,每一关都有一些新的植物新的技巧。可以说,策略性游戏的乐趣根植于学习。
我们在承认上面的关于策略性游戏的乐趣来源的结论的基础上继续讨论。所以一个让人持久觉得有趣的桌游,应该是玩家能够经常学习到一些技巧的,游戏本身也应该是多变的。拿矮人矿工来说,规则比较简单,虽然入门门槛低,但是很难让玩家有持久的兴趣。三国杀就是一个完全相反的例子,规则太复杂了。一个熟练的三国杀玩家,不仅要了解各种技能,出牌的规则,还要了解每个人物的特技以及一些特定的组合。如果按每星期两三盘的频率玩,一个玩家大概要2~3个月才能完全了解这个游戏的规则,这2~3个月内,可以保证每次都学会一些规则和技巧。在我玩过的桌游里,三国杀是规则最复杂的一款。游戏规则复杂,有很多技巧,是很重要的,同时呢,又不能太复杂,太复杂容易让玩家产生挫折感,要让一个只懂得基本规则的玩家也可以正常的进行游戏。
桌游不能过于优势积累,这样的话前期劣势的玩家就会觉得整盘游戏都没有意思,必须有方法来限制优势的玩家,比如“富饶之城”里小偷和魔法师这两种角色可以一定程度上限制金钱和手牌,“马尼拉”里的海盗也有类似的作用。劣势玩家要有一定的概率可以翻盘,这样才会均衡大家的乐趣。感觉卡坦岛这方面就稍差一些,优势积累很快,占有土地越多的,概率上讲生产的产品也越多,反过来又可以用产品换取更多的土地,这样最长道路和最强军事经常是同一个人得到的。
要让每个玩家都体验到乐趣。其实个人水平不过分影响游戏结果,以及劣势玩家有机会翻盘都有这个目的,另外就是就是挂掉的玩家不能继续游戏。我觉得三国杀和杀人都有这个问题,粗看起来这很合理,其实这很影响游戏乐趣的,先挂掉的玩家作为一个看客,就少了参与感,少了那种交互的乐趣。三国杀得复活规则应该目的就是解决这个问题的,感觉实际执行起来效果不大。这跟三国杀模仿杀人游戏的角色设置有关,如果是两种角色,两边对砍,死人也可复活了。
还想起银河竞逐的一个问题,银河竞逐是一个纯建设型的桌游,也就是自己建设自己的你极难对你的对手造成破坏。其实玩桌游,大家互相拆拆台也是很有趣的事情,在银河竞逐里这个成分基本没有。
这里的内容是我自己想过之后,又跟一些朋友讨论过的结果,也有很多值得商榷的地方,欢迎大家批评指正。
前些日子去武汉,和朋友一起坐长江上的轮渡,江面宽阔,让自己觉得很渺小。在自然的风景中,很多琐碎的烦恼倒是也消失了。不觉想起苏子的“大江东去,浪淘尽,千古风流人物。”,想想人这一生,其实也很快就过去了,多有感动。
最近听陈胖子的歌很多,蛮喜欢《浮夸》的
幸运儿并不多
若然未当过就知我为何
用十倍苦心做突出一个
正常人够我富议论性麽
你叫我做浮夸吧
加几声嘘声也不怕我在场
有闷场的话表演你看吗
超哥的心境,大抵如此吧。
Recent Comments