<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet href='http://feed.feedsky.com/styles/temp01.xsl' type='text/xsl' ?><!--这是一个由Feedsy提供技术支持的Feed，为了提高读者阅读的体验，以及满足用户美化自己Feed的需要，我们设计了多种精美的Feed模板，提供给大家选择，所有最终呈现出来的样式，皆由用户自愿选择使用，未经许可，任何团体和个人，请不要擅自修改样式或者盗用，这是对于用户选择权的尊重。--><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:fs="http://www.feedsky.com/namespace/feed" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link href="http://feed.feedsky.com/3kkk-me" type="application/rss+xml" rel="self"></atom:link><fs:self_link href="http://feed.feedsky.com/3kkk-me" type="application/rss+xml"></fs:self_link><lastBuildDate>Thu, 22 Oct 2009 04:09:49 GMT</lastBuildDate><title>3kkk-me's self-inspection</title><description>我的心随风飘荡，抓不住你我</description><link atom:type="text/html" atom:hreflang="en">http://www.3kkk.me/</link><id xmlns="http://www.w3.org/2005/Atom">http://www.3kkk.me/</id><link xmlns="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://www.3kkk.me/atom/"></link><generator xmlns="http://www.w3.org/2005/Atom" uri="http://3kkk.me/" version="0.001">3kkk-me</generator><copyright>Copyright (c) 2900, 3kkk-me</copyright><pubDate>Sat, 30 Jan 2010 04:26:30 GMT</pubDate><item><title>[转]伪善下的牺牲品——教育网内的白云黄鹤</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA/">&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMYyWUM&quot; width=&quot;530&quot; /&gt;&lt;br /&gt;2009年10月21日对于我来说，平和而又暴力，虽然这一天也往常一样上班下班，却在我另一个家——虚拟社会中出现了最为暴力的一幕。2009年10月21日18：00起，我再也登陆不进华中科技大学（昔日我还引以为豪的学校）的教育网内论坛白云黄鹤了。&lt;br /&gt;&lt;br /&gt;话起萧墙，这一切的一切只能归“功”于伟大的校长李培根、宣传部长李智和BBS管理老师陈强，当然也许还涉及到很多其它人，但是这三位承前启后的核心人物，一位都跑不掉。&lt;br /&gt;&lt;br /&gt;华
工的白云黄鹤自2003年全国的BBS震荡后一直维持着现有的状态，站务组尽可能为学校师生提供更为畅通的沟通渠道，站务指导委员会在非上纲上线的情况下
放手让站务组管理BBS，而学校指派的总站长float则与站务组一同努力，管理好BBS。也许在这个过程中，ID与ID之间、站务与水手之间、站务与版
主之间，确实或多或少存在着些许的矛盾与冲突，但是整体是平衡的，也平衡且和谐的走过了五个春秋。可是这个和谐且平衡的局面却被宣传部新任管理BBS的陈
强给破坏了。&lt;br /&gt;&lt;br /&gt;李智部长如果没有记错，应该是从2006年初开始接手白云的，主要是之前的老李部长退去管理学院当书记然后委退了。虽然现在
的李智与那时的李智没有什么区别，对BBS和网络虚拟社会的管理一窍不通，但是当时还有经验丰富且愿意承担责任的float，所以大家相安无事。2008
年陈强即cwr通过自己的“后台背景关系”被委任至宣传部接替float的工作，一开始就伪善的请我们全体站务和区务吃了一顿饭，想要好好的沟通一下，也
许确实那个时候谁也没有想到原来这顿饭却是一顿鸿门宴。&lt;br /&gt;&lt;br /&gt;作为一名历任站务，我们在任的时候总希望cwr、李智甚至李培根都不要再把BBS
当成一个简单的电子公告板，而希望他们能够把BBS当成与学生沟通的平台；我们同时和所有的历任一样，都希望cwr、李智甚至李培根对待白云的态度不要像
对待自己的官帽一样，然则，一切的希望从一开始就是失望，无论是他们中间的任何一个人，都没有想过要把白云黄鹤当成自己的孩子来看护，而只是成为他们保住
饭碗，争取下一个高位的绊脚石而已。&lt;br /&gt;&lt;br /&gt;不知道大家还记不记得学位门事件，这个事件闹到了天涯，闹到了教育部，最后终于“伟大”的李校长坐不
住了，除了在网络上让党宣用假惺惺的言论忽悠大家外，还在线下搞了一次校长与学生面对面，这个活动搞得好啊，搞得那叫个声泪俱下，让好多低年级的小弟弟小
妹妹们那真是越发的把李培根当成了自己心目中的偶像去崇敬。可是活动的本质本身就充满着问题，没有解决任何实质性的问题，活动中充满着是李校长的悲天悯人
和空话套话。更为“可嘉”的是，活动后的24小时，党宣接到的上级指令是将白云黄鹤上所有讨论李校长这次与学生面对面的所有贴子全部删除。无奈，为了挽回
校长的面子，当时站务组还是把所有的贴子都删掉了，为了能够让这个事件平稳的过渡，也为了给学校与白云之间留点缓冲的空间，为此站务组得罪了不好网友，也
因此在大家眼里成为了众矢之的。&lt;br /&gt;&lt;br /&gt;当历史慢慢将学位门事件的回忆冲淡时，光谷门事件再次触发了李校长的神经。陈强认为该事件并不是很重要，
也没有像学位门事件那样搞得全天下人民都知道，所以就没有上报该贴子。（旁注：这并不代表着他好，陈强主要是不习惯周末上站管理，他只知道管理白云黄鹤的
时间是平时的周一到周五）李培根后来知道这件事后，可能是觉得这仍然是对他宝座的一个隐患吧，异常生气的批评了宣传部一顿，直截了当的结果就是宣传部的李
智部长顶着巨大的压力骂了陈强一顿。于是陈强就急了，对于陈强来说，这只是一个小小的饭碗，他没有必要因为这个小小的破BBS而丢了自己的饭碗或者说丢了
自己慢慢进入学校行政的机会。&lt;br /&gt;&lt;br /&gt;同时由于他平时的操作完全不符合一个合规的站长，同时甚至不符合一个基本的版主，所以站务组也一直没有通过
他的权限。但是这个时候，对于一个没有权限的站务指导，那是非常可怕的，于是陈强先后跑去网络中心杨勇老师处磨矶、宣传部李部长处进谗言，最后终于在
2009年3月份弄到了一位系统管理站长的密码，并且修改了程序主站的密码，按他的构想，他希望通过非正常方式取得白云黄鹤的最高权限（程序主站的密码权
限自2003年以来只有程序站务和系统站务可以知道，连平时的事务型站务都不能够知晓的），同时全面撤换现任与校外站务，达到他能够控制的局面，构建属于
党宣部的白云皇朝。可是cwr的修改权限无意中却被我这个常年不上站的历任站务偶尔瞧到了，并将该信息询问了常务管理站长xingxin，xingxin
答复他也不知道。后来我们只有和程序站长鼠站沟通，希望他出面了解到底白云黄鹤发生了什么事情，站务组马上卸去cwr的所有违规添加权限。后来在鼠站、舒
站和王芯老师的协调下，陈强终于勉为其难的接受了错误，但并没有任何道歉的意思，反而用自己是负责BBS的老师，需要应急使用等理由搪塞过去了。最终站务
组为了白云的稳定，再次妥协，要求cwr下不为例。但是陈强对BBS的态度却早就埋下了深深的隐患，在一次与站务组非正式的对话中，我们知道原来他也管过
一个校内的小小的网站，当时也是没有人听话，他就全撤了，后来就没有人反抗他了。于是，他的意思就是，对于白云，他也可以这样。把站长纳入三助体系，他也
就可以为所欲为了，继续他的侵犯他人隐私之道。&lt;br /&gt;&lt;br /&gt;可是人的欲望不会因为一次挫折而消失，陈强对他的官本位思想仍然强烈，也许这也是和他本科
学的是政治学与行政学密不可分吧。就在前天，他再次利用管理BBS总负责老师的职务之遍，美其名曰召开了站务组成员开会，最后就去了现任HS的版主
shayang。就是这样在没有任何一个正式站务参与的会上，他一个人讨论通过并决定要取得最高权限密码，并修改程序主站密码。shayang可以说是当
着腿子就同意了。并再次向李智要来了“尚方宝剑”，遇历任杀历任，碰现任斩现任，哪个不听话，直接先封了上站和发言再说。并在站务组没有任何知晓的情况
下，发出通知要求公开招聘BBS站长，这闹出了白云13年历史上第一次公开招聘站长的笑话，同时一个人修改了站务总则与站点总则，将他的个人淫威发挥到了
极致。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;对此，鼠站发布了站内公告：“【通告】关于暂时无法进行程序维护的通告&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;由于不知名原因，本站主机密码和图片服务器密码均已被校宣传部授权人员更改。&lt;br /&gt;作为程序维护站长，我们暂无法从事任何程序维护相关事宜。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;类似事件已经不是第一次发生，在今年3月，cwr便在未告知站务组的情况下变更了&lt;br /&gt;密码。在站务组进行了交涉后，cwr表示对维护工作的程序缺乏了解，并告知了新密码。&lt;br /&gt;由此，我们相信，此次事件的再次发生并不是沟通不畅或某种误会，而是故意为之。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;鉴于目前的状况，我们将仅对本站发生的紧急事件通过网络中心的渠道进行响应，&lt;br /&gt;对所有涉及的日常维护不作回应，直至有明确、合理和可接受的解释为止。&lt;br /&gt;&lt;br /&gt;【另】今晚在站务组完全不知情的情况下，SYSOP帐号在sysop版面以校网络管理办公室&lt;br /&gt;&lt;br /&gt;的名义发出了招聘站长的通告。鉴于此情况，现任站务组已无法确保在接下来一段时间&lt;br /&gt;&lt;br /&gt;的正常工作。请各位网友备份自己帐号的有用信息，包括邮件等。同时，对于个人隐私&lt;br /&gt;&lt;br /&gt;信息的保密，站务组也很难再作出承诺，谢谢。”&lt;br /&gt;&lt;br /&gt;陈
强在这样的情况下，仍然公然删除SYSOP的贴子，同时威胁现任站务要注意。虽然这次是陈强说拿到了尚方宝剑，但是这次的事件直接与白云黄鹤这么多年达到
的平衡局面完全不符，既然白云黄鹤回到了六年前由党宣部任命人员直接修改相关程序主站密码，不能保护网友徇私，那么这个论坛也就没有存在与待的必要了，也
许对于我们这些分布在各地的校友来说，华中科技大学在李培根校长的带领下，随着白云黄鹤也不会再留于我的脑海之中了。&lt;br /&gt;&lt;br /&gt;陈
强其人：2000级公共管理学院政治学与行政学本科生，学习期间就以内郁阴柔著称，毕业后留校工作，2008年通过后台背景关系被委任党宣部（华中科技大
学南三楼504）负责BBS的指导工作，所以大家俗称“陈老师”，电话62385896，Email:cq2004@mail.hust.edu.cn。
申请动机写的是“对白云进一步加深理解、工作进一步展开”，对现行站务管理体制与方法的看法和建议是“经实践经验比较有效可行”。（反正说的和做的不一样
是他的常态）。&lt;br /&gt;&lt;br /&gt;2008年9月14日，在大家觉得应该让cwr赶紧锻炼的区间内，由于他的身份太特殊，先前也没有大版管理经验，所以只能让cwr申请二区见习区务，2008年9月23日破例任命他为二区见习区务。&lt;br /&gt;&lt;br /&gt;2008
年10月27日，在陈强的威逼下，站务组发布“经站务管理委员会讨论决定，站务组通过，任命cwr为本站站务指导。上任后，站务指导直接行使网络管理办公
室对站务组的日常工作指导以及专属事件的责任承担。希望上任后，为本站坚持正确舆论导向、让本站成为网友挚爱精神家园而努力工作”。可惜，他只看到了前半
句，完全忽视后半句。按他现场的话说，他不适合当版主和站务，只适合当站务指导，这话说的真是太搞笑了。有点儿像“我不适合当太子和宰相，我只适合当皇
帝”的味道。&lt;br /&gt;&lt;br /&gt;2008年12月22日，陈强在谋取到站务指导后，进一步向当时的站务总管阿幼伸手，要求阿幼任命他为站务总管，直接拥有全
站权限。在这次的升任中，陈强明明知道自己是违规，但还是想方设法的匡骗站务组。在阿幼提出升迁太快，同时上次转正就已经是考虑要让陈强向学校交待的异议
下，陈强同时也提出了自己的理由：“现在也不好交代”、“我要当站务总管”、“上次违规是上次，这次是这次，你不说怎么就算违规了？”、“你为什么总是要
卡我这边呢？”、“不是有站务组吗？难道我上了后我一个人说了算？”。事实上，自陈强上任后，很多事情都是陈强一个人说了算。封网友的上站权限再也不按照
站规来，而是直接一句话扰乱版务，同时通过非正常程序手段调取网友个人隐私资料直接给网友打电话说他的言论不适合这类的云云，同时利用自己党宣部老师的权
利压迫大家。搞得怨声载道。时任泡菜版的老王律师因为在HS上维权说了一个法律见解，就被陈强封了上站权，后经站务组的调解，方才解决了相关事宜。真可谓
一手遮天。&lt;br /&gt;&lt;br /&gt;2009年初，站务组为了恢复热门话题历尽艰辛，基本把能用的筹码都用了，无奈同意陈强担任站务总管也是为了恢复昔日的十大。
陈强去再一次厚颜无耻的撕破了先前伪善的面孔，说王乘校长放话，要恢复十大必须得到王校长的手谕。2009年3月初，陈强再次提出虽然为站务总管，但是权
限一直没有跟上来，对站务组提出了质问，同时提出站务组就是对着他干的，就是不愿意改他的权限，并电话指示相关站务修改他的权限，矛盾进一步激化。于是出
现了2009年陈强利用职务之便从党宣部及网络中心处拿来全站程序密码，并修改自己的权限。他的伪善不仅是在这方面，更是在平时开会里，动不动就说李校长
的坏话，说李校长两面派，说话不算话，最后还是把屎盆子扣在他的头上等等。本次事件虽然得到了缓解，陈强也发短信表示愿意尽释前嫌，但是人人心中都已经留
下了一个不可磨灭的阴影。&lt;br /&gt;&lt;br /&gt;这里还记着当时他的一些观点与谈话：&lt;br /&gt;&lt;br /&gt;“cwr先对自己以前的工作态度和管理模式进行了解释，承认把joshuaG、xingxin&lt;br /&gt;当作他的对立面来看待，他说他现在认识到这是不对的，但同时也说这是因为站务组先不&lt;br /&gt;信任他，“卡”他，不执行他的命令和看法而造成的，并拿chentaohm，xingxin说事，说&lt;br /&gt;站内直接回绝cwr的要求让cwr觉得站务组是和他对着干，而且和他站内交流时让他感觉生&lt;br /&gt;硬不尊重和配合他，并举了chentaohm说“这样做肯定不行的”警告他和xingxin拒绝帮他&lt;br /&gt;查网友资料等事例佐证。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 站务组重新介绍了我们站务组历来的工作方法，站务归站务，朋友归朋友，大家线上身份&lt;br /&gt;平等，不会因为谁的特殊身份而特殊对待。而且他们是为了让cwr更快的熟悉和开展工作，&lt;br /&gt;并且向他说明chentaohm，xingxin向来在站务组内部按照党宣和指导老师的要求开展工作&lt;br /&gt;，做的事情也是站务组集体讨论决定的。并且他们都是按照站规在做事情，不能随便查询&lt;br /&gt;网友资料是站规中规定的。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; cwr接着对主站和ftp的密码事情做了解释，他的意思是他想让我们知道，除了通过我&lt;br /&gt;们，他还有其他的方法了解白云权限并控制白云。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们强调我们是一个整体，不是对立的。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; cwr询问什么时候可以上站长，并提出希望见习时间能够从给sysop发信申请时算起。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp;我们说要等时机成熟，我们希望公示后没有反对的声音，哪怕是一个反对的声音。&lt;br /&gt;我告诉他站务公示后历来都没有被反对，上次ff被反对后我们只能做出道歉并不让其见习&lt;br /&gt;，我们不希望同样的事情发生，所以我们也在等待适合的时机。同时告诉他如果他公示&lt;br /&gt;后有人反对，站务组会很难做，而且反对的意见如果被他的主管看到会不利于他今后工作&lt;br /&gt;的开展。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他继续问什么时候算时机成熟。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们强调要多和站务区务版主交流，不只是线上的更要在线下，而且要用平等互相尊&lt;br /&gt;重的心态进行交流，将心比心，以理服人，而不是靠权限和权利压人。并代表站务组邀请&lt;br /&gt;他参加版主烧烤和白云篮球足球赛。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他说他的工作压力大并被领导批评。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 站务组始终是和党宣及指导老师在一条线上，始终按照党宣和指导老师的要&lt;br /&gt;求做事情，从来没有想过和指导老师对着干，希望他能够支持我们信任我们。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们问了他在任白云的时间，他说他不知道，不过近期不会有所变动，他希望能在白云&lt;br /&gt;上做点业绩做出“彩”，我顺着他的话提了一下希望他能够多为白云在学校争取资源和支&lt;br /&gt;持，他对此没有否定，他说我们要把工作做的更好他才好去找领导争取。我向他提了版主&lt;br /&gt;烧烤和篮球足球赛，他表示支持。我强调我们都是义务的，党宣和指导老师对我们的信任&lt;br /&gt;历来是对我们工作最大的支持。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 同时我们向他提出希望他以后能够多参加我们的线下活动，并多在线下和站务组版主交流，注意交流的方法，他说他今后会注意这个。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他提出非常时刻宵禁的事情，我说要提前通知我们，如果我们都觉得这是必须和必要&lt;br /&gt;的，我们会及时妥善的处理。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 另外，我告诉他我们管理站务和程序站务是一个整体，暗示他不要试图拉拢或者挑拨&lt;br /&gt;我们之间的关系，并向他强调了程序站务在白云不可替代的举足轻重的地位。”&lt;br /&gt;&lt;br /&gt;不
过狼就是狼，狼的野性是谁也磨灭不掉的。陈强最后还是伸出了那支罪恶之手，也许他并不知道，BBS和一个网站是不一样的，BBS需要的是人的互动，没有了
这群网友，BBS就好比没有了灵魂，而网站没有了人，他还是有音乐有视频有文章，他的对外效果是一样的。也许正是BBS这个最核心最本质的东西没有得到上
述三位“伟大”的领导的认同，所以才会有今天的角逐。也许这是铁打的营盘的一个必然，但是我却没有想到，这个必然还在我依然FQ之年产生了，我也没有想到
我的历任生活会被这样的一次事件所打乱，也许对我来说，失去联系与灵魂的白云黄鹤，连屎都不如。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 2009年10月22日晨于海西</content><content:encoded>&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMYyWUM&quot; width=&quot;530&quot; /&gt;&lt;br /&gt;2009年10月21日对于我来说，平和而又暴力，虽然这一天也往常一样上班下班，却在我另一个家——虚拟社会中出现了最为暴力的一幕。2009年10月21日18：00起，我再也登陆不进华中科技大学（昔日我还引以为豪的学校）的教育网内论坛白云黄鹤了。&lt;br /&gt;&lt;br /&gt;话起萧墙，这一切的一切只能归“功”于伟大的校长李培根、宣传部长李智和BBS管理老师陈强，当然也许还涉及到很多其它人，但是这三位承前启后的核心人物，一位都跑不掉。&lt;br /&gt;&lt;br /&gt;华
工的白云黄鹤自2003年全国的BBS震荡后一直维持着现有的状态，站务组尽可能为学校师生提供更为畅通的沟通渠道，站务指导委员会在非上纲上线的情况下
放手让站务组管理BBS，而学校指派的总站长float则与站务组一同努力，管理好BBS。也许在这个过程中，ID与ID之间、站务与水手之间、站务与版
主之间，确实或多或少存在着些许的矛盾与冲突，但是整体是平衡的，也平衡且和谐的走过了五个春秋。可是这个和谐且平衡的局面却被宣传部新任管理BBS的陈
强给破坏了。&lt;br /&gt;&lt;br /&gt;李智部长如果没有记错，应该是从2006年初开始接手白云的，主要是之前的老李部长退去管理学院当书记然后委退了。虽然现在
的李智与那时的李智没有什么区别，对BBS和网络虚拟社会的管理一窍不通，但是当时还有经验丰富且愿意承担责任的float，所以大家相安无事。2008
年陈强即cwr通过自己的“后台背景关系”被委任至宣传部接替float的工作，一开始就伪善的请我们全体站务和区务吃了一顿饭，想要好好的沟通一下，也
许确实那个时候谁也没有想到原来这顿饭却是一顿鸿门宴。&lt;br /&gt;&lt;br /&gt;作为一名历任站务，我们在任的时候总希望cwr、李智甚至李培根都不要再把BBS
当成一个简单的电子公告板，而希望他们能够把BBS当成与学生沟通的平台；我们同时和所有的历任一样，都希望cwr、李智甚至李培根对待白云的态度不要像
对待自己的官帽一样，然则，一切的希望从一开始就是失望，无论是他们中间的任何一个人，都没有想过要把白云黄鹤当成自己的孩子来看护，而只是成为他们保住
饭碗，争取下一个高位的绊脚石而已。&lt;br /&gt;&lt;br /&gt;不知道大家还记不记得学位门事件，这个事件闹到了天涯，闹到了教育部，最后终于“伟大”的李校长坐不
住了，除了在网络上让党宣用假惺惺的言论忽悠大家外，还在线下搞了一次校长与学生面对面，这个活动搞得好啊，搞得那叫个声泪俱下，让好多低年级的小弟弟小
妹妹们那真是越发的把李培根当成了自己心目中的偶像去崇敬。可是活动的本质本身就充满着问题，没有解决任何实质性的问题，活动中充满着是李校长的悲天悯人
和空话套话。更为“可嘉”的是，活动后的24小时，党宣接到的上级指令是将白云黄鹤上所有讨论李校长这次与学生面对面的所有贴子全部删除。无奈，为了挽回
校长的面子，当时站务组还是把所有的贴子都删掉了，为了能够让这个事件平稳的过渡，也为了给学校与白云之间留点缓冲的空间，为此站务组得罪了不好网友，也
因此在大家眼里成为了众矢之的。&lt;br /&gt;&lt;br /&gt;当历史慢慢将学位门事件的回忆冲淡时，光谷门事件再次触发了李校长的神经。陈强认为该事件并不是很重要，
也没有像学位门事件那样搞得全天下人民都知道，所以就没有上报该贴子。（旁注：这并不代表着他好，陈强主要是不习惯周末上站管理，他只知道管理白云黄鹤的
时间是平时的周一到周五）李培根后来知道这件事后，可能是觉得这仍然是对他宝座的一个隐患吧，异常生气的批评了宣传部一顿，直截了当的结果就是宣传部的李
智部长顶着巨大的压力骂了陈强一顿。于是陈强就急了，对于陈强来说，这只是一个小小的饭碗，他没有必要因为这个小小的破BBS而丢了自己的饭碗或者说丢了
自己慢慢进入学校行政的机会。&lt;br /&gt;&lt;br /&gt;同时由于他平时的操作完全不符合一个合规的站长，同时甚至不符合一个基本的版主，所以站务组也一直没有通过
他的权限。但是这个时候，对于一个没有权限的站务指导，那是非常可怕的，于是陈强先后跑去网络中心杨勇老师处磨矶、宣传部李部长处进谗言，最后终于在
2009年3月份弄到了一位系统管理站长的密码，并且修改了程序主站的密码，按他的构想，他希望通过非正常方式取得白云黄鹤的最高权限（程序主站的密码权
限自2003年以来只有程序站务和系统站务可以知道，连平时的事务型站务都不能够知晓的），同时全面撤换现任与校外站务，达到他能够控制的局面，构建属于
党宣部的白云皇朝。可是cwr的修改权限无意中却被我这个常年不上站的历任站务偶尔瞧到了，并将该信息询问了常务管理站长xingxin，xingxin
答复他也不知道。后来我们只有和程序站长鼠站沟通，希望他出面了解到底白云黄鹤发生了什么事情，站务组马上卸去cwr的所有违规添加权限。后来在鼠站、舒
站和王芯老师的协调下，陈强终于勉为其难的接受了错误，但并没有任何道歉的意思，反而用自己是负责BBS的老师，需要应急使用等理由搪塞过去了。最终站务
组为了白云的稳定，再次妥协，要求cwr下不为例。但是陈强对BBS的态度却早就埋下了深深的隐患，在一次与站务组非正式的对话中，我们知道原来他也管过
一个校内的小小的网站，当时也是没有人听话，他就全撤了，后来就没有人反抗他了。于是，他的意思就是，对于白云，他也可以这样。把站长纳入三助体系，他也
就可以为所欲为了，继续他的侵犯他人隐私之道。&lt;br /&gt;&lt;br /&gt;可是人的欲望不会因为一次挫折而消失，陈强对他的官本位思想仍然强烈，也许这也是和他本科
学的是政治学与行政学密不可分吧。就在前天，他再次利用管理BBS总负责老师的职务之遍，美其名曰召开了站务组成员开会，最后就去了现任HS的版主
shayang。就是这样在没有任何一个正式站务参与的会上，他一个人讨论通过并决定要取得最高权限密码，并修改程序主站密码。shayang可以说是当
着腿子就同意了。并再次向李智要来了“尚方宝剑”，遇历任杀历任，碰现任斩现任，哪个不听话，直接先封了上站和发言再说。并在站务组没有任何知晓的情况
下，发出通知要求公开招聘BBS站长，这闹出了白云13年历史上第一次公开招聘站长的笑话，同时一个人修改了站务总则与站点总则，将他的个人淫威发挥到了
极致。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;对此，鼠站发布了站内公告：“【通告】关于暂时无法进行程序维护的通告&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;由于不知名原因，本站主机密码和图片服务器密码均已被校宣传部授权人员更改。&lt;br /&gt;作为程序维护站长，我们暂无法从事任何程序维护相关事宜。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;类似事件已经不是第一次发生，在今年3月，cwr便在未告知站务组的情况下变更了&lt;br /&gt;密码。在站务组进行了交涉后，cwr表示对维护工作的程序缺乏了解，并告知了新密码。&lt;br /&gt;由此，我们相信，此次事件的再次发生并不是沟通不畅或某种误会，而是故意为之。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;鉴于目前的状况，我们将仅对本站发生的紧急事件通过网络中心的渠道进行响应，&lt;br /&gt;对所有涉及的日常维护不作回应，直至有明确、合理和可接受的解释为止。&lt;br /&gt;&lt;br /&gt;【另】今晚在站务组完全不知情的情况下，SYSOP帐号在sysop版面以校网络管理办公室&lt;br /&gt;&lt;br /&gt;的名义发出了招聘站长的通告。鉴于此情况，现任站务组已无法确保在接下来一段时间&lt;br /&gt;&lt;br /&gt;的正常工作。请各位网友备份自己帐号的有用信息，包括邮件等。同时，对于个人隐私&lt;br /&gt;&lt;br /&gt;信息的保密，站务组也很难再作出承诺，谢谢。”&lt;br /&gt;&lt;br /&gt;陈
强在这样的情况下，仍然公然删除SYSOP的贴子，同时威胁现任站务要注意。虽然这次是陈强说拿到了尚方宝剑，但是这次的事件直接与白云黄鹤这么多年达到
的平衡局面完全不符，既然白云黄鹤回到了六年前由党宣部任命人员直接修改相关程序主站密码，不能保护网友徇私，那么这个论坛也就没有存在与待的必要了，也
许对于我们这些分布在各地的校友来说，华中科技大学在李培根校长的带领下，随着白云黄鹤也不会再留于我的脑海之中了。&lt;br /&gt;&lt;br /&gt;陈
强其人：2000级公共管理学院政治学与行政学本科生，学习期间就以内郁阴柔著称，毕业后留校工作，2008年通过后台背景关系被委任党宣部（华中科技大
学南三楼504）负责BBS的指导工作，所以大家俗称“陈老师”，电话62385896，Email:cq2004@mail.hust.edu.cn。
申请动机写的是“对白云进一步加深理解、工作进一步展开”，对现行站务管理体制与方法的看法和建议是“经实践经验比较有效可行”。（反正说的和做的不一样
是他的常态）。&lt;br /&gt;&lt;br /&gt;2008年9月14日，在大家觉得应该让cwr赶紧锻炼的区间内，由于他的身份太特殊，先前也没有大版管理经验，所以只能让cwr申请二区见习区务，2008年9月23日破例任命他为二区见习区务。&lt;br /&gt;&lt;br /&gt;2008
年10月27日，在陈强的威逼下，站务组发布“经站务管理委员会讨论决定，站务组通过，任命cwr为本站站务指导。上任后，站务指导直接行使网络管理办公
室对站务组的日常工作指导以及专属事件的责任承担。希望上任后，为本站坚持正确舆论导向、让本站成为网友挚爱精神家园而努力工作”。可惜，他只看到了前半
句，完全忽视后半句。按他现场的话说，他不适合当版主和站务，只适合当站务指导，这话说的真是太搞笑了。有点儿像“我不适合当太子和宰相，我只适合当皇
帝”的味道。&lt;br /&gt;&lt;br /&gt;2008年12月22日，陈强在谋取到站务指导后，进一步向当时的站务总管阿幼伸手，要求阿幼任命他为站务总管，直接拥有全
站权限。在这次的升任中，陈强明明知道自己是违规，但还是想方设法的匡骗站务组。在阿幼提出升迁太快，同时上次转正就已经是考虑要让陈强向学校交待的异议
下，陈强同时也提出了自己的理由：“现在也不好交代”、“我要当站务总管”、“上次违规是上次，这次是这次，你不说怎么就算违规了？”、“你为什么总是要
卡我这边呢？”、“不是有站务组吗？难道我上了后我一个人说了算？”。事实上，自陈强上任后，很多事情都是陈强一个人说了算。封网友的上站权限再也不按照
站规来，而是直接一句话扰乱版务，同时通过非正常程序手段调取网友个人隐私资料直接给网友打电话说他的言论不适合这类的云云，同时利用自己党宣部老师的权
利压迫大家。搞得怨声载道。时任泡菜版的老王律师因为在HS上维权说了一个法律见解，就被陈强封了上站权，后经站务组的调解，方才解决了相关事宜。真可谓
一手遮天。&lt;br /&gt;&lt;br /&gt;2009年初，站务组为了恢复热门话题历尽艰辛，基本把能用的筹码都用了，无奈同意陈强担任站务总管也是为了恢复昔日的十大。
陈强去再一次厚颜无耻的撕破了先前伪善的面孔，说王乘校长放话，要恢复十大必须得到王校长的手谕。2009年3月初，陈强再次提出虽然为站务总管，但是权
限一直没有跟上来，对站务组提出了质问，同时提出站务组就是对着他干的，就是不愿意改他的权限，并电话指示相关站务修改他的权限，矛盾进一步激化。于是出
现了2009年陈强利用职务之便从党宣部及网络中心处拿来全站程序密码，并修改自己的权限。他的伪善不仅是在这方面，更是在平时开会里，动不动就说李校长
的坏话，说李校长两面派，说话不算话，最后还是把屎盆子扣在他的头上等等。本次事件虽然得到了缓解，陈强也发短信表示愿意尽释前嫌，但是人人心中都已经留
下了一个不可磨灭的阴影。&lt;br /&gt;&lt;br /&gt;这里还记着当时他的一些观点与谈话：&lt;br /&gt;&lt;br /&gt;“cwr先对自己以前的工作态度和管理模式进行了解释，承认把joshuaG、xingxin&lt;br /&gt;当作他的对立面来看待，他说他现在认识到这是不对的，但同时也说这是因为站务组先不&lt;br /&gt;信任他，“卡”他，不执行他的命令和看法而造成的，并拿chentaohm，xingxin说事，说&lt;br /&gt;站内直接回绝cwr的要求让cwr觉得站务组是和他对着干，而且和他站内交流时让他感觉生&lt;br /&gt;硬不尊重和配合他，并举了chentaohm说“这样做肯定不行的”警告他和xingxin拒绝帮他&lt;br /&gt;查网友资料等事例佐证。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 站务组重新介绍了我们站务组历来的工作方法，站务归站务，朋友归朋友，大家线上身份&lt;br /&gt;平等，不会因为谁的特殊身份而特殊对待。而且他们是为了让cwr更快的熟悉和开展工作，&lt;br /&gt;并且向他说明chentaohm，xingxin向来在站务组内部按照党宣和指导老师的要求开展工作&lt;br /&gt;，做的事情也是站务组集体讨论决定的。并且他们都是按照站规在做事情，不能随便查询&lt;br /&gt;网友资料是站规中规定的。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; cwr接着对主站和ftp的密码事情做了解释，他的意思是他想让我们知道，除了通过我&lt;br /&gt;们，他还有其他的方法了解白云权限并控制白云。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们强调我们是一个整体，不是对立的。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; cwr询问什么时候可以上站长，并提出希望见习时间能够从给sysop发信申请时算起。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp;我们说要等时机成熟，我们希望公示后没有反对的声音，哪怕是一个反对的声音。&lt;br /&gt;我告诉他站务公示后历来都没有被反对，上次ff被反对后我们只能做出道歉并不让其见习&lt;br /&gt;，我们不希望同样的事情发生，所以我们也在等待适合的时机。同时告诉他如果他公示&lt;br /&gt;后有人反对，站务组会很难做，而且反对的意见如果被他的主管看到会不利于他今后工作&lt;br /&gt;的开展。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他继续问什么时候算时机成熟。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们强调要多和站务区务版主交流，不只是线上的更要在线下，而且要用平等互相尊&lt;br /&gt;重的心态进行交流，将心比心，以理服人，而不是靠权限和权利压人。并代表站务组邀请&lt;br /&gt;他参加版主烧烤和白云篮球足球赛。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他说他的工作压力大并被领导批评。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 站务组始终是和党宣及指导老师在一条线上，始终按照党宣和指导老师的要&lt;br /&gt;求做事情，从来没有想过和指导老师对着干，希望他能够支持我们信任我们。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 我们问了他在任白云的时间，他说他不知道，不过近期不会有所变动，他希望能在白云&lt;br /&gt;上做点业绩做出“彩”，我顺着他的话提了一下希望他能够多为白云在学校争取资源和支&lt;br /&gt;持，他对此没有否定，他说我们要把工作做的更好他才好去找领导争取。我向他提了版主&lt;br /&gt;烧烤和篮球足球赛，他表示支持。我强调我们都是义务的，党宣和指导老师对我们的信任&lt;br /&gt;历来是对我们工作最大的支持。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 同时我们向他提出希望他以后能够多参加我们的线下活动，并多在线下和站务组版主交流，注意交流的方法，他说他今后会注意这个。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 他提出非常时刻宵禁的事情，我说要提前通知我们，如果我们都觉得这是必须和必要&lt;br /&gt;的，我们会及时妥善的处理。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; 另外，我告诉他我们管理站务和程序站务是一个整体，暗示他不要试图拉拢或者挑拨&lt;br /&gt;我们之间的关系，并向他强调了程序站务在白云不可替代的举足轻重的地位。”&lt;br /&gt;&lt;br /&gt;不
过狼就是狼，狼的野性是谁也磨灭不掉的。陈强最后还是伸出了那支罪恶之手，也许他并不知道，BBS和一个网站是不一样的，BBS需要的是人的互动，没有了
这群网友，BBS就好比没有了灵魂，而网站没有了人，他还是有音乐有视频有文章，他的对外效果是一样的。也许正是BBS这个最核心最本质的东西没有得到上
述三位“伟大”的领导的认同，所以才会有今天的角逐。也许这是铁打的营盘的一个必然，但是我却没有想到，这个必然还在我依然FQ之年产生了，我也没有想到
我的历任生活会被这样的一次事件所打乱，也许对我来说，失去联系与灵魂的白云黄鹤，连屎都不如。&lt;br /&gt;&lt;br /&gt;&amp;amp;nbsp;&lt;br /&gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; 2009年10月22日晨于海西&lt;img src=&quot;http://www1.feedsky.com/t1/327474424/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474424/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474424/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Thu, 22 Oct 2009 12:09:49 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY2bMBDA/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474424/5604813</fs:itemid></item><item><title>SSH翻墙详解: 一劳永逸的翻墙方式</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA/">&lt;p&gt;本文将提供一种一劳永逸的翻墙方式（ssh -D），实施之后，那道墙——对你来说——将从此透明。&lt;/p&gt;

