??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久久久狠狠丁香,东方aⅴ免费观看久久av,色欲综合久久躁天天躁蜜桃http://www.shnenglu.com/xguru/技术,是一U态度。关?高性能后端技?服务器架?C++/C/LAMPzh-cnTue, 06 May 2025 19:08:47 GMTTue, 06 May 2025 19:08:47 GMT60[原创]Python基本对象学习W记http://www.shnenglu.com/xguru/archive/2011/07/21/Python_object.htmlXGuruXGuruThu, 21 Jul 2011 15:16:00 GMThttp://www.shnenglu.com/xguru/archive/2011/07/21/Python_object.htmlhttp://www.shnenglu.com/xguru/comments/151576.htmlhttp://www.shnenglu.com/xguru/archive/2011/07/21/Python_object.html#Feedback1http://www.shnenglu.com/xguru/comments/commentRss/151576.htmlhttp://www.shnenglu.com/xguru/services/trackbacks/151576.html最q重温《Python源码剖析》一书,python基本对象的要点记录如?/div>
python 整数对象
1.python中的整数使用c语言中的longcd存储
2.python intq行加法会检查结果是否溢出,如果溢出则自动{换ؓpyLongObject对象
3.python中的文无缝集成在语a实现?br />
1 = 11
2 print a.__doc__

4.整数对象完全缓存在内存?其他整数对象轮流使用一块内存空?br />5.整数对象在python初始化中调用的_PyInt_Init中创?然后׃直存在着Q?直到python虚拟机退?/pre>

python String对象
1.pyStringObject在创Z后,内部l护的字W串不能再改?
2.intern机制是否只在字符数组长度0或?的时候? 书中提供的代码太q于_了,没讲清楚,但是看后面的演示l果Q应该是所有的字符串都实现了intern机制
3.字符串连接操作严重媄响pythonE序执行效率Q用join只需分配一ơ内存,能够大大提高效率.用法举例
"".join(['s1','s2','s3'])

Python Dict对象
1.Python中的dict采用hashtable而不是R-B Tree?br />2.采用开攑֮址法解军_H?br />3.Z证冲H探链的连l性,采用伪删除技术,active对象删除则设|ؓdummy?br />4.为减冲H,转蝲率大?/3时则改变table的大?每次增大4倍,如果table中的active态的元素个数大于50000?巨型?Q?br /> 则放慢增镉K度Q每ơ增?倍。可以看出Python中dict的查找效率较?而对于内存的使用是省了又?q考虑了巨型表增长减少倍数?br />
Python List对象
1.PyListObjectcMSTL中的Vector?br />2.Python对内存的使用十分节PQ如果list改变的新寸不到分配内存?/2Q则收羃内存.
3.在Pylist中徏插入元素需要逐个Ud后面的元素,cMC中的数组Q因此需要尽量避免对中间元素的插入和删除操作?br />4.STL和PyListObject自动扩容法Ҏ:个h觉得list改名为array比较恰当一些,嘿嘿
//sgi STL:
len 
= (old_size != 0 )?2*oldsize:1
//(不够用则扩充两?如果开始ؓI则讄?)
//Python:
new_allocated
=(newsize>>3)+(newsize<9?3:6)
//Q?Q?Q?/span>
5.对于增长倍数的选择Q这里有讨论
http://en.w3support.net/index.php?db=so&id=1100311

p70书中W误 :"allcated/2"应改?allocated/2"



XGuru 2011-07-21 23:16 发表评论
]]>
[译文]VIM使用者大脑的形?/title><link>http://www.shnenglu.com/xguru/archive/2010/12/22/vim_brain.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Wed, 22 Dec 2010 15:05:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/12/22/vim_brain.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/137236.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/12/22/vim_brain.html#Feedback</comments><slash:comments>11</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/137236.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/137236.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt;"><span style="color: #020000; font-size: 12pt;"><span style="font-size: 10pt; color: #020000;">via :<a >Kevin Watters's blog</a><br></span></span><span style="color: #020000; font-size: 12pt;"></span><span style="color: #020000; font-size: 8pt;"></span>译:<a >XGuru</a><br><br style="font-weight: bold;"><span style="font-weight: bold; font-size: 18pt;">原始状?/span></span><br>    <span style="font-size: 14pt;">我曾l观看过提琴家非常有激情地拉u演奏Q我有了q种xQ也许我投入到文本编辑器中的脑细胞数量和他ؓ投入所喜好的乐器的演奏中差不多吧。我q有U奇异的惌Q当他独奏的时?脑中的核共振图和我在用VIM中操控代码的的图像也怸会相差太大吧Q?/span><br><br><br><a style="color: #020000; font-size: 8pt;" ><img alt="" src="http://www.shnenglu.com/images/cppblog_com/xguru/vim_brain/brain_before.png" height="431" width="690"></a> <br><br><br>    <span style="font-size: 14pt;">如果你愿意的话请你仔l思考下Q以下是一个vimmer的学习旅E的剪辑</span><br> <h2><br></h2> <br><br> <h2 style="color: #020000;"><span style="font-size: 24pt;">Vim涅磐所l历的O长而艰苦的道\</span></h2> <h3><br><span style="font-size: 18pt;"></span></h3> <h3><span style="font-size: 18pt;">星期一</span></h3>    <span style="font-size: 14pt;"> “Eclipse当然是简z实用的”<br><br>    “但是一些满脸落腮胡的奇怪家伙在工作中似乎用vim实非常?我应该试一下?#8221;<br><br>    “好吧Q我弄了个Gvim,q看h不是很糟p,q里甚至q有菜单界面Q?#8221;<br><br>    “{什么?我的文本d了?{一下,撤销Q不要啊Q?#8221;<br><br>    “:help”<br><br>    “:q!!!!!”<br><br>    今天剩下的时间还是回到拥有让Z瘄自动补全h功能的Eclipse中获得解脱吧<br></span><br><span style="font-size: 18pt;"><br> <h3><span style="font-size: 18pt;">星期?/span></h3> </span> <h3></h3> <span style="font-size: 14pt;">     “好吧 vim,q是新的一天了Q这是个砺自己学习C西的一个崭新的ZQ我不是那么Ҏ攑ּ的hQ?#8221;<br><br><span style="font-weight: bold;">    “Z么我׃能一直呆在插入模式里面呢</span>?FJDSAKLFJDALSKJKLDFQ发狂的敲击键盘Q?#8221;<br><br>    “{一下,你在告诉我保存的时候必LESC-shift-冒号-w-回R?q简直就是狗屁啊”<br><br>    “在花?个小时学习教E以后,我基本上懂的是ddp命o可以交换两行的内?真是蛋疼?#8221;</span><br> <h3><br></h3> <br><br> <h3><span style="font-size: 18pt;">一个礼拜以?/span></h3> <span style="font-size: 14pt;">     “哇噢QQ何地斚w有vim阿,q意味着q付出的所有的努力不会白费,比如当我用sshq程dL修改一些配|的时?#8221;<br><br>     “太爽了,嘿,朋友们来看看q个全暗色的配色主题Q我新的工具链表面上看v来非常安怺”<br><br>     “噢,真是扯蛋Q我?vimrc没有在我的远E主机里Q当我sshd~辑一些配|的时候,所有我的酷玩意都没?#8221;</span><br><br><br><br> <h3><span style="font-size: 18pt;">两个月以?/span></h3>  <span style="font-size: 14pt;">    HJKL的移动方式习惯成自然Q你秘的失M使用鼠标的能力?br><br>    “我将<span style="font-weight: bold;">始终</span>使用我刚下蝲的这400个插Ӟ其是这个折叠latex语法的插Ӟ噢,哥们”<br><br>    “使用箭头方向键直是自我折磨?#8221;<br><br>    “再见QCaps Lock?#8221;<br><br>    “p样吧Q这是忍耐的极限Qvim甚至不能让文本合适的自动换行Q我准备回到edit.com?#8221;</span><br><br><br> <h3><span style="font-size: 18pt;">一q后</span></h3>     <span style="font-size: 14pt;">更少的大声说话了?br><br>    安装command-T插gQ每天节U成百上千次的键盘敲凅R?br><br>    用宏试着让你肩膀后的某个人感到印象深刻,通过在整个文仉混合大小写和参杂ROT13暗码Q回转十三位加密Q?br><br>    最l在某个奇迹般的一天学会在肌肉记忆里用ctrl+[来g~了腕关节炎症降临?br><br>    学会了移动光标,使用visual模式??---q意味着已经没有退路了?br><br>    “vim不支持交互性缓存??0q了Q好吧,作ؓ一名黑客,我决定给它添加这Ҏ持?#8221;<br><br>    查看vim代码库,疯狂地让它向相反的方向运行?br><br>    “谁无论如何也需要在~辑器里弄个控制収ͼ我就是所有的unix哲学?#8221;<br><br>    对周围的”vim只是一个编辑模式合q到真正的编辑器?#8220;观念感到无可忍耐?br><br>    因ؓ你老是在房间里令h讨厌地回?#8221;:w”,IRC的朋友们最后将你孤?/span>?br> <h3><br><span style="font-size: 18pt;"></span></h3> <h3><span style="font-size: 18pt;">两年以后</span></h3>     <span style="font-size: 14pt;">vim脚本是一U对上帝的深恶痛l?br><br>    有点觉得emacs的从始至l的指o模式相对有点像在天堂一栗?br><br>    我昨晚做了一个噩梦,梦到我始l没有学会在宽屏昄器中垂直切分H口Q这h心吊胆真是够混帐ѝ?br><br>    偷偷地瞄一下周_l定ctrl+sC存,允许自己悄悄地松一口气?br><br>    意识到hjkl搜烦定位不以成为终极时间节U工P发现:python脚本,所建立的大量定制功能达到鼎盛期Q对<Leader>keyl定直到你的键盘cM于NASA指挥中心控制面板一h点繁多到荒谬的功能感觉有一点糟p?br><br>   “嘿,每个听的到我声音的家伙过来看看,我现在控制电脑,写博客,查邮Ӟq行试Q调试程序,览黑客新闻<br>           所有的一切都能在vim温暖舒适,可以定制化的母体中进?#8221;<br><br>    Z么你q小子不做几个后I翻来庆一下呢Q?/span><br><br><br> <h3><span style="font-size: 18pt;">模糊又很长某D|间之?/span><span style="font-size: 14pt; font-weight: bold;"> </span></h3>    <span style="font-size: 14pt;"> ?#8220;文本~辑中模态的明显的优?#8221;演讲l束后失M几个朋友?br><br><br>    情享受在github.com/me/vimfiles中分享自己配|的快乐中,有义务完成关于如何特立独行地安装语法查,lint工具Q自动补全,快速文查看,成吨的杀手~写Q世界上所有文件类型对应的插gQvim在每U功能的高效性上接近真正的IDE的博客帖子。开机时间日志写入服务器Q下意识C用nano来编辑配|文件。不会ؓ没有使用插g和vimrc中的更多语法而更新所有的配置文g而感到深q愧?br><br>    变得十分淡定Q重复性的~辑d再也难不住你Q不再去参加emacs与vim谁好谁坏的争?/span>?br><span style="font-size: 18pt;"><br> <h2><span style="color: #020000;">...q就是你用vim时大脑的l形?<br></span></h2> <br><br> </span> <h2><span style="color: #020000;"></span></h2> <img alt="" src="http://www.shnenglu.com/images/cppblog_com/xguru/vim_brain/brain_after.png"> <br><br><br> <div style="text-align: center;"> --EOF--<br></div> <div style="text-align: center;"><img src="http://i.creativecommons.org/l/by-nc-sa/2.5/cn/88x31.png" alt="Creative commons license" height="31" width="88" border="0"><br></div> by <a href="http://www.shnenglu.com/xguru">XGuru</a> is licensed under a <a >Creative Commons |名-非商业性?相同方式׃n 2.5 中国大陆 License</a>. <br><br> <img src ="http://www.shnenglu.com/xguru/aggbug/137236.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-12-22 23:05 <a href="http://www.shnenglu.com/xguru/archive/2010/12/22/vim_brain.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[分n]Git作弊手册囄一?/title><link>http://www.shnenglu.com/xguru/archive/2010/12/01/135146.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Wed, 01 Dec 2010 03:54:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/12/01/135146.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/135146.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/12/01/135146.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/135146.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/135146.html</trackback:ping><description><![CDATA[via:git.or.cz<br><br><img style="width: 996px; height: 770px;" alt="" src="http://www.shnenglu.com/images/cppblog_com/xguru/git-cheat-sheet-medium.png" border="0"><br> <img src ="http://www.shnenglu.com/xguru/aggbug/135146.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-12-01 11:54 <a href="http://www.shnenglu.com/xguru/archive/2010/12/01/135146.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[随笔]看看今年E序员们解决问题的顺?/title><link>http://www.shnenglu.com/xguru/archive/2010/10/24/131044.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Sun, 24 Oct 2010 07:18:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/10/24/131044.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/131044.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/10/24/131044.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/131044.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/131044.html</trackback:ping><description><![CDATA[<p>2010 developer’s problem solving sequence:</p> <p>from:<a class="tweet-user-block-screen-name user-profile-link" title="Philippe Leybaert">@activa</a> </p> <p><br></p> <span style="color: #5138ff; font-size: 24pt;">1.Google </span><br>    技术上的问题多去googleQwikipedia上看看绝Ҏ错,想看性用品广告就多上上Baidu?br><br><span style="color: #5138ff; font-size: 24pt;">2.Coworkers </span><br>    扑֐事帮忙,如果你的同事热心肠而且技术不错,而且遇到q类似的问题Q他的徏议就会很昑־非常宝贵,也许p一针见效?br><br><span style="font-size: 24pt; color: #5138ff;">3.StackOverflow </span><br>    ȝE互助网站搜索下{案Q不行就上去发帖提提问,热心是蛮多的Q但是感觉这个网站上的Java/.Net的问题比较多?br><br><span style="color: #5138ff; font-size: 24pt;">4.RTFM </span><br>    M令h郁闷的帮助文档(<font size="-1">Read the f*cking manual</font>Q,在linux下man一下或者查看下MSDN文档Qmannual文一般会l织得很好,很清晰。但是语a表达得太专业化了Q有时候会让h很郁闗?br><br><span style="color: #5138ff; font-size: 24pt;">5.Think </span><br>    最后不行了Q还是自己想下怎么解决问题吧,求h不如求己?br> <br> <img src ="http://www.shnenglu.com/xguru/aggbug/131044.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-10-24 15:18 <a href="http://www.shnenglu.com/xguru/archive/2010/10/24/131044.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[技巧]linux命o行解压小技巧一?/title><link>http://www.shnenglu.com/xguru/archive/2010/10/07/128952.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Thu, 07 Oct 2010 13:54:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/10/07/128952.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/128952.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/10/07/128952.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/128952.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/128952.html</trackback:ping><description><![CDATA[大家都ؓlinux下压~格式繁多,而且每种格式都对应不同的命oQ这是个很让人头疼的问题?br>我就介绍个方法给大家Q?br>在bashrc里加?br><br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">ex () {<br>  </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> [ </span><span style="color: #000000;">-</span><span style="color: #000000;">f $</span><span style="color: #000000;">1</span><span style="color: #000000;"> ] ; then<br>    </span><span style="color: #0000ff;">case</span><span style="color: #000000;"> $</span><span style="color: #000000;">1</span><span style="color: #000000;"> </span><span style="color: #0000ff;">in</span><span style="color: #000000;"><br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.tar.bz2)   tar xjf $</span><span style="color: #000000;">1</span><span style="color: #000000;">        ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.tar.gz)    tar xzf $</span><span style="color: #000000;">1</span><span style="color: #000000;">     ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.bz2)       bunzip2 $</span><span style="color: #000000;">1</span><span style="color: #000000;">       ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.rar)       rar x $</span><span style="color: #000000;">1</span><span style="color: #000000;">     ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.gz)        gunzip $</span><span style="color: #000000;">1</span><span style="color: #000000;">     ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.tar)       tar xf $</span><span style="color: #000000;">1</span><span style="color: #000000;">        ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.tbz2)      tar xjf $</span><span style="color: #000000;">1</span><span style="color: #000000;">      ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.tgz)       tar xzf $</span><span style="color: #000000;">1</span><span style="color: #000000;">       ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.zip)       unzip $</span><span style="color: #000000;">1</span><span style="color: #000000;">     ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.Z)         uncompress $</span><span style="color: #000000;">1</span><span style="color: #000000;">  ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">.7z)        7z x $</span><span style="color: #000000;">1</span><span style="color: #000000;">    ;;<br>      </span><span style="color: #000000;">*</span><span style="color: #000000;">)           echo </span><span style="color: #000000;">"</span><span style="color: #000000;">无法解压'$1'文g!!</span><span style="color: #000000;">"</span><span style="color: #000000;"> ;;<br>    esac<br>  </span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>    echo </span><span style="color: #000000;">"</span><span style="color: #000000;">'$1' 不是一个合法的文g!</span><span style="color: #000000;">"</span><span style="color: #000000;"><br>  fi<br>}<br></span></div> <br><img src="http://www.shnenglu.com/images/cppblog_com/xguru/14114/ex.png" border="0"><br><br>解压文g的的话只需要简单输?ex [压羃文]"可以了Q如果你有其他格式的压羃文格式也可以自己加入进来?br>从此告别烦h的各U解压羃命o?br> <img src ="http://www.shnenglu.com/xguru/aggbug/128952.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-10-07 21:54 <a href="http://www.shnenglu.com/xguru/archive/2010/10/07/128952.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[闻]Emacs是否真的能煮咖啡Q?/title><link>http://www.shnenglu.com/xguru/archive/2010/07/27/121416.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Tue, 27 Jul 2010 13:15:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/07/27/121416.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/121416.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/07/27/121416.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/121416.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/121416.html</trackback:ping><description><![CDATA[<div style="text-align: left;"> </div> <div style="text-align: center; font-weight: bold;"> <div style="text-align: left;"><br>              <span style="font-size: 24pt;"></span><span style="font-size: 24pt;">      Emacs是否真的能煮咖啡Q?/span>        by <a href="http://www.shnenglu.com/xguru" temp_href="http://www.shnenglu.com/xguru" xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">XGuru</a> <br> </div> <br> <table style="width: 779px; height: 680px;" border="0"> <tbody> <tr> <td><img style="width: 390px; height: 502px;" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/6/69/Vacpot3.jpg/467px-Vacpot3.jpg"> </td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="vertical-align: top;"><br></td> <td style="font-size: 14pt;">    <span style="font-size: 14pt;">坊间有传a?“emacs无所不能,甚至能够用来煮咖?”<br><br>    煮咖啡何解?勾v了我的考究Ʋ望?br><br>    上网搜烦?得出几种初步l论如下:<br><br>    1.q只是一U好玩的说法Q只是用来Ş容emacs功能无所不包而已? <br><br>    2.Java的标志就一杯咖?用来形象的表C写代码</span><br>           <img style="width: 143px; height: 143px;" alt="" src="http://www.shnenglu.com/images/cppblog_com/xguru/make_coffee/java.png"><br><br>    3.emacs的确?a style="color: #0010ff;" >有煮咖啡的功?/a>Q有脚本能够控制自动咖啡行? </td> </tr> </tbody> </table> <br></div> <br>    觉得W一U说法比较符合逻辑;W二U说法感觉有点唐H,毕竟Emacs?a style="color: #0010ff;" title="Richard Stallman">Richard Stallman</a><span style="color: #0010ff;">(</span>GNU创始?所写,而Java?a style="color: #0010ff;" >Bill Joy</a>(vi作?{h完成的,q两zN差点上升到宗教冲H了,q种解释有点差强人意;W三U的如果是真的话׃变得很有?br><br><br>    于是开始了探究Q首先追本溯源,扑ֈq段脚本代码?a style="color: #0010ff;" >源头</a><cite>。发现已l地址已经失效,l于在在debian的一?a style="color: #0010ff;" >软g?/a>里找C<a ><span style="color: #0010ff;">副本</span>?/a>q是emacs常用脚本的一个打包?br><br>代码如下<br> </cite> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->  1 ;;; coffee.el --- Submit a BREW request to an RFC2324-compliant coffee device<br>  2 ;;;<br>  3 ;;; Author: Eric Marsden <emarsden@laas.fr><br>  4 ;;; Version: 0.2<br>  5 ;;; Copyright: (C) 1999 Eric Marsden<br>  6 ;;; Keywords: coffee, brew, kitchen-sink, can't<br>  7 ;;<br>  8 ;;     This program is free software; you can redistribute it and/or<br>  9 ;;     modify it under the terms of the GNU General Public License as<br> 10 ;;     published by the Free Software Foundation; either version 2 of<br> 11 ;;     the License, or (at your option) any later version.<br> 12 ;;    <br> 13 ;;     This program is distributed in the hope that it will be useful,<br> 14 ;;     but WITHOUT ANY WARRANTY; without even the implied warranty of<br> 15 ;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the<br> 16 ;;     GNU General Public License for more details.<br> 17 ;;    <br> 18 ;;     You should have received a copy of the GNU General Public<br> 19 ;;     License along with this program; if not, write to the Free<br> 20 ;;     Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,<br> 21 ;;     MA 02111-1307, USA.<br> 22 ;;<br> 23 ;; Please send suggestions and bug reports to <emarsden@laas.fr>.<br> 24 ;; The latest version of this package should be available at<br> 25 ;;<br> 26 ;;     <URL:http://purl.org/net/emarsden/home/downloads/><br> 27  <br> 28 ;;; Commentary:<br> 29 ;;<br> 30 ;; This module provides an Emacs interface to RFC2324-compliant coffee<br> 31 ;; devices (Hyper Text Coffee Pot Control Protocol, or HTCPCP). It<br> 32 ;; prompts the user for the different additives, then issues a BREW<br> 33 ;; request to the coffee device.<br> 34 ;;<br> 35 ;; coffee.el requires a special BREW-capable version of Emacs/W3 to be<br> 36 ;; installed.<br> 37 ;;<br> 38 ;; Reference: <URL:ftp://ftp.isi.edu/in-notes/rfc2324.txt><br> 39 ;;<br> 40 ;;<br> 41 ;; Thanks to Giacomo Boffi <giacomo.boffi@polimi.it> for some typos<br> 42 ;; and the addition of the "Brown-Coffee" sweetener type.<br> 43  <br> 44 ;;; Code:<br> 45  <br> 46 (require 'cl)<br> 47  <br> 48 (defvar coffee-host "coffee"<br> 49   "*The host which provides the coffee service.")<br> 50  <br> 51 (defvar coffee-pot-designator 1<br> 52   "*On machines with multiple pots, the number of the pot to brew in")<br> 53  <br> 54 (defvar coffee-brew-hook nil<br> 55   "*Hook executed before issuing a BREW request")<br> 56  <br> 57 (defconst coffee-milk-types<br> 58   '("Cream" "Half-and-Half" "Whole-Milk" "Part-Skim" "Skim" "Non-Dairy"))<br> 59  <br> 60 (defconst coffee-syrup-types '("Vanilla" "Almond" "Raspberry" "Chocolate"))<br> 61  <br> 62 (defconst coffee-sweetener-types '("White-Sugar" "Brown-Sugar" "Artificial-Sweetener"))<br> 63  <br> 64 (defconst coffee-alcohol-types '("Whiskey" "Rum" "Kahula" "Aquavit"))<br> 65  <br> 66 (defconst coffee-addition-types<br> 67   `(("Milk"      . ,coffee-milk-types)<br> 68     ("Syrup"     . ,coffee-syrup-types)<br> 69     ("Sweetener" . ,coffee-sweetener-types)<br> 70     ("Alcohol"   . ,coffee-alcohol-types)))<br> 71  <br> 72 ;;;###autoload<br> 73 (defun coffee ()<br> 74   "Submit a BREW request to an RFC2324-compliant coffee device"<br> 75   (interactive)<br> 76   (require 'url)<br> 77   (let* ((additions-list<br> 78           (append coffee-milk-types<br> 79                   coffee-syrup-types<br> 80                   coffee-sweetener-types<br> 81                   coffee-alcohol-types))<br> 82          (additions-string<br> 83           (mapconcat #'identity additions-list ","))<br> 84          (url (coffee-url))<br> 85          (url-request-method "BREW")<br> 86          (url-request-extra-headers<br> 87           `(("Content-type"     . "message-coffeepot")<br> 88             ("Accept-Additions" . ,additions-string)))         <br> 89          (url-request-data "START"))<br> 90     (run-hooks 'coffee-brew-hook)<br> 91     (url-retrieve url)))<br> 92  <br> 93 (defun coffee-additions ()<br> 94   (let* ((type-name<br> 95           (completing-read "Coffee addition: " coffee-addition-types nil t))<br> 96          (type (cdr (assoc type-name coffee-addition-types)))<br> 97          (ingredients (mapcar #'(lambda (a) (cons a a)) type))<br> 98          (ingredient<br> 99           (completing-read "Addition type: " ingredients nil t)))<br>100     ingredient))<br>101           <br>102 (defun coffee-url ()<br>103   (require 'w3-forms)<br>104   (concat "coffee://" coffee-host "/"<br>105           (int-to-string coffee-pot-designator)<br>106           "?" (w3-form-encode-xwfu (coffee-additions))))<br>107  <br>108  <br>109 (provide 'coffee)<br>110  <br>111 ;; coffee.el ends here</div> <cite><br>    q个脚本看v来还是煞有其事的Q文中提?Submit a BREW request to an RFC2324-compliant coffee device"<br><br>    能够向与<cite style="color: #0010ff;"><cite></cite></cite><a style="color: #0010ff;" ><cite><cite>RFC2324</cite></cite></a>协议兼容的咖啡设备提交BREWh</cite> ,<span style="font-family: monospace;">卛_?/span>Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0)协议。超文本咖啡壶协?光看q名字就够喜庆了Q但q䆾协议写得很规?看不Z丝破l。有l心的朋友shrek.wang提醒了我Q注意看日期:<br><br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>-->Network Working Group                                       L. Masinter<br>Request for Comments: 2324                                 1 April 1998<br></div> <br>    1998q??P愚h节!q个pZ生了疑问?br>    通过查wiki发现Q原?a style="color: #0010ff;" title="互联|工E工作小l? class="mw-redirect">互联|国际标准机?/a>也是很有才的恶搞高手?br><br>q里列D其中几个好玩?br> <ul> <li> <ul> <li>2001q_<a style="color: #0010ff;" class="external mw-magiclink-rfc">RFC 1149</a>׃班挪威Linux使用者协会的成员实现了。他们传送了9个封包到U?公里外的地方Q每个封包由不同?a title="鸽子" class="mw-redirect">鸽子</a>携带Qƈ有一个ICMP应答要求包Q?a title="Ping">ping</a>Q。他们收?个回应,包失率是55%Q回应时间是3000?000U?a class="external autonumber" rel="nofollow">[1]</a></li> <li><a class="external mw-magiclink-rfc">RFC 1607</a> ?<strong> 来自<a title="21世纪" class="mw-redirect">21世纪</a>的观?/strong> <a class="new" title="Vint CerfQ尚未撰写)">Vint Cerf</a> <a title="1994" class="mw-redirect">1994</a>. </li> <li><a class="external mw-magiclink-rfc">RFC 3091</a> ?<strong> <a title="圆周?>圆周?/a>数字产生协定</strong> . H. Kennedy <a title="2001q?>2001q?/a></li> </ul> </li> </ul> 更多的可以看<a style="color: #0010ff;" >q里wiki</a>?br><br>   <br>      q里可以大胆C出推断,q个协议只是<strong> IETF</strong> 开的一个善意的jokeQ而coffee.el的作者Eric Marsden也是一个幽默的E序员,于是做了一个兼容RFC2324的脚?他也没想q要真正的控制咖啡机Q所以这整个事情都源于程序员的冷q默?br>                           <img src="http://www.shnenglu.com/images/cppblog_com/xguru/make_coffee/coffee.jpg" border="0"> <br>     然而远E控制咖啡机q是有可能的Q这里有一?a style="color: #0010ff;" >开源咖啡机</a>;q里q有一?a style="color: #0010ff;" >允许|络控制的咖啡机</a>Q据说还是兼容RFC2324的)?br>     估计IETF应该做梦也没惛_自己开的一个玩W竟然还真的有h做出了实物?国外的牛Zq真是闲得蛋疼阿。可见geek们还是极富幽默感的?br>朋友们,你的心中已经有答案了么?你们惌一台这L咖啡Z?<br><br><br><br><br><br><br><br>PS.在这里BS下CPPBLOG的编辑器Q真的很烂啊Q文章写C半时点保存,竟然l发布了Q?br> <br> <img src="http://i.creativecommons.org/l/by-nc-sa/2.5/cn/88x31.png" alt="Creative commons license" v:shapes="囄_x0020_7" height="31" width="88" border="0"><br> <p>by <a href="http://www.shnenglu.com/xguru" temp_href="http://www.shnenglu.com/xguru" xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">XGuru</a> is licensed under a <a temp_>Creative Commons |名-非商业性?相同方式׃n 2.5 中国大陆 License</a>. <br></p> <br> <img src ="http://www.shnenglu.com/xguru/aggbug/121416.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-07-27 21:15 <a href="http://www.shnenglu.com/xguru/archive/2010/07/27/121416.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]个h最q九个火狐插ghttp://www.shnenglu.com/xguru/archive/2010/06/28/firefox_addons.htmlXGuruXGuruMon, 28 Jun 2010 15:29:00 GMThttp://www.shnenglu.com/xguru/archive/2010/06/28/firefox_addons.htmlhttp://www.shnenglu.com/xguru/comments/118893.htmlhttp://www.shnenglu.com/xguru/archive/2010/06/28/firefox_addons.html#Feedback2http://www.shnenglu.com/xguru/comments/commentRss/118893.htmlhttp://www.shnenglu.com/xguru/services/trackbacks/118893.html豆瓣?a >火狐组是这栯?

