<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Ruby / Drkcore</title><link>http://blog.kzfmix.com/entry/Ruby</link><description>Programming, Music, Snowboarding</description><atom:link href="http://blog.kzfmix.com/rss/" rel="self"></atom:link><language>ja</language><lastBuildDate>Fri, 25 Mar 2011 04:52:45 +0900</lastBuildDate><item><title>さくらのVPSにWiki入れるかどうか迷った結果Sphinxでいいことになった</title><link>http://blog.kzfmix.com/entry/1300870253</link><description>&lt;p&gt;計画停電で自宅サーバーがしょっちゅう止まったり、電気代比較してみると、さくらのVPS使ったほうがエコっぽいので移行することにした。&lt;/p&gt;
&lt;p&gt;最近楽しく移行作業を始めたわけだが、ちょっと悩んでいたのがwikiをどうするかだ。そもそも自分がなんでwikiを必要としているのかをよくよく考えてみるに&lt;strong&gt;(blogに書くまでもないことの)メモまたは備忘録を構造化された文書形式で残しておきたい&lt;/strong&gt;ということかなぁと。&lt;/p&gt;
&lt;p&gt;今は&lt;a href="http://hikiwiki.org/ja/"&gt;Hiki&lt;/a&gt;を使っているんだが、利用している理由がEmacsのHikiモードがあるというのが一番大きいし、一人でしか使ってないしなぁ。&lt;/p&gt;
&lt;p&gt;となると&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;構造化された文書形式&lt;/li&gt;
&lt;li&gt;Emacsのようなエディタで気軽に編集できる&lt;/li&gt;
&lt;li&gt;それが、さくっとhtmlにコンバートできる&lt;/li&gt;
&lt;li&gt;あとで見返せる自分用メモ&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;を満たせばwikiでなくても構わない。で、Sphinxが候補にあがった。以前&lt;a href="http://blog.kzfmix.com/entry/1286878521"&gt;SAR Newsの原稿書いた時&lt;/a&gt;に使ってたので、使い勝手が非常にいいことは分かっているが、運用どうすっかなと悩んでいたら&lt;a href="http://twitter.com/#!/shibukawa/status/50407919493197824"&gt;渋川さんにアドバイスもらった&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;さくらのVPSではwikiのかわりにSphinxでいくことにした&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;エキスパートPythonプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Tarek Ziade&lt;br /&gt;
    アスキー・メディアワークス / 3780円 ( 2010-05-28 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Fri, 25 Mar 2011 04:52:45 +0900</pubDate><category>Ruby</category><category>Python</category><category>Sphinx</category></item><item><title>Pythonのdisモジュール</title><link>http://blog.kzfmix.com/entry/1300190712</link><description>&lt;p&gt;逆アセンブル用のモジュール&lt;/p&gt;
&lt;p&gt;ソースコードも200行程度で読みやすそうなので、読んでみようかと。&lt;/p&gt;
&lt;p&gt;その前に&lt;a href="http://www.python.jp/doc/nightly/library/dis.html"&gt;ドキュメント&lt;/a&gt;読んだら面白かった。&lt;/p&gt;
&lt;p&gt;Rubyで作る奇妙なプログラミング言語でスタックマシンを作ってみた経験が理解において非常に役に立った。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839927847/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41vb2HHFNJL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Rubyで作る奇妙なプログラミング言語 ~Esoteric Language~&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    原 悠&lt;br /&gt;
    毎日コミュニケーションズ / ?円 ( 2008-12-20 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;リスト内包標記&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt; 
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;dis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="mi"&gt;1&lt;/span&gt;           &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;BUILD_LIST&lt;/span&gt;               &lt;span class="mi"&gt;0&lt;/span&gt;
              &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;DUP_TOP&lt;/span&gt;             
              &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="n"&gt;STORE_FAST&lt;/span&gt;               &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
              &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="n"&gt;GET_ITER&lt;/span&gt;            
        &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;   &lt;span class="mi"&gt;11&lt;/span&gt; &lt;span class="n"&gt;FOR_ITER&lt;/span&gt;                &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="n"&gt;STORE_FAST&lt;/span&gt;               &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;17&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
             &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="n"&gt;LIST_APPEND&lt;/span&gt;         
             &lt;span class="mi"&gt;24&lt;/span&gt; &lt;span class="n"&gt;JUMP_ABSOLUTE&lt;/span&gt;           &lt;span class="mi"&gt;11&lt;/span&gt;
        &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;   &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="n"&gt;DELETE_FAST&lt;/span&gt;              &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
             &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="n"&gt;RETURN_VALUE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;ループで書いてみる&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cp2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;   &lt;span class="n"&gt;ll&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;   &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;     &lt;span class="n"&gt;ll&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;   &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;ll&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt; 
&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;dis&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cp2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="mi"&gt;2&lt;/span&gt;           &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;BUILD_LIST&lt;/span&gt;               &lt;span class="mi"&gt;0&lt;/span&gt;
              &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;STORE_FAST&lt;/span&gt;               &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="mi"&gt;3&lt;/span&gt;           &lt;span class="mi"&gt;6&lt;/span&gt; &lt;span class="n"&gt;SETUP_LOOP&lt;/span&gt;              &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
              &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;12&lt;/span&gt; &lt;span class="n"&gt;GET_ITER&lt;/span&gt;            
        &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;   &lt;span class="mi"&gt;13&lt;/span&gt; &lt;span class="n"&gt;FOR_ITER&lt;/span&gt;                &lt;span class="mi"&gt;19&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;35&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;16&lt;/span&gt; &lt;span class="n"&gt;STORE_FAST&lt;/span&gt;               &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

  &lt;span class="mi"&gt;4&lt;/span&gt;          &lt;span class="mi"&gt;19&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;22&lt;/span&gt; &lt;span class="n"&gt;LOAD_ATTR&lt;/span&gt;                &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;append&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;28&lt;/span&gt; &lt;span class="n"&gt;CALL_FUNCTION&lt;/span&gt;            &lt;span class="mi"&gt;1&lt;/span&gt;
             &lt;span class="mi"&gt;31&lt;/span&gt; &lt;span class="n"&gt;POP_TOP&lt;/span&gt;             
             &lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="n"&gt;JUMP_ABSOLUTE&lt;/span&gt;           &lt;span class="mi"&gt;13&lt;/span&gt;
        &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;   &lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="n"&gt;POP_BLOCK&lt;/span&gt;

  &lt;span class="mi"&gt;5&lt;/span&gt;     &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt;   &lt;span class="mi"&gt;36&lt;/span&gt; &lt;span class="n"&gt;LOAD_FAST&lt;/span&gt;                &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ll&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
             &lt;span class="mi"&gt;39&lt;/span&gt; &lt;span class="n"&gt;RETURN_VALUE&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;参考&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://dsas.blog.klab.org/archives/51742727.html"&gt;Pythonの内包表記はなぜ速い？ &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;エキスパートPythonプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Tarek Ziade&lt;br /&gt;
    アスキー・メディアワークス / 3780円 ( 2010-05-28 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Tue, 15 Mar 2011 21:05:46 +0900</pubDate><category>Ruby</category><category>Python</category></item><item><title>恋するプログラムをJavascriptで書いていくことにした</title><link>http://blog.kzfmix.com/entry/1298288995</link><description>&lt;p&gt;そういえば去年の最終Haskell読書会で、だれかと恋するプログラムの本の話になって&lt;a href="http://twitter.com/kzfm/status/38044697360343040"&gt;Yahooの日本語形態素解析API&lt;/a&gt;使えば出来んじゃないか？という思考に至ったので、気の向いたときにやっていくことにした。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839917299/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41MR9RMCQ6L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;恋するプログラム―Rubyでつくる人工無脳&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    秋山 智俊&lt;br /&gt;
    毎日コミュニケーションズ / ?円 ( 2005-04 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;h3&gt;3-3&lt;/h3&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Responder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;ってなに？&amp;quot;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;Unmo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Responder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;What&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dialogue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responder_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;responder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;u&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Unmo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;proto&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;quot;あれ&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;u&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dialogue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;&lt;a href="http://www.fukkan.com/fk/VoteDetail?no=46063"&gt;復刊リクエスト&lt;/a&gt;も動いているようなので復刊されるといいですね。&lt;/p&gt;</description><pubDate>Mon, 21 Feb 2011 20:53:15 +0900</pubDate><category>Ruby</category><category>javascript</category></item><item><title>Shapado導入メモ</title><link>http://blog.kzfmix.com/entry/1294913600</link><description>&lt;p&gt;Stack Overflow Cloneの一つである&lt;a href="http://shapado.com/"&gt;Shapado&lt;/a&gt;を職場に導入したので、その時の記憶を元にメモっておく（というわけで、記憶が曖昧なせいで間違っている部分もあるかもしれない）。&lt;/p&gt;
&lt;h3&gt;サーバーの準備&lt;/h3&gt;
&lt;p&gt;Fedora14に入れた。&lt;a href="http://fedoraproject.org/"&gt;Fedora14&lt;/a&gt;はcd-romから起動してHDDにインストールしてSELinuxとか色々設定して、まぁそこら辺は普通に。&lt;/p&gt;
&lt;p&gt;Shapadoは&lt;a href="http://www.mongodb.org/"&gt;MongoDB&lt;/a&gt;とRoRで動くのでそっちも設定。Ruby関連はgemsを使ってshapadoのREADMEの通りにバージョンに気をつけながらインストールしていく。ライブラリのヘッダーつまり「develが無いdevelが無い」って言われ続けるので丁寧に入れていく。これがいつも面倒だなぁ。&lt;/p&gt;
&lt;p&gt;fedora14はmongodbのrpmがあるのでyumで入れる&lt;/p&gt;
&lt;div class="codehilite"&gt;&lt;pre&gt;&lt;span class="n"&gt;yum&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;
&lt;span class="n"&gt;chkconfig&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; 
&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;etc&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;rc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;これでMongoDBの設定は終り。&lt;/p&gt;
&lt;h3&gt;shapadoのインストール&lt;/h3&gt;
&lt;p&gt;職場では&lt;a href="http://gitorious.org/shapado"&gt;gitriousのソース&lt;/a&gt;をgit cloneできないので、&lt;a href="https://github.com/patcito/shapado"&gt;GitHubのtar.gz&lt;/a&gt;をダウンロードしてきた。&lt;/p&gt;
&lt;p&gt;あとはREADMEの通りにやればdevelopmentは動く。ただし、shapado.ymlを編集したらrake bootstrapをしないといけない。これはproductionでも同様。あとprodctionで動かす場合はもうひとつのymlファイル(model.ymlだったかな？)をきちんと設定する。&lt;/p&gt;
&lt;h3&gt;apacheでshapadoを動かす&lt;/h3&gt;
&lt;p&gt;developmentは妙に遅いのでproductionで動かしたい（というかそうでないとフラストレーションが溜まる）&lt;/p&gt;
&lt;p&gt;ApacheでRoRを動かすには&lt;a href="http://redmine.jp/tech_note/apache-passenger/"&gt;passenger&lt;/a&gt;を使うとよいらしいので、そうしてみた。これは実に簡単。足りないパッケージも教えてくれるのにプログラムの言いなりでOK&lt;/p&gt;
&lt;p&gt;ただ実際に動かしてみると起動せずerror.log見たら&lt;a href="http://twitter.com/kzfm/status/25363190082707456"&gt;メソッドがないらしいので修正した&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;これで動いた。&lt;strong&gt;ApacheでRoRを動かすのは思ったより簡単だった&lt;/strong&gt;ということが分かったのは収穫&lt;/p&gt;
&lt;h3&gt;なぜイントラにStack Overflow Cloneが必要か？&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1225676331"&gt;An answer is always the stretch of road that's behind you. Only a question can point the way forward.&lt;/a&gt;ってのは名言だと思っていて、結局適切な問いを出し続けられるかというのが組織の強みなんだろうなぁと。(既に与えられた)問いに如何にはやく答えられるか？ってのはコスト競争というかそっちのほうに引っ張られて、製薬業みたいな探索なんだか工学なんだかわかんないような学際的な研究企業には本質的な強みでないよな（アウトソースなんていっぱいあるし）と、個人的に思っているし。&lt;/p&gt;
&lt;p&gt;実際に、去年メガファーマから来た上司が真っ先に欲しがったシステムがQAシステムで、ノウハウ共有というかそういう文化を醸成したかったらしいんだけど、ITシステムがつくったものが、設計思想とかなんもなくてまぁ残念臭漂う感じで（よくあるパターンですね）、一年くらいでだれも使わなくなってしまったので、これじゃまずかろうと僕の手がちょっと空いたときにStack Overflow Cloneを入れてみたという次第。&lt;/p&gt;
&lt;p&gt;自分でも、メールでいろいろ質問したりサジェストしたりしているんだけど、そもそもメールなんてその時に見て良く考えないと相手の言いたいこと理解しないまま二度と見なくなっちゃうし、相手(宛先)を指定しないといけないから、潜在的にそういう情報が有用な人間（Ccに入れるべきとか、未来にその情報が必要になるヒト）にリーチしないので、デメリット多いですな。&lt;/p&gt;
&lt;p&gt;ま、そんなわけで春くらいまではShapadoがうまくまわるように少し手をかけてみようかなぁと思っている。&lt;/p&gt;
&lt;p&gt;RoRの本を持っていないのでなんか買っておこうかなと思っているのだけど良書ってどれだろうか？&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274067858/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51fSL0ybmNL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;RailsによるアジャイルWebアプリケーション開発&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Sam Ruby&lt;br /&gt;
    オーム社 / 4410円 ( 2009-12 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;これとかどうですか？&lt;/p&gt;</description><pubDate>Thu, 13 Jan 2011 21:03:18 +0900</pubDate><category>Ruby</category><category>Shapado</category></item><item><title>2010年に読んだ本</title><link>http://blog.kzfmix.com/entry/1293542750</link><description>&lt;p&gt;今年読んで良かった本をビジネス系と技術系で5つずつあげてみる。&lt;/p&gt;
&lt;p&gt;ビジネス本は読んだ量の割に心に残るものは少なかったけど内容がいい本は深くて色々考えさせられた。特に「イシューからはじめよ」はピカイチだった。&lt;/p&gt;
&lt;p&gt;技術書は前半は&lt;a href="http://blog.kzfmix.com/tag/PK-PD"&gt;PK-PD&lt;/a&gt;の本とか読んでいて、後半はプログラミング関係をそこそこ読んだ。Ruby関連の本が面白かったような気がする。エキスパートPythonプログラミングも大きい。&lt;/p&gt;
&lt;h3&gt;ビジネス本&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1268085497"&gt;とんがり&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4153200115/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41uuWhm0XdL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    ジェイソン フリード&lt;br /&gt;
    早川書房 / 1155円 ( 2010-02-25 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;ログをとるのは&lt;a href="http://blog.kzfmix.com/entry/1273920947"&gt;楽しい&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4153200107/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/417RwSrDozL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;ライフログのすすめ―人生の「すべて」をデジタルに記録する! (ハヤカワ新書juice)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    ゴードン ベル&lt;br /&gt;
    早川書房 / 1470円 ( 2010-01 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;IT業界に限らず、変化が激しい業界では短期的な成果を出すことも、長期的な視野での成果（つまり自分の成長）も&lt;a href="http://blog.kzfmix.com/entry/1273491528"&gt;きちんと考えることが大切&lt;/a&gt;だと思う。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/477414259X/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51j7igIyKYL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;IT業界を楽しく生き抜くための「つまみぐい勉強法」 (技評SE選書)&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    奥 乃美&lt;br /&gt;
    技術評論社 / 1764円 ( 2010-05-07 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1275395243"&gt;自分で自分を経営&lt;/a&gt;しているって感覚が当たり前になるんだろうなと思っている&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4478002258/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41MWD9DH5xL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;経営の教科書―社長が押さえておくべき30の基礎科目&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    新 将命&lt;br /&gt;
    ダイヤモンド社 / 1680円 ( 2009-12-11 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;昨日読み終わったので感想記事を書いてないが、すごく良かった。ピンと来る人にはグイグイ引き込まれる内容。&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4862760856/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41iUErzQk8L._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;イシューからはじめよ―知的生産の「シンプルな本質」&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    安宅和人&lt;br /&gt;
    英治出版 / 1890円 ( 2010-11-24 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;h3&gt;技術書&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blog.kzfmix.com/entry/1275307557"&gt;5章まで&lt;/a&gt;と&lt;a href="http://blog.kzfmix.com/entry/1275566335"&gt;残り&lt;/a&gt;。何度か読みなおしてPythonへの理解を深めていくための本&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;エキスパートPythonプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Tarek Ziade&lt;br /&gt;
    アスキー・メディアワークス / 3780円 ( 2010-05-28 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;月曜日から金曜日に章が分かれていてメタプログラミングを&lt;a href="http://blog.kzfmix.com/tag/Ruby"&gt;学んでいく&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Paolo Perrotta&lt;br /&gt;
    アスキー・メディアワークス / 2940円 ( 2010-08-28 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;バリバリEmacsを使っているEmacs使いが、作業効率をカイゼンしてさらに&lt;a href="http://blog.kzfmix.com/entry/1281353413"&gt;バリバリ使うようになるための本&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4774143278/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/517LicIhabL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Emacsテクニックバイブル　～作業効率をカイゼンする200の技～&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    るびきち&lt;br /&gt;
    技術評論社 / 2919円 ( 2010-08-03 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;継続やYコンビネータを知るために。独特の形式もまた&lt;a href="http://blog.kzfmix.com/entry/1288773747"&gt;読んでて楽しい&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4274068269/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/41EPUv3v0EL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Scheme手習い&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    Daniel P. Friedman&lt;br /&gt;
    オーム社 / 2940円 ( 2010-10-22 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;
&lt;p&gt;創薬研究の問題解決の方法論としても&lt;a href="http://blog.kzfmix.com/entry/1287301256"&gt;参考になることは多い&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;div class="awsxom"&gt;
    &lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4798121622/ref=nosim/kaerutyuuihou-22"&gt;
    &lt;img src="http://ecx.images-amazon.com/images/I/51XuuxjNAaL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
    &lt;strong&gt;Redmineによるタスクマネジメント実践技法&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
    小川 明彦&lt;br /&gt;
    翔泳社 / 3444円 ( 2010-10-13 )&lt;br /&gt;
    &lt;br /&gt;
    &lt;br clear="all" /&gt;
    &lt;/div&gt;&lt;/p&gt;&lt;/p&gt;</description><pubDate>Wed, 29 Dec 2010 19:23:16 +0900</pubDate><category>work</category><category>life</category><category>Scheme</category><category>Ruby</category><category>Python</category><category>emacs</category></item><item><title>メタプログラミングRuby 金曜日</title><link>http://blog.kzfmix.com/entry/1284941517</link><description>&lt;p&gt;コードを記述するコード&lt;/p&gt;

&lt;p&gt;evalとか。pythonだとexecか&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Paolo Perrotta &lt;br /&gt;
アスキー・メディアワークス / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;第二部は「Railsにおけるメタプログラミング」っていう部であまり興味がなかったのでさらっと読み流した。&lt;/p&gt;

&lt;p&gt;最後の&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;メタプログラミングというものなど存在しない。すべてはただのプログラミングじゃ&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;とこは気に入った。&lt;/p&gt;
</description><pubDate>Mon, 20 Sep 2010 09:12:12 +0900</pubDate><category>Ruby</category><category>Python</category></item><item><title>メタプログラミングRuby 木曜日</title><link>http://blog.kzfmix.com/entry/1284794527</link><description>&lt;p&gt;クラス定義&lt;/p&gt;

&lt;p&gt;特異クラスとか特異メソッドとか&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Paolo Perrotta &lt;br /&gt;
アスキー・メディアワークス / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;Rubyの話はなんとなくわかったけど、Pythonで考えた場合にいまいち理解が浅い。&lt;/p&gt;

&lt;p&gt;DWの連載あとで読もう&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/jp/linux/library/l-pymeta/"&gt;Pythonでのメタクラス・プログラミング&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/linux/library/l-pymeta2/"&gt;Metaclass programming in Python, Part 2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/jp/linux/library/l-pymeta3.html"&gt;Python でのメタクラス・プログラミング、第3回&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/linux/library/l-cpdecor.html"&gt;Charming Python: Decorators make magic easy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Sat, 18 Sep 2010 16:22:25 +0900</pubDate><category>Ruby</category><category>Python</category></item><item><title>メタプログラミングRuby 水曜日</title><link>http://blog.kzfmix.com/entry/1284726718</link><description>&lt;p&gt;水曜日はブロックの章。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Paolo Perrotta &lt;br /&gt;
アスキー・メディアワークス / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20050930/221978/"&gt;まつもと直伝　プログラミングのオキテ 第5回（2）&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;ブロックとは，関数1つを採る高階関数を文法的に特別扱いしただけ，とみなすこともできます。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;ほうほう、ということはpythonの場合はラムダ式とればいいのか。&lt;/p&gt;

&lt;p&gt;章の終りの方の例がDSLで面白そうなのでやってみる。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def event(name,func):
    if func():
        print  "ALERT: %s" % func.__name__()

event("イベントが発生すること", lambda: True)
event("イベントが発生しないこと", lambda: False)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;とやってみたが、ラムダ式は複雑なのが書けないのでコードロック渡したい。&lt;/p&gt;

&lt;p&gt;デコレータ使えばいいかということでこんな感じにしてみたが&lt;strong&gt;_event&lt;/strong&gt;で終わる関数を評価するときに、文字列とって関数適用するところで悩んだ。getattrはまぁわかるとしてimport __main__しないと&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Traceback (most recent call last):
  File "metr3.py", line 24, in &amp;lt;module&amp;gt;
    func = getattr(__main__, func_name)
NameError: name '__main__' is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;って出てくる理由がわからん。&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def event(eventname):
    def decfunc(func):
        def func_():
            if func():
                print  "ALERT: %s" % eventname
        return func_
    return decfunc

@event("イベント発生")
def test1_event(): return True

@event("イベントが発生しないこと")
def test2_event(): return False


if __name__ == '__main__':
    import __main__
    for func_name in [elem for elem in dir() if elem.endswith("_event")]:
        func = getattr(__main__, func_name)
        func()
&lt;/code&gt;&lt;/pre&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://mail.python.org/pipermail/tutor/2006-July/048214.html"&gt;[Tutor] getattr()&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Fri, 17 Sep 2010 21:48:06 +0900</pubDate><category>Ruby</category><category>Python</category></item><item><title>メタプログラミングRuby 火曜日</title><link>http://blog.kzfmix.com/entry/1284547871</link><description>&lt;p&gt;火曜日はメソッドを動的に定義する。Pythonだと__setattr__と__getattribute__を使えばいいが、魔術っぽさを感じる。Rubyは見た目自然じゃないか。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Paolo Perrotta &lt;br /&gt;
アスキー・メディアワークス / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;import re
class Ds(object):
    def get_cpu_info(self,i):
        return 2.16
    def get_cpu_price(self,i):
        return 150
    def get_mouse_info(self,i):
        return "dual optical"
    def get_mouse_price(self,i):
        return 40

# METAPROGRAMMING RUBY
# class computer
#   def initialize(computer_id, data_source)
#     @id = computer_id
#     @data_source = data_source
#     data_source.methods.grep(/^get_(.*)_info$/) { Computer.define_compornent $1}
#   end
#
#   def self.define_component(name)
#     define_method(name){
#       info = data_source.send "get_#{name}_info", @id
#       price = data_source.send "get_#{name}_price", @id
#       result = "#{name.capitalize}: #{info} ($#{price})"
#       return "* #{result}" if price &amp;gt;= 100
#       result
#       }
#     end
#   end

class Computer(object):

    def __init__(self,computer_id, data_source):
        self.data_source = data_source
        self.id = id
        for name in [re.search("^get_(.*)_info$",m).group(1) for m in
                     dir(data_source) if re.search("^get_(.*)_info$",m)]:
            self.define_compornent(name)

    def define_compornent(self, name):
        def define_method():
            info  = self.data_source.__getattribute__("get_%s_info"%name)(self.id)
            price = self.data_source.__getattribute__("get_%s_price"%name)(self.id)
            result = "%s: %s ($%s)" % (name.capitalize(), info, price)
            if price &amp;gt;= 100:
                return "* %s" % result
        self.__setattr__(name,define_method)

if __name__ == '__main__':
    ds = Ds()
    com = Computer(12,ds)
    print com.mouse()
    print com.cpu()
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;後半はmethod_missingを使う例だった。perlだとAUTOLOADかとおもってググッてみたら。一覧になってた。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://blog.livedoor.jp/dankogai/archives/50491359.html"&gt;Perl Monger の質問 - AUTOLOADって他でどうやるの?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ところで、__getattribute__と__getattr__の違いがわからんという新たな発見をした。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.python.jp/doc/2.5/ref/new-style-attribute-access.html"&gt;3.4.2.1 新しい形式のクラスのための別の属性アクセス&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><pubDate>Wed, 15 Sep 2010 20:15:01 +0900</pubDate><category>Ruby</category><category>Python</category></item><item><title>メタプログラミングRuby 月曜日</title><link>http://blog.kzfmix.com/entry/1284460591</link><description>&lt;p&gt;メタプログラミングRubyを読み始めた。第一部は月曜から金曜にわかれていて、、、、、
まぁ毎日読めってことですな。&lt;/p&gt;

&lt;p&gt;というわけで、機能はRubyのオブジェクトモデルに関して読んでいた。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048687158/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51TODrMIEnL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;メタプログラミングRuby&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Paolo Perrotta &lt;br /&gt;
アスキー・メディアワークス / ￥ 2,940 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;

&lt;p&gt;rubyにはancestorsっていうメソッドがあって継承関係を調べることができる。&lt;/p&gt;

&lt;p&gt;pythonだとこんな感じか？&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;def ancestors(ins): return [c.__name__ for c in ins.__class__.mro()]
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;クラスに関しては&lt;a href="http://www.cafepy.com/article/python_types_and_objects/python_types_and_objects.html"&gt;Python Types and Objects&lt;/a&gt;が分かりやすかった。&lt;/p&gt;

&lt;p&gt;あと、pythonでのメタプログラミングはエキスパートPythonで少し触れられている。&lt;/p&gt;

&lt;p&gt;&lt;div class="awsxom"&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/ref=nosim/kaerutyuuihou-22"&gt;
&lt;img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" align="left" hspace="5" border="0" alt="ProductName" class="image" /&gt;
&lt;strong&gt;エキスパートPythonプログラミング&lt;/strong&gt;&lt;/a&gt;&lt;br /&gt;
Tarek Ziade &lt;br /&gt;
アスキー・メディアワークス / ￥ 3,780 ()&lt;br /&gt;
在庫あり。&lt;br /&gt;
&lt;br clear="all" /&gt;
&lt;/div&gt;&lt;/p&gt;
</description><pubDate>Tue, 14 Sep 2010 19:39:23 +0900</pubDate><category>Ruby</category><category>Python</category></item></channel></rss>
