??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美成人四级电影,欧美视频在线不卡,欧美在线不卡http://www.shnenglu.com/skyscribe/category/11102.htmlzh-cnMon, 12 Mar 2012 04:54:21 GMTMon, 12 Mar 2012 04:54:21 GMT60转移到githubhttp://www.shnenglu.com/skyscribe/archive/2012/02/29/move-to-octopress.htmlskyscribeskyscribeWed, 29 Feb 2012 14:52:00 GMThttp://www.shnenglu.com/skyscribe/archive/2012/02/29/move-to-octopress.htmlhttp://www.shnenglu.com/skyscribe/comments/166817.htmlhttp://www.shnenglu.com/skyscribe/archive/2012/02/29/move-to-octopress.html#Feedback0http://www.shnenglu.com/skyscribe/comments/commentRss/166817.htmlhttp://www.shnenglu.com/skyscribe/services/trackbacks/166817.html
感兴的L(fng)? http://skyscribe.github.com

skyscribe 2012-02-29 22:52 发表评论
]]>
ruby学习(fn)W记《二?/title><link>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-1.html</link><dc:creator>skyscribe</dc:creator><author>skyscribe</author><pubDate>Sun, 19 Feb 2012 11:29:00 GMT</pubDate><guid>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-1.html</guid><wfw:comment>http://www.shnenglu.com/skyscribe/comments/165993.html</wfw:comment><comments>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-1.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/skyscribe/comments/commentRss/165993.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/skyscribe/services/trackbacks/165993.html</trackback:ping><description><![CDATA[ruby的blocks和closureҎ(gu)明显有别于其它的语aQ其closure本n是real closureQ所l定的context是共享的而非copyQ其设计思\和lisp的相同;blocks本n则可以用于实现closure。二者的关系如下所q?Q?a >来源</a>Q?br /> <blockquote><br /> <div><strong>Yukihiro Matsumoto</strong>: You can reconvert a closure back into a block, so a closure can be used anywhere a block can be used. Often, closures are used to store the status of a block into an instance variable, because once you convert a block into a closure, it is an object that can by referenced by a variable. And of course closures can be used like they are used in other languages, such as passing around the object to customize behavior of methods. If you want to pass some code to customize a method, you can of course just pass a block. But if you want to pass the same code to more than two methods -- this is a very rare case, but if you really want to do that -- you can convert the block into a closure, and pass that same closure object to multiple methods.<br /> </div> </blockquote> <div> <ul> <li> <h2>7U结?/h2> </li> </ul> <blockquote> <ul> <li>block方式3U?/li> </ul> <blockquote> <ul> <li>隐式传入Q内部用yield调用</li> </ul> <blockquote>   <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">def</span><span style="color: #000000; "> thrice<br />   </span><span style="color: #0000FF; ">yield</span><span style="color: #000000; "><br />   </span><span style="color: #0000FF; ">yield</span><span style="color: #000000; "><br />   </span><span style="color: #0000FF; ">yield</span><span style="color: #000000; "><br /> end<br /> <br /> x</span><span style="color: #000000; ">=</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /> thrice {x</span><span style="color: #000000; ">+=</span><span style="color: #000000; ">2</span><span style="color: #000000; ">}</span></div> <span style="color: #000000; "></span></div> </blockquote> <ul> <li>&block参数传入Q内部直接操?amp;block</li> </ul> <blockquote> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #0000FF; ">def</span><span style="color: #000000; "> six_times(</span><span style="color: #000000; ">&</span><span style="color: #000000; ">block)<br />   thrice(</span><span style="color: #000000; ">&</span><span style="color: #000000; ">block)<br />   thrice(</span><span style="color: #000000; ">&</span><span style="color: #000000; ">block)<br /> end<br />  <br /> x </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #000000; ">4</span><span style="color: #000000; "><br /> six_times { x </span><span style="color: #000000; ">+=</span><span style="color: #000000; "> </span><span style="color: #000000; ">10</span><span style="color: #000000; "> }</span></div> </blockquote> <ul> <li>&block传入Q保存block为变量,然后调用block.call</li> </ul> <blockquote> <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: #0000FF; ">def</span><span style="color: #000000; "> save_for_later(</span><span style="color: #000000; ">&</span><span style="color: #000000; ">b)<br />   @saved </span><span style="color: #000000; ">=</span><span style="color: #000000; "> b  </span><span style="color: #008000; ">#</span><span style="color: #008000; "> Note: no ampersand! This turns a block into a closure of sorts.</span><span style="color: #008000; "><br /> </span><span style="color: #000000; ">end<br />  <br /> save_for_later { puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">Hello!</span><span style="color: #800000; ">"</span><span style="color: #000000; "> }<br /> puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">Deferred execution of a block:</span><span style="color: #800000; ">"</span><span style="color: #000000;"><br /> @saved.call<br /> @saved.call<br /> </span></div> </blockquote><blockquote>q里的saved保存?sh)main对象的一个成员,后边实现延迟调用?br /> </blockquote></blockquote> <ul> <li>Proc.new/proc</li> </ul> <blockquote> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; ">@saved_proc_new </span><span style="color: #000000; ">=</span><span style="color: #000000; "> Proc.new { puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">I'm declared with Proc.new.</span><span style="color: #800000; ">"</span><span style="color: #000000; "> }<br /> @saved_proc </span><span style="color: #000000; ">=</span><span style="color: #000000; "> proc { puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">I'm declared with proc.</span><span style="color: #800000; ">"</span><span style="color: #000000; "> }<br /> <br /> @saved_proc_new.call<br /> @saved_proc.call</span></div> </blockquote> <ul> <li>lambda</li> </ul> <blockquote> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; ">@saved_lambda </span><span style="color: #000000; ">=</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">lambda</span><span style="color: #000000; "> { puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">I'm declared with lambda.</span><span style="color: #800000; ">"</span><span style="color: #000000; "> }<br /> @saved_lambda.call</span></div> </blockquote> <ul> <li>method</li> </ul> <blockquote> <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: #0000FF; ">def</span><span style="color: #000000; "> some_method<br />   puts </span><span style="color: #800000; ">"</span><span style="color: #800000; ">I'm declared as a method.</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /> end<br /> @method_as_closure </span><span style="color: #000000; ">=</span><span style="color: #000000;"> method(:some_method)<br /> <br /> </span></div> </blockquote></blockquote> <ul> <li> <h2>特点和差?/h2> </li> <ul> <li> <h2>return行ؓ(f)</h2> </li> </ul> </ul> <blockquote><blockquote>当对应的block里边包含return的时候,上述7中方式有些许的不同:(x)<br /> <ul> <li>lambda/method表现出真正的closure行ؓ(f)Q仅仅返回closure本nQ外部调用控制流不受影响Qlyield或者call的下一语句执行</li> <li>其它几种?x)蟩出外部调用者的控制,即return?gu)用者,yield/call之后的也不会(x)再执行,直接跛_到最q的end?/li> </ul> <p><br /> </p> </blockquote> <ul> <li> <h3>arity - 参数个数校验</h3> </li> </ul> <blockquote>对于调用点的参数(g)查,呈现如下行ؓ(f)Q?br /> <ul> <li>lambda/method严格校验参数的个敎ͼ如果不匹配回抛出异常</li> <li>其它几个不检查参C?/li> </ul> <p><br /> </p> </blockquote></blockquote> <ul> <li> <h2>ȝ</h2> </li> </ul> <blockquote>lambda/method方式呈现完备的closure行ؓ(f)Qreturn之后l箋(hu)下一程Q对于实际传入参CC(x)在调用点(g)查;proc/blocks方式在return的时候直接返回了(jin)外部的函数或者blockQ对于传入的参数个数也没有执行检查?br /> <br /> </blockquote>参考:(x)<a >http://innig.net/software/ruby/closures-in-ruby</a> <br />以上l论验证于最新的ruby1.9.3Q和链接中的l论有些怸同;ruby1.8中的proc函数可能有不同的行ؓ(f)?br /> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><span style="color: #000000;"></span></div> </div><img src ="http://www.shnenglu.com/skyscribe/aggbug/165993.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/skyscribe/" target="_blank">skyscribe</a> 2012-02-19 19:29 <a href="http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-1.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby学习(fn)W记《一?/title><link>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-0.html</link><dc:creator>skyscribe</dc:creator><author>skyscribe</author><pubDate>Sun, 19 Feb 2012 07:58:00 GMT</pubDate><guid>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-0.html</guid><wfw:comment>http://www.shnenglu.com/skyscribe/comments/165976.html</wfw:comment><comments>http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-0.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/skyscribe/comments/commentRss/165976.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/skyscribe/services/trackbacks/165976.html</trackback:ping><description><![CDATA[看得再多也不如自己动手试Q最q有闲就打算认真研究一下ruby语言?jin)?a >Pragmatic programmer</a>中说Q需要一q学一门新语言一遍改造思想Q去q浅的学了(jin)javascript的皮毛,今年可以看看rubyq? 个有lisp之风的OO语言?jin)?br /> <br /> <ul> <li>安装环境</li> </ul> W一个想到的是apt-get来下载了(jin)Q得到的是一个交互式解析器和~译器。和python的比较类|不过ruby的交互程序是个单独的E序叫做irb?br /> <blockquote> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000; ">skyscribe:</span><span style="color: #000000; ">~</span><span style="color: #000000; ">$ ruby </span><span style="color: #000000; ">--</span><span style="color: #000000; ">version<br /> ruby </span><span style="color: #000000; ">1.8</span><span style="color: #000000; ">.</span><span style="color: #000000; ">7</span><span style="color: #000000; "> (</span><span style="color: #000000; ">2011</span><span style="color: #000000; ">-</span><span style="color: #000000; ">06</span><span style="color: #000000; ">-</span><span style="color: #000000; ">30</span><span style="color: #000000; "> patchlevel </span><span style="color: #000000; ">352</span><span style="color: #000000; ">) [i686</span><span style="color: #000000; ">-</span><span style="color: #000000; ">linux]<br /> skyscribe:</span><span style="color: #000000; ">~</span><span style="color: #000000; ">$ irb<br /> irb(main):</span><span style="color: #000000; ">001</span><span style="color: #000000; ">:</span><span style="color: #000000; ">0</span><span style="color: #000000; ">></span><span style="color: #000000; "> puts </span><span style="color: #000000; ">"</span><span style="color: #000000; ">hello</span><span style="color: #000000; ">"</span><span style="color: #000000; "><br /> hello<br /> </span><span style="color: #000000; ">=></span><span style="color: #000000;"> nil<br /> <br /> </span></div> </blockquote>可惜得到的不是比较新的版本?br /> <br /> ? q很快想L(fng)?a > wiki</a>Q还是用rvm方便的多。教E比较简单,参考它?a >quick installation guide</a>可。第一ơ尝试的时候用apt-get安装?jin)没有purgeQ导致L安装到root用户? ?#8220;permission denied"的问题?br /> <br /> 安装好之后,所有的东西都在$HOME/.rvm下边Q比较干脆?br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><span style="color: #000000;"><br /> </span><blockquote><span style="color: #000000; ">skyscribe:</span><span style="color: #000000; ">~</span><span style="color: #000000; ">$ rvm install </span><span style="color: #000000; ">1.9</span><span style="color: #000000; ">.</span><span style="color: #000000; ">3</span><span style="color: #000000;"></span><br /> <span style="color: #000000; ">skyscribe:</span><span style="color: #000000; ">~</span><span style="color: #000000;">$ rvm list</span><br /> <span style="color: #000000;"></span><br /> <span style="color: #000000;">rvm rubies</span><br /> <span style="color: #000000;"></span><br /> <span style="color: #000000; ">   ruby</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.9</span><span style="color: #000000; ">.</span><span style="color: #000000; ">3</span><span style="color: #000000; ">-</span><span style="color: #000000;">p125 [ i686 ]</span><br /> <span style="color: #000000;"></span><br /> <span style="color: #000000; "># Default ruby not </span><span style="color: #0000FF; ">set</span><span style="color: #000000; ">. Try </span><span style="color: #000000; ">'</span><span style="color: #000000; ">rvm alias create default <ruby></span><span style="color: #000000; ">'</span><span style="color: #000000;">.</span><br /> <span style="color: #000000;"></span><br /> <span style="color: #000000; "># </span><span style="color: #000000; ">=></span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000;"> current</span><br /> <span style="color: #000000; "># </span><span style="color: #000000; ">=*</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; "> current </span><span style="color: #000000; ">&&</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">default</span><span style="color: #000000;"></span><br /> <span style="color: #000000; ">#  </span><span style="color: #000000; ">*</span><span style="color: #000000; "> </span><span style="color: #000000; ">-</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">default</span><span style="color: #000000;"></span><br /> <span style="color: #000000;"></span><br /> <span style="color: #000000; ">skyscribe:</span><span style="color: #000000; ">~</span><span style="color: #000000; ">$ rvm alias create </span><span style="color: #0000FF; ">default</span><span style="color: #000000; "> ruby</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.9</span><span style="color: #000000; ">.</span><span style="color: #000000; ">3</span><span style="color: #000000; ">-</span><span style="color: #000000;">p125</span><br /> <span style="color: #000000; ">Creating alias </span><span style="color: #0000FF; ">default</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> ruby</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.9</span><span style="color: #000000; ">.</span><span style="color: #000000; ">3</span><span style="color: #000000; ">-</span><span style="color: #000000;">p125.</span><br /> <span style="color: #000000; ">Recording alias </span><span style="color: #0000FF; ">default</span><span style="color: #000000; "> </span><span style="color: #0000FF; ">for</span><span style="color: #000000; "> ruby</span><span style="color: #000000; ">-</span><span style="color: #000000; ">1.9</span><span style="color: #000000; ">.</span><span style="color: #000000; ">3</span><span style="color: #000000; ">-</span><span style="color: #000000;">p125.</span><br /> <span style="color: #000000; ">Creating </span><span style="color: #0000FF; ">default</span><span style="color: #000000; "> links</span><span style="color: #000000; ">/</span><span style="color: #000000;">files</span><br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; "></span><span style="color: #000000; "><div>skyscribe:~$ cat >> ~/.bashrc <br />[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # This loads RVM into a shell session.<br />^C<br />skyscribe:~$ bash<br />skyscribe:~$ rvm use 1.9.3<br />Using /home/skyscribe/.rvm/gems/ruby-1.9.3-p125<br />skyscribe:~$ ruby -v<br />ruby 1.9.3p125 (2012-02-16 revision 34643) [i686-linux]</div></span></div><br /> <span style="color: #000000; "></span></blockquote></div> <br /> <ul> <li>熟?zhn)和上?/li> </ul> 官方的文档是最好的参考,推荐<a >ruby koans</a>,下蝲下来Q解压后Q是个典型的TDD学习(fn)材料Q不断运?br /> <blockquote> <div> <div> ruby path_to_enlightenment.rb</div></div></blockquote><div><div>koans ?x)遍历每一个test case直到全部完毕Q大概需?个小时以上的旉方可全部完工。中间的注释和THINK ABOUT的部分比较有意思,感?zhn)比较深刻的是以下一些点Q?br /><blockquote><ul><li>完完全全的OOQ所有东西皆为对?/li><li>两种基本的collectionQhash和array基本对应于python的dict和array</li><li>函数调用可以不必d括号Q除非可能引发歧义或者解析错?/li><li>函数参数可以包含blockQ支持lambda和closure<br /></li><li>boolcd更简单,只有false和nil与false{h(hun)Q其余全部是true</li><li>控制l构有unless</li><li>cd义是开攑ּ的,便于非R入式设计Q当然也可以允许修改builtin</li><li>每一个对象都有object id</li><li>symbol和string可以互相转化构?/li><li>method的调用可以用send 的方法发送message - proxy变得极度Ҏ(gu)</li><li>module可以被class include从而包含方法, 便于mixin设计</li><li>instance variable和class variable 定义方便快捷</li><li>regular expresion的和python极ؓ(f)怼<br /></li></ul></blockquote></div></div><blockquote><div> </div> </blockquote><img src ="http://www.shnenglu.com/skyscribe/aggbug/165976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/skyscribe/" target="_blank">skyscribe</a> 2012-02-19 15:58 <a href="http://www.shnenglu.com/skyscribe/archive/2012/02/19/ruby-study-0.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Unix文本处理之利器-awk/gawkhttp://www.shnenglu.com/skyscribe/archive/2011/01/02/awk.htmlskyscribeskyscribeSun, 02 Jan 2011 12:32:00 GMThttp://www.shnenglu.com/skyscribe/archive/2011/01/02/awk.htmlhttp://www.shnenglu.com/skyscribe/comments/137894.htmlhttp://www.shnenglu.com/skyscribe/archive/2011/01/02/awk.html#Feedback0http://www.shnenglu.com/skyscribe/comments/commentRss/137894.htmlhttp://www.shnenglu.com/skyscribe/services/trackbacks/137894.htmlsince 1977Q。作者中最引h注目的当属鼎鼎大名的Brian W. Kernighan (即K的简U来源)(j)。目前所用的版本大多是gawk或者nawk.