Firefox不是完美的,不是最E_的,不是没有漏洞的,也不是最快的Q但它可以是自己的?/span>


很喜Ƣ这句话,是因ؓ有了丰富多彩的插?火狐才能如此的受Ƣ迎.
下面的这几个插g是我个h最喜欢?推荐l大?


1.ColorfulTabs

人对颜色的分辨别速度大大出文字,Ҏ面的主色调生成标签颜色,让你的标{֏得色彩斑?/span>.不仅赏心悦目,更让你方便地切换到想要的标签.



插g地址


2.All-in-One Gestures

q年?没有鼠标手势q能zM?该插件操作快?定制性强!
插g地址


3.AutoProxy

非常好用的Fuck GF.W的插?tor,proxy,ssh都能很好的支?最爽的是可以订阅规?军_那些面使用代理,哪些无须使用.和谐C会,和谐你我?/span>!




插g地址


4.Readability

当页面繁杂不?难以阅读?轻轻一?法立现.整页面变得美观大?甚至感觉像是在看一份精排版报U?说.

整容?



整容?



插g地址



5.Tab Popup

当你鼠标攑֜不同的标{N?׃昄늚~略?
插g地址


6.Adblock Plus

q告已经成往?告别各种烦h的弹H?
插g地址


7.Vimperator

让你的firefox变得像vim一栯?/span>,适合骨灰Uvimer!


(图from linuxtoy)

插g地址 在线帮助


8.Personas Plus

firefox皮肤x换!打造个性的firefox
插g地址


9.Integrated Gmail



google发烧友必?google其他的功能都集中到gmail?All your Google Needs in One Place!
插g地址

怼的有另外一?a >优化 greader的插?/a>,一个google产品大全的shortcuts插g



PS:
插g多了会当然会使firefox变慢,大家Ҏ需要禁用一?/span>自己qx不常用的插g.
另外Firefox 3.6.6主要是改q了插g崩溃或者停止响应之后终止该插g的时?喜欢装插件的朋友赶快更新?
win 32位版本下?/a>
linux 32位版本下?/a>

--EOF--


XGuru 2010-06-28 23:29 发表评论
]]>
[原创]nginx启动关闭配置脚本http://www.shnenglu.com/xguru/archive/2010/06/28/118868.htmlXGuruXGuruMon, 28 Jun 2010 08:43:00 GMThttp://www.shnenglu.com/xguru/archive/2010/06/28/118868.htmlhttp://www.shnenglu.com/xguru/comments/118868.htmlhttp://www.shnenglu.com/xguru/archive/2010/06/28/118868.html#Feedback0http://www.shnenglu.com/xguru/comments/commentRss/118868.htmlhttp://www.shnenglu.com/xguru/services/trackbacks/118868.html在这