&lt;p&gt;本文面向的用户：使用Windows作为操作系统并且使用Firefox作为常用浏览器。&lt;/p&gt;

&lt;h2&gt;第一步：免费获取拥有SSH权限的帐号和密码。&lt;/h2&gt;

&lt;p&gt;默认的免费获取方式：将本文转载到你自己的博客上，将转载后的文章网址发送到&lt;img  src=&quot;http://photos.smugmug.com/photos/497999637_nw25h-O.png&quot; alt=&quot;f.ckgfw#gmail.com&quot; /&gt;。&lt;/p&gt;

&lt;p&gt;转载方式：拷贝&lt;a href=&quot;https://dl.getdropbox.com/u/873345/static/embed.txt&quot;&gt;文章代码&lt;/a&gt;至博客后台HTML编辑器中，直接发布即可，文章标题自拟，可在前后文插入自己的评论。&lt;/p&gt;

&lt;p&gt;经过人工审核，你将收到一封附有五个拥有SSH权限的帐号和密码的电子邮件，你可以将它们赠与你自己的读者。&lt;/p&gt;

&lt;p&gt;更多获取方式将在今后陆续激活，请关注我们的最新更新：&lt;a href=&quot;https://friendfeed.com/fuckgfw&quot;&gt;https://friendfeed.com/fuckgfw&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;第二步：配置MyEntunnel软件&lt;/h2&gt;