作ؓ(f)一门微型且完整的编E语aQawk可以用数行代码就完成其他语言需要数倍的LOC才能完成的工作。其设计哲学也是比较Ҏ(gu)的,核心(j)是dataQdriven的,q且采用?jin)和CcM的语法来l织。它最核心(j)的思想应该是如下两点:(x)
  • pattern-action l构 借由强大的正则表辑ּ来匹配patternQ然后执行pattern对应的操?/li>
  • Record/Field 处理模型  所有的输入数据都根据制定的record separator 分割?record, 然后没一个record再根据field separator 分割为fields. POSIX 定义?field separator可以为正则表辑ּQ而gawk可以允许record separator同时为正则表辑ּ
引发我花Ҏ(gu)间来仔细研究awk的v因是q样的,我们的程序在做profiling的时候,发现原来用shell写的脚本分析一ơ话费的旉太长。初看了(jin)下那个脚本,大概的逻辑是要扫名所有的log文gQ按照时间戳关注的旉所耗费的时间提取出来,计算q_|波动{最l画出曲U图?br>
整体的脚本有几个部分QpythonQbashQ,处理一?0MB的log文g需要耗费40分钟?个小Ӟq显然超Z(jin)预期Q中间一个处理很长的部分是grep某个旉D늚信息然后按照报表格式写入C间文件中。在惌否优化这一节的时候,忽然想起了(jin)模式匚w来(学习(fn)Haskell的最深印象)(j)Q于是大致翻?jin)一下awkQ发现很Ҏ(gu)通过模式匚w使得按行处理Q同时记录中间的信息Q而一个时间段恰好和awk的record概念d?br>
׃(jin)2个小时研M(jin)下awk的函数语法,自定义自q旉截取函数Qgawk的strftime很有用,其我们发现记录有蟩跃要自动补全中间的数据记录时Q,通过三个pattern截取需要的信息Q?0分钟写出来awk的代码来?br>
所q的是,其它的shell脚本都不需要Q何改动,重新跑一ơ,3s处理完?jin)原?0MB的文Ӟ看来q点旉投入q是相当值得的?br>
有兴的可参考:(x)
     http://www.gnu.org/manual/gawk/gawk.html