上网找了几个版本在ubuntu下都用不?br>于是p己重C改了jackbillow的版?/span>,用v来感觉还不错.



Usage: nginx.sh {start|stop|conf|restart}
//开始|停止|配置|重启

?需要以理员n份运?br>

################################################
#!/bin/bash
# v.0.0.3
# create by jackbillow at 2007.10.15
# redevelop by XGuru at 2010.6.28
# On Ubuntu 10.04
# nginx - This shell script takes care of starting and stopping nginx.
#
# description: nginx [engine x] is light http web/proxy server
# that answers incoming ftp service requests.
###############################################


nginx_path
="/usr/local/nginx"
nginx_pid
="/usr/local/nginx/logs/nginx.pid"
prog="nginx"

RETVAL=0


start() {
# Start daemons.
        if [ -$nginx_path/conf/nginx.conf ];then
          echo 
-n $"Starting $prog: "
          
$nginx_path/sbin/nginx -$nginx_path/conf/nginx.conf &
          RETVAL
=$?
        [ 
$RETVAL -eq 0 ] && {
        echo Start 
"$prog" successfully!
        }
        
else
        RETVAL
=1
        fi
        
return $RETVAL
}
# Stop daemons.
stop() {
        echo 
-n $"Stopping $prog\n"
        sudo killall 
-9 nginx
        RETVAL
=$?
}
# See how we were called.