&lt;p&gt;下载并安装MyEntunnel，该软件全名为My Encrypted Tunnel。&lt;/p&gt;

&lt;p&gt;一键下载：&lt;a href=&quot;https://dl.getdropbox.com/u/873345/download/myentunnel.exe&quot;&gt;https://dl.getdropbox.com/u/873345/download/myentunnel.exe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956295_FRKXY-O.jpg&quot; alt=&quot;myentunnel&quot; /&gt;&lt;/p&gt;

&lt;p&gt;按照上图将第一步收到的帐号信息填写到相应的地方后，点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956305_GuUqV-O.jpg&quot; alt=&quot;save&quot; /&gt;按钮，再点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956257_vDBHg-O.jpg&quot; alt=&quot;hide&quot; /&gt;按钮。&lt;/p&gt;

&lt;p&gt;第一次连接过程中会出现一个认证对话框，按照提示确认即可。以后的自动连接中将不再出现此认证对话框。&lt;/p&gt;

&lt;p&gt;最后点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956277_uqUyE-O.jpg&quot; alt=&quot;hide&quot; /&gt;按钮，使对话框隐藏到系统任务栏中。&lt;/p&gt;

&lt;p&gt;提示：&lt;/p&gt;

&lt;p&gt;为MyEntunnel创建一个快捷方式，将其复制到系统的【启动】（C:\Documents and Settings\当前用户名（需要修改成你自己的）\「开始」菜单\程序\启动）文件夹中，今后开机便可自动启动软件，并自动连接服务器。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956351_pNNkc-O.png&quot; alt=&quot;tray&quot; /&gt;&lt;/p&gt;