PSQawk的另一作?a >Winberger 供职于google?br> 



skyscribe 2011-01-02 20:32 发表评论
]]>
Popen中奇怪的OSErrorQtoo many open fileshttp://www.shnenglu.com/skyscribe/archive/2009/10/19/98970.htmlskyscribeskyscribeMon, 19 Oct 2009 11:31:00 GMThttp://www.shnenglu.com/skyscribe/archive/2009/10/19/98970.htmlhttp://www.shnenglu.com/skyscribe/comments/98970.htmlhttp://www.shnenglu.com/skyscribe/archive/2009/10/19/98970.html#Feedback0http://www.shnenglu.com/skyscribe/comments/commentRss/98970.htmlhttp://www.shnenglu.com/skyscribe/services/trackbacks/98970.htmlq来用Python的unittest框架来做一个regression test 工具Q验证一些复杂的E序功能Q期望做到自动化试完成一部分需要繁琐的界面点击和等待才能完成的验证工作?/font>

其中核心(j)的部分是通过python的subproces module中的Popen来调用shell脚步完成功能性请求,q抓取执行的l果?/font>

 

初一开始,test case比较?yu)的时候(100个以内)(j)都没有Q何问题;但从某一刻vQ当过120个的时候,最后一个test case执行的时候,L报告

                OSErrorQ?too many open files