conf(){
        gvim 
"$nginx_path/conf/nginx.conf"
}
case 
"$1" in
start)
        start
        ;;
stop)
        stop
        ;;
conf)
        conf
        ;;        
restart)
        stop
        start
        ;;

*)
        echo $
"Usage: $0 {start|stop|conf|restart}"
        echo $
"Your may need root privilege to execute this script!"
        
exit 1
esac
exit $RETVAL

--EOF--


XGuru 2010-06-28 16:43 发表评论
]]>
[原创]Libevent分析W记(3)-I/O复用(Multiplexing)机制的确?/title><link>http://www.shnenglu.com/xguru/archive/2010/06/25/118722.html</link><dc:creator>XGuru</dc:creator><author>XGuru</author><pubDate>Fri, 25 Jun 2010 08:30:00 GMT</pubDate><guid>http://www.shnenglu.com/xguru/archive/2010/06/25/118722.html</guid><wfw:comment>http://www.shnenglu.com/xguru/comments/118722.html</wfw:comment><comments>http://www.shnenglu.com/xguru/archive/2010/06/25/118722.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/xguru/comments/commentRss/118722.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/xguru/services/trackbacks/118722.html</trackback:ping><description><![CDATA[<p> <span>libevent</span><span>的初衷就是设计一个跨q_的轻量</span><span>I/0</span><span>框架Q由于历史问题,各^台的</span><span>I/O</span><span>复用机制难以l一。因此,q部分处理跨q_的方法值得重点x?/span></p> <p> <span>eventop</span><span>在源码中定义如下Q?/span></p> <p><span></p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_40_103_Open_Image onclick="this.style.display='none'; Codehighlighter1_40_103_Open_Text.style.display='none'; Codehighlighter1_40_103_Closed_Image.style.display='inline'; Codehighlighter1_40_103_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_40_103_Closed_Image onclick="this.style.display='none'; Codehighlighter1_40_103_Closed_Text.style.display='none'; Codehighlighter1_40_103_Open_Image.style.display='inline'; Codehighlighter1_40_103_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">static</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> eventop </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">eventops[]</span><span style="COLOR: #000000">=</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_40_103_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_40_103_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">#ifdef HAVE_EVENT_PORTS<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">         </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">evportops,<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"></span><span style="COLOR: #0000ff">#endif</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">….<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> <p></span><span>    由此可见</span><span>libevent</span><span>通过宏来在编译期扑և可用的复用机制?/span></p> <p><span>其中的顺序也是大文章的?span>官方的文档中说明</span><span>libevent</span><span>中支持的复用机制</span><span> </span><span><a ><span>/dev/poll</span></a></span><span>, </span><span><a ><span>kqueue(2)</span></a></span><span>, </span><span><a ><span>event ports</span></a></span><span>, <span>select(2)</span>, <span>poll(2)</span> and </span><span><a ><span>epoll(4)</span></a></span><span>. </span></p> <p align=left><span>    libevent</span><span>开发h员通过对各U机制的基准试Q根据性能高到低选择复用机制优先序如图所C:</span></span></p> <p align=left><img border=0 src="http://www.shnenglu.com/images/cppblog_com/xguru/libevent4.jpg"><strong></strong></p> <p align=left><span></span> </p> <p align=left><span>    从中也可以了解到不同q_机制的不l一。标准的</span><span> poll</span><span>?/span><span> select</span><span>却难以满_规模架构的需要,具体可以参?/span><span>Dan Kegel</span><span>?/span><span> "</span><span><a ><span>The C10K problem</span></a></span><span>"</span><span>文档?/span></p> <p align=left><span>关于机制的采用,</span><span>libevent</span><span>采用的是函数指针的方法?/span></p> <p align=left><em><span> </p> <p align=left></span></em> </p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_15_334_Open_Image onclick="this.style.display='none'; Codehighlighter1_15_334_Open_Text.style.display='none'; Codehighlighter1_15_334_Closed_Image.style.display='inline'; Codehighlighter1_15_334_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_15_334_Closed_Image onclick="this.style.display='none'; Codehighlighter1_15_334_Closed_Text.style.display='none'; Codehighlighter1_15_334_Open_Image.style.display='inline'; Codehighlighter1_15_334_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> eventop </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_15_334_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_15_334_Open_Text><span style="COLOR: #000000">{<br><img id=Codehighlighter1_36_43_Open_Image onclick="this.style.display='none'; Codehighlighter1_36_43_Open_Text.style.display='none'; Codehighlighter1_36_43_Closed_Image.style.display='inline'; Codehighlighter1_36_43_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_36_43_Closed_Image onclick="this.style.display='none'; Codehighlighter1_36_43_Closed_Text.style.display='none'; Codehighlighter1_36_43_Open_Image.style.display='inline'; Codehighlighter1_36_43_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">char</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">name; </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_36_43_Closed_Text>/**/</span><span id=Codehighlighter1_36_43_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">机制名称</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_82_90_Open_Image onclick="this.style.display='none'; Codehighlighter1_82_90_Open_Text.style.display='none'; Codehighlighter1_82_90_Closed_Image.style.display='inline'; Codehighlighter1_82_90_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_82_90_Closed_Image onclick="this.style.display='none'; Codehighlighter1_82_90_Closed_Text.style.display='none'; Codehighlighter1_82_90_Open_Image.style.display='inline'; Codehighlighter1_82_90_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">(</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">init)(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> event_base </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">); </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_82_90_Closed_Text>/**/</span><span id=Codehighlighter1_82_90_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">初始化事?/span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_129_136_Open_Image onclick="this.style.display='none'; Codehighlighter1_129_136_Open_Text.style.display='none'; Codehighlighter1_129_136_Closed_Image.style.display='inline'; Codehighlighter1_129_136_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_129_136_Closed_Image onclick="this.style.display='none'; Codehighlighter1_129_136_Closed_Text.style.display='none'; Codehighlighter1_129_136_Open_Image.style.display='inline'; Codehighlighter1_129_136_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">add)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">event</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_129_136_Closed_Text>/**/</span><span id=Codehighlighter1_129_136_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000">d事g</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_175_183_Open_Image onclick="this.style.display='none'; Codehighlighter1_175_183_Open_Text.style.display='none'; Codehighlighter1_175_183_Closed_Image.style.display='inline'; Codehighlighter1_175_183_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_175_183_Closed_Image onclick="this.style.display='none'; Codehighlighter1_175_183_Closed_Text.style.display='none'; Codehighlighter1_175_183_Open_Image.style.display='inline'; Codehighlighter1_175_183_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">del)(</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">event</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);    </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_175_183_Closed_Text>/**/</span><span id=Codehighlighter1_175_183_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> 删除事g</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_249_258_Open_Image onclick="this.style.display='none'; Codehighlighter1_249_258_Open_Text.style.display='none'; Codehighlighter1_249_258_Closed_Image.style.display='inline'; Codehighlighter1_249_258_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_249_258_Closed_Image onclick="this.style.display='none'; Codehighlighter1_249_258_Closed_Text.style.display='none'; Codehighlighter1_249_258_Open_Image.style.display='inline'; Codehighlighter1_249_258_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dispatch)(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> event_base </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> timeval </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_249_258_Closed_Text>/**/</span><span id=Codehighlighter1_249_258_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> 调度事g </span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img id=Codehighlighter1_306_314_Open_Image onclick="this.style.display='none'; Codehighlighter1_306_314_Open_Text.style.display='none'; Codehighlighter1_306_314_Closed_Image.style.display='inline'; Codehighlighter1_306_314_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_306_314_Closed_Image onclick="this.style.display='none'; Codehighlighter1_306_314_Closed_Text.style.display='none'; Codehighlighter1_306_314_Open_Image.style.display='inline'; Codehighlighter1_306_314_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedSubBlock.gif">    </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> (</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">dealloc)(</span><span style="COLOR: #0000ff">struct</span><span style="COLOR: #000000"> event_base </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">, </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">);</span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_306_314_Closed_Text>/**/</span><span id=Codehighlighter1_306_314_Open_Text><span style="COLOR: #008000">/*</span><span style="COLOR: #008000"> 释放资源</span><span style="COLOR: #008000">*/</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">    </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> need_reinit;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">}</span></span><span style="COLOR: #000000">;<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> <p align=left> </p> <p align=left><span>每个<span>eventop</span>卛_应一U?span>IO</span>复用机制Q其中的每个函数指针都指向用该机制对事件进行操作的Ҏ?/span></p> <p align=left><span>比如对应<span>epoll</span>?span>eventop</span>l构中:<br><span>1.void *(*init)(…)</span>函数指针对应的是<span>static void * epoll_init(…)<br></span>2.?span>epoll_init()</span>里,首先对环境变量进行检,发现没有<span>epoll</span>机制时立卌?span>NULL</span>?br>3.使用<span>epoll_create(32000)</span>指定了连接数目的上限?span>32000</span>个,然后?span>epollop</span>的各个成员所需资源q行分配?br>4.最后调?span>libevent</span>自n的信号初始化函数?/span></p> <p align=left><span>选择机制q将其初始化的过E十分简单:</span></p> <p align=left><span> </p> <div style="BORDER-BOTTOM: #cccccc 1px solid; BORDER-LEFT: #cccccc 1px solid; PADDING-BOTTOM: 4px; BACKGROUND-COLOR: #eeeeee; PADDING-LEFT: 4px; WIDTH: 98%; PADDING-RIGHT: 5px; FONT-SIZE: 13px; WORD-BREAK: break-all; BORDER-TOP: #cccccc 1px solid; BORDER-RIGHT: #cccccc 1px solid; PADDING-TOP: 4px"><img id=Codehighlighter1_51_141_Open_Image onclick="this.style.display='none'; Codehighlighter1_51_141_Open_Text.style.display='none'; Codehighlighter1_51_141_Closed_Image.style.display='inline'; Codehighlighter1_51_141_Closed_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockStart.gif"><img style="DISPLAY: none" id=Codehighlighter1_51_141_Closed_Image onclick="this.style.display='none'; Codehighlighter1_51_141_Closed_Text.style.display='none'; Codehighlighter1_51_141_Open_Image.style.display='inline'; Codehighlighter1_51_141_Open_Text.style.display='inline';" align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ContractedBlock.gif"><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000"> (i </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">; eventops[i] </span><span style="COLOR: #000000">&&</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">!</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">evbase; i</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">) </span><span style="BORDER-BOTTOM: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BACKGROUND-COLOR: #ffffff; DISPLAY: none; BORDER-TOP: #808080 1px solid; BORDER-RIGHT: #808080 1px solid" id=Codehighlighter1_51_141_Closed_Text><img src="http://www.shnenglu.com/Images/dot.gif"></span><span id=Codehighlighter1_51_141_Open_Text><span style="COLOR: #000000">{<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">       </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">evsel </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> eventops[i];<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif">       </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">evbase </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">evsel</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">init(</span><span style="COLOR: #0000ff">base</span><span style="COLOR: #000000">);<br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/InBlock.gif"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/ExpandedBlockEnd.gif">    }</span></span><span style="COLOR: #000000"><br><img align=top src="http://www.shnenglu.com/Images/OutliningIndicators/None.gif"></span></div> <p align=left></span><img border=0 src="http://www.shnenglu.com/images/cppblog_com/xguru/libevent5.jpg"></p> <p align=left><span>    遍历存储机制?span>eventops</span>数组Q按序依次试初始化,一U机制被成功初始化则立即跛_循环?/span><span>当然Q检系l环境可用机Ӟ选择哪种机制更合适,具体的复用机制如何用,q一切的琐碎l节你都无需兛_Q用时Q只要调?span>event_init()</span>函数卛_?span>Libevent</span>对各U复用机制的巧妙装避免了开发者开发大规模架构Ӟ处理跨^台时机制选择的苦恹{?</span></p> <img src ="http://www.shnenglu.com/xguru/aggbug/118722.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/xguru/" target="_blank">XGuru</a> 2010-06-25 16:30 <a href="http://www.shnenglu.com/xguru/archive/2010/06/25/118722.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[原创]VIM命o Big picturehttp://www.shnenglu.com/xguru/archive/2010/06/24/118623.htmlXGuruXGuruThu, 24 Jun 2010 07:42:00 GMThttp://www.shnenglu.com/xguru/archive/2010/06/24/118623.htmlhttp://www.shnenglu.com/xguru/comments/118623.htmlhttp://www.shnenglu.com/xguru/archive/2010/06/24/118623.html#Feedback2http://www.shnenglu.com/xguru/comments/commentRss/118623.htmlhttp://www.shnenglu.com/xguru/services/trackbacks/118623.html
可能?/a>(q里)有点大,但是我觉得看h方便的。有错误的意见欢q提出,我会快修正。这里有英文原版?/span>