&lt;p&gt;绿色代表连接成功且稳定；黄色代表正在连接或重新连接；红色代表连接失败。&lt;/p&gt;

&lt;h2&gt;第三步：配置Firefox浏览器&lt;/h2&gt;

&lt;p&gt;假设你正使用&lt;a href=&quot;http://www.mozilla.com/firefox&quot;&gt;Firefox浏览器&lt;/a&gt;阅读本文。&lt;/p&gt;

&lt;p&gt;一键安装：&lt;a href=&quot;http://autoproxy.mozdev.org/latest.xpi&quot;&gt;http://autoproxy.mozdev.org/latest.xpi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/498951512_XzxSh-O.png&quot; alt=&quot;xpi-offical&quot; /&gt;&lt;/p&gt;

&lt;p&gt;点击立即安装，安装后，重新启动Firefox。然后你会看到如下对话框，选择gfwlist (P.R.China)后，点击确定。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956357_vmp9W-O.png&quot; alt=&quot;gfwlist&quot; /&gt;&lt;/p&gt;

&lt;p&gt;接着你会看到Firefox主界面右上角出现有一个“福”字图案，点击“福”。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956204_t4d3L-O.png&quot; alt=&quot;fu&quot; /&gt;&lt;/p&gt;

&lt;p&gt;点击“代理服务器——编辑代理服务器”。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956317_yWwtL-O.png&quot; alt=&quot;edit&quot; /&gt;&lt;/p&gt;

&lt;p&gt;随即出现如下画面，你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956227_jQby9-O.png&quot; alt=&quot;before&quot; /&gt;&lt;/p&gt;

&lt;p&gt;将GAppProxy一栏的参数修改为如下图所示。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956232_ttQRj-O.png&quot; alt=&quot;after&quot; /&gt;&lt;/p&gt;

&lt;p&gt;修改完毕后，点击确定。至此配置已全部就绪。&lt;/p&gt;

&lt;p&gt;获取更多帮助，请关注反馈中心：&lt;a href=&quot;https://friendfeed.com/fuckgfw-feedback&quot;&gt;https://friendfeed.com/fuckgfw-feedback&lt;/a&gt;&lt;/p&gt;

&lt;a href=&quot;http://digg.com/d1nsDv&quot;&gt;&lt;img  src=&quot;https://dl.getdropbox.com/u/873345/static/Bernie.png&quot; alt=&quot;Bernie:&amp;amp;quot;Eat me!&amp;amp;quot;&quot; title=&quot;I'm Bernie. Eat me!&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;

&lt;h2&gt;第四步：支持fuckGFW&lt;/h2&gt;

&lt;p&gt;获取详情，请关注捐赠与推广中心：&lt;a href=&quot;https://friendfeed.com/fuckgfw-donation-and-marketing&quot;&gt;https://friendfeed.com/fuckgfw-donation-and-marketing&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;版权信息：您可以自由复制、传播、演绎本作品且无需署名、无需注明原始出处。&lt;/h4&gt;</content><content:encoded>&lt;p&gt;本文将提供一种一劳永逸的翻墙方式（ssh -D），实施之后，那道墙——对你来说——将从此透明。&lt;/p&gt;

&lt;p&gt;本文面向的用户：使用Windows作为操作系统并且使用Firefox作为常用浏览器。&lt;/p&gt;

&lt;h2&gt;第一步：免费获取拥有SSH权限的帐号和密码。&lt;/h2&gt;

&lt;p&gt;默认的免费获取方式：将本文转载到你自己的博客上，将转载后的文章网址发送到&lt;img  src=&quot;http://photos.smugmug.com/photos/497999637_nw25h-O.png&quot; alt=&quot;f.ckgfw#gmail.com&quot; /&gt;。&lt;/p&gt;

&lt;p&gt;转载方式：拷贝&lt;a href=&quot;https://dl.getdropbox.com/u/873345/static/embed.txt&quot;&gt;文章代码&lt;/a&gt;至博客后台HTML编辑器中，直接发布即可，文章标题自拟，可在前后文插入自己的评论。&lt;/p&gt;

&lt;p&gt;经过人工审核，你将收到一封附有五个拥有SSH权限的帐号和密码的电子邮件，你可以将它们赠与你自己的读者。&lt;/p&gt;

&lt;p&gt;更多获取方式将在今后陆续激活，请关注我们的最新更新：&lt;a href=&quot;https://friendfeed.com/fuckgfw&quot;&gt;https://friendfeed.com/fuckgfw&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;第二步：配置MyEntunnel软件&lt;/h2&gt;

&lt;p&gt;下载并安装MyEntunnel，该软件全名为My Encrypted Tunnel。&lt;/p&gt;

&lt;p&gt;一键下载：&lt;a href=&quot;https://dl.getdropbox.com/u/873345/download/myentunnel.exe&quot;&gt;https://dl.getdropbox.com/u/873345/download/myentunnel.exe&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956295_FRKXY-O.jpg&quot; alt=&quot;myentunnel&quot; /&gt;&lt;/p&gt;

&lt;p&gt;按照上图将第一步收到的帐号信息填写到相应的地方后，点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956305_GuUqV-O.jpg&quot; alt=&quot;save&quot; /&gt;按钮，再点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956257_vDBHg-O.jpg&quot; alt=&quot;hide&quot; /&gt;按钮。&lt;/p&gt;

&lt;p&gt;第一次连接过程中会出现一个认证对话框，按照提示确认即可。以后的自动连接中将不再出现此认证对话框。&lt;/p&gt;

&lt;p&gt;最后点击&lt;img  src=&quot;http://photos.smugmug.com/photos/497956277_uqUyE-O.jpg&quot; alt=&quot;hide&quot; /&gt;按钮，使对话框隐藏到系统任务栏中。&lt;/p&gt;

&lt;p&gt;提示：&lt;/p&gt;

&lt;p&gt;为MyEntunnel创建一个快捷方式，将其复制到系统的【启动】（C:\Documents and Settings\当前用户名（需要修改成你自己的）\「开始」菜单\程序\启动）文件夹中，今后开机便可自动启动软件，并自动连接服务器。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956351_pNNkc-O.png&quot; alt=&quot;tray&quot; /&gt;&lt;/p&gt;

&lt;p&gt;绿色代表连接成功且稳定；黄色代表正在连接或重新连接；红色代表连接失败。&lt;/p&gt;

&lt;h2&gt;第三步：配置Firefox浏览器&lt;/h2&gt;

&lt;p&gt;假设你正使用&lt;a href=&quot;http://www.mozilla.com/firefox&quot;&gt;Firefox浏览器&lt;/a&gt;阅读本文。&lt;/p&gt;

&lt;p&gt;一键安装：&lt;a href=&quot;http://autoproxy.mozdev.org/latest.xpi&quot;&gt;http://autoproxy.mozdev.org/latest.xpi&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/498951512_XzxSh-O.png&quot; alt=&quot;xpi-offical&quot; /&gt;&lt;/p&gt;

&lt;p&gt;点击立即安装，安装后，重新启动Firefox。然后你会看到如下对话框，选择gfwlist (P.R.China)后，点击确定。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956357_vmp9W-O.png&quot; alt=&quot;gfwlist&quot; /&gt;&lt;/p&gt;

&lt;p&gt;接着你会看到Firefox主界面右上角出现有一个“福”字图案，点击“福”。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956204_t4d3L-O.png&quot; alt=&quot;fu&quot; /&gt;&lt;/p&gt;

&lt;p&gt;点击“代理服务器——编辑代理服务器”。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956317_yWwtL-O.png&quot; alt=&quot;edit&quot; /&gt;&lt;/p&gt;

&lt;p&gt;随即出现如下画面，你会看到如GAppProxy、Tor和Your Freedom这样一系列代理服务器名称。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956227_jQby9-O.png&quot; alt=&quot;before&quot; /&gt;&lt;/p&gt;

&lt;p&gt;将GAppProxy一栏的参数修改为如下图所示。&lt;/p&gt;

&lt;p&gt;&lt;img  src=&quot;http://photos.smugmug.com/photos/497956232_ttQRj-O.png&quot; alt=&quot;after&quot; /&gt;&lt;/p&gt;

&lt;p&gt;修改完毕后，点击确定。至此配置已全部就绪。&lt;/p&gt;

&lt;p&gt;获取更多帮助，请关注反馈中心：&lt;a href=&quot;https://friendfeed.com/fuckgfw-feedback&quot;&gt;https://friendfeed.com/fuckgfw-feedback&lt;/a&gt;&lt;/p&gt;

&lt;a href=&quot;http://digg.com/d1nsDv&quot;&gt;&lt;img  src=&quot;https://dl.getdropbox.com/u/873345/static/Bernie.png&quot; alt=&quot;Bernie:&amp;amp;quot;Eat me!&amp;amp;quot;&quot; title=&quot;I'm Bernie. Eat me!&quot; align=&quot;right&quot; border=&quot;0&quot; /&gt;&lt;/a&gt;

&lt;h2&gt;第四步：支持fuckGFW&lt;/h2&gt;