l出的stack trace指向?jin)Popen的communicateҎ(gu)?/font>

 

最单的怀疑自然是打开文g数的限制?jin)?ulimit  -a 发现默认的Shell的确只有256Q虽然感觉应该也够用?jin)(因?f)每一个case都是用单独的Popen来执行操?完毕应该被回收?jin)?j)Q但q是自然其开大一些;

                      ulimit –n 1024

重新执行Q还是最后一个casep|Q错误依然?/font>

 

Google?jin)一下,暂时没有头AQ只有待有时间再详细盘查一下原委了(jin)。不q在搜烦(ch){案的过E中发现?jin)一个有意思的现象Q?/font>

   有h在询问怎样python的字W串quote成ؓ(f)一个可以再shell中安全用的字符Ԍ有人回复说Subprocess中有一个类似的Ҏ(gu)可以完成cM的工作ؓ(f)什么不用;马上有牛人站出来_(d)q个模块的作者大概不想维护过多的东西Q因而将光藏了(jin)hQ而不是放开?jin)给大家用,因?f)它的doc里边都没有直接说明,用的人是看了(jin)他的代码才知道有q个函数Q参?/font>q里Q?/font>



skyscribe 2009-10-19 19:31 发表评论
]]>
用wireshark+scripts实现有趣的加密包解码http://www.shnenglu.com/skyscribe/archive/2009/07/27/91394.htmlskyscribeskyscribeMon, 27 Jul 2009 14:24:00 GMThttp://www.shnenglu.com/skyscribe/archive/2009/07/27/91394.htmlhttp://www.shnenglu.com/skyscribe/comments/91394.htmlhttp://www.shnenglu.com/skyscribe/archive/2009/07/27/91394.html#Feedback0http://www.shnenglu.com/skyscribe/comments/commentRss/91394.htmlhttp://www.shnenglu.com/skyscribe/services/trackbacks/91394.htmlWireshark自带有配|usmUser的例子,可以自动调用netsnmp的库来完成揭U,但对于UnixE序而言QGUI的工hw还是有诸多不便Q没有CLI工具来的舒服自然Q另外的一个问题是Q通过自己配置usmUserQ似乎一直无法成功解码?br>
ȝWireshark的文的时候,发现一个强大的工具很适合配合脚本发挥威力QtsharkQ想到PythonQ马上实C(jin)一个不错的工兗?br>
tshark本n可以支持很多选项Q几乎涵盖了(jin)wireshark大部分常用功能,个h发现特别适合二次分析。这里最关键的是 -T pdml选项,
 可以生成一个完整的xml格式的分析报告?br>
