<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss1full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">

<channel rdf:about="http://vkgtaro.jp/">
<title>僕ト云フ事</title>
<link>http://vkgtaro.jp/</link>
<description>vkgtaro こと Daisuke Komatsu がプログラミングとか写真撮りに行ったこととかたらたら綴るよ</description>
<image rdf:resource="http://vkgtaro.jp/bnr_img/taro_sky.gif" />
<dc:language>ja</dc:language>
<dc:creator>海賊たろ</dc:creator>
<dc:date>2012-01-06T09:25:22+09:00</dc:date>
<admin:generatorAgent rdf:resource="http://www.movabletype.org/?v=3.32-ja" />


<items>
<rdf:Seq><rdf:li rdf:resource="http://vkgtaro.jp/2012/01/06/python_import_filename" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/12/27/python_decorator" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/11/07/python_gdata" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/10/30/hachiojipm_10" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/10/18/python_text_table" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/08/31/python_virtualenvwrapper" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/05/01/upload_images_to_ez_publish" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/03/22/brownout" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/03/22/get_google_oauth_consumer_key" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/26/ruby_18_regexp_literal" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/21/nosetest_with_doctest" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/20/setuppy_pypi" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/20/python_virtualenv" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/20/citrus_twitter" />
<rdf:li rdf:resource="http://vkgtaro.jp/2011/02/18/fbadmin_for_like_button" />
</rdf:Seq>
</items>

<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rdf+xml" href="http://feeds.feedburner.com/viking" /><feedburner:info uri="viking" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly></channel>

<image rdf:about="http://vkgtaro.jp/bnr_img/taro_sky.gif">
  <title>僕ト云フ事</title>
  <link>http://vkgtaro.jp/</link>
  <url>http://vkgtaro.jp/bnr_img/taro_sky.gif</url>
</image>

<item rdf:about="http://vkgtaro.jp/2012/01/06/python_import_filename">
<title>[python]import しようとするパッケージと実行しようとするファイル名がかぶると困ったことになる</title>
<link>http://vkgtaro.jp/2012/01/06/python_import_filename</link>
<description>あけおめ。

email.py って名前のファイルを作って、中身で from email.mime.text import MIMEText とかしたら、こんな事言われる。


[vkgtaro@cb21-komatsu.local] $ python email.py
Traceback (most recent call last):
  File "email.py", line 1, in 
    from email.mime.text import MIMEText
  File "/Users/vkgtaro/Desktop/email.py", line 1, in 
    from email.mime.text import MIMEText
ImportError: No module named mime.text