&lt;p&gt;获取详情，请关注捐赠与推广中心：&lt;a href=&quot;https://friendfeed.com/fuckgfw-donation-and-marketing&quot;&gt;https://friendfeed.com/fuckgfw-donation-and-marketing&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;版权信息：您可以自由复制、传播、演绎本作品且无需署名、无需注明原始出处。&lt;/h4&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/327474425/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474425/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474425/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Sun, 09 Aug 2009 06:54:11 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY8asBDA/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474425/5604813</fs:itemid></item><item><title>实在无聊</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA/">饭否/豆瓣都相继沦陷了，真TMD的混蛋&lt;br /&gt;&lt;br /&gt;&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMY2TYM&quot; width=&quot;524&quot; /&gt;</content><content:encoded>饭否/豆瓣都相继沦陷了，真TMD的混蛋&lt;br /&gt;&lt;br /&gt;&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMY2TYM&quot; width=&quot;524&quot; /&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/327474426/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474426/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474426/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Wed, 08 Jul 2009 21:22:11 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchoLEghBcHBfdXNlchgBDAsSBFBvc3QY0YwBDA/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474426/5604813</fs:itemid></item><item><title>发布一个类似discuz论坛的python分页类</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM/">先看一下效果：&lt;br /&gt;&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMYuhcM&quot; /&gt;&lt;br /&gt;代码如下：&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;#-*- encoding: utf-8 -*-&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;author: 3kkk-me(http://www.3kkk.me)&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;class Pager(object):&lt;br /&gt;  def __init__(self, total, pageSize, page, page_list_num = 10):&lt;br /&gt;    pageCount = int(math.ceil((total+0.0)/pageSize))&lt;br /&gt;    if page &amp;amp;lt; 1:&lt;br /&gt;      page = 1&lt;br /&gt;    if page &amp;amp;gt; pageCount:&lt;br /&gt;      page = pageCount&lt;br /&gt;&lt;br /&gt;    offset = 2&lt;br /&gt;    &lt;br /&gt;    if page_list_num &amp;amp;gt; pageCount:&lt;br /&gt;      from_page = 1&lt;br /&gt;      to_page = pageCount&lt;br /&gt;    else:&lt;br /&gt;      from_page = page - offset&lt;br /&gt;      to_page = from_page + page_list_num -1&lt;br /&gt;      if from_page &amp;amp;lt; 1:&lt;br /&gt;        to_page = page + 1 - from_page&lt;br /&gt;        from_page = 1&lt;br /&gt;        if to_page - from_page &amp;amp;lt; page_list_num:&lt;br /&gt;          to_page = page_list_num&lt;br /&gt;      elif to_page &amp;amp;gt; pageCount:&lt;br /&gt;        from_page = pageCount - page_list_num + 1&lt;br /&gt;        to_page = pageCount&lt;br /&gt;    &lt;br /&gt;    if page - offset &amp;amp;gt;1 and pageCount &amp;amp;gt; page_list_num:&lt;br /&gt;      show_first = True&lt;br /&gt;    else:&lt;br /&gt;      show_first = False&lt;br /&gt;    &lt;br /&gt;    if page &amp;amp;gt; 1:&lt;br /&gt;      show_pre = True&lt;br /&gt;    else:&lt;br /&gt;      show_pre = False&lt;br /&gt;    &lt;br /&gt;    if page &amp;amp;lt; pageCount:&lt;br /&gt;      show_next = True&lt;br /&gt;    else:&lt;br /&gt;      show_next = False&lt;br /&gt;    &lt;br /&gt;    if to_page &amp;amp;lt; pageCount:&lt;br /&gt;      show_end = True&lt;br /&gt;    else:&lt;br /&gt;      show_end = False&lt;br /&gt;&lt;br /&gt;    self.total = total&lt;br /&gt;    self.pageSize = pageSize&lt;br /&gt;    self.page = page&lt;br /&gt;    self.pageCount = pageCount&lt;br /&gt;    self.from_page = from_page&lt;br /&gt;    self.to_page = to_page&lt;br /&gt;    self.page_list = range(from_page, to_page+1)&lt;br /&gt;&lt;br /&gt;    self.show_first = show_first&lt;br /&gt;    self.show_end = show_end&lt;br /&gt;    self.show_pre = show_pre&lt;br /&gt;    self.show_next = show_next&lt;br /&gt;&lt;br /&gt;  def render(self, link=''):&lt;br /&gt;    html = []&lt;br /&gt;    pager = self&lt;br /&gt;    html.append('共%s条' % pager.total)&lt;br /&gt;    &lt;br /&gt;    if link == '':&lt;br /&gt;      link = '?'&lt;br /&gt;    else:&lt;br /&gt;      if link.find('?') == -1:&lt;br /&gt;        link += '?'&lt;br /&gt;      else:&lt;br /&gt;        link += '&amp;amp;'&lt;br /&gt;&lt;br /&gt;    if pager.show_pre:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;上一页&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.page-1))&lt;br /&gt;    else:&lt;br /&gt;      html.append('&amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;上一页&amp;amp;lt;/span&amp;amp;gt;')&lt;br /&gt;    &lt;br /&gt;    if pager.show_first:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=1&quot;&amp;amp;gt;1&amp;amp;lt;/a&amp;amp;gt;...' % link)&lt;br /&gt;&lt;br /&gt;    for p in pager.page_list:&lt;br /&gt;      if p == pager.page:&lt;br /&gt;        html.append('&amp;amp;lt;span class=&quot;current&quot;&amp;amp;gt;%s&amp;amp;lt;/span&amp;amp;gt;' % pager.page)&lt;br /&gt;      else:&lt;br /&gt;        html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;%s&amp;amp;lt;/a&amp;amp;gt;' % (link, p, p))&lt;br /&gt;&lt;br /&gt;    if pager.show_end :&lt;br /&gt;      html.append('...&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;%s&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.pageCount, pager.pageCount))&lt;br /&gt;&lt;br /&gt;    if pager.show_next:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;下一页&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.page + 1))&lt;br /&gt;    else:&lt;br /&gt;      html.append('&amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;下一页&amp;amp;lt;/span&amp;amp;gt;')&lt;br /&gt;    &lt;br /&gt;    return ''.join(html)&lt;br /&gt;  &lt;br /&gt;  def render_tpl(self):&lt;br /&gt;    return &quot;&quot;&quot;&lt;br /&gt;     共{{ pager.total }}条&lt;br /&gt;&lt;br /&gt;     {% if pager.show_pre %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page={{ pager.page|add:&quot;-1&quot; }}&quot;&amp;amp;gt;上一页&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% else %}&lt;br /&gt;     &amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;上一页&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_first %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page=1&quot;&amp;amp;gt;1&amp;amp;lt;/a&amp;amp;gt;...&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% for p in pager.page_list %}&lt;br /&gt;      {% ifequal p pager.page %}&lt;br /&gt;      &amp;amp;lt;span class=&quot;current&quot;&amp;amp;gt;{{ pager.page }}&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;      {% else %}&lt;br /&gt;      &amp;amp;lt;a href=&quot;?page={{ p }}&quot;&amp;amp;gt;{{ p }}&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;      {% endifequal %}&lt;br /&gt;     {% endfor %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_end %}&lt;br /&gt;     ...&amp;amp;lt;a href=&quot;?page={{ pager.pageCount }}&quot;&amp;amp;gt;{{ pager.pageCount }}&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_next %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page={{ pager.page|add:&quot;1&quot; }}&quot;&amp;amp;gt;下一页&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% else %}&lt;br /&gt;     &amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;下一页&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;    &quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;</content><content:encoded>先看一下效果：&lt;br /&gt;&lt;img  alt=&quot;&quot; src=&quot;/rpc/img/?img_id=agcza2trLW1lcg0LEgZJbWFnZXMYuhcM&quot; /&gt;&lt;br /&gt;代码如下：&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;#-*- encoding: utf-8 -*-&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;author: 3kkk-me(http://www.3kkk.me)&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;import math&lt;br /&gt;&lt;br /&gt;class Pager(object):&lt;br /&gt;  def __init__(self, total, pageSize, page, page_list_num = 10):&lt;br /&gt;    pageCount = int(math.ceil((total+0.0)/pageSize))&lt;br /&gt;    if page &amp;amp;lt; 1:&lt;br /&gt;      page = 1&lt;br /&gt;    if page &amp;amp;gt; pageCount:&lt;br /&gt;      page = pageCount&lt;br /&gt;&lt;br /&gt;    offset = 2&lt;br /&gt;    &lt;br /&gt;    if page_list_num &amp;amp;gt; pageCount:&lt;br /&gt;      from_page = 1&lt;br /&gt;      to_page = pageCount&lt;br /&gt;    else:&lt;br /&gt;      from_page = page - offset&lt;br /&gt;      to_page = from_page + page_list_num -1&lt;br /&gt;      if from_page &amp;amp;lt; 1:&lt;br /&gt;        to_page = page + 1 - from_page&lt;br /&gt;        from_page = 1&lt;br /&gt;        if to_page - from_page &amp;amp;lt; page_list_num:&lt;br /&gt;          to_page = page_list_num&lt;br /&gt;      elif to_page &amp;amp;gt; pageCount:&lt;br /&gt;        from_page = pageCount - page_list_num + 1&lt;br /&gt;        to_page = pageCount&lt;br /&gt;    &lt;br /&gt;    if page - offset &amp;amp;gt;1 and pageCount &amp;amp;gt; page_list_num:&lt;br /&gt;      show_first = True&lt;br /&gt;    else:&lt;br /&gt;      show_first = False&lt;br /&gt;    &lt;br /&gt;    if page &amp;amp;gt; 1:&lt;br /&gt;      show_pre = True&lt;br /&gt;    else:&lt;br /&gt;      show_pre = False&lt;br /&gt;    &lt;br /&gt;    if page &amp;amp;lt; pageCount:&lt;br /&gt;      show_next = True&lt;br /&gt;    else:&lt;br /&gt;      show_next = False&lt;br /&gt;    &lt;br /&gt;    if to_page &amp;amp;lt; pageCount:&lt;br /&gt;      show_end = True&lt;br /&gt;    else:&lt;br /&gt;      show_end = False&lt;br /&gt;&lt;br /&gt;    self.total = total&lt;br /&gt;    self.pageSize = pageSize&lt;br /&gt;    self.page = page&lt;br /&gt;    self.pageCount = pageCount&lt;br /&gt;    self.from_page = from_page&lt;br /&gt;    self.to_page = to_page&lt;br /&gt;    self.page_list = range(from_page, to_page+1)&lt;br /&gt;&lt;br /&gt;    self.show_first = show_first&lt;br /&gt;    self.show_end = show_end&lt;br /&gt;    self.show_pre = show_pre&lt;br /&gt;    self.show_next = show_next&lt;br /&gt;&lt;br /&gt;  def render(self, link=''):&lt;br /&gt;    html = []&lt;br /&gt;    pager = self&lt;br /&gt;    html.append('共%s条' % pager.total)&lt;br /&gt;    &lt;br /&gt;    if link == '':&lt;br /&gt;      link = '?'&lt;br /&gt;    else:&lt;br /&gt;      if link.find('?') == -1:&lt;br /&gt;        link += '?'&lt;br /&gt;      else:&lt;br /&gt;        link += '&amp;amp;'&lt;br /&gt;&lt;br /&gt;    if pager.show_pre:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;上一页&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.page-1))&lt;br /&gt;    else:&lt;br /&gt;      html.append('&amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;上一页&amp;amp;lt;/span&amp;amp;gt;')&lt;br /&gt;    &lt;br /&gt;    if pager.show_first:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=1&quot;&amp;amp;gt;1&amp;amp;lt;/a&amp;amp;gt;...' % link)&lt;br /&gt;&lt;br /&gt;    for p in pager.page_list:&lt;br /&gt;      if p == pager.page:&lt;br /&gt;        html.append('&amp;amp;lt;span class=&quot;current&quot;&amp;amp;gt;%s&amp;amp;lt;/span&amp;amp;gt;' % pager.page)&lt;br /&gt;      else:&lt;br /&gt;        html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;%s&amp;amp;lt;/a&amp;amp;gt;' % (link, p, p))&lt;br /&gt;&lt;br /&gt;    if pager.show_end :&lt;br /&gt;      html.append('...&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;%s&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.pageCount, pager.pageCount))&lt;br /&gt;&lt;br /&gt;    if pager.show_next:&lt;br /&gt;      html.append('&amp;amp;lt;a href=&quot;%spage=%s&quot;&amp;amp;gt;下一页&amp;amp;lt;/a&amp;amp;gt;' % (link, pager.page + 1))&lt;br /&gt;    else:&lt;br /&gt;      html.append('&amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;下一页&amp;amp;lt;/span&amp;amp;gt;')&lt;br /&gt;    &lt;br /&gt;    return ''.join(html)&lt;br /&gt;  &lt;br /&gt;  def render_tpl(self):&lt;br /&gt;    return &quot;&quot;&quot;&lt;br /&gt;     共{{ pager.total }}条&lt;br /&gt;&lt;br /&gt;     {% if pager.show_pre %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page={{ pager.page|add:&quot;-1&quot; }}&quot;&amp;amp;gt;上一页&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% else %}&lt;br /&gt;     &amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;上一页&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_first %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page=1&quot;&amp;amp;gt;1&amp;amp;lt;/a&amp;amp;gt;...&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% for p in pager.page_list %}&lt;br /&gt;      {% ifequal p pager.page %}&lt;br /&gt;      &amp;amp;lt;span class=&quot;current&quot;&amp;amp;gt;{{ pager.page }}&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;      {% else %}&lt;br /&gt;      &amp;amp;lt;a href=&quot;?page={{ p }}&quot;&amp;amp;gt;{{ p }}&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;      {% endifequal %}&lt;br /&gt;     {% endfor %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_end %}&lt;br /&gt;     ...&amp;amp;lt;a href=&quot;?page={{ pager.pageCount }}&quot;&amp;amp;gt;{{ pager.pageCount }}&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;&lt;br /&gt;     {% if pager.show_next %}&lt;br /&gt;     &amp;amp;lt;a href=&quot;?page={{ pager.page|add:&quot;1&quot; }}&quot;&amp;amp;gt;下一页&amp;amp;lt;/a&amp;amp;gt;&lt;br /&gt;     {% else %}&lt;br /&gt;     &amp;amp;lt;span class=&quot;disabled&quot;&amp;amp;gt;下一页&amp;amp;lt;/span&amp;amp;gt;&lt;br /&gt;     {% endif %}&lt;br /&gt;    &quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/327474430/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474430/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474430/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Mon, 18 May 2009 00:44:35 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqUYM/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474430/5604813</fs:itemid></item><item><title>一个基于模板和正则表达式的文本匹配模块(python)</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M/">从一个文本中匹配出我们需要的信息是我们常用的一个操作，比如抓取一个网页一篇文章的标题、作者、内容，或者一个列表页的文章列表，甚至更复杂的，要同时抓取一篇文章的内容，以及文章下面的评论列表&lt;br /&gt;&lt;br /&gt;这些都可以通过正则表达式完成，完成一个任务也许要写很多的正则表达式，于是自己写了通用的模块tparser，它的主要好处就是可以把所有的正则表达式放在一起&lt;br /&gt;&lt;br /&gt;先看一下下面的例子&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;from tparser import Tparser&lt;br /&gt;tp=Tparser(&quot;(?P&amp;amp;lt;pre&amp;amp;gt;\d+)-(?P&amp;amp;lt;next&amp;amp;gt;\d+)&quot;)&lt;br /&gt;print tp.parse_str(&quot;sdf87847-777skj&quot;)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;结果为：{'pre': '87847', 'next': '777'}&lt;/p&gt;&lt;p&gt;如果内容是从网络获取的，使用 tp.parser_url(url)即可&lt;/p&gt;&lt;p&gt;下面是一个复杂的例子，从好听网抓取一个专辑的信息，包括专辑的名字、歌手名字、发行时间以及专辑的歌曲列表&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;songs_tp=Tparser({&lt;br /&gt; &quot;pattern&quot;: r'''&amp;amp;lt;div class='newzj_info'&amp;amp;gt;&amp;amp;lt;ul&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;(?P&amp;amp;lt;special&amp;amp;gt;.+?)&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;歌手姓名：&amp;amp;lt;a href='.+?'&amp;amp;gt;(?P&amp;amp;lt;singer&amp;amp;gt;.+?)&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;发行时间：(?P&amp;amp;lt;pub_time&amp;amp;gt;.*?)&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;发行公司：(?P&amp;amp;lt;pub_corp&amp;amp;gt;.+?)&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;专辑语种：(?P&amp;amp;lt;language&amp;amp;gt;.+?)&amp;amp;lt;/li&amp;amp;gt;.+?&amp;amp;lt;strong id=&quot;zjjs&quot;&amp;amp;gt;专辑介绍&amp;amp;lt;/strong&amp;amp;gt;.+?&amp;amp;lt;p&amp;amp;gt;(?P&amp;amp;lt;intro&amp;amp;gt;.+?)&amp;amp;lt;/p&amp;amp;gt;\s+&amp;amp;lt;div id=&quot;ad2&quot; class=&quot;gd_n760&quot;.+?&amp;amp;lt;form name='form2' onSubmit='javascript:return lbsong\(\);' target='haotingmusiclisten' action='http://www.haoting.com/play/haotingsonglian.htm'&amp;amp;gt;(?P&amp;amp;lt;song_list&amp;amp;gt;.+?)&amp;amp;lt;/form&amp;amp;gt;''',&lt;br /&gt; &quot;type&quot;: &quot;s&quot;,&lt;br /&gt; &quot;extends&quot;: {&lt;br /&gt; &quot;song_list&quot;: {&lt;br /&gt; 'pattern': r'''&amp;amp;lt;div id='\d+'&amp;amp;gt;&amp;amp;lt;div class='list_k' onMouseOver='dressIt\(this\)' onMouseOut='unDressIt\(this\)'&amp;amp;gt;&amp;amp;lt;div class='list_sz'&amp;amp;gt;\d+&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;div class='list_tit'&amp;amp;gt;&amp;amp;lt;a title='点击试听'.+?&amp;amp;gt;(?P&amp;amp;lt;name&amp;amp;gt;.*?)&amp;amp;lt;/a&amp;amp;gt;''',&lt;br /&gt; 'type': 'g',&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; })&lt;br /&gt;url = 'http://www.haoting.com/musiclist/ht_c8ae968ddec20974.htm'&lt;br /&gt;print songs_tp.parse_str(urllib2.urlopen(url).read().decode('gb18030').encode('utf-8'))&lt;/pre&gt;&lt;p&gt;返回结果如下&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;{&lt;br /&gt; 'intro': '刚荣获2008年IFPI香港唱片销量大奖的容祖儿',&lt;br /&gt; 'special': 'A Time For Us',&lt;br /&gt; 'language': '粤语',&lt;br /&gt; 'pub_corp': '英皇娱乐',&lt;br /&gt; 'pub_time': '2009年04月29日',&lt;br /&gt; 'singer': '容祖儿',&lt;br /&gt; 'song_list': [&lt;br /&gt;		{'name': 'song1'},&lt;br /&gt;		{'name': 'song2'},&lt;br /&gt;		{'name': 'song3'},&lt;br /&gt;		{'name': 'song4'},&lt;br /&gt;		{'name': 'song5'},&lt;br /&gt;		{'name': 'song6'},&lt;br /&gt;		{'name': 'song7'},&lt;br /&gt;		{'name': 'song8'},&lt;br /&gt; ],&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;其中song1-song8为歌曲名，为了显示方便改成了song1-song8，表示的是真实的歌曲名&lt;/p&gt;&lt;p&gt;tparser模块代码如下：&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;#-*- encoding: utf-8 -*-&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;author: 3kkk-me(http://www.3kkk.me)&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;import re&lt;br /&gt;from types import *&lt;br /&gt;import urllib2&lt;br /&gt;&lt;br /&gt;class Tparser(object):&lt;br /&gt;  &quot;parse info by template&quot;&lt;br /&gt;&lt;br /&gt;  version=&quot;1.0 beta&quot;&lt;br /&gt;  res = {}&lt;br /&gt;&lt;br /&gt;  def __init__(self,tm):&lt;br /&gt;    self.tm=tm&lt;br /&gt;  &lt;br /&gt;  @classmethod  &lt;br /&gt;  def getreg(cls, pattern):&lt;br /&gt;    if not cls.res.has_key(pattern):&lt;br /&gt;      cls.res[pattern]=re.compile(pattern,re.I|re.S)&lt;br /&gt;    &lt;br /&gt;    return cls.res[pattern]&lt;br /&gt;  &lt;br /&gt;  def match_str(self,match):&lt;br /&gt;    if match:&lt;br /&gt;      return match.groupdict()&lt;br /&gt;    else:&lt;br /&gt;      return match&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;  def parse_tm(self,tm,instrs):&lt;br /&gt;    if isinstance(tm, basestring):&lt;br /&gt;      tm={&quot;pattern&quot;:tm}&lt;br /&gt;    reg=self.getreg(tm[&quot;pattern&quot;])&lt;br /&gt;    &lt;br /&gt;    if not tm.has_key(&quot;type&quot;) or tm[&quot;type&quot;]!=&quot;g&quot;: &lt;br /&gt;      tm[&quot;type&quot;]=&quot;s&quot;&lt;br /&gt;&lt;br /&gt;    if tm[&quot;type&quot;]==&quot;g&quot;:&lt;br /&gt;      mtdicts=[self.match_str(mt) for mt in reg.finditer(instrs)]&lt;br /&gt;    else:&lt;br /&gt;      mtdict=self.match_str(reg.search(instrs))&lt;br /&gt;      if mtdict: &lt;br /&gt;        mtdicts=[mtdict]&lt;br /&gt;      else: &lt;br /&gt;        mtdicts=[]&lt;br /&gt;&lt;br /&gt;    if tm.has_key(&quot;extends&quot;):&lt;br /&gt;      for k in tm[&quot;extends&quot;]:&lt;br /&gt;        for mtd in mtdicts:&lt;br /&gt;          if mtd.has_key(k):&lt;br /&gt;            mtd[k]=self.parse_tm(tm[&quot;extends&quot;][k],mtd[k])&lt;br /&gt;&lt;br /&gt;    if tm[&quot;type&quot;]==&quot;g&quot;:&lt;br /&gt;      return mtdicts&lt;br /&gt;    else:&lt;br /&gt;      return mtdict&lt;br /&gt;&lt;br /&gt;  def parse_str(self,instrs):&lt;br /&gt;    return self.parse_tm(self.tm,instrs)&lt;br /&gt;&lt;br /&gt;  def parse_url(self,url):&lt;br /&gt;    html=urllib2.urlopen(url).read()&lt;br /&gt;    return self.parse_str(html)&lt;br /&gt;&lt;/pre&gt;</content><content:encoded>从一个文本中匹配出我们需要的信息是我们常用的一个操作，比如抓取一个网页一篇文章的标题、作者、内容，或者一个列表页的文章列表，甚至更复杂的，要同时抓取一篇文章的内容，以及文章下面的评论列表&lt;br /&gt;&lt;br /&gt;这些都可以通过正则表达式完成，完成一个任务也许要写很多的正则表达式，于是自己写了通用的模块tparser，它的主要好处就是可以把所有的正则表达式放在一起&lt;br /&gt;&lt;br /&gt;先看一下下面的例子&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;from tparser import Tparser&lt;br /&gt;tp=Tparser(&quot;(?P&amp;amp;lt;pre&amp;amp;gt;\d+)-(?P&amp;amp;lt;next&amp;amp;gt;\d+)&quot;)&lt;br /&gt;print tp.parse_str(&quot;sdf87847-777skj&quot;)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;结果为：{'pre': '87847', 'next': '777'}&lt;/p&gt;&lt;p&gt;如果内容是从网络获取的，使用 tp.parser_url(url)即可&lt;/p&gt;&lt;p&gt;下面是一个复杂的例子，从好听网抓取一个专辑的信息，包括专辑的名字、歌手名字、发行时间以及专辑的歌曲列表&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;songs_tp=Tparser({&lt;br /&gt; &quot;pattern&quot;: r'''&amp;amp;lt;div class='newzj_info'&amp;amp;gt;&amp;amp;lt;ul&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;&amp;amp;lt;strong&amp;amp;gt;(?P&amp;amp;lt;special&amp;amp;gt;.+?)&amp;amp;lt;/strong&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;歌手姓名：&amp;amp;lt;a href='.+?'&amp;amp;gt;(?P&amp;amp;lt;singer&amp;amp;gt;.+?)&amp;amp;lt;/a&amp;amp;gt;&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;发行时间：(?P&amp;amp;lt;pub_time&amp;amp;gt;.*?)&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;发行公司：(?P&amp;amp;lt;pub_corp&amp;amp;gt;.+?)&amp;amp;lt;/li&amp;amp;gt;&amp;amp;lt;li&amp;amp;gt;专辑语种：(?P&amp;amp;lt;language&amp;amp;gt;.+?)&amp;amp;lt;/li&amp;amp;gt;.+?&amp;amp;lt;strong id=&quot;zjjs&quot;&amp;amp;gt;专辑介绍&amp;amp;lt;/strong&amp;amp;gt;.+?&amp;amp;lt;p&amp;amp;gt;(?P&amp;amp;lt;intro&amp;amp;gt;.+?)&amp;amp;lt;/p&amp;amp;gt;\s+&amp;amp;lt;div id=&quot;ad2&quot; class=&quot;gd_n760&quot;.+?&amp;amp;lt;form name='form2' onSubmit='javascript:return lbsong\(\);' target='haotingmusiclisten' action='http://www.haoting.com/play/haotingsonglian.htm'&amp;amp;gt;(?P&amp;amp;lt;song_list&amp;amp;gt;.+?)&amp;amp;lt;/form&amp;amp;gt;''',&lt;br /&gt; &quot;type&quot;: &quot;s&quot;,&lt;br /&gt; &quot;extends&quot;: {&lt;br /&gt; &quot;song_list&quot;: {&lt;br /&gt; 'pattern': r'''&amp;amp;lt;div id='\d+'&amp;amp;gt;&amp;amp;lt;div class='list_k' onMouseOver='dressIt\(this\)' onMouseOut='unDressIt\(this\)'&amp;amp;gt;&amp;amp;lt;div class='list_sz'&amp;amp;gt;\d+&amp;amp;lt;/div&amp;amp;gt;&amp;amp;lt;div class='list_tit'&amp;amp;gt;&amp;amp;lt;a title='点击试听'.+?&amp;amp;gt;(?P&amp;amp;lt;name&amp;amp;gt;.*?)&amp;amp;lt;/a&amp;amp;gt;''',&lt;br /&gt; 'type': 'g',&lt;br /&gt; }&lt;br /&gt; }&lt;br /&gt; })&lt;br /&gt;url = 'http://www.haoting.com/musiclist/ht_c8ae968ddec20974.htm'&lt;br /&gt;print songs_tp.parse_str(urllib2.urlopen(url).read().decode('gb18030').encode('utf-8'))&lt;/pre&gt;&lt;p&gt;返回结果如下&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;{&lt;br /&gt; 'intro': '刚荣获2008年IFPI香港唱片销量大奖的容祖儿',&lt;br /&gt; 'special': 'A Time For Us',&lt;br /&gt; 'language': '粤语',&lt;br /&gt; 'pub_corp': '英皇娱乐',&lt;br /&gt; 'pub_time': '2009年04月29日',&lt;br /&gt; 'singer': '容祖儿',&lt;br /&gt; 'song_list': [&lt;br /&gt;		{'name': 'song1'},&lt;br /&gt;		{'name': 'song2'},&lt;br /&gt;		{'name': 'song3'},&lt;br /&gt;		{'name': 'song4'},&lt;br /&gt;		{'name': 'song5'},&lt;br /&gt;		{'name': 'song6'},&lt;br /&gt;		{'name': 'song7'},&lt;br /&gt;		{'name': 'song8'},&lt;br /&gt; ],&lt;br /&gt;}&lt;/pre&gt;&lt;p&gt;其中song1-song8为歌曲名，为了显示方便改成了song1-song8，表示的是真实的歌曲名&lt;/p&gt;&lt;p&gt;tparser模块代码如下：&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;#-*- encoding: utf-8 -*-&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;author: 3kkk-me(http://www.3kkk.me)&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;import re&lt;br /&gt;from types import *&lt;br /&gt;import urllib2&lt;br /&gt;&lt;br /&gt;class Tparser(object):&lt;br /&gt;  &quot;parse info by template&quot;&lt;br /&gt;&lt;br /&gt;  version=&quot;1.0 beta&quot;&lt;br /&gt;  res = {}&lt;br /&gt;&lt;br /&gt;  def __init__(self,tm):&lt;br /&gt;    self.tm=tm&lt;br /&gt;  &lt;br /&gt;  @classmethod  &lt;br /&gt;  def getreg(cls, pattern):&lt;br /&gt;    if not cls.res.has_key(pattern):&lt;br /&gt;      cls.res[pattern]=re.compile(pattern,re.I|re.S)&lt;br /&gt;    &lt;br /&gt;    return cls.res[pattern]&lt;br /&gt;  &lt;br /&gt;  def match_str(self,match):&lt;br /&gt;    if match:&lt;br /&gt;      return match.groupdict()&lt;br /&gt;    else:&lt;br /&gt;      return match&lt;br /&gt;&lt;br /&gt;      &lt;br /&gt;  def parse_tm(self,tm,instrs):&lt;br /&gt;    if isinstance(tm, basestring):&lt;br /&gt;      tm={&quot;pattern&quot;:tm}&lt;br /&gt;    reg=self.getreg(tm[&quot;pattern&quot;])&lt;br /&gt;    &lt;br /&gt;    if not tm.has_key(&quot;type&quot;) or tm[&quot;type&quot;]!=&quot;g&quot;: &lt;br /&gt;      tm[&quot;type&quot;]=&quot;s&quot;&lt;br /&gt;&lt;br /&gt;    if tm[&quot;type&quot;]==&quot;g&quot;:&lt;br /&gt;      mtdicts=[self.match_str(mt) for mt in reg.finditer(instrs)]&lt;br /&gt;    else:&lt;br /&gt;      mtdict=self.match_str(reg.search(instrs))&lt;br /&gt;      if mtdict: &lt;br /&gt;        mtdicts=[mtdict]&lt;br /&gt;      else: &lt;br /&gt;        mtdicts=[]&lt;br /&gt;&lt;br /&gt;    if tm.has_key(&quot;extends&quot;):&lt;br /&gt;      for k in tm[&quot;extends&quot;]:&lt;br /&gt;        for mtd in mtdicts:&lt;br /&gt;          if mtd.has_key(k):&lt;br /&gt;            mtd[k]=self.parse_tm(tm[&quot;extends&quot;][k],mtd[k])&lt;br /&gt;&lt;br /&gt;    if tm[&quot;type&quot;]==&quot;g&quot;:&lt;br /&gt;      return mtdicts&lt;br /&gt;    else:&lt;br /&gt;      return mtdict&lt;br /&gt;&lt;br /&gt;  def parse_str(self,instrs):&lt;br /&gt;    return self.parse_tm(self.tm,instrs)&lt;br /&gt;&lt;br /&gt;  def parse_url(self,url):&lt;br /&gt;    html=urllib2.urlopen(url).read()&lt;br /&gt;    return self.parse_str(html)&lt;br /&gt;&lt;/pre&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/327474431/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474431/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474431/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Thu, 14 May 2009 14:46:34 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwj4M/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474431/5604813</fs:itemid></item><item><title>推荐一款最强大的免费截屏软件</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M/">名字叫 &lt;strong&gt;pickpick&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;下载地址：&lt;a href=&quot;http://picpick.wiziple.net/download&quot;&gt;http://picpick.wiziple.net/download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以前同事推荐，今天要用到截屏，结果把这个软件的名字忘记了，上搜索引擎找了半天才找到，好东西就应该跟大家一起共享嘛&lt;br /&gt;&lt;br /&gt;特点：&lt;br /&gt;&lt;br /&gt;支持全屏、窗口、控件、区域、甚至还支持手绘区域截屏，而且都是免费的</content><content:encoded>名字叫 &lt;strong&gt;pickpick&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;下载地址：&lt;a href=&quot;http://picpick.wiziple.net/download&quot;&gt;http://picpick.wiziple.net/download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以前同事推荐，今天要用到截屏，结果把这个软件的名字忘记了，上搜索引擎找了半天才找到，好东西就应该跟大家一起共享嘛&lt;br /&gt;&lt;br /&gt;特点：&lt;br /&gt;&lt;br /&gt;支持全屏、窗口、控件、区域、甚至还支持手绘区域截屏，而且都是免费的&lt;img src=&quot;http://www1.feedsky.com/t1/327474429/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474429/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474429/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Thu, 14 May 2009 12:49:47 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwz4M/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474429/5604813</fs:itemid></item><item><title>google appengine更新两三事以及其他</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M/">1，appengine现在支持web2py框架了，google还表示会支持更多的web框架&lt;br /&gt;&lt;br /&gt;2，新的appengine数据库后端（backend）发布，&lt;a href=&quot;http://arachnid.github.com/bdbdatastore/&quot;&gt;bdbdatastore&lt;/a&gt;，这一点吸引了我，看一下官方的解释：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;bdbdatastore has complete feature parity with the App Engine's
production datastore, meaning you can run your App Engine application
on your own hardware with bdbdatastore&lt;/blockquote&gt;&lt;p&gt;意思是：bdbdatastore可以运行在网站自己的服务器上，这样我们写的应用就既可以在appengine上运行，又可以在本地运行，哦，太好了，有空再研究&lt;/p&gt;&lt;p&gt;3，网络流传出天×朝控×制×互联网的详细操作手册：&lt;a href=&quot;https://docs.google.com/Doc?id=dd4chbjh_18gd2qtmd9&quot;&gt;https://docs.google.com/Doc?id=dd4chbjh_18gd2qtmd9&lt;/a&gt;，
毛主席说过，一切反动派都是纸老虎，你们都忘了吧
&lt;/p&gt;</content><content:encoded>1，appengine现在支持web2py框架了，google还表示会支持更多的web框架&lt;br /&gt;&lt;br /&gt;2，新的appengine数据库后端（backend）发布，&lt;a href=&quot;http://arachnid.github.com/bdbdatastore/&quot;&gt;bdbdatastore&lt;/a&gt;，这一点吸引了我，看一下官方的解释：&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;bdbdatastore has complete feature parity with the App Engine's
production datastore, meaning you can run your App Engine application
on your own hardware with bdbdatastore&lt;/blockquote&gt;&lt;p&gt;意思是：bdbdatastore可以运行在网站自己的服务器上，这样我们写的应用就既可以在appengine上运行，又可以在本地运行，哦，太好了，有空再研究&lt;/p&gt;&lt;p&gt;3，网络流传出天×朝控×制×互联网的详细操作手册：&lt;a href=&quot;https://docs.google.com/Doc?id=dd4chbjh_18gd2qtmd9&quot;&gt;https://docs.google.com/Doc?id=dd4chbjh_18gd2qtmd9&lt;/a&gt;，
毛主席说过，一切反动派都是纸老虎，你们都忘了吧
&lt;/p&gt;&lt;img src=&quot;http://www1.feedsky.com/t1/327474427/3kkk-me/feedsky/s.gif?r=http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M/&quot; border=&quot;0&quot; height=&quot;0&quot; width=&quot;0&quot; style=&quot;position:absolute&quot; /&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474427/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474427/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Wed, 13 May 2009 12:42:43 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYkU4M/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474427/5604813</fs:itemid></item><item><title>[转]免责声明</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqkYM/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqkYM</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqkYM/">&lt;div class=&quot;entry&quot;&gt;