假设实现用tcpdump或者snoop抓取?jin)一个加密的包test.pcap,那么接下来,可以用其作二ơ分析:(x)
snoop -d <dev> -o test.pcap <filter>
tshark 
-r test.pcap --T pdml > test.xml

接下来可借助脚本的威力来解析q个xml文g?jin),python的xml.sax很适合q这个了(jin)Q自己写一个ContentHandlerQ?感兴趣的字D|下来Q存储在一个相关的l构里边。这里对于SNMP而言Q只需要将对应的scopedPDU加密数据保存?sh)来Q同时保存其它必要的数据Q放|于索引的dict中,便于下一步分析?br>
利用C/C++写一个小E序Q接收加密参数、字D内容等参数完成实际解码工作Q由于是API的简单调用和变换Q所以比较简单;生成可执行文件即可?br>
最后,上q通过python?Popen建立I/O道Q将各个部分串联hQƈ格式化每一步分析生的输出l果Q生成结果报告?br>
以上的方式可以不需要写dissector完成自定义的报文分析,~点是,q行效率比较低一些;优点也很明显Q很Ҏ(gu)定制和脚本自动化?br>对于U有协议而言Q上q方式也是一个不错的选择?br>


skyscribe 2009-07-27 22:24 发表评论
]]>
实用的流E图l制工具QDiagram Designerhttp://www.shnenglu.com/skyscribe/archive/2009/07/06/89398.htmlskyscribeskyscribeMon, 06 Jul 2009 12:34:00 GMThttp://www.shnenglu.com/skyscribe/archive/2009/07/06/89398.htmlhttp://www.shnenglu.com/skyscribe/comments/89398.htmlhttp://www.shnenglu.com/skyscribe/archive/2009/07/06/89398.html#Feedback0http://www.shnenglu.com/skyscribe/comments/commentRss/89398.htmlhttp://www.shnenglu.com/skyscribe/services/trackbacks/89398.html
下边是我做的囑ŞQ?br>