モジュールのパッケージ名と同じ名前の py ファイルを探索可能なところにおいてることになるわけですね。ファイル名気を付けないと。</description>
<content:encoded><![CDATA[<p>あけおめ。</p>

<p>email.py って名前のファイルを作って、中身で <code>from email.mime.text import MIMEText</code> とかしたら、こんな事言われる。</p>

<pre>
[vkgtaro@cb21-komatsu.local] $ python email.py
Traceback (most recent call last):
  File "email.py", line 1, in <module>
    from email.mime.text import MIMEText
  File "/Users/vkgtaro/Desktop/email.py", line 1, in <module>
    from email.mime.text import MIMEText
ImportError: No module named mime.text
</pre>

<p>モジュールのパッケージ名と同じ名前の py ファイルを探索可能なところにおいてることになるわけですね。ファイル名気を付けないと。</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2012-01-06T09:25:22+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/12/27/python_decorator">
<title>[decorator][python]引数付きの decorator</title>
<link>http://vkgtaro.jp/2011/12/27/python_decorator</link>
<description>三重に関数をネストした decoration 用の関数を作る。


def deco(deco_arg):
    def deco_inner(func):
        def wrapper(*args, **kwards):
            print "before wrapper: %s" % deco_arg
            result = func(*args, **kwards)
            print "after wrapper: %s" % deco_arg
            return result
        return wrapper
    return deco_inner


んで、こうやると引数使って decorate できる。


@deco("boke")
def hoge(arg):
    print "hoge: %s" % arg
 
hoge("aaa")


実行結果


before wrapper: boke
hoge: aaa
after wrapper: boke


実際にはこうやってるのと一緒。


def boo(arg):
    print "boo: %s" % arg
 
_deco = deco("bbb")
b = _deco(boo)
b("aaa")


実行結果


before wrapper: bbb
boo: aaa
after wrapper: bbb

</description>
<content:encoded><![CDATA[<p>三重に関数をネストした decoration 用の関数を作る。</p>

<pre><code class="prettyprint">
def deco(deco_arg):
    def deco_inner(func):
        def wrapper(*args, **kwards):
            print "before wrapper: %s" % deco_arg
            result = func(*args, **kwards)
            print "after wrapper: %s" % deco_arg
            return result
        return wrapper
    return deco_inner
</code></pre>

<p>んで、こうやると引数使って decorate できる。</p>

<pre><code class="prettyprint">
@deco("boke")
def hoge(arg):
    print "hoge: %s" % arg
 
hoge("aaa")
</code></pre>

<p>実行結果</p>

<pre>
before wrapper: boke
hoge: aaa
after wrapper: boke
</pre>

<p>実際にはこうやってるのと一緒。</p>

<pre><code class="prettyprint">
def boo(arg):
    print "boo: %s" % arg
 
_deco = deco("bbb")
b = _deco(boo)
b("aaa")
</code></pre>

<p>実行結果</p>

<pre>
before wrapper: bbb
boo: aaa
after wrapper: bbb
</pre>
]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/decorator" rel="TAG" title="TAG:decorator">decorator</a>][<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>decorator</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-12-27T23:41:35+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/11/07/python_gdata">
<title>[gdata][python]Google Calendar の内容を Spreadsheet へ流す script</title>
<link>http://vkgtaro.jp/2011/11/07/python_gdata</link>
<description>仕事で Google Docs の spreadsheet に time sheet をつけなくてはいけないんだけど、いつも Calendar を実績ベースに書き換えて居るので、それを流し込むだけの script 書いた。
月末の提出時に動かしてる。（本当は column がたくさんあったり、適切な sheet 選んだりって処理があったけど省いてる。）



こんなコードなら書いてるなぁ、というカンジ。</description>
<content:encoded><![CDATA[<p>仕事で Google Docs の spreadsheet に time sheet をつけなくてはいけないんだけど、いつも Calendar を実績ベースに書き換えて居るので、それを流し込むだけの script 書いた。<br />
月末の提出時に動かしてる。（本当は column がたくさんあったり、適切な sheet 選んだりって処理があったけど省いてる。）</p>

<p><script src="https://gist.github.com/1344831.js?file=c2s.py"></script></p>

<p>こんなコードなら書いてるなぁ、というカンジ。</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/gdata" rel="TAG" title="TAG:gdata">gdata</a>][<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>gdata</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-11-07T21:39:24+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/10/30/hachiojipm_10">
<title>[hachioji.pm][perl]Hachioji.pm に参加してきました。</title>
<link>http://vkgtaro.jp/2011/10/30/hachiojipm_10</link>
<description>レポート書こう、ということで熱が冷めないうちに……。
hachioji.pm の皆さんお疲れさまでしたー。



ということで hachioji.pm #10行ってきました。Perl + 八王子、と言うことでホーム感ありありでした。今は新宿区民ですが。そして案の定、京王八王子着いてから、若干迷ってたり &gt;_

 Hachiouji.pm.2011.10.29   View more presentations from Daisuke Komatsu  

1枚 LT で自己紹介……のサムネイル貼りたいがために久々に slideshare 使ったw
(lazy さん、何かというと使ってしまうのよね……)
まー、コード書いてる絶対量が少ないので、python がどうとか、ruby がどうとか言えるレベルではないですね。でも自分みたいな人も受け入れてもらえる雰囲気は良かったです :-)

隣に座ってた @yellow844 さんや前に座ってた perl-o-pal さんが python 詳しかったりして、python 話も出来て良かった。ループはリスト内包表記で、というのは確かにエキスパート python プログラミングに載ってた。けど、自分で書いたことほとんど無いですw 自分も最初は普通にループ文書いちゃうだろうなw
そして、Perl の人が Itelator 嫌うというところは自分もちょっと分からなかった。確かに Python なら Generator つかいますね。

@uzulla さんの発表は良かったなぁ。人見知り的にはぼっち回避策はあると嬉しいですね。まぁ、技術系だと、blog なり github にコード上げるなりしてれば、それなりに会話が保てるんだろうけども。
イベント補助サービスとして「何が重要なのか」というところを考えてて、きちんとまとめられてるなと思いました。これで自作したらしっかり Eat your own dogfood 出来るんじゃないかと。

なにげに @hondalica さんから、blog 読んでると言われたのは嬉しかった。やっぱり、こういう場に行くと、blog 書いてるのは大事だよなぁ、と思った。まぁ、普段あまり twitter はつぶやいてなかったりするからねぇ。 そして、blog ももう少し、更新頻度あげないと……。

そして una 君との数年ぶりの再開が出来て良かった。よくよく考えたら、百草に住んでた頃が最後に会った時じゃないかしら？ YAPC の時に、twitter でぽつぽつつぶやいていたら、una 君から「hachioji.pm は来ないの？」的な事聞かれて、大分以外でしたw ものすごいところから繋がったなーとw

帰り道の電車で刺身さん、@ktat さんと Perl は NameSpace しっかりしてる / Ruby は独特な名前が多い / Python はとりあえず、Py* って prefix がついてるとか Web socket の話とか楽しかったです。

いろんな会話が出来て楽しかったです。（書ききれてなくてすいません）
また機会があれば参加させてもらいたいです。お疲れさまでしたー。
</description>
<content:encoded><![CDATA[<p>レポート書こう、ということで熱が冷めないうちに……。<br />
hachioji.pm の皆さんお疲れさまでしたー。</p>

<p><img alt="IMG_0417.jpg" src="http://vkgtaro.jp/IMG_0417.jpg" width="500" height="375" /></p>

<p>ということで <a href="http://hachiojipm.org/?p=164">hachioji.pm #10</a>行ってきました。Perl + 八王子、と言うことでホーム感ありありでした。今は新宿区民ですが。そして案の定、京王八王子着いてから、若干迷ってたり >_<</p>

<div style="width:425px" id="__ss_9940256"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/vkgtaro/hachioujipm20111029" title="Hachiouji.pm.2011.10.29" target="_blank">Hachiouji.pm.2011.10.29</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/9940256" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/vkgtaro" target="_blank">Daisuke Komatsu</a> </div> </div>

<p>1枚 LT で自己紹介……のサムネイル貼りたいがために久々に slideshare 使ったw<br />
(lazy さん、何かというと使ってしまうのよね……)<br />
まー、コード書いてる絶対量が少ないので、python がどうとか、ruby がどうとか言えるレベルではないですね。でも自分みたいな人も受け入れてもらえる雰囲気は良かったです :-)</p>

<p>隣に座ってた <a href="http://twitter.com/#!/yellow844">@yellow844</a> さんや前に座ってた <a href="http://d.hatena.ne.jp/perl-o-pal/">perl-o-pal</a> さんが python 詳しかったりして、python 話も出来て良かった。ループはリスト内包表記で、というのは確かにエキスパート python プログラミングに載ってた。けど、自分で書いたことほとんど無いですw 自分も最初は普通にループ文書いちゃうだろうなw<br />
そして、Perl の人が Itelator 嫌うというところは自分もちょっと分からなかった。確かに Python なら Generator つかいますね。</p>

<p><a href="http://twitter.com/#!/uzulla">@uzulla</a> さんの発表は良かったなぁ。人見知り的にはぼっち回避策はあると嬉しいですね。まぁ、技術系だと、blog なり github にコード上げるなりしてれば、それなりに会話が保てるんだろうけども。<br />
イベント補助サービスとして「何が重要なのか」というところを考えてて、きちんとまとめられてるなと思いました。これで自作したらしっかり Eat your own dogfood 出来るんじゃないかと。</p>

<p>なにげに <a href="http://twitter.com/#!/hondallica">@hondalica</a> さんから、blog 読んでると言われたのは嬉しかった。やっぱり、こういう場に行くと、blog 書いてるのは大事だよなぁ、と思った。まぁ、普段あまり twitter はつぶやいてなかったりするからねぇ。 そして、blog ももう少し、更新頻度あげないと……。</p>

<p>そして <a href="http://twitter.com/#!/electine">una 君</a>との数年ぶりの再開が出来て良かった。よくよく考えたら、百草に住んでた頃が最後に会った時じゃないかしら？ YAPC の時に、twitter でぽつぽつつぶやいていたら、una 君から「hachioji.pm は来ないの？」的な事聞かれて、大分以外でしたw ものすごいところから繋がったなーとw</p>

<p>帰り道の電車で<a href="http://twitter.com/#!/kyanny">刺身さん</a>、<a href="http://twitter.com/#!/ktat">@ktat</a> さんと Perl は NameSpace しっかりしてる / Ruby は独特な名前が多い / Python はとりあえず、Py* って prefix がついてるとか Web socket の話とか楽しかったです。</p>

<p>いろんな会話が出来て楽しかったです。（書ききれてなくてすいません）<br />
また機会があれば参加させてもらいたいです。お疲れさまでしたー。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/hachioji.pm" rel="TAG" title="TAG:hachioji.pm">hachioji.pm</a>][<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>hachioji.pm</dc:subject><dc:subject>perl</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-10-30T02:56:54+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/10/18/python_text_table">
<title>[pypi][python][texttable]text な table を作る</title>
<link>http://vkgtaro.jp/2011/10/18/python_text_table</link>
<description>そのまま、texttable っていうのが PyPI にある。
pip install textable して、こんなコードを書くと


# -*- coding: utf-8 -*-
 
from texttable import Texttable
 
table = Texttable()
 
table.add_rows([
        ['id', 'name', 'content'],
        [1, 'aaaaa bbbbb', 'hoge'],
        [2, 'bbb cccc', 'fuga'],
        [3, 'dddd eeee', 'awawa'],
        ])
print table.draw()


こんな感じで出力できる。


 $ python text_table.py
 +----+-------------+---------+
 | id |    name     | content |
 +====+=============+=========+
 | 1  | aaaaa bbbbb | hoge    |
 +----+-------------+---------+
 | 2  | bbb cccc    | fuga    |
 +----+-------------+---------+
 | 3  | dddd eeee   | awawa   |
 +----+-------------+---------+


add_rows() はまとめて行を追加、1行ごとであれば add_row() ってメソッドもある。

set_cols_align() で、各 column の内容の右寄せ/左寄せ/センタリングしたり、
set_cols_valign() で縦方向の位置決め、set_deco() で罫線の style 変えたりできるっぽい。

textable documentation</description>
<content:encoded><![CDATA[<p>そのまま、texttable っていうのが PyPI にある。<br />
pip install textable して、こんなコードを書くと</p>

<pre><code class="prettyprint">
# -*- coding: utf-8 -*-
 
from texttable import Texttable
 
table = Texttable()
 
table.add_rows([
        ['id', 'name', 'content'],
        [1, 'aaaaa bbbbb', 'hoge'],
        [2, 'bbb cccc', 'fuga'],
        [3, 'dddd eeee', 'awawa'],
        ])
print table.draw()
</code></pre>

<p>こんな感じで出力できる。</p>

<pre>
 $ python text_table.py
 +----+-------------+---------+
 | id |    name     | content |
 +====+=============+=========+
 | 1  | aaaaa bbbbb | hoge    |
 +----+-------------+---------+
 | 2  | bbb cccc    | fuga    |
 +----+-------------+---------+
 | 3  | dddd eeee   | awawa   |
 +----+-------------+---------+
</pre>

<p>add_rows() はまとめて行を追加、1行ごとであれば add_row() ってメソッドもある。</p>

<p>set_cols_align() で、各 column の内容の右寄せ/左寄せ/センタリングしたり、<br />
set_cols_valign() で縦方向の位置決め、set_deco() で罫線の style 変えたりできるっぽい。</p>

<p><a href="http://foutaise.org/code/texttable/">textable documentation</a></p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/pypi" rel="TAG" title="TAG:pypi">pypi</a>][<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>][<a href="http://vkgtaro.jp/tag/texttable" rel="TAG" title="TAG:texttable">texttable</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>pypi</dc:subject><dc:subject>python</dc:subject><dc:subject>texttable</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-10-18T13:52:18+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/08/31/python_virtualenvwrapper">
<title>[python][virtualenv][virtualenvwrapper]virtualenvwrapper で virtualenv な仮想環境を切り替え</title>
<link>http://vkgtaro.jp/2011/08/31/python_virtualenvwrapper</link>
<description><![CDATA[また、大分間が開いてしまった……。先日、PyConJP 2011 行ってきて、かなり楽しんできました。やっぱり、こう言うのに参加するとモチベーション上がりますね。

以下、Ubuntu 11.04 上での作業ログです。
まずは easy_install を入れる。(はなから pip があったかもしれない)

sudo apt-get install python-setuptools

virtualenv と virtualenvwrapper を入れる


sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper


.zshrc-after に以下を追記する。(自分の .zshrc が .zshrc-after を読む設定になってるだけなので、.bashrc や .zshrc などに追記すればいい。)


export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh


んで、source .zshrc すると virtualenvwrapper が使う directory を作ってくれる。
これは virtualenvwrapper.sh が、起動時に毎回 directory があるかないかを調べてやってるみたい。


[vkgtaro@ubuntu] $ source .zshrc
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/initialize
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/predeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postdeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/preactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/get_env_details


virtualenvwrapper の setup はここまで。
後は環境作ったりを virtualenvwrapper に付属のコマンドで行える。

mkvirtualenv で hoge1 という環境を作る


[vkgtaro@ubuntu] $ mkvirtualenv hoge1
New python executable in hoge1/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/preactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/postactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/get_env_details
(hoge1)[vkgtaro@ubuntu] $


今作った仮想環境から抜ける


(hoge1)[vkgtaro@ubuntu] $ deactivate
[vkgtaro@ubuntu] $


作成済みの環境を list する


[vkgtaro@ubuntu] $ lsvirtualenv
hoge1



作成済みの仮想環境に切り替え


[vkgtaro@ubuntu] $ workon hoge1
(hoge1)[vkgtaro@ubuntu] $



仮想環境に入った状態で pip とか使うと、その仮想環境に対してインストール出来る


(hoge1)[vkgtaro@ubuntu] $ pip install pyramid


hoge1 には pyramid が入ってる。


(hoge1)[vkgtaro@ubuntu] $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; from pyramid.config import Configurator
&gt;&gt;&gt;



deactive して、仮想環境から抜けてみると pyramid は使えなくなってる。


(hoge1)[vkgtaro@ubuntu] $ deactivate
[vkgtaro@ubuntu] $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; from pyramid.config import Configurator
Traceback (most recent call last):
  File "", line 1, in 
ImportError: No module named pyramid.config
&gt;&gt;&gt;


かなり楽ちん。しかし、virtualenvwrapper って名前はどうなんだろw
]]></description>
<content:encoded><![CDATA[<p>また、大分間が開いてしまった……。先日、<a href="http://2011.pycon.jp/">PyConJP 2011</a> 行ってきて、かなり楽しんできました。やっぱり、こう言うのに参加するとモチベーション上がりますね。</p>

<p>以下、Ubuntu 11.04 上での作業ログです。<br />
まずは easy_install を入れる。(はなから pip があったかもしれない)</p>

<pre><code class="prettyprint">sudo apt-get install python-setuptools</code></pre>

<p>virtualenv と virtualenvwrapper を入れる</p>

<pre><code class="prettyprint">
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper
</code></pre>

<p>.zshrc-after に以下を追記する。(自分の .zshrc が .zshrc-after を読む設定になってるだけなので、.bashrc や .zshrc などに追記すればいい。)</p>

<pre><code class="prettyprint">
export WORKON_HOME=~/Envs
source /usr/local/bin/virtualenvwrapper.sh
</code></pre>

<p>んで、source .zshrc すると virtualenvwrapper が使う directory を作ってくれる。<br />
これは virtualenvwrapper.sh が、起動時に毎回 directory があるかないかを調べてやってるみたい。</p>

<pre><code class="prettyprint">
[vkgtaro@ubuntu] $ source .zshrc
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/initialize
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/premkvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postmkvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/prermvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postrmvirtualenv
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/predeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postdeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/preactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/postactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/get_env_details
</code></pre>

<p>virtualenvwrapper の setup はここまで。<br />
後は環境作ったりを virtualenvwrapper に付属のコマンドで行える。</p>

<p>mkvirtualenv で hoge1 という環境を作る</p>

<pre><code class="prettyprint">
[vkgtaro@ubuntu] $ mkvirtualenv hoge1
New python executable in hoge1/bin/python
Installing setuptools............done.
Installing pip...............done.
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/predeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/postdeactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/preactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/postactivate
virtualenvwrapper.user_scripts creating /home/vkgtaro/Envs/hoge1/bin/get_env_details
(hoge1)[vkgtaro@ubuntu] $
</code></pre>

<p>今作った仮想環境から抜ける</p>

<pre><code class="prettyprint">
(hoge1)[vkgtaro@ubuntu] $ deactivate
[vkgtaro@ubuntu] $
</code></pre>

<p>作成済みの環境を list する</p>

<pre><code class="prettyprint">
[vkgtaro@ubuntu] $ lsvirtualenv
hoge1
</code></pre>

<p><br />
作成済みの仮想環境に切り替え</p>

<pre><code class="prettyprint">
[vkgtaro@ubuntu] $ workon hoge1
(hoge1)[vkgtaro@ubuntu] $
</code></pre>

<p><br />
仮想環境に入った状態で pip とか使うと、その仮想環境に対してインストール出来る</p>

<pre><code class="prettyprint">
(hoge1)[vkgtaro@ubuntu] $ pip install pyramid
</code></pre>

<p>hoge1 には pyramid が入ってる。</p>

<pre><code class="prettyprint">
(hoge1)[vkgtaro@ubuntu] $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; from pyramid.config import Configurator
&gt;&gt;&gt;
</code></pre>

<p><br />
deactive して、仮想環境から抜けてみると pyramid は使えなくなってる。</p>

<pre><code class="prettyprint">
(hoge1)[vkgtaro@ubuntu] $ deactivate
[vkgtaro@ubuntu] $ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
&gt;&gt;&gt; from pyramid.config import Configurator
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named pyramid.config
&gt;&gt;&gt;
</code></pre>

<p>かなり楽ちん。しかし、virtualenvwrapper って名前はどうなんだろw<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>][<a href="http://vkgtaro.jp/tag/virtualenv" rel="TAG" title="TAG:virtualenv">virtualenv</a>][<a href="http://vkgtaro.jp/tag/virtualenvwrapper" rel="TAG" title="TAG:virtualenvwrapper">virtualenvwrapper</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>python</dc:subject><dc:subject>virtualenv</dc:subject><dc:subject>virtualenvwrapper</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-08-31T22:04:44+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/05/01/upload_images_to_ez_publish">
<title>[ez publish][perl]eZ Publish に大量の画像をアップロードする</title>
<link>http://vkgtaro.jp/2011/05/01/upload_images_to_ez_publish</link>
<description>ぽちぽちぽちぽち手でやるのはばかばかしいと言われたが、multi upload できる extension をわけあってセットアップ出来ない状況だったので script 書いた。アドホック対応おつ。
Devel::KYTProf いいね。



同じ階層の images ディレクトリ以下に置いた画像を特定の media resource にアップロードしまくる。

え？ ゴールデンウィークってなにそれ？ おいしいの？
</description>
<content:encoded><![CDATA[<p>ぽちぽちぽちぽち手でやるのはばかばかしいと言われたが、<a href="http://projects.ez.no/ezmultiupload">multi upload できる extension</a> をわけあってセットアップ出来ない状況だったので script 書いた。アドホック対応おつ。<br />
Devel::KYTProf いいね。</p>

<p><script src="https://gist.github.com/950108.js?file=uploader.pl"></script></p>

<p>同じ階層の images ディレクトリ以下に置いた画像を特定の media resource にアップロードしまくる。</p>

<p>え？ ゴールデンウィークってなにそれ？ おいしいの？<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/ez%20publish" rel="TAG" title="TAG:ez publish">ez publish</a>][<a href="http://vkgtaro.jp/tag/perl" rel="TAG" title="TAG:perl">perl</a>]<p>]]>
</content:encoded>
<dc:subject>perl</dc:subject><dc:subject>ez publish</dc:subject><dc:subject>perl</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-05-01T08:57:16+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/03/22/brownout">
<title>自宅サーバ落として節電した</title>
<link>http://vkgtaro.jp/2011/03/22/brownout</link>
<description>自宅サーバで動かしてた tiarra を AWS の micro instance 借りてそっちで動かすようにした。節電！</description>
<content:encoded><![CDATA[<p>自宅サーバで動かしてた tiarra を AWS の micro instance 借りてそっちで動かすようにした。節電！</p>]]>
<![CDATA[<p><p>]]>
</content:encoded>
<dc:subject>日常</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-03-22T20:25:53+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/03/22/get_google_oauth_consumer_key">
<title>[google][oauth]google.com で OAuth の Consumer Key と Consumer Secret を取得する</title>
<link>http://vkgtaro.jp/2011/03/22/get_google_oauth_consumer_key</link>
<description>OAuth を使用するドメインを登録すると取得できる。
ドメインの登録は以下から。

https://www.google.com/accounts/ManageDomains

"Add a New Domain" セクションで登録したいドメインを追加し、"Manage registration" セクションに出てくるリンクをたどる。

すると、そのドメインの所有うしゃかどうかを確認するための方法がいくつかの選択肢が出てくるので、自分がやりやすい方法で確認する。（自分は txt レコードに追加する方法でやった。）

確認出来たら、そのドメインの管理画面がでるので、"Target URL path prefix" の項目を入力すると、OAuth Consumer Key と OAuth Consumer Secret が表示される。
</description>
<content:encoded><![CDATA[<p>OAuth を使用するドメインを登録すると取得できる。<br />
ドメインの登録は以下から。</p>

<p><a href="https://www.google.com/accounts/ManageDomains">https://www.google.com/accounts/ManageDomains</a></p>

<p>"Add a New Domain" セクションで登録したいドメインを追加し、"Manage registration" セクションに出てくるリンクをたどる。</p>

<p>すると、そのドメインの所有うしゃかどうかを確認するための方法がいくつかの選択肢が出てくるので、自分がやりやすい方法で確認する。（自分は txt レコードに追加する方法でやった。）</p>

<p>確認出来たら、そのドメインの管理画面がでるので、"Target URL path prefix" の項目を入力すると、OAuth Consumer Key と OAuth Consumer Secret が表示される。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/google" rel="TAG" title="TAG:google">google</a>][<a href="http://vkgtaro.jp/tag/oauth" rel="TAG" title="TAG:oauth">oauth</a>]<p>]]>
</content:encoded>
<dc:subject>プログラミング</dc:subject><dc:subject>google</dc:subject><dc:subject>oauth</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-03-22T14:38:50+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/26/ruby_18_regexp_literal">
<title>[citrus][ruby]ruby 1.8 の正規表現でバイト列じゃなくて文字列でマッチする</title>
<link>http://vkgtaro.jp/2011/02/26/ruby_18_regexp_literal</link>
<description>mobitaro のバックエンドに使い始めた Citrus で、IRC に貼られた URL にあるタイトルを表示する機能があるんですが、woremacx さんから、長いタイトルが変なところで区切られてるという指摘を受けて見てみた。

たとえばこんな感じ。

Ruby 1.9 で日本語(マルチバイト)の文字列を扱�... [text/html; charset=euc-jp]

結論から言うと plugins/http/default.rb の 89 行目、正規表現で60文字までマッチさせて ... をくっつけてるところを u フラグ立てるようにしたら解決。


                if title.size &gt; 70
                        title = title[/.{0,60}/u] + "..."
                end


ruby 1.8系の正規表現は $KCODE の値に従うか、オプションをつけることで文字コードを指定できるみたい。

リテラル/正規表現リテラル

Ruby は日本語化されているので、$KCODE の値に従って正 規表現中の日本語文字を正しく扱います。$KCODE = "n" の場合、日本 語文字を一切認識せずにバイト列として扱います。これはデフォルトの動作で す。

オプションとして n, e, s, u のいずれかを指定す ることで正規表現の文字コードを $KCODE の値に関係なく 個々の正規表現リテラルに指定することもできます。

あと、この問題を追及してるときに、String オブジェクトに to_u8 ってメソッドが生えててなにこれ、と思ったら、lib/citrus/utils.rb にあると、woremacx さんに教えてもらった。オープンクラスで再定義、なるほどー。
</description>
<content:encoded><![CDATA[<p>mobitaro のバックエンドに使い始めた <a href="http://coderepos.org/share/browser/lang/ruby/citrus">Citrus</a> で、IRC に貼られた URL にあるタイトルを表示する機能があるんですが、woremacx さんから、長いタイトルが変なところで区切られてるという指摘を受けて見てみた。</p>

<p>たとえばこんな感じ。</p>

<blockquote>Ruby 1.9 で日本語(マルチバイト)の文字列を扱�... [text/html; charset=euc-jp]</blockquote>

<p>結論から言うと <a href="http://coderepos.org/share/browser/lang/ruby/citrus/trunk/plugins/http/default.rb#L89">plugins/http/default.rb の 89 行</a>目、正規表現で60文字までマッチさせて ... をくっつけてるところを u フラグ立てるようにしたら解決。</p>

<pre><code class="prettyprint">
                if title.size > 70
                        title = title[/.{0,60}/u] + "..."
                end
</code></pre>

<p>ruby 1.8系の正規表現は $KCODE の値に従うか、オプションをつけることで文字コードを指定できるみたい。</p>

<p><a href="http://doc.ruby-lang.org/ja/1.8.7/doc/spec=2fliteral.html#regexp">リテラル/正規表現リテラル</a></p>

<blockquote>Ruby は日本語化されているので、$KCODE の値に従って正 規表現中の日本語文字を正しく扱います。$KCODE = "n" の場合、日本 語文字を一切認識せずにバイト列として扱います。これはデフォルトの動作で す。

<p>オプションとして n, e, s, u のいずれかを指定す ることで正規表現の文字コードを $KCODE の値に関係なく 個々の正規表現リテラルに指定することもできます。</blockquote></p>

<p>あと、この問題を追及してるときに、String オブジェクトに to_u8 ってメソッドが生えててなにこれ、と思ったら、<a href="http://coderepos.org/share/browser/lang/ruby/citrus/trunk/lib/citrus/utils.rb">lib/citrus/utils.rb</a> にあると、woremacx さんに教えてもらった。オープンクラスで再定義、なるほどー。<br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/citrus" rel="TAG" title="TAG:citrus">citrus</a>][<a href="http://vkgtaro.jp/tag/ruby" rel="TAG" title="TAG:ruby">ruby</a>]<p>]]>
</content:encoded>
<dc:subject>ruby</dc:subject><dc:subject>citrus</dc:subject><dc:subject>ruby</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-26T23:09:18+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/21/nosetest_with_doctest">
<title>[python]doctest でテストを書く</title>
<link>http://vkgtaro.jp/2011/02/21/nosetest_with_doctest</link>
<description><![CDATA[README.txt に reST でパッケージの概要を書く


=================
atomisator.parser
=================
 
parser が提供する最上位関数 'parse' を使い、フィードからコンテンツを取得します。
 
    >>> import os
    >>> from atomisator.parser import parse
 
この館数は、フィード URL を引数に取り、取得したコンテンツをイテレータとして返します。
2つめのパラメータには取得する最大エントリ数を指定できます。
最大エントリ数を指定しなかった場合、最大10件まで取得します::
 
    >>> res = parse(os.path.join(os.path.dirname(__file__), 'sample.xml'))
    >>> res #doctest: +ELLIPSIS
    &lt;itertools.islice ...&gt;
 
イテレータの各要素はエントリの情報を含む辞書型の値となります。::
 
    >>> entry = res.next()
    >>> entry['title']
    u'CSSEdit 2.0 Released'
 
辞書には以下のキーが格納されています::
 
    >>> keys = sorted(entry.keys())
    >>> list(keys)
    ['id', 'link', 'links', 'summary', 'summary_detail', 'tags', 'title', 'title_detail']


このまま ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt とかするとテストがこける。--with-doctest は、doctest も行う指定、--doctest-extension=.txt は、doctest のファイルの拡張子の指定。んで、__init__.py にこのテストが通るようにコードを書く


from feedparser import parse as feedparse
from itertools import islice
from itertools import imap
 
def _filter_entry(entry):
    """Filters entry field."""
    entry['links'] = [link['href'] for link in entry['links'] ]
    return entry
 
def parse(url, size=10):
    """Returns entries of the feed."""
    result = feedparse(url)
    return islice(imap(_filter_entry, result['entries']), size)


すると、テストが通る。


$ ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt
.
----------------------------------------------------------------------
Ran 1 test in 0.451s

OK


reST で概要書いたらそれがそのままテストになるのは面白いなー。
nose は unittest の機能を提供しているパッケージらしい。エキスパート Python プログラミング、6章読んだら、11章読もうかなぁ。

エキスパートPythonプログラミングposted with amazlet at 11.02.20Tarek Ziade アスキー・メディアワークス 売り上げランキング: 9716Amazon.co.jp で詳細を見る]]></description>
<content:encoded><![CDATA[<p>README.txt に reST でパッケージの概要を書く</p>

<pre><code class="prettyprint">
=================
atomisator.parser
=================
 
parser が提供する最上位関数 'parse' を使い、フィードからコンテンツを取得します。
 
    >>> import os
    >>> from atomisator.parser import parse
 
この館数は、フィード URL を引数に取り、取得したコンテンツをイテレータとして返します。
2つめのパラメータには取得する最大エントリ数を指定できます。
最大エントリ数を指定しなかった場合、最大10件まで取得します::
 
    >>> res = parse(os.path.join(os.path.dirname(__file__), 'sample.xml'))
    >>> res #doctest: +ELLIPSIS
    &lt;itertools.islice ...&gt;
 
イテレータの各要素はエントリの情報を含む辞書型の値となります。::
 
    >>> entry = res.next()
    >>> entry['title']
    u'CSSEdit 2.0 Released'
 
辞書には以下のキーが格納されています::
 
    >>> keys = sorted(entry.keys())
    >>> list(keys)
    ['id', 'link', 'links', 'summary', 'summary_detail', 'tags', 'title', 'title_detail']
</code></pre>

<p>このまま ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt とかするとテストがこける。--with-doctest は、doctest も行う指定、--doctest-extension=.txt は、doctest のファイルの拡張子の指定。んで、__init__.py にこのテストが通るようにコードを書く</p>

<pre><code class="prettyprint">
from feedparser import parse as feedparse
from itertools import islice
from itertools import imap
 
def _filter_entry(entry):
    """Filters entry field."""
    entry['links'] = [link['href'] for link in entry['links'] ]
    return entry
 
def parse(url, size=10):
    """Returns entries of the feed."""
    result = feedparse(url)
    return islice(imap(_filter_entry, result['entries']), size)
</code></pre>

<p>すると、テストが通る。</p>

<pre>
$ ~/Desktop/my_env/bin/nosetests --with-doctest --doctest-extension=.txt
.
----------------------------------------------------------------------
Ran 1 test in 0.451s

<p>OK<br />
</pre></p>

<p>reST で概要書いたらそれがそのままテストになるのは面白いなー。<br />
nose は unittest の機能を提供しているパッケージらしい。エキスパート Python プログラミング、6章読んだら、11章読もうかなぁ。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" alt="エキスパートPythonプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">エキスパートPythonプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048686291/taroweb-22/ref=nosim/" title="エキスパートPythonプログラミング" target="_blank">amazlet</a> at 11.02.20</div></div><div class="amazlet-detail">Tarek Ziade <br />アスキー・メディアワークス <br />売り上げランキング: 9716<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-21T02:12:57+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/20/setuppy_pypi">
<title>[python]setup.py に書いた依存関係を PyPI からインストールする</title>
<link>http://vkgtaro.jp/2011/02/20/setuppy_pypi</link>
<description>paster コマンドで、新規にプロジェクトを作成する。エキスパート Python プログラミングに習うと、さっきの virtualenv で作った環境に packages というディレクトリを作って、その中で新しく作るのがいいみたい。


$ mkdir packages
$ cd packages
$ paster create -t pbp_package atomisator.parser
/usr/local/bin/paster:5: UserWarning: Module zope was already imported from None, but /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python is being added to sys.path
  from pkg_resources import load_entry_point
Selected and implied templates:
  pbp.skels#pbp_package  A namespaced package
 
Variables:
  egg:      atomisator.parser
  package:  atomisatorparser
  project:  atomisator.parser
Enter namespace_package (Namespace package (like pbp)) ['pbp']: atomisator
Enter package (The package contained namespace package (like example)) ['example']: parser
Enter version (Version) ['0.1.0']: 
Enter description (One-line description of the package) ['']: 
Enter long_description (Multi-line description (in reST)) ['']: 
Enter author (Author name) ['']: 
Enter author_email (Author email) ['']: 
Enter keywords (Space-separated keywords/tags) ['']: 
Enter url (URL of homepage) ['']: 
Enter license_name (License name) ['GPL']: 
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]: 
Creating template pbp_package
Creating directory ./atomisator.parser
  Recursing into +namespace_package+
    Creating ./atomisator.parser/atomisator/
    Recursing into +package+
      Creating ./atomisator.parser/atomisator/parser/
      Copying README.txt to ./atomisator.parser/atomisator/parser/README.txt
      Copying __init__.py_tmpl to ./atomisator.parser/atomisator/parser/__init__.py
    Copying __init__.py_tmpl to ./atomisator.parser/atomisator/__init__.py
  Copying setup.py_tmpl to ./atomisator.parser/setup.py
Running /usr/bin/python setup.py egg_info
$  cd atomisator.parser


paster で使っている pbp_package は、PyPI に pbp.skels と言うパッケージ名でアップロードされてるので、pip install pbp.skels した。

んで、atomisator.parser にできた setup.py の install_requires に依存している PyPI パッケージを書く。


      install_requires=[
          'setuptools',
          'feedparser', # 

その後、python setup.py develop を実行すると、feedparser が install される。
このとき使う python は virtualenv で用意した python の方。エキスパート python だと、/usr/bin/atomisator-python に symlink 張って、atomisator-python を実行してる。

エキスパートPythonプログラミングposted with amazlet at 11.02.20Tarek Ziade アスキー・メディアワークス 売り上げランキング: 9716Amazon.co.jp で詳細を見る</description>
<content:encoded><![CDATA[<p><a href="http://vkgtaro.jp/2011/02/13/python_paster">paster</a> コマンドで、新規にプロジェクトを作成する。エキスパート Python プログラミングに習うと、<a href="http://vkgtaro.jp/2011/02/20/python_virtualenv">さっきの virtualenv で作った環境</a>に packages というディレクトリを作って、その中で新しく作るのがいいみたい。</p>

<pre>
$ mkdir packages
$ cd packages
$ paster create -t pbp_package atomisator.parser
/usr/local/bin/paster:5: UserWarning: Module zope was already imported from None, but /System/Library/Frameworks/Python.framework/Versions/2.6/Extras/lib/python is being added to sys.path
  from pkg_resources import load_entry_point
Selected and implied templates:
  pbp.skels#pbp_package  A namespaced package
 
Variables:
  egg:      atomisator.parser
  package:  atomisatorparser
  project:  atomisator.parser
Enter namespace_package (Namespace package (like pbp)) ['pbp']: atomisator
Enter package (The package contained namespace package (like example)) ['example']: parser
Enter version (Version) ['0.1.0']: 
Enter description (One-line description of the package) ['']: 
Enter long_description (Multi-line description (in reST)) ['']: 
Enter author (Author name) ['']: 
Enter author_email (Author email) ['']: 
Enter keywords (Space-separated keywords/tags) ['']: 
Enter url (URL of homepage) ['']: 
Enter license_name (License name) ['GPL']: 
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [False]: 
Creating template pbp_package
Creating directory ./atomisator.parser
  Recursing into +namespace_package+
    Creating ./atomisator.parser/atomisator/
    Recursing into +package+
      Creating ./atomisator.parser/atomisator/parser/
      Copying README.txt to ./atomisator.parser/atomisator/parser/README.txt
      Copying __init__.py_tmpl to ./atomisator.parser/atomisator/parser/__init__.py
    Copying __init__.py_tmpl to ./atomisator.parser/atomisator/__init__.py
  Copying setup.py_tmpl to ./atomisator.parser/setup.py
Running /usr/bin/python setup.py egg_info
$  cd atomisator.parser
</pre>

<p>paster で使っている pbp_package は、PyPI に pbp.skels と言うパッケージ名でアップロードされてるので、pip install pbp.skels した。</p>

<p>んで、atomisator.parser にできた setup.py の install_requires に依存している PyPI パッケージを書く。</p>

<pre><code class="prettyprint">
      install_requires=[
          'setuptools',
          'feedparser', # <= 追加した
          # -*- Extra requirements: -*-
      ],
</code></pre>

<p>その後、python setup.py develop を実行すると、feedparser が install される。<br />
このとき使う python は virtualenv で用意した python の方。エキスパート python だと、/usr/bin/atomisator-python に symlink 張って、atomisator-python を実行してる。</p>

<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" alt="エキスパートPythonプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">エキスパートPythonプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048686291/taroweb-22/ref=nosim/" title="エキスパートPythonプログラミング" target="_blank">amazlet</a> at 11.02.20</div></div><div class="amazlet-detail">Tarek Ziade <br />アスキー・メディアワークス <br />売り上げランキング: 9716<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-20T23:38:10+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/20/python_virtualenv">
<title>[python]virtualenv でまっさらな python 環境を作る</title>
<link>http://vkgtaro.jp/2011/02/20/python_virtualenv</link>
<description>システムの pyhton を使用せずに、開発のためのまっさらな python 環境を作成します。


$ cd my_env
$ virtualenv --no-site-packages . 
New python executable in ./bin/python
Installing setuptools............done.
$ ls -lha bin
total 176
drwxr-xr-x  12 vkgtaro  staff   408B  2 20 23:04 .
drwxr-xr-x   6 vkgtaro  staff   204B  2 20 23:04 ..
-rw-r--r--   1 vkgtaro  staff   2.1K  2 20 23:04 activate
-rw-r--r--   1 vkgtaro  staff   1.0K  2 20 23:04 activate.csh
-rw-r--r--   1 vkgtaro  staff   2.8K  2 20 23:04 activate.fish
-rw-r--r--   1 vkgtaro  staff   1.0K  2 20 23:04 activate_this.py
-rwxr-xr-x   1 vkgtaro  staff   308B  2 20 23:04 easy_install
-rwxr-xr-x   1 vkgtaro  staff   316B  2 20 23:04 easy_install-2.6
-rwxr-xr-x   1 vkgtaro  staff   266B  2 20 23:04 pip
-rwxr-xr-x   1 vkgtaro  staff   274B  2 20 23:04 pip-2.6
-rwxr-xr-x   1 vkgtaro  staff    50K  2 20 23:04 python
lrwxr-xr-x   1 vkgtaro  staff     6B  2 20 23:04 python2.6 -&gt; python


こうすると、 my_env 以下に 独立したインタプリタ環境ができる。--no-site-packages オプションを使うと、すでに easy_install などでインストールされたものは除外して構築される。
virtualenv した後は easy_install などを使用しても、このディレクトリ以下にインストールされるようになる。

エキスパート Python ではこの後、nose インストールしたりして、/usr/bin 以下に symlink はったりするんだけど、環境変数変えた方がいい気がするけどどうなんだろう。


エキスパートPythonプログラミングposted with amazlet at 11.02.20Tarek Ziade アスキー・メディアワークス 売り上げランキング: 9716Amazon.co.jp で詳細を見る
</description>
<content:encoded><![CDATA[<p>システムの pyhton を使用せずに、開発のためのまっさらな python 環境を作成します。</p>

<pre>
$ cd my_env
$ virtualenv --no-site-packages . 
New python executable in ./bin/python
Installing setuptools............done.
$ ls -lha bin
total 176
drwxr-xr-x  12 vkgtaro  staff   408B  2 20 23:04 .
drwxr-xr-x   6 vkgtaro  staff   204B  2 20 23:04 ..
-rw-r--r--   1 vkgtaro  staff   2.1K  2 20 23:04 activate
-rw-r--r--   1 vkgtaro  staff   1.0K  2 20 23:04 activate.csh
-rw-r--r--   1 vkgtaro  staff   2.8K  2 20 23:04 activate.fish
-rw-r--r--   1 vkgtaro  staff   1.0K  2 20 23:04 activate_this.py
-rwxr-xr-x   1 vkgtaro  staff   308B  2 20 23:04 easy_install
-rwxr-xr-x   1 vkgtaro  staff   316B  2 20 23:04 easy_install-2.6
-rwxr-xr-x   1 vkgtaro  staff   266B  2 20 23:04 pip
-rwxr-xr-x   1 vkgtaro  staff   274B  2 20 23:04 pip-2.6
-rwxr-xr-x   1 vkgtaro  staff    50K  2 20 23:04 python
lrwxr-xr-x   1 vkgtaro  staff     6B  2 20 23:04 python2.6 -> python
</pre>

<p>こうすると、 my_env 以下に 独立したインタプリタ環境ができる。--no-site-packages オプションを使うと、すでに easy_install などでインストールされたものは除外して構築される。<br />
virtualenv した後は easy_install などを使用しても、このディレクトリ以下にインストールされるようになる。</p>

<p>エキスパート Python ではこの後、nose インストールしたりして、/usr/bin 以下に symlink はったりするんだけど、環境変数変えた方がいい気がするけどどうなんだろう。</p>

<p><br />
<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" alt="エキスパートPythonプログラミング" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">エキスパートPythonプログラミング</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/browse/ASIN/4048686291/taroweb-22/ref=nosim/" title="エキスパートPythonプログラミング" target="_blank">amazlet</a> at 11.02.20</div></div><div class="amazlet-detail">Tarek Ziade <br />アスキー・メディアワークス <br />売り上げランキング: 9716<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4048686291/taroweb-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jp で詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div><br />
</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/python" rel="TAG" title="TAG:python">python</a>]<p>]]>
</content:encoded>
<dc:subject>python</dc:subject><dc:subject>python</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-20T23:05:40+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/20/citrus_twitter">
<title>[irc][ruby]Citrus で twitter の URL が貼られたときに tweet の内容を表示する plugin</title>
<link>http://vkgtaro.jp/2011/02/20/citrus_twitter</link>
<description>irc.lazy-people.org とかに居る mobitaro のバックエンドは chokan だったんですが、twitter の url が貼られたときに、中身を表示してくれという feedback があって、せっかくだからと Citrus に移行した。



だいぶ if 文まみれだけど、とりあえずは動くということで。</description>
<content:encoded><![CDATA[<p>irc.lazy-people.org とかに居る mobitaro のバックエンドは chokan だったんですが、twitter の url が貼られたときに、中身を表示してくれという feedback があって、せっかくだからと <a href="http://coderepos.org/share/wiki/Citrus">Citrus</a> に移行した。</p>

<p><script src="https://gist.github.com/835213.js?file=twitter.rb"></script></p>

<p>だいぶ if 文まみれだけど、とりあえずは動くということで。</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/irc" rel="TAG" title="TAG:irc">irc</a>][<a href="http://vkgtaro.jp/tag/ruby" rel="TAG" title="TAG:ruby">ruby</a>]<p>]]>
</content:encoded>
<dc:subject>ruby</dc:subject><dc:subject>irc</dc:subject><dc:subject>ruby</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-20T02:32:55+09:00</dc:date>
</item>
<item rdf:about="http://vkgtaro.jp/2011/02/18/fbadmin_for_like_button">
<title>[facebook]like ボタンが効かなくなってた</title>
<link>http://vkgtaro.jp/2011/02/18/fbadmin_for_like_button</link>
<description><![CDATA[今日というか日が変わったので昨日ですが、人から指摘されてこの blog に設置していた facebook の like ボタンが動いていない事を発見した &gt;_&lt;

like button を押したときに Error と赤字でリンクがあり、クリックしてみると以下のメッセージが。

You failed to provide a valid list of administators. You need to supply the administors using either a "fb:app_id" meta tag, or using a "fb:admins" meta tag to specify a comma-delimited list of Facebook users.

OGP に対応しようとして meta 要素追加したからか？
と思い、fb:admins を head 要素内に追加してみた。

&lt;meta property="fb:admins" content="715857185" /&gt;

結果は、ダメでした。

あれこれやって、探してみて以下の forum にたどり着く。

Facebook Platform Developer Forum / Issue w/ Open Graph + Like Button + fb:app_id

Insights のページで、"Insights for your Domain" をクリックして、おまえさんのドメインを入れてみろと言うことでやってみたら、ふたたび、like ボタンが動くようになった！

ここまでやると、app_id 取ってまとめる用のアプリ作っておいた方がいいかもなぁ。]]></description>
<content:encoded><![CDATA[<p>今日というか日が変わったので昨日ですが、人から指摘されてこの blog に設置していた facebook の like ボタンが動いていない事を発見した &gt;_&lt;</p>

<p>like button を押したときに Error と赤字でリンクがあり、クリックしてみると以下のメッセージが。</p>

<blockquote>You failed to provide a valid list of administators. You need to supply the administors using either a "fb:app_id" meta tag, or using a "fb:admins" meta tag to specify a comma-delimited list of Facebook users.</blockquote>

<p>OGP に対応しようとして meta 要素追加したからか？<br />
と思い、fb:admins を head 要素内に追加してみた。</p>

<pre>&lt;meta property="fb:admins" content="715857185" /&gt;</pre>

<p>結果は、ダメでした。</p>

<p>あれこれやって、探してみて以下の forum にたどり着く。</p>

<p><a href="http://forum.developers.facebook.net/viewtopic.php?id=56645">Facebook Platform Developer Forum / Issue w/ Open Graph + Like Button + fb:app_id</a></p>

<p><a href="http://www.facebook.com/insights/">Insights</a> のページで、"Insights for your Domain" をクリックして、おまえさんのドメインを入れてみろと言うことでやってみたら、ふたたび、like ボタンが動くようになった！</p>

<p>ここまでやると、app_id 取ってまとめる用のアプリ作っておいた方がいいかもなぁ。</p>]]>
<![CDATA[<p>[<a href="http://vkgtaro.jp/tag/facebook" rel="TAG" title="TAG:facebook">facebook</a>]<p>]]>
</content:encoded>
<dc:subject>興味や趣味</dc:subject><dc:subject>facebook</dc:subject>
<dc:creator>海賊たろ（小松大輔）</dc:creator>
<dc:date>2011-02-18T02:20:00+09:00</dc:date>
</item>


</rdf:RDF>