&lt;p&gt;本人郑重声明：&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;本人是文盲，以上内容文字均不认识，也看不懂是什么意思。&lt;/li&gt;&lt;li&gt;本人过去、现在以及将来都不认识楼主，且自古以来与楼主无利益关系。本人过去、现在以及将来都没有或者不准备去杭州，也与该市无贸易往来。楼主表述之事与本人无关，只是本着“看贴（虽然看不懂）回贴，利人利己的中华民族优秀传统美德”，顺便赚3个工分。&lt;/li&gt;&lt;li&gt;本人在此留言均为网络上复制，用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。&lt;/li&gt;&lt;li&gt;如本人留言违反国家有关法律，请网络管理员及时删除本人跟贴。本回贴不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、子女教育的积极或消极判断。&lt;/li&gt;&lt;li&gt; 因删贴不及时所产生的任何法律（包括宪法，民法，刑法，书法，公检法，基本法，劳动法，婚姻法，输入法，没办法，国际法，今日说法，吸星大法，与台湾关系法及文中涉及或可能涉及以及未涉及之法，各地治安管理条例）纠纷或责任本人概不负责。&lt;/li&gt;&lt;li&gt;本人谢绝任何跨省追捕行为，如有需要请直接联系楼主、原作者以及网络管理员或法人代表。&lt;/li&gt;&lt;li&gt; 此声明最终解释权归本人所有。&lt;/li&gt;&lt;/ol&gt;
&lt;/div&gt;</content><content:encoded>&lt;div class=&quot;entry&quot;&gt;