表示复杂的结构也很是漂亮Q而且最关键的一Ҏ(gu)Q可以直接拷贝到PPT里边做成presentation?br>下边是另外一个图Q类gUML里边的Sequence DiagramQ当时又不完全是Q不q可以清晰的表达我的意思了(jin)?br>曄想用Netbeans的UML插gdcM的图像,可惜惌己加个方框都不行Q还是这个灵z:(x)

q个可爱的YӞ直可以和Visio媲美?jin),而且是开源免费的?br>另外一个例子,作者提供的模板Q也很漂亮,可以ȝ(sh)路硬件图的:(x)

q有一个UML的例子,看它?a >官方|站描述?br>
高功能Q自己定制模板,供以后用?br>可以导出为几U常见的囄格式Q以它自q格式(ddd后缀Q最节省I间?br>
缺点:(x)折线头只能?个弯Q因此不能一W绘制回形箭_(d)需要手工拼接?br>最强大的地方:(x)属性可以自׃改,因此灉|?br>



skyscribe 2009-07-06 20:34 发表评论
]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              պһɫƬ| ޷ٸvideoshd| պӰվ| ޾Ʒþþ| ŷۺһ| 뾫Ʒһպ| ŷƵ| ŷպŮ߹ۿ| СѼƷaվ| Ӱۺ| ޹Ʒ| ҹƷ| ۺϾþ| 99ƷȾþ91͹| Ʒһ㽶߿ۿ | ޺Ʒһ| պƵ| Ůˮ߹ۿһ| Ʒ99þþþþwww| ƷƵһ| þƵ߿| ŷƷѿ| þþù˾Ʒ| ŷ߿ҰŷƷ| СѼƷaվ| þù| һ| ŷxxxx137| | ȾƷƵ߹ۿ| ߹ۿ| ŷaһ| þþƷһѿ| Ůɫ| þðwww.| ŷպ| ѹһ| պŷƵ߹ۿ| ޸| ģƵһ| վ߹ۿ| 99Ʒŷһ| ˾| ѹۿ30Ƶþ| ŷ| һŷ| պҹ߹ۿƵ| þƬwww.17c.com| þav߿| պŷһ| Ӱȷ| ҹþþþþ| Ʒþ999| պһþ| һƷ| ŷɫƬվ| ޹Ʒһһҳ | ŷպ| 91þƵ| ޾Ʒһ߹ۿ| þþ| þ㽶Ʒһ| ƷȰǿˬˬˬվ| avttۺ| ӰԺɫ߹ۿ| ŷպ| һŷ߹ۿ| ŷպƵһ| ŷҹþþ| ҹƷ߹ۿ| þ㽶߿ۿav| ŷ| ŷ777ɫӰ| ޻ɫ| Ůͬ| ģ˽Ƶһ| ŷ12| a4yyŷһ| ŷһƬþþþþþ| պר| þƵ| պ㽶Ƶ| ŷһ| ߹ۿavƬ| ŷ˾Ʒ| ɫӰ߹ۿ| þþŮŮŮŮ999þ| ˳ëƬ߲ŮŮ| ŷպ| ŷһѹۿ| ŷӰѹۿվ| ֻоƷӰ| ѵƵ| ŷƵ| һ| þþŮվƵ| ޸߲| Ʒ| ŮƷվ| ȷӰþ| ޾Ʒþþþþձ| ҹŷƵ| ձ߹ۿ| ƷСƵ| ŷ պ һ| ҹһ| ¾Ʒ| ɫС㽶þ| һ| ޾Ʒ߿| Բ͵ĸƷһ| ŷպһ| þþƷ| þƷ| ޾Ʒһӣ| þƵƵ| ŷߵַ| һƵ߹ۿ| ޵ӰëƬ| һҲ| ƷƵ| Ʒһ| ŷ߲| ˾Ƶ| þøһ| ŷһþþƷ | һ߹ۿվ | ޾Ʒþþþþþþþþ| ëƬһ| Ʒ| ŷƵ߹ۿַ| ŷһ| ŷպxxxxx| ģؾƷ| ۲Ӱ| ŷ| ŷƷһ| ŷ ŷ պƵ| av| ŷvһƵ| ŷպ߹ۿ| ŷԴ| ŷձվ| ŷպһ| Ʒa| ŷ˿һ| Ʒһ˿| պavһ| ۺ| ޼͵| պһŷ| ȷӰһ| þþƷۺ| ѹۿպ| պŷƵ| ղƷbd| һŷպ| ŷպۺ| þþƷƵ| ŷƷһ| ƷƵ99| ߹ۿպר| 99Ʒþþ| ŷĻƵ| ŷԴ| 99Ʒһ| ŷպ| þþþ߹ۿ| ŷպһ| ۺ޾Ʒһ| ˳˳߹ۿͼƬ| һվ| ߹ۿƵպ| ޹˳ۺվ| ŷƷ| Ѿþ99Ʒ| Ʒ¶| ŷ޾Ʒһ| ҹƷƵһ| ŷvvۺϢv| av˶| Ұŷͽxxxx| ŷƵ߹ۿַ| ԺƷƵ߹ۿƷ| һ| ŷһȫ| һþ| պ| ݺɫݺɫۺϾ| һӰ| ޾Ʒ123| þþƷ99Ʒɫ | ŷһƷ| ŷbbbbbbbbbb| ޺˿һ| Ұŷһ| þgogoģ| Ʒ߳| һƵ߲| ŷ˰Ƶվ|