附上几个cM的:
1.作弊手册cheat sheet
q里Q?br>2.键位?nbsp;q里[EN] [CN] ,
3.vgod大神?a style="color: #0000ff;" >版本Q?br>4.q里也有一个,
5.q里q有?a >壁纸?br>


XGuru 2010-06-24 15:42 发表评论
]]>
þˬˬav| þþƷˬӰ| Ʒþˬۺ | þҹɫƷŷ| ޹ƷۺϾþ | ۺպþóAV| ޹պŷþ| þֹƷۺ| Ʒþþ99| Ʒ99þþƷ| þþùƷվ| 99þerֻоƷ18| ŷþþXXX| Ʒþþþù| 69þþƷһ| avҹһƬѿþ| ھƷþþþӰԺ| þùƷ99Ʒ987| þùƷþ| ҹƷþþþþž| һaƬþëƬ| Ʒþۺ| þþþùƵӰ| ľƷ99þù | ŷþþҹһĻ | ߳߳þþ| Ʒþù鶹99վ| þøݾƷԴվ| þþþƷѹĻ| þþƷŷƬ| Ʒ˾þþ| þ͵wcŮ| þþƷž޾Ʒ | þþþþþþþþ| ۺҹҹþ| ޾ƷŮþþ| ŷ þ| Ը߳þþþþþþþ| ɫۺϾþĻ| 99ȾþֻоƷ68| ޹ƷþþþþԻ|