&lt;p&gt;本人郑重声明：&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;本人是文盲，以上内容文字均不认识，也看不懂是什么意思。&lt;/li&gt;&lt;li&gt;本人过去、现在以及将来都不认识楼主，且自古以来与楼主无利益关系。本人过去、现在以及将来都没有或者不准备去杭州，也与该市无贸易往来。楼主表述之事与本人无关，只是本着“看贴（虽然看不懂）回贴，利人利己的中华民族优秀传统美德”，顺便赚3个工分。&lt;/li&gt;&lt;li&gt;本人在此留言均为网络上复制，用于检验本人电脑键盘录入、屏幕显示的机械、光电性能。并不代表本人局部或全部同意、支持或者反对楼主观点。&lt;/li&gt;&lt;li&gt;如本人留言违反国家有关法律，请网络管理员及时删除本人跟贴。本回贴不暗示、鼓励、支持或映射读者作出生活方式、工作态度、婚姻交友、子女教育的积极或消极判断。&lt;/li&gt;&lt;li&gt; 因删贴不及时所产生的任何法律（包括宪法，民法，刑法，书法，公检法，基本法，劳动法，婚姻法，输入法，没办法，国际法，今日说法，吸星大法，与台湾关系法及文中涉及或可能涉及以及未涉及之法，各地治安管理条例）纠纷或责任本人概不负责。&lt;/li&gt;&lt;li&gt;本人谢绝任何跨省追捕行为，如有需要请直接联系楼主、原作者以及网络管理员或法人代表。&lt;/li&gt;&lt;li&gt; 此声明最终解释权归本人所有。&lt;/li&gt;&lt;/ol&gt;
&lt;/div&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474428/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474428/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Sun, 10 May 2009 16:10:52 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqkYM</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYqkYM/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474428/5604813</fs:itemid></item><item><title>视频:  魔兽三国</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QY2TYM/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QY2TYM</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QY2TYM/">不看后悔，看完了继续玩魔兽去&lt;br /&gt;&lt;br /&gt;游戏，一切皆有可能&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://player.youku.com/player.php/sid/XODgwMDk2ODg=/v.swf&quot; quality=&quot;high&quot; allowscriptaccess=&quot;sameDomain&quot; type=&quot;application/x-shockwave-flash&quot; align=&quot;middle&quot; height=&quot;400&quot; width=&quot;480&quot;&gt;</content><content:encoded>不看后悔，看完了继续玩魔兽去&lt;br /&gt;&lt;br /&gt;游戏，一切皆有可能&lt;br /&gt;&lt;br /&gt;&lt;embed src=&quot;http://player.youku.com/player.php/sid/XODgwMDk2ODg=/v.swf&quot; quality=&quot;high&quot; allowscriptaccess=&quot;sameDomain&quot; type=&quot;application/x-shockwave-flash&quot; align=&quot;middle&quot; height=&quot;400&quot; width=&quot;480&quot;&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474433/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474433/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Fri, 08 May 2009 19:15:33 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QY2TYM</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QY2TYM/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474433/5604813</fs:itemid></item><item><title>异步队列zeromq使用文档-号称史上最快</title><link atom:type="text/html">http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwT4M/</link><id xmlns="http://www.w3.org/2005/Atom">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwT4M</id><author xmlns="http://www.w3.org/2005/Atom"><name>3kkk-me</name><uri>http://www.3kkk.me/</uri></author><content xmlns="http://www.w3.org/2005/Atom" type="html" xml:base="http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwT4M/">前几天在javaeye上看到一篇文章 &lt;a href=&quot;http://zsp.javaeye.com/blog/377588&quot;&gt;史上最快 异步消息队列zeromq 简介&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近正好要做一个数据库异步写的模块，如是就想到了它了，以下是使用过程中的一些用法和问题，全面的用法请参考官方文档&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1，安装&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;下载地址：&lt;a href=&quot;http://www.zeromq.org/area:download-v06&quot;&gt;http://www.zeromq.org/area:download-v06&lt;/a&gt;&lt;br /&gt;安装步骤：&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;tar -xzf zmq-0.6.tag.gz&lt;br /&gt;cd zmq-0.6&lt;br /&gt;./configure --with-python&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;因为我需要在python中使用，所以使用--with-python，这样会同时安装python模块，你可以根据自己的需要设置不同的选项&lt;/p&gt;&lt;p&gt;安装完以后，启动zmq_server的时候有可能会出现找不到zmq共享模块的错误，运行一下ldconfig就可以了&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2，启动broker服务&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;zmq_server --port 5300&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;端口可以自己修改，这个是zeromq的中心管理服务器，它仅仅起到一个管理exchange和queue之间通讯的作用，可以看成一个数据通讯的路由器，它本身并不保存数据，发送的数据保存在我们自己管理的exchange中，接收的数据保存在我们自己管理的队列queue中&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3，发送数据&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;import libpyzmq&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;z = libpyzmq.Zmq (host = &quot;127.0.0.1:5300&quot;)&lt;br /&gt;eid1 = z.create_exchange (&lt;br /&gt; name = 'EL1',&lt;br /&gt; scope = libpyzmq.SCOPE_LOCAL,&lt;br /&gt; style = libpyzmq.STYLE_LOAD_BALANCING,&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;z.bind ('EL1', 'QG')&lt;br /&gt;count = 0&lt;br /&gt;while True:&lt;br /&gt; z.send (eid1, str(count), True)&lt;br /&gt; count += 1&lt;br /&gt; time.sleep(0.1)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用前先建立一个exchange对象，然后把它绑定到一个公开服务的队列queue上，这个queue的名字为QG，我们建立的exchange对象名字为EL1，我们调用send方法的时候就可以把数据发送到exchange对象里面&lt;strong&gt;，&lt;/strong&gt;然后exchange对象会把数据转发到它所绑定的队列中去&lt;/p&gt;&lt;p&gt;上面的例子我们只是把exchange绑定(bind)到一个队列，其实我们可以把exchange对象绑定到多个队列，比如&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;z.bind ('EL1', 'QG1')&lt;br /&gt;z.bind ('EL1', 'QG2')&lt;br /&gt;z.bind ('EL1', 'QG3')&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;当绑定到多个队列的时候，create_exchange方法的style参数就其作用，style参数可以设置成STYLE_DATA_DISTRIBUTION或者STYLE_LOAD_BALANCING，设置成STYLE_DATA_DISTRIBUTION的时候，发送到exchange的数据将会发送到所有跟它绑定的queue上，这种用途一般用在聊天室上面，设置成STYLE_LOAD_BALANCING的时候exchange只会把数据发送到其中的的一个queue中，一般用在负载均衡中&lt;/p&gt;&lt;p&gt;其实我们的exchange还可以完全不绑定到任何队列，而让queue去绑定它，这个时候就要设置这个exchange的监听地址，create_exchange的时候指定，scope参数指定为libpyzmq.SCOPE_GLOBAL，同时设置location参数，可以参照下面的接收数据的说明&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4，接收数据&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;import libpyzmq&lt;br /&gt;z = libpyzmq.Zmq (host = &quot;127.0.0.1:5300&quot;)&lt;br /&gt;z.create_queue (name = 'QG', scope = libpyzmq.SCOPE_GLOBAL, location =&quot;127.0.0.1:5350&quot;)&lt;br /&gt;&lt;br /&gt;print 'receive'&lt;br /&gt;while True:&lt;br /&gt; print z.receive (True)&lt;/pre&gt;&lt;p&gt;接收数据的时候需要我们自己建立一个队列create_queue方法，用来保存接收到的数据&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5，安全&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们最关心的就是这个队列的安全问题，因为数据并不是保存在zqm_server上的，而是保存在exchange和queue两端，从某种意义上来说，需要我们自己保证程序的安全，基本上来说，只要我们的数据接收端挂掉，不会造成数据的损失，因为没有queue去接收数据的时候，exchange会自己缓存数据，但是如果这个时候我们的发送端程序也挂掉的话，这段时间的数据就丢失了&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6，一点问题&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用上面的例子，如果我们先启动发送端（exchange）的时候会出现错误，是因为我们绑定queue的时候，这个queue并不存在，先启动接收端在启动发送端即可，其实只要先启动SCOPE_GLOBAL的一端即可&lt;/p&gt;&lt;p&gt;另外一种解决方式是在启动zmq_server的时候告诉zmq_server所有SCOPE_GLOBAL的端口即可&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;zmq_server --config-file config.xml&lt;/pre&gt;&lt;p&gt;config.xml文件的内容为&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;&amp;amp;lt;root&amp;amp;gt;&lt;br /&gt; &amp;amp;lt;node name = &quot;my_exchange&quot; location = &quot;zmq.tcp://192.168.0.115:5556&quot; /&amp;amp;gt;&lt;br /&gt; &amp;amp;lt;node name = &quot;my_queue&quot; location = &quot;zmq.tcp://192.168.0.115:5500&quot; /&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;/root&amp;amp;gt; &lt;/pre&gt;&lt;p&gt;&lt;/p&gt;</content><content:encoded>前几天在javaeye上看到一篇文章 &lt;a href=&quot;http://zsp.javaeye.com/blog/377588&quot;&gt;史上最快 异步消息队列zeromq 简介&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;最近正好要做一个数据库异步写的模块，如是就想到了它了，以下是使用过程中的一些用法和问题，全面的用法请参考官方文档&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1，安装&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;下载地址：&lt;a href=&quot;http://www.zeromq.org/area:download-v06&quot;&gt;http://www.zeromq.org/area:download-v06&lt;/a&gt;&lt;br /&gt;安装步骤：&lt;br /&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;tar -xzf zmq-0.6.tag.gz&lt;br /&gt;cd zmq-0.6&lt;br /&gt;./configure --with-python&lt;br /&gt;make&lt;br /&gt;sudo make install&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;因为我需要在python中使用，所以使用--with-python，这样会同时安装python模块，你可以根据自己的需要设置不同的选项&lt;/p&gt;&lt;p&gt;安装完以后，启动zmq_server的时候有可能会出现找不到zmq共享模块的错误，运行一下ldconfig就可以了&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2，启动broker服务&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;zmq_server --port 5300&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;端口可以自己修改，这个是zeromq的中心管理服务器，它仅仅起到一个管理exchange和queue之间通讯的作用，可以看成一个数据通讯的路由器，它本身并不保存数据，发送的数据保存在我们自己管理的exchange中，接收的数据保存在我们自己管理的队列queue中&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3，发送数据&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;import libpyzmq&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;z = libpyzmq.Zmq (host = &quot;127.0.0.1:5300&quot;)&lt;br /&gt;eid1 = z.create_exchange (&lt;br /&gt; name = 'EL1',&lt;br /&gt; scope = libpyzmq.SCOPE_LOCAL,&lt;br /&gt; style = libpyzmq.STYLE_LOAD_BALANCING,&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;z.bind ('EL1', 'QG')&lt;br /&gt;count = 0&lt;br /&gt;while True:&lt;br /&gt; z.send (eid1, str(count), True)&lt;br /&gt; count += 1&lt;br /&gt; time.sleep(0.1)&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-family: monospace;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用前先建立一个exchange对象，然后把它绑定到一个公开服务的队列queue上，这个queue的名字为QG，我们建立的exchange对象名字为EL1，我们调用send方法的时候就可以把数据发送到exchange对象里面&lt;strong&gt;，&lt;/strong&gt;然后exchange对象会把数据转发到它所绑定的队列中去&lt;/p&gt;&lt;p&gt;上面的例子我们只是把exchange绑定(bind)到一个队列，其实我们可以把exchange对象绑定到多个队列，比如&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;z.bind ('EL1', 'QG1')&lt;br /&gt;z.bind ('EL1', 'QG2')&lt;br /&gt;z.bind ('EL1', 'QG3')&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;当绑定到多个队列的时候，create_exchange方法的style参数就其作用，style参数可以设置成STYLE_DATA_DISTRIBUTION或者STYLE_LOAD_BALANCING，设置成STYLE_DATA_DISTRIBUTION的时候，发送到exchange的数据将会发送到所有跟它绑定的queue上，这种用途一般用在聊天室上面，设置成STYLE_LOAD_BALANCING的时候exchange只会把数据发送到其中的的一个queue中，一般用在负载均衡中&lt;/p&gt;&lt;p&gt;其实我们的exchange还可以完全不绑定到任何队列，而让queue去绑定它，这个时候就要设置这个exchange的监听地址，create_exchange的时候指定，scope参数指定为libpyzmq.SCOPE_GLOBAL，同时设置location参数，可以参照下面的接收数据的说明&lt;/p&gt;&lt;p&gt;&lt;strong&gt;4，接收数据&lt;/strong&gt;&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;python&quot;&gt;import libpyzmq&lt;br /&gt;z = libpyzmq.Zmq (host = &quot;127.0.0.1:5300&quot;)&lt;br /&gt;z.create_queue (name = 'QG', scope = libpyzmq.SCOPE_GLOBAL, location =&quot;127.0.0.1:5350&quot;)&lt;br /&gt;&lt;br /&gt;print 'receive'&lt;br /&gt;while True:&lt;br /&gt; print z.receive (True)&lt;/pre&gt;&lt;p&gt;接收数据的时候需要我们自己建立一个队列create_queue方法，用来保存接收到的数据&lt;/p&gt;&lt;p&gt;&lt;strong&gt;5，安全&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;我们最关心的就是这个队列的安全问题，因为数据并不是保存在zqm_server上的，而是保存在exchange和queue两端，从某种意义上来说，需要我们自己保证程序的安全，基本上来说，只要我们的数据接收端挂掉，不会造成数据的损失，因为没有queue去接收数据的时候，exchange会自己缓存数据，但是如果这个时候我们的发送端程序也挂掉的话，这段时间的数据就丢失了&lt;/p&gt;&lt;p&gt;&lt;strong&gt;6，一点问题&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;使用上面的例子，如果我们先启动发送端（exchange）的时候会出现错误，是因为我们绑定queue的时候，这个queue并不存在，先启动接收端在启动发送端即可，其实只要先启动SCOPE_GLOBAL的一端即可&lt;/p&gt;&lt;p&gt;另外一种解决方式是在启动zmq_server的时候告诉zmq_server所有SCOPE_GLOBAL的端口即可&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;zmq_server --config-file config.xml&lt;/pre&gt;&lt;p&gt;config.xml文件的内容为&lt;/p&gt;&lt;pre name=&quot;code&quot; class=&quot;x&quot;&gt;&amp;amp;lt;root&amp;amp;gt;&lt;br /&gt; &amp;amp;lt;node name = &quot;my_exchange&quot; location = &quot;zmq.tcp://192.168.0.115:5556&quot; /&amp;amp;gt;&lt;br /&gt; &amp;amp;lt;node name = &quot;my_queue&quot; location = &quot;zmq.tcp://192.168.0.115:5500&quot; /&amp;amp;gt;&lt;br /&gt;&amp;amp;lt;/root&amp;amp;gt; &lt;/pre&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;fswww1&quot;&gt;&lt;a href=&quot;http://www1.feedsky.com/r/l/feedsky/3kkk-me/327474432/art01.html&quot; target=&quot;_blank&quot;&gt;&lt;img border=&quot;0&quot; ismap=&quot;ismap&quot; src=&quot;http://www1.feedsky.com/r/i/feedsky/3kkk-me/327474432/art01.gif&quot; onerror=&quot;this.style.display='none'&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</content:encoded><pubDate>Fri, 08 May 2009 19:11:50 +0800</pubDate><guid isPermaLink="false">agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwT4M</guid><dc:creator>3kkk-me</dc:creator><fs:srclink>http://www.3kkk.me/p/agcza2trLW1lchkLEghBcHBfdXNlchgBDAsSBFBvc3QYwT4M/</fs:srclink><fs:srcfeed>http://www.3kkk.me/atom.xml</fs:srcfeed><fs:itemid>feedsky/3kkk-me/~7495864/327474432/5604813</fs:itemid></item></channel></rss>