<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkAAR3gycCp7ImA9WxBUFk0.&quot;"><id>tag:blogger.com,1999:blog-18400048</id><updated>2010-03-03T17:25:46.698+09:00</updated><title type="text">Surgo</title><subtitle type="html">lazy programmer's blog.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://surgo.jp/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://surgo.jp/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>75</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/surgo/posts" /><feedburner:info uri="surgo/posts" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://paipo.jp/bookmarklet/?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.feedburner.jp/fb/i/subscribe_paipo.gif">Paipo???</feedburner:feedFlare><feedburner:feedFlare href="http://add.my.yahoo.co.jp/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://img.yahoo.co.jp/i/jp/my/addtomy1.gif">myyahoo???</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.newsgator.com/images/ngsub1.gif">NewsGator Online???</feedburner:feedFlare><feedburner:feedFlare href="http://feedpath.jp/feedreader/feeds_add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://feedpath.jp/common/images/sub_feedpath.gif">feedpath???</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/surgo/posts" src="http://www.bloglines.com/images/sub_modern11.gif">Bloglines???</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://buttons.googlesyndication.com/fusion/add.gif">Google???</feedburner:feedFlare><feedburner:feedFlare href="http://r.hatena.ne.jp/append/http://feeds.feedburner.com/surgo/posts" src="http://r.hatena.ne.jp/images/addto_w.gif">???RSS???</feedburner:feedFlare><feedburner:feedFlare href="http://reader.livedoor.com/subscribe/http://feeds.feedburner.com/surgo/posts" src="http://image.reader.livedoor.com/img/banner/91_17_1.gif">Livedoor???????</feedburner:feedFlare><feedburner:feedFlare href="http://reader.goo.ne.jp/web/bookmarklet.html?,,http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://reader.goo.ne.jp/web/img/addwebrss.gif">goo RSS???????</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fsurgo%2Fposts" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><entry gd:etag="W/&quot;DkAAR3k6eSp7ImA9WxBUFk0.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3582481944024159107</id><published>2010-03-03T14:29:00.001+09:00</published><updated>2010-03-03T17:25:46.711+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-03T17:25:46.711+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="pdf" /><category scheme="http://www.blogger.com/atom/ns#" term="templates" /><title>Django のレスポンスを PDF で</title><content type="html">&lt;p&gt;Django を使う理由がもうひとつ増えました。&lt;a href="http://twitter.com/whosaysni" target="_blank" title="@whosaysni"&gt;@whosaysni&lt;/a&gt; (Yasushi Masuda) さんが、&lt;a href="http://code.google.com/p/template2pdf/" target="_blank" title="template2pdf"&gt;template2pdf&lt;/a&gt; というテンプレートから簡単に PDF を生成する Django アプリケーションを&lt;a href="http://omake.accense.com/wiki/template2pdf" target="_blank" title="tRMLを使ってテンプレートでPDFを生成する ¶"&gt;公開&lt;/a&gt;されています。主な特徴は以下の通りです。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;ReportLab がオープンソースで公開している &lt;a href="http://www.reportlab.com/software/opensource/rl-toolkit/" target="_blank" title="The Open Source PDF library"&gt;PDF ライブラリー&lt;/a&gt;を利用&lt;/li&gt; &lt;li&gt;同 ReportLab が作成した Report Markup Language (略: rml) (仕様: &lt;a href="http://www.reportlab.com/docs/rml2pdf-userguide.pdf" target="_blank" title="RML User Guide"&gt;PDF&lt;/a&gt; ) により、PDF ファイルを &lt;strong&gt;XML&lt;/strong&gt; で定義&lt;/li&gt; &lt;li&gt;XML で定義できるので、&lt;strong&gt;Django の強力なテンプレートシステムが使える&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;rml -&amp;gt; pdf 変換は Rohit Sankaran 氏が公開している &lt;a href="http://github.com/roadhead/trml2pdf/" target="_blank" title="trml2pdf"&gt;trml2pdf&lt;/a&gt; を利用&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;インストール&lt;/h3&gt; &lt;p&gt;すべて setuptools でインストール可能です&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://pypi.python.org/pypi/reportlab"&gt;http://pypi.python.org/pypi/reportlab&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://pypi.python.org/pypi/trml2pdf"&gt;http://pypi.python.org/pypi/trml2pdf&lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a href="http://pypi.python.org/pypi/django_trml2pdf"&gt;http://pypi.python.org/pypi/django_trml2pdf&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;利用方法&lt;/h3&gt; &lt;p&gt;settings.py の INSTALLED_APPS への追加と、環境に応じて日本語用フォントを設定。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
# settings.py
INSTALLED_APPS = (
    # django built-in apps
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    # external apps
    'django_trml2pdf', # thx 2 Yasushi Masuda
    # (以下省略)
}

# set unicode fonts for trml2pdf \
#   (see django_trml2pdf.__init__.py PRELOAD_FONTS)
TRML2PDF_PRELOAD_FONTS = [
    (None, [('UnicodeCIDFont', 'HeiseiKakuGo-W5', None, None)]),
    (None, [('UnicodeCIDFont', 'HeiseiMin-W3', None, None)]),
    ('IPA Mincho', [('TTFont', 'IPA Mincho', 'fonts/ipam.ttf', None),
    ('TTFont', 'IPA Mincho', 'fonts/ipam.ttf', None),
    ('TTFont', 'IPA Mincho', 'fonts/ipam.ttf', None),
    ('TTFont', 'IPA Mincho', 'fonts/ipam.ttf', None),]),
    (None, [('TTFont', 'IPA Gothic', 'fonts/ipag.ttf', None)]),
    (None, [('TTFont', 'IPA PMincho', 'fonts/ipapm.ttf', None)]),
    (None, [('TTFont', 'IPA PGothic', 'fonts/ipapg.ttf', None)]),
]
&lt;/pre&gt;
 &lt;h3&gt;表示してみる&lt;/h3&gt; &lt;p&gt;urls.py に以下のように追加すると使えます。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
urlpatterns = patterns('django_trml2pdf',
    (r'^foo/$',
        'direct_to_pdf', {'template': 'trml2pdf/base.rml'}),
)
&lt;/pre&gt;
 &lt;p&gt;もちろん views.py の中でも使えます。使い方はアクセンスさんの &lt;a href="http://omake.accense.com/wiki/template2pdf" target="_blank" title="tRMLを使ってテンプレートでPDFを生成する"&gt;&lt;del cite="http://twitter.com/whosaysni/statuses/9912508496"&gt;オーメイク&lt;/del&gt; &lt;ins cite="http://twitter.com/whosaysni/statuses/9912508496"&gt;おまけ&lt;/ins&gt;&lt;/a&gt; ページに記載されています。日本語を含むユニコードも問題なく使えます (もちテンプレートファイルはユニコードで作成)。おかげさまで帳票アプリケーションが簡単に作れるようになりましたね！&lt;/p&gt; &lt;p&gt;多謝: Yasushi Masuda さん&lt;/p&gt; &lt;h3&gt;日本語の取り扱いについて (追記)&lt;/h3&gt; &lt;p&gt;PDF で日本語を表示したい場合は、&lt;strong&gt;フォントを PDF ファイル内に内包&lt;/strong&gt;するか、&lt;strong&gt;PDF 標準フォントを指定&lt;/strong&gt;する必要があります。フォントを PDF に埋め込むと色々とめんどい。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;内包 = フォントのデータの分だけ、サイズがでかくなる&lt;/li&gt; &lt;li&gt;配布時のライセンス問題 (フォントはホスト毎にライセンシングされてるのがほとんど&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;ということで &lt;strong style="COLOR: #ff0000"&gt;PDF 標準フォントを指定&lt;/strong&gt;しましょう。trml2pdf/base.rml ファイルで "Serif" って指定されている箇所を settings.py に記載した "HeiseiKakuGo-W5" か "HeiseiMin-W3" に変更します。また、base.rml ファイルに以下のように記述し、利用するフォントを埋め込みます。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
&amp;lt;!DOCTYPE document SYSTEM "rml.dtd"&amp;gt;
{% load pdf_tags %}
&amp;lt;document filename="{{ pdf_name }}"&amp;gt;
  &amp;lt;docinit&amp;gt;
    &amp;lt;registerCidFont faceName="HeiseiKakuGo-W5"/&amp;gt;
    &amp;lt;!-- OR / AND --&amp;gt;
    &amp;lt;registerCidFont faceName="HeiseiMin-W3"/&amp;gt;
  &amp;lt;/docinit&amp;gt;
  {% block template %}
&amp;lt;!-- 以下省略 --&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3582481944024159107?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6gIdAaSoQfIg__TkEG9OpxC5I1k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6gIdAaSoQfIg__TkEG9OpxC5I1k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6gIdAaSoQfIg__TkEG9OpxC5I1k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6gIdAaSoQfIg__TkEG9OpxC5I1k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=qL5Zn3rn5-I:SC_yz0yxHfI:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=qL5Zn3rn5-I:SC_yz0yxHfI:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/qL5Zn3rn5-I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3582481944024159107/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3582481944024159107" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3582481944024159107?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3582481944024159107?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/qL5Zn3rn5-I/django-pdf.html" title="Django のレスポンスを PDF で" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2010/03/django-pdf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUMRXk6fip7ImA9WxBVFkU.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-5691718022844686824</id><published>2010-02-21T01:26:00.001+09:00</published><updated>2010-02-21T01:28:04.716+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-21T01:28:04.716+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WAF" /><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>パーフェクトな Django の設定ファイル</title><content type="html">&lt;p&gt;"&lt;a href="http://blog.damonjablons.com/"&gt;DAMON BLOGONS&lt;/a&gt;" の、 "&lt;a href="http://blog.damonjablons.com/2009/10/15/the-perfect-django-settings-file/" target="_blank" title="The Perfect Django Settings File"&gt;The Perfect Django Settings File&lt;/a&gt;" という記事で紹介されていた Django の設定 (settings.py) が面白かったので、私が利用しているものと併せて紹介したいと思います。&lt;/p&gt; &lt;h4&gt;環境による DEBUG の切り分け&lt;/h4&gt; &lt;p&gt;開発環境では "&lt;code&gt;DEBUG = True&lt;/code&gt;" と書くと幸せになれます。Django のデバッガーは強力です。ただし、本番環境にそのままデプロイしてしまうと・・・。デプロイを楽にするためにも、失敗を防ぐためにも自動的に切り分けるのが望ましいですよね。Damon 氏は以下のようなコードで切り分けているようです。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
# Set DEBUG = True if on the production server
if socket.gethostname() == 'your.domain.com':
    DEBUG = False
else:
    DEBUG = True
&lt;/pre&gt;
 &lt;p&gt;開発環境 localhost (127.0.0.1) と運用環境 your.domain.com のホスト名の違いを利用して切り分けています。&lt;/p&gt; &lt;h4&gt;データベース設定&lt;/h4&gt; &lt;p&gt;データベースの設定も開発環境と本番環境では違います。Damon 氏は 2 つのファイルを使い切り分ける方法を紹介しています。この方法は私もよく使います。これは &lt;a href="http://pinaxproject.com/" target="_blank" title="pinax"&gt;pinax&lt;/a&gt; でも利用されている方法です。1 つは本番環境の設定をそのまま記述したファイル (settings.py) で、もう 1 つが開発環境の設定を記述したファイル (local_settings.py) です。settings.py の&lt;span style="COLOR: #ff0000"&gt;&lt;strong&gt;最後に&lt;/strong&gt;&lt;/span&gt;、以下のコードを書いておき、 local_settings.py は本番環境にデプロイしないことで設定を切り分けています。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
try:
    from local_settings import *
except ImportError:
    pass
&lt;/pre&gt;
 &lt;p&gt;local_settings.py で settings.py の内容を上書きします。私はデータベースの設定だけでなく、上述した DEBUG 設定なんかの上書きに使っています。local_settings.py はバージョン管理ソフトの除外リスト(mercurial なら .hgignore、subversion なら global-ignores など) に追加しておくと便利です。※ このページの後述に DEBUG スイッチなるものが記述されていますが、私の場合はせっかくなので、すべて local_settings.py に記述しちゃいます。&lt;/p&gt; &lt;h4&gt;メディアルート&lt;/h4&gt; &lt;p&gt;フルパスで記述してしまうと再利用性が損なわれてしまいます。以下のコードのように、実行時に動的にパスを取得することにより、解決できます。これも Django の長所、"設定ファイルが python ファイル" を活用したいい例だと思います。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media')
&lt;/pre&gt;
 &lt;p&gt;PROJECT_PATH で settings.py (__file__) の保存されているディレクトリまでのフルパスを取得し、そのディレクトリ内の media ディレクトリを MEDIA_ROOT としています。&lt;/p&gt; &lt;p&gt;以上、抜粋です。 Damon の settings.py は &lt;a href="http://gist.github.com/214361" target="_blank" title="Here's my sample Django settings for a project I recently did. Visit http://damonjablons.wordpress.com to see the explanation."&gt;gist&lt;/a&gt; に保存されています。その他のチップスは Damon 氏のページを参照してみてください。&lt;/p&gt; &lt;h4&gt;MEDIA の URL&lt;/h4&gt; &lt;p&gt;せっかくなので、私が利用しているデフォルトの urls.py のチップスを 1 つ。静的ファイルがボトルネックになってしまってはいけないので、本番環境は静的ファイルを別サーバに保存することが多いでしょう。よって urls.py も本番環境と開発環境では変わることがありますよね。私は、local_settings.py と同様に local_urls.py を作っています。OAuth とかテスト用の Web サービスのテストなどにも便利ですよ。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
# urls.py
urlpatterns = patterns(
   # 本番環境の URL たち
)

try:
    from local_urls import urlpatterns as test_patterns
    urlpatterns += test_patterns
except ImportError:
    pass
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
# local_urls.py
import re

from django.conf import settings
from django.conf.urls.defaults import patterns, url

base_url = re.escape(settings.MEDIA_URL[1:])
urlpatterns += patterns('django.views.static',
        url(r'^%s(?P&amp;lt;path&amp;gt;.*)$' % base_url, 'serve',
            {'document_root': settings.MEDIA_ROOT}),
    )
&lt;/pre&gt;
 &lt;p&gt;便利なのでぜひお試しください :-) それと、ぜひ皆さんが使っていらっしゃる テクニック も教えてほしいです。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-5691718022844686824?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6Q4VOfPBdwzjlgBpFg0BVOirmxY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Q4VOfPBdwzjlgBpFg0BVOirmxY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6Q4VOfPBdwzjlgBpFg0BVOirmxY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6Q4VOfPBdwzjlgBpFg0BVOirmxY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=juNq1DhMULA:TGeKsqYBhBk:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=juNq1DhMULA:TGeKsqYBhBk:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/juNq1DhMULA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/5691718022844686824/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=5691718022844686824" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5691718022844686824?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5691718022844686824?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/juNq1DhMULA/django.html" title="パーフェクトな Django の設定ファイル" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2010/02/django.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUMQnk8eCp7ImA9WxBQFEU.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-2510420659514503423</id><published>2010-01-15T01:19:00.001+09:00</published><updated>2010-01-15T01:24:43.770+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-15T01:24:43.770+09:00</app:edited><title>Google Python スタイルガイド (日本語訳)</title><content type="html">&lt;p&gt;今日まで 5 日間実家の福岡 &amp;amp; 長崎に帰省しました。久しぶりの休みだったので、Sphinx テーマ作成、restructured text の復習、英語の勉強、綺麗な Python コードを書けるようになれるように &lt;a href="http://google-styleguide.googlecode.com/svn/trunk/pyguide.html" target="_blank" title="Google Python Style Guide"&gt;Google Python スタイルガイド&lt;/a&gt; を日本語訳してみました。相変わらず英語が残念なので閲覧注意です。&lt;/p&gt; &lt;p&gt;&lt;a href="http://works.surgo.jp/translation/pyguide.html"&gt;http://works.surgo.jp/translation/pyguide.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;複数行にまたがる文字列でも、インデントを揃えた方が美しい時は&lt;a href="http://www.python.jp/doc/2.5/ref/implicit-joining.html" class="reference external"&gt;非明示的な行継続&lt;/a&gt;をする等は知らなかったです。&lt;/p&gt; 
&lt;pre class="prittyprint"&gt;
# Yes:
print ("This is much nicer.\n"
       "Do it this way.\n")

# No:
print """This is pretty ugly.
Don't do this.
"""
&lt;/pre&gt;
 &lt;p&gt;たしかに見やすいですね。また、Eclipse では自動的にやってくれていましたが、インポートはジェネリックなものから非ジェネリックな順にインポートとかはついつい忘れがちです・・・。さらに、パスを通すのがめんどくさいので、作成しているモジュール内の特定のクラスをインポートする時はフルパスじゃなくて相対パスで書いてしまったり・・・。後からどうせ書かないといけないんですけどね。さらに、配列を返すよりも Yeild の方がメモリ効率が高いとかも勉強になりました。これは実戦投入したいと思いました。&lt;/p&gt; &lt;p&gt;英語教えてくだしあ &amp;gt;&amp;lt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-2510420659514503423?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/veUaD_D4NllvZQEo6UlINjpOTLQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/veUaD_D4NllvZQEo6UlINjpOTLQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/veUaD_D4NllvZQEo6UlINjpOTLQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/veUaD_D4NllvZQEo6UlINjpOTLQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=R37DO2Cross:qbamjGIHqtE:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=R37DO2Cross:qbamjGIHqtE:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/R37DO2Cross" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/2510420659514503423/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=2510420659514503423" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/2510420659514503423?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/2510420659514503423?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/R37DO2Cross/google-python.html" title="Google Python スタイルガイド (日本語訳)" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2010/01/google-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIARno5fip7ImA9WxBRF0o.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-7088226621599972101</id><published>2010-01-06T19:09:00.001+09:00</published><updated>2010-01-06T19:09:07.426+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-06T19:09:07.426+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><title>2010 - Happy New Year !</title><content type="html">&lt;p&gt;あけましておめでとうございます！いまさらですが ;-) 土日祝日とは無縁の生活をしていると、年末年始なんて気にならなくなってしまいますね (いいわけです)。&lt;/p&gt; &lt;p&gt;2009 年は楽しい 1 年でした。pyspa のおかげさまで仕事につけましたし、公私にわたってなにかと充実していました。改めまして、私をサポートしてくださっている皆様ありがとうございます。2009 年を振り返ってみました。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;プライバシー・プリザーブド・データマイニングの研究開発 (3 年 PJ を 2 年で離脱)&lt;/li&gt; &lt;li&gt;人生 2 度目のニート生活&lt;/li&gt; &lt;li&gt;千葉へ引っ越し&lt;/li&gt; &lt;li&gt;就職&lt;/li&gt; &lt;li&gt;インフラなお仕事 ++&lt;/li&gt; &lt;li&gt;やっぱり Web システム開発&lt;/li&gt; &lt;li&gt;初デスクトップアプリ開発&lt;/li&gt; &lt;li&gt;フットサル部 (バトミントン部 --) 始動&lt;/li&gt; &lt;li&gt;google app engine + python はすごい遊べた&lt;/li&gt; &lt;li&gt;android 登場 (java の戦闘力が 1.4 レベルで止まってたことに気づく &lt;br/&gt;※ 一応・・・俺俺 notification アプリを作成&lt;/li&gt; &lt;li&gt;wave のボットも作ったけどいまいち楽しくなれなかった&lt;/li&gt; &lt;li&gt;flob な API (rtm とか flickr とか) に惚れた &lt;br/&gt;※ 社内システムとかにも流用&lt;/li&gt; &lt;li&gt;技術系以外の研修や勉強会に参加&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;そして 2010 年の目標。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;google nexus one / xperia x10 を手に入れる&lt;/li&gt; &lt;li&gt;android アプリをマーケットプレイスへリリースするまで持っていく&lt;/li&gt; &lt;li&gt;インフラの勉強 (特に MySQL、キュー、非同期)&lt;/li&gt; &lt;li&gt;ネットワークの勉強&lt;/li&gt; &lt;li&gt;英語の勉強も兼ねて、技術ドキュメントを翻訳&lt;/li&gt; &lt;li&gt;月 1 度は勉強会に参加する (技術系以外も)&lt;/li&gt; &lt;li&gt;禁煙&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;がむばります。今年もよろしくお願いします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-7088226621599972101?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/y_mjGGFNLH-NGnnwBJlGjzYBSrg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_mjGGFNLH-NGnnwBJlGjzYBSrg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/y_mjGGFNLH-NGnnwBJlGjzYBSrg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/y_mjGGFNLH-NGnnwBJlGjzYBSrg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=4fgWvBLiORY:dwAU6m_m22w:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=4fgWvBLiORY:dwAU6m_m22w:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/4fgWvBLiORY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/7088226621599972101/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=7088226621599972101" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7088226621599972101?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7088226621599972101?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/4fgWvBLiORY/2010-happy-new-year.html" title="2010 - Happy New Year !" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2010/01/2010-happy-new-year.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGQn84fSp7ImA9WxNbFkw.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-1464723626552429862</id><published>2009-11-19T16:54:00.001+09:00</published><updated>2009-11-19T16:55:23.135+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-19T16:55:23.135+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="heartbeat" /><category scheme="http://www.blogger.com/atom/ns#" term="nginx" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>高可用性ロードバランサーを nginx + heartbeat で作る</title><content type="html">&lt;p&gt;ロードバランサーの可用性を高めるために、アクティブスタンバイ構成で、アクティブ系が落ちたらスタンバイ系に引き継げるようにする。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;構築環境&lt;/strong&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;サーバー機&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;NIC × 2 枚 (推奨 4 枚)&lt;/li&gt; &lt;li&gt;RAID: 1, (推奨 0 + 1)&lt;/li&gt; &lt;li&gt;電源ボード × 2 (予算があれば)&lt;/li&gt; &lt;li&gt;仮想化ソフトウェア: VMWare ESXi 4.0&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;仮想化ソフトウェア (VMWare ESXi 4.0) の設定&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;NIC は 2 枚 1 組でフェイルオーバーするように設定&lt;/li&gt; &lt;li&gt;ネットワーク × 2 (NIC 2 枚構成の場合は VLANを作成)&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;VM Network: 既存 (デフォルト)&lt;/li&gt; &lt;li&gt;HA Network: 新規追加&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;ロードバランサー用ゲストOS (Ubuntu Server 9.10: 各サーバに1 台ずつ追加)&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;ディスク: 4G程度 (Ubuntu Server の最小ハードウェア要件は 1G)&lt;/li&gt; &lt;li&gt;コア数: 2&lt;/li&gt; &lt;li&gt;メモリ: 4G&lt;/li&gt; &lt;li&gt;ネットワーク × 2&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;VM Network に接続された NIC&lt;/li&gt; &lt;li&gt;HA Network に接続された NIC&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;ネットワーク&lt;/th&gt; &lt;th&gt;アクティブ (lb01)&lt;/th&gt; &lt;th&gt;スタンバイ (lb02)&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;eth0 (heartbeat 監視用)&lt;/td&gt; &lt;td&gt;192.168.0.2&lt;/td&gt; &lt;td&gt;192.168.0.3&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;eth1 (管理用)&lt;/td&gt; &lt;td&gt;172.16.0.2&lt;/td&gt; &lt;td&gt;172.16.0.3&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;サービス用&lt;/td&gt; &lt;td colspan="2"&gt;172.16.0.1 (実際にサービスを提供する IP)&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;strong&gt;インストールと設定&lt;/strong&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;パッケージ類のインストール (nginx と heartbeat) &lt;br/&gt;ロードバランサーとして利用する nginx と、クラスタリングするための heartbeat をインストールする &lt;br/&gt;
&lt;pre class="prettyprint"&gt;
sudo aptitude install nginx heartbeat
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;nginx の自動起動をやめる &lt;br/&gt;sysv-rc-conf などを利用し、各ランレベルでの自動起動を停止しておく &lt;br/&gt;※ sysv-rc-conf をインストールしていない場合は以下でインストールできる 
&lt;pre class="prettyprint"&gt;
sudo sptitude install sysv-rc-conf
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;hosts ファイルに各サーバを登録する 
&lt;pre class="prettyprint"&gt;
sudo vi /etc/hosts
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
192.168.0.2 lb01
192.168.0.3 lb02
&lt;/pre&gt;
 ※ お互い ping 試験&lt;/li&gt; &lt;li&gt;/etc/ha.d/ha.cf の作成 &lt;br/&gt;テンプレートがあるので、作業用ディレクトリーに複製、及び編集 &lt;br/&gt;監視対象を指定 
&lt;pre class="prettyprint"&gt;
sudo cp /usr/share/doc/heartbeat/ha.cf.gz .
sudo gzip -d ha.cf.gz
sudo vi ha.cf
&lt;/pre&gt;
 コメントを外したり、記入したりなどする 
&lt;pre class="prettyprint"&gt;
keepalive 2
deadtime 30
warntime 10
initdead 120
udpport 694
ucast eth0 192.168.0.[2-3] # 相手のIPアドレス
auto_failback on
node lb01
node lb02
use_logd yes
&lt;/pre&gt;
 /etc/ha.d/ へ配置する 
&lt;pre class="prettyprint"&gt;
sudo cp ha.cf /etc/ha.d/
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;/etc/ha.d/haresources の作成 &lt;br/&gt;これもテンプレートから &lt;br/&gt;アクティブ系、IP、サービス名を指定 &lt;br/&gt;
&lt;pre class="prettyprint"&gt;
sudo cp /usr/share/doc/heartbeat/haresources.gz .
sudo gzip -d haresources.gz
sudo vi haresources
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
lb01 IPaddr::172.16.0.1/24 nginx
&lt;/pre&gt;
 /etc/ha.d/ へ配置する 
&lt;pre class="prettyprint"&gt;
sudo cp haresources /etc/ha.d/
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;/etc/ha.d/authkeys の作成 &lt;br/&gt;これもテンプレートから 
&lt;pre class="prettyprint"&gt;
sudo cp /usr/share/doc/heartbeat/authkeys .
sudo vi authkeys
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
auth 3
3 md5 Hello!
&lt;/pre&gt;
 /etc/ha.d/ へ配置し、root ユーザからのアクセスのみ許可するようにする (これしてなくて heartbeat 起動時に怒られた) 
&lt;pre class="prettyprint"&gt;
sudo cp authkeys /etc/ha.d/
chmod 600 /etc/ha.d/authkeys
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;lb01 -&amp;gt; lb02 の順で heartbeat を起動 
&lt;pre class="prettyprint"&gt;
sudo /etc/init.d/heartbeat start
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;フェイルオーバーの試験とか &lt;br/&gt;ifconfig とかでeth1:0 に サービス IP 172.16.0.1　が引き継がれていれば成功。&lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-1464723626552429862?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0BddgkbMFkWkfMh0m8nArKU2oI8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0BddgkbMFkWkfMh0m8nArKU2oI8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0BddgkbMFkWkfMh0m8nArKU2oI8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0BddgkbMFkWkfMh0m8nArKU2oI8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=Bm1_-2potug:_0drKnLjUKI:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=Bm1_-2potug:_0drKnLjUKI:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/Bm1_-2potug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/1464723626552429862/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=1464723626552429862" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1464723626552429862?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1464723626552429862?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/Bm1_-2potug/nginx-heartbeat.html" title="高可用性ロードバランサーを nginx + heartbeat で作る" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/11/nginx-heartbeat.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cCRn45eyp7ImA9WxNUGEk.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-7411537468025418291</id><published>2009-11-10T19:31:00.001+09:00</published><updated>2009-11-10T19:31:07.023+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-10T19:31:07.023+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="couchdb" /><category scheme="http://www.blogger.com/atom/ns#" term="raindrop" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>mozilla labs より raindrop を試してみた</title><content type="html">&lt;p&gt;mozilla LABS に &lt;a href="https://mozillalabs.com/raindrop/" target="_blank" title="raindrop"&gt;raindrop&lt;/a&gt; という新プロジェクトが先月 (Oct 2009) 登場しました。raindrop は &lt;a href="http://www.mozillamessaging.com/" target="_blank" title="mozilla messaging"&gt;mozilla messaging&lt;/a&gt; の開発チーム (thunderbird など) が Web 上のメッセージングサービスに関する革新的な実験をするのが目的だそうです。バックエンドは、CouchDB、及び (Twisted) Python です。せっかく仕事で CouchDB を触ったので、インストールしてみることに。&lt;/p&gt; &lt;p&gt;機能は大きく分けて、2 つにわかれています。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Web 上のメッセージングサービス (gmail, imap mail, twitter, skype, etc...) の情報を収集、蓄積する機能&lt;/li&gt; &lt;li&gt;集約した情報を表示、操作するためのユーザインタフェース機能&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;mozilla LABS に、そのアーキテクチャーを解り易く解説された画像が掲載されていました。&lt;/p&gt; &lt;p style="TEXT-ALIGN: center"&gt;          &lt;img src="http://lh6.ggpht.com/_prnhyeZ3SnQ/SvlA53s9JJI/AAAAAAAAGB8/JUGBGP8hn6c/raindrop_arc.png?imgmax=800" alt="raindrop_arc.png" height="788" width="503"/&gt;        &lt;/p&gt; &lt;p&gt;インストール (OS: ubuntu - その他の OS へのインストールは&lt;a href="https://wiki.mozilla.org/Raindrop/Install" target="_blank" title="raindrop install"&gt;公式ドキュメント&lt;/a&gt;を参照)&lt;/p&gt; &lt;ol&gt; &lt;li&gt;raindrop ソースコードのダウンロード 
&lt;pre class="prettyprint"&gt;
# mercurial をインストールしていない方は mercurial を取得
sudo apt-get install mercurial
cd /usr/src/
sudo hg clone -r 0.1 http://hg.mozilla.org/labs/raindrop
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;python ライブラリー類のインストール &lt;br/&gt;必要なライブラリーは、setuptools, twisted, PyOpenSSL, Skype4Py, python-twitter, simplejson, feedparser, paisley です。setuptools を入れている場合は、以下のコマンドで一発でライブラリー類をいれてくれます。 
&lt;pre class="prettyprint"&gt;
sudo python raindrop/server/python/check-raindrop.py --configure
&lt;/pre&gt;
 上記のコマンドを実行する前に PyOpenSSL を個別に apt-get 経由でインストールしておく (私の環境では setuptools ではうまくいきませんでした)。 
&lt;pre class="prettyprint"&gt;
sudo apt-get install python-pyopenssl
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;raindrop 設定ファイルを作成 &lt;br/&gt;ホームディレクトリー配下に .raindrop というファイルを作成し、Web メッセージングサービスの認証情報をセットします。これは、Web インターフェース上から実行できるように開発中とのことです。。 
&lt;pre class="prettyprint"&gt;
vi ~/.raindrop
&lt;/pre&gt;
 ファイルには以下のように記載しました。実際に作成する際は、本家ドキュメントで最新版を確認した方がいいと思います。 
&lt;pre class="prettyprint"&gt;
[couch-local]
host=localhost
port=5984

[account-gmail-username]
proto=imap
kind=gmail
username=[gmail アドレス]
password=[gmail パスワード]
ssl=True

[account-twitter-username]
proto=twitter
kind=twitter
username=[twitter ID]
password=[twitter パスワード]

[account-skype-username]
proto=skype
kind=skype
username=[skype ID]
password=[skype パスワード]

[account-rss-feed]
proto=rss
uri=[購読したい feed URL]
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;raindrop の起動 
&lt;pre class="prettyprint"&gt;
sudo python raindrop/server/python/run-raindrop.py sync-messages --max-age=2days
&lt;/pre&gt;
 Web メッセージングサービスを巡回し、ガンガンメッセージを収集します。 &lt;br/&gt;&lt;a href="http://127.0.0.1:5984/raindrop/inflow/index.html"&gt;http://127.0.0.1:5984/raindrop/inflow/index.html&lt;/a&gt; で raindrop UI にアクセスできます。&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;以下のような UI が起動します。&lt;/p&gt; &lt;p style="TEXT-ALIGN: center"&gt;          &lt;a href="http://lh6.ggpht.com/_prnhyeZ3SnQ/SvlA6AjsLSI/AAAAAAAAGCA/mXfiTHB-Iac/raindrop-ui.png?imgmax=800"&gt;            &lt;img src="http://lh4.ggpht.com/_prnhyeZ3SnQ/SvlA6dX5oCI/AAAAAAAAGCE/2I63pizy600/zrtn_002n23067305_tn.jpg?imgmax=400" style="WIDTH: 400px; HEIGHT: 273px" height="273" width="400"/&gt;          &lt;/a&gt;        &lt;/p&gt; &lt;p&gt;画像は解説付きで &lt;a href="http://picasaweb.google.com/koseipics/Raindrop?feat=directlink" target="_blank" title="raindrop"&gt;picasa&lt;/a&gt; にアップロードしました。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-7411537468025418291?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/qTgJN1q0FrTa-CdkR22NI3_aWQQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qTgJN1q0FrTa-CdkR22NI3_aWQQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/qTgJN1q0FrTa-CdkR22NI3_aWQQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/qTgJN1q0FrTa-CdkR22NI3_aWQQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=7dENp1nxJNo:p5207f8vb_4:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=7dENp1nxJNo:p5207f8vb_4:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/7dENp1nxJNo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/7411537468025418291/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=7411537468025418291" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7411537468025418291?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7411537468025418291?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/7dENp1nxJNo/mozilla-labs-raindrop.html" title="mozilla labs より raindrop を試してみた" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/11/mozilla-labs-raindrop.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8CQ304eyp7ImA9WxNUFU8.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-1713433695542116765</id><published>2009-11-07T00:54:00.001+09:00</published><updated>2009-11-07T00:54:22.333+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-07T00:54:22.333+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="couchdb" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="mongodb" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>ubuntu に mongodb をインストール - with pymongo / vs couchdb</title><content type="html">&lt;p&gt;一段落ついたので、couchdb に引き続き mongodb もインストールしてみた。環境は同じく VMWare 上の ubuntu。シングルサーバ、シングルクライアント (python) な環境で比較することに。&lt;/p&gt; &lt;p&gt;というのも、設定に誤りがあるためか、 couchdb が期待できるようなパフォーマンスが出なかったため。100 万件のデータを insert 処理するストレステスト (本番バッチ処理環境を考慮) をしているのですが、途中で conflict -&amp;gt; socket error -&amp;gt; down になってしまう。途中 sleep を入れると socket error は出なくなるけど、それだと遅いのと、なんだか気持ち悪い。前ポストで書いたように、0.8.0, 0.11.0b, 0.10.0 で試したけど、結果は同じでした。何が悪いのだろう・・・。&lt;/p&gt; &lt;p&gt;気は取り直して、mongodb は期待する結果が得られたので、インストールと pymongo 経由での処理方法です。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;依存パッケージ類のインストール 
&lt;pre class="prettyprint"&gt;
sudo aptitude install tcsh git-core scons g++
sudo aptitude install libpcre++-dev libboost1.37-dev libreadline-dev libmozjs-dev
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;git から mongodb のダウンロードとインストール (/opt/mongo へ) 
&lt;pre class="prettyprint"&gt;
cd /usr/src/
git clone git://github.com/mongodb/mongo.git
cd mongo
sudo scons all
sudo scons --prefix=/opt/mongo install
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;mongo ユーザの追加 
&lt;pre class="prettyprint"&gt;
sudo adduser --system --home /opt/mongo/ --no-create-home --shell /bin/bash --group --gecos "mongoDB Administrator" mongo
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;db データディレクトリーの追加とパーミッション設定 
&lt;pre class="prettyprint"&gt;
sudo mkdir -p /data/db
sudo chown -R mongo:mongo /data/
sudo chmod a+x /data/db/
&lt;/pre&gt;
 データディレクトリは任意だけど、デフォルトのパスは上記のディレクトリになってる&lt;/li&gt; &lt;li&gt;デーモン monbod の起動 
&lt;pre class="prettyprint"&gt;
sudo /opt/mongo/bin/mongod
&lt;/pre&gt;
 もしデータディレクトリを別の場所にしている場合は、--dbpath オプションで渡してやる 
&lt;pre class="prettyprint"&gt;
sudo /opt/mongo/bin/mongod --dbpath /path/to/db
&lt;/pre&gt;
 バックグラウンドプロセスで起動するために、末尾に "&amp;amp;" をつけてやる。 &lt;br/&gt;もし、そのまま起動してしまった場合は &amp;lt;Ctrl&amp;gt;+z でプロセスを停止し、 bg でバックグラウンドプロセスに放り込む &lt;br/&gt;正常に起動した場合は、以下のようなメッセージが標準出力に表示される。 
&lt;pre class="prettyprint"&gt;
Fri Nov  6 11:43:02 Mongo DB : starting : pid = 3558 port = 27017 dbpath = /data/db master = 0 slave = 0  32-bit

** NOTE: when using MongoDB 32 bit, you are limited to about 2 gigabytes of data
**       see http://blog.mongodb.org/post/137788967/32-bit-limitations for more

Fri Nov  6 11:43:02 *** warning: spider monkey build without utf8 support.  consider rebuilding with utf8 support
Fri Nov  6 11:43:02 db version v1.1.3-, pdfile version 4.5
Fri Nov  6 11:43:02 git version: 9ecceafbca1c0f88ec69aa659f12a7098f563095
Fri Nov  6 11:43:02 sys info: Linux wb01 2.6.28-16-generic #55-Ubuntu SMP Tue Oct 20 19:48:24 UTC 2009 i686
Fri Nov  6 11:43:02 waiting for connections on port 27017
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;mongodb の停止 &lt;br/&gt;mongo プロンプトからやるか ps からプロセスIDを取得して kill するらしい。プロンプトでやろう (笑 
&lt;pre class="prettyprint"&gt;
sudo /opt/mongo/bin/mongo

&amp;gt; use admin
switched to db admin
&amp;gt; db.shutdownServer()
Fri Nov  6 11:55:57 terminating, shutdown command received
Fri Nov  6 11:55:57  dbexit:
Fri Nov  6 11:55:57      shutdown: going to flush oplog...
Fri Nov  6 11:55:57      shutdown: going to close sockets...
Fri Nov  6 11:55:57      shutdown: waiting for fs...
Fri Nov  6 11:55:57      shutdown: closing all files...
Fri Nov  6 11:55:57      closeAllFiles() finished
Fri Nov  6 11:55:57      shutdown: removing fs lock...
Fri Nov  6 11:55:57  dbexit: really exiting now
ERROR: Client::shutdown not called!
server should be down...
Fri Nov  6 11:55:57 trying reconnect to 127.0.0.1
Fri Nov  6 11:55:57 reconnect 127.0.0.1 ok
Fri Nov  6 11:55:57 JS Error: Error: error doing query: failed (anon):99
&amp;gt; exit
bye
[3]-  Done                    sudo /opt/mongo/bin/mongod
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;pymongo のインストール (setuptools を使う) 
&lt;pre class="prettyprint"&gt;
sudo easy_install pymongo
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;pymongo を使ってみる (&lt;a href="http://pypi.python.org/pypi/pymongo/" target="_blank" title="pymongo"&gt;pymongo のドキュメント&lt;/a&gt;通りにやってみる) 
&lt;pre class="prettyprint"&gt;
&amp;gt;&amp;gt;&amp;gt; from pymongo.connection import Connection
&amp;gt;&amp;gt;&amp;gt; connection = Connection("localhost", 27017)
Fri Nov  6 12:02:30 connection accepted from 127.0.0.1:29390 #2
Fri Nov  6 12:02:30 end connection 127.0.0.1:29390
&amp;gt;&amp;gt;&amp;gt; db = connection.test
&amp;gt;&amp;gt;&amp;gt; db.name()
u'test'
&amp;gt;&amp;gt;&amp;gt; db.my_collection
Collection(Database(Connection('localhost', 27017), u'test'), u'my_collection')
&amp;gt;&amp;gt;&amp;gt; db.my_collection.save({"x": 10})
Fri Nov  6 12:03:12 connection accepted from 127.0.0.1:29646 #3
Fri Nov  6 12:03:12 allocating new datafile /data/db/test.ns, filling with zeroes...
ObjectId('4af391f07ad5bd0fc4000000')
&amp;gt;&amp;gt;&amp;gt; Fri Nov  6 12:03:12 done allocating datafile /data/db/test.ns, size: 16MB, took 0.102 secs
Fri Nov  6 12:03:12 allocating new datafile /data/db/test.0, filling with zeroes...
Fri Nov  6 12:03:13 done allocating datafile /data/db/test.0, size: 64MB, took 0.55 secs
Fri Nov  6 12:03:13 building new index on { _id: ObjId(000000000000000000000000) } for test.my_collection...
Fri Nov  6 12:03:13 Buildindex test.my_collection idxNo:0 { name: "_id_", ns: "test.my_collection", key: { _id: ObjId(000000000000000000000000) } }
Fri Nov  6 12:03:13 done for 0 records 0.257secs
Fri Nov  6 12:03:12 insert test.my_collection 913ms

&amp;gt;&amp;gt;&amp;gt; db.my_collection.save({"x": 8})
ObjectId('4af392067ad5bd0fc4000001')
&amp;gt;&amp;gt;&amp;gt; db.my_collection.save({"x": 11})
ObjectId('4af392107ad5bd0fc4000002')
&amp;gt;&amp;gt;&amp;gt; db.my_collection.find_one()
{u'x': 10, u'_id': ObjectId('4af391f07ad5bd0fc4000000')}
&amp;gt;&amp;gt;&amp;gt; for item in db.my_collection.find():
...   print item["x"]
...
10
8
11
&lt;/pre&gt;
 最初に my_connection にアクセスした際に、test バイナリーファイルが作成されるみたいですね。 &lt;br/&gt;適当に connection.foo, db.bar とかやっても動きます。&lt;/li&gt; &lt;/ol&gt; &lt;ul&gt; &lt;li&gt;couchdb は CPU 使用率やメモリ使用率は少ないです。それと比較すると mongodb はストレステストの間中 99.9% の CPU を消費していました&lt;/li&gt; &lt;li&gt;couchdb はストレスをかけると comflict -&amp;gt; socket error -&amp;gt; down になりましたが、mongodb は落ちずにより高速に処理できました&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;ちょっと今回の検証では couchdb を使いこなせなかった感じです。とりあえず、mongodb を使うことにしましたが、 couchdb についてももうちょっと勉強したいと思います。あっ tokyo tyrant も。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-1713433695542116765?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/GJoKaUxku_AneZqmIe0CizTBEMQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GJoKaUxku_AneZqmIe0CizTBEMQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/GJoKaUxku_AneZqmIe0CizTBEMQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/GJoKaUxku_AneZqmIe0CizTBEMQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=h9spaBLm6MY:qYDTVDDQqu0:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=h9spaBLm6MY:qYDTVDDQqu0:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/h9spaBLm6MY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/1713433695542116765/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=1713433695542116765" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1713433695542116765?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1713433695542116765?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/h9spaBLm6MY/ubuntu-mongodb-with-pymongo-vs-couchdb.html" title="ubuntu に mongodb をインストール - with pymongo / vs couchdb" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/11/ubuntu-mongodb-with-pymongo-vs-couchdb.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEMRnY6eSp7ImA9WxNUE0k.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-8239930705419828565</id><published>2009-11-05T00:13:00.001+09:00</published><updated>2009-11-05T00:31:27.811+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-05T00:31:27.811+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="WAF" /><category scheme="http://www.blogger.com/atom/ns#" term="django" /><category scheme="http://www.blogger.com/atom/ns#" term="centos" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>CentOS に Django をデプロイ - with python2.6, mod_python, mysql</title><content type="html">&lt;p&gt;Ubuntu でしか作ったことなかったけど、CentOS 5 系 で Django をデプロイしてみる&lt;/p&gt; &lt;ol&gt; &lt;li&gt;とりあえずパッケージを最新に更新 
&lt;pre class="prettyprint"&gt;
# yum update
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;python 2.6 のインストール &lt;br/&gt;CentOS ってデフォルトでは 2.4 なんですね。2.6.4 をソースから入れる。まず zlib, sqlite を入れる。sqlite いれないと import sqlite3 できない 
&lt;pre class="prettyprint"&gt;
# yum install zlib zlib-devel sqlite-devel
&lt;/pre&gt;
 python ソースのダウンロードとビルド、インストール 
&lt;pre class="prettyprint"&gt;
# wget http://python.org/ftp/python/2.6.4/Python-2.6.4.tgz
# tar xvfz Python-2.6.4.tgz
# cd Python-2.6.4
&lt;/pre&gt;
 /opt/python2.6 にインストール。path は個人的な趣味。 --enable-shared オプションを追加する 
&lt;pre class="prettyprint"&gt;
# ./configure --prefix=/opt/python2.6 --with-threads --enable-shared
&lt;/pre&gt;
 Setup ファイルで zlib のところのコメントを外す。 
&lt;pre class="prettyprint"&gt;
# vi Modules/Setup

--- #zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
+++ zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
# make
# make install
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;python 2.6 環境設定 (2.4 と共存させる) &lt;br/&gt;パス周りを設定 
&lt;pre class="prettyprint"&gt;
# vi /etc/ld.so.conf.d/opt-python2.6.conf
# /sbin/ldconfig
# sudo ln -s /opt/python2.6/bin/python /usr/bin/python2.6
# cd
&lt;/pre&gt;
 個人的な趣味で、PATH は.bash_profile, alias は .bashrc にセット 
&lt;pre class="prettyprint"&gt;
# vi .bash_profile

--- PATH=$PATH:$HOME/bin
+++ PATH=$PATH:$HOME/bin:/opt/python2.6/bin/

# vi .bashrc

+++ alias python='python2.6'
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
# source ~/.bash_profile
# source ~/.bashrc
&lt;/pre&gt;
 確認 
&lt;pre class="prettyprint"&gt;
# python2.6 -V
Python 2.6.4
# python -V
Python 2.6.4
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;setuptools のインストール &lt;br/&gt;オプションで python の path を渡す 
&lt;pre class="prettyprint"&gt;
# wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg
# sudo sh setuptools-0.6c11-py2.6.egg --prefix=/opt/python2.6
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;PIL のインストール 
&lt;pre class="prettyprint"&gt;
# yum install libjpeg-devel freetype*
# wget http://effbot.org/media/downloads/Imaging-1.1.7b1.tar.gz
# cd Imaging-1.1.7b1
# python setup.py build
# python setup.py install
&lt;/pre&gt;
 インストールをテスト 
&lt;pre class="prettyprint"&gt;
# python selftest.py
--------------------------------------------------------------------
PIL 1.1.7b1 TEST SUMMARY
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from /opt/python2.6/lib/python2.6/site-packages/PIL
--------------------------------------------------------------------
*** PIL CORE support not installed
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
*** FREETYPE2 support not installed
*** LITTLECMS support not installed
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;Django のインストール &lt;br/&gt;easy_install さまさま 
&lt;pre class="prettyprint"&gt;
# sudo easy_install Django
Installed /opt/python2.6/lib/python2.6/site-packages/Django-1.1.1-py2.6.egg
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;MySQL, MySQL-python のインストール &lt;br/&gt;エンコードは utf8 に。 
&lt;pre class="prettyprint"&gt;
# yum install mysql-devel
# vi /etc/my.cnf

+++
[mysql]
default-character-set = utf8
+++

# /etc/init.d/mysqld start
&lt;/pre&gt;
 起動時にサービスが開始されるように設定 
&lt;pre class="prettyprint"&gt;
# /sbin/chkconfig --levels 235 mysqld on
&lt;/pre&gt;
 python ドライバを入れておく 
&lt;pre class="prettyprint"&gt;
# easy_install MySQL-python
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;MySQL の設定 
&lt;pre class="prettyprint"&gt;
# mysqladmin -u root password 'パスワード';
# mysqladmin -u root -h localhost password 'パスワード';
# mysql -u root -p
Enter password:

mysql&amp;gt; CREATE DATABASE mysite;
Query OK, 1 row affected (0.36 sec)

mysql&amp;gt; SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysite             |
| mysql              |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql&amp;gt; CREATE USER mysiteuser IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; GRANT ALL PRIVILEGES ON mysite.* TO mysiteuser IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; GRANT ALL PRIVILEGES ON mysite.* TO mysiteuser@localhost IDENTIFIED BY 'パスワード';
Query OK, 0 rows affected (0.00 sec)

mysql&amp;gt; quit
Bye
# mysql -u mysiteuser -p
Enter password: 

mysql&amp;gt; show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysite             |
| test               |
+--------------------+
3 rows in set (0.00 sec)

mysql&amp;gt; use mysite;
Database changed
mysql&amp;gt; show tables;
Empty set (0.00 sec)

mysql&amp;gt; quit
Bye
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;Apache, mod_python のインストール 
&lt;pre class="prettyprint"&gt;
# yum install httpd-devel
# wget http://ftp.kddilabs.jp/infosystems/apache/httpd/modpython/mod_python-3.3.1.tgz
# tar xvzf mod_python-3.3.1.tgz
# cd mod_python-3.3.1
# ./configure --with-python=/opt/python2.6/bin/python --with-apxs=/usr/sbin/apxs
# make
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;Apache, mod_python の設定 &lt;br/&gt;&lt;ul&gt; &lt;li&gt;URL: http://domain.com/mysite/&lt;/li&gt; &lt;li&gt;admin URL: http://domain.com/mysite/admin/&lt;/li&gt; &lt;li&gt;media URL: http://domain.com/media/&lt;/li&gt; &lt;li&gt;django プロジェクト (settings.py) のデプロイ先: /var/www/django/mysite&lt;/li&gt; &lt;li&gt;media の展開先: /var/www/html/media&lt;/li&gt; &lt;li&gt;log の保存先: /var/log/django/&lt;/li&gt; &lt;/ul&gt; Note: /var/www/html はデフォルトで公開されていると想定 &lt;br/&gt;admin media は /path/to/django/contrib/admin/media/ を /var/www/html/ 内に ln-s でシンボリックリンクを作成し、 chown しておく 
&lt;pre class="prettyprint"&gt;
# mkdir /var/www/django/mysite
# mkdir /var/www/django/mysite/.python-eggs
# chown apache:apache -R /var/www/django/
# chmod a+x /var/www/django/
# mkdir /var/www/html/media
# chown apache:apache -R /var/www/html/
# mkdir /var/log/django/mysite
# chown apache:apache -R /var/log/django/
# chmod a+x /var/log/django/
# vi /etc/httpd/conf.d/python.conf

+++ 
&amp;lt;Location /mysite&amp;gt;
    SetHandler python-program
    PythonPath "sys.path + ['/var/www/django']"
    PythonHandler django.core.handlers.modpython
    PythonOption django.root /mysite
    SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonDebug On
&amp;lt;/Location&amp;gt;
+++ 

/etc/init.d/httpd reload
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;アプリケーションのデプロイと起動 SCP なり FTP なり git なり easy_install なりなんでもいいので、アプリケーションを /var/www/django/mysite/ に置く。syncdb したら動きます。 
&lt;pre class="prettyprint"&gt;
# cd /var/www/django/mysite/
# settings.py syncdb
&lt;/pre&gt;
&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;admin User を shell で作る &lt;br/&gt;shell でやる&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
# python manage.py shell
&amp;gt;&amp;gt;&amp;gt; from django.contrib.auth.models import User
&amp;gt;&amp;gt;&amp;gt; user = User(username='admin', email='foo@bar.com', password='パスワード')
&amp;gt;&amp;gt;&amp;gt; user.is_active=True
&amp;gt;&amp;gt;&amp;gt; user.is_staff=True
&amp;gt;&amp;gt;&amp;gt; user.is_superuser=True
&amp;gt;&amp;gt;&amp;gt; user.save()
&lt;/pre&gt;
 &lt;p&gt;/mysite/admin を IP アドレスでアクセス制御する &lt;br/&gt;/etc/httpd/conf.d/python.conf　を以下のようにする。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
&amp;lt;Location "/mysite/"&amp;gt;
    SetHandler python-program
    PythonPath "sys.path + ['/var/www/django']"
    PythonHandler django.core.handlers.modpython
    PythonOption django.root /mysite
    SetEnv PYTHON_EGG_CACHE /var/www/django/mysite/.python-eggs
    SetEnv DJANGO_SETTINGS_MODULE mysite.settings
    PythonDebug On
&amp;lt;/Location&amp;gt;
&amp;lt;LocationMatch "/mysite/admin/"&amp;gt;
    Order deny,allow
    Deny from all
    Allow from "&lt;span style="COLOR: #800000"&gt;ipaddress&lt;/span&gt;"
&amp;lt;/LocationMatch&amp;gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-8239930705419828565?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/DxRWOKKn1nLrPzjWwYxoxSwu5Uw/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DxRWOKKn1nLrPzjWwYxoxSwu5Uw/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/DxRWOKKn1nLrPzjWwYxoxSwu5Uw/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/DxRWOKKn1nLrPzjWwYxoxSwu5Uw/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=P2e213lGDLY:GP26Q-OpCwg:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=P2e213lGDLY:GP26Q-OpCwg:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/P2e213lGDLY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/8239930705419828565/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=8239930705419828565" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/8239930705419828565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/8239930705419828565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/P2e213lGDLY/centos-django-with-python26-modpython.html" title="CentOS に Django をデプロイ - with python2.6, mod_python, mysql" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/11/centos-django-with-python26-modpython.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04HQHs9fip7ImA9WxNVGUU.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-5209644525189442287</id><published>2009-10-31T17:25:00.001+09:00</published><updated>2009-10-31T18:38:51.566+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-31T18:38:51.566+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="couchdb" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><category scheme="http://www.blogger.com/atom/ns#" term="db" /><title>ubuntu に couchdb の trunk をインストール</title><content type="html">&lt;p&gt;couchdb をインストールした。&lt;/p&gt; &lt;ol&gt; &lt;li&gt;erlang のインストール 
&lt;pre class="prettyprint"&gt;
sudo apt-get install erlang
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;依存パッケージ類のインストール 
&lt;pre class="prettyprint"&gt;
sudo apt-get install gcc libtool automakehelp2man libicu38 libicu-dev libmozjs-dev spidermonkey-bin libcurl4-gnutls-dev
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;couchdb の最新版をチェックアウト 
&lt;pre class="prettyprint"&gt;
svn co http://svn.apache.org/repos/asf/couchdb/trunk couchdb
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;couchdb の build とインストール 
&lt;pre class="prettyprint"&gt;
cd couchdb
./bootstrap
./configure
make &amp;amp;&amp;amp; sudo make install
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;/etc/init.d/ に couchdb のシンボリックリンクをはっておく 
&lt;pre class="prettyprint"&gt;
sudo ln -s /usr/local/etc/init.d/couchdb /etc/init.d/
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;couchdb 系のスクリプトの所有者を couchdb にする 
&lt;pre class="prettyprint"&gt;
/usr/local/var$ sudo chown -R couchdb /usr/local/var
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;couchdb の起動 
&lt;pre class="prettyprint"&gt;
sudo /etc/init.d/couchdb start
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;curl 経由でアクセスを確認してみる 
&lt;pre class="prettyprint"&gt;
curl http://localhost:5984/
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt; 
&lt;pre class="prettyprint"&gt;
{"couchdb":"Welcome","version":"0.11.0b"}
&lt;/pre&gt;
 と表示されます。&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;追記: @voluntas 先生より &lt;a href="http://twitter.com/voluntas/status/5310364180"&gt;Ubuntu 9.10 なら couchdb 0.10.0 が aptitude で入るよ。&lt;/a&gt;　とのことです。ありがとうございました。絶対にこっちが楽ですｗ&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-5209644525189442287?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/CnP9XvfpeUOg7hsl4PHN9q0M3LA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnP9XvfpeUOg7hsl4PHN9q0M3LA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/CnP9XvfpeUOg7hsl4PHN9q0M3LA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/CnP9XvfpeUOg7hsl4PHN9q0M3LA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=odAvldHzhxY:3rmUJLiTgXc:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=odAvldHzhxY:3rmUJLiTgXc:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/odAvldHzhxY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/5209644525189442287/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=5209644525189442287" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5209644525189442287?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5209644525189442287?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/odAvldHzhxY/ubuntu-couchdb-trunk.html" title="ubuntu に couchdb の trunk をインストール" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/ubuntu-couchdb-trunk.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQMQX85cCp7ImA9WxNVFkg.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-8364431124200870077</id><published>2009-10-27T22:59:00.003+09:00</published><updated>2009-10-27T23:06:20.128+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-27T23:06:20.128+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="rtm" /><category scheme="http://www.blogger.com/atom/ns#" term="vim" /><title>RTM.vim</title><content type="html">&lt;a href="http://d.hatena.ne.jp/Voluntas/20091026/1256488546" target="_blank" title="第 6 回 Python 温泉 無事終了"&gt;PySpa#6&lt;/a&gt; で RTM (Remember The Milk) を vim から操作するためのプラグイン &lt;a href="http://bitbucket.org/Surgo/rtm.vim/" target="_blank" title="RTM.vim"&gt;RTM.vim&lt;/a&gt; を作成しました。個人的に欲しかったものだったので、3 日間をフル活用させていただきました。RTM でタスク管理している (今から利用される方も) vim 使いの方はぜひ使ってみてください。&lt;br /&gt;
&lt;h3&gt;インストール&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;cURL (SSL は必須ではありません) のインストールと PATH の追加 &lt;br /&gt;ダウンロード URL: &lt;a href="http://curl.haxx.se/download.html"&gt;http://curl.haxx.se/download.html&lt;/a&gt; &lt;br /&gt;※ Windows ユーザは curl.exe を vim.exe と同ディレクトリーにいれるか、PATH を追加&lt;/li&gt;
&lt;li&gt;md5.vim (created by &lt;a href="http://yukihiro.nakadaira.googlepages.com/" target="_blank" title="yukihiro.nakadaira"&gt;Yukihiro Nakadaira&lt;/a&gt;) のインストールと plugins への追加 &lt;br /&gt;ダウンロード URL: &lt;a href="http://www.vim.org/scripts/script.php?script_id=2806"&gt;http://www.vim.org/scripts/script.php?script_id=2806&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remember The Milk API Key の取得 &lt;br /&gt;取得 URL: &lt;a href="http://www.rememberthemilk.com/services/api/keys.rtm"&gt;http://www.rememberthemilk.com/services/api/keys.rtm&lt;/a&gt; &lt;br /&gt;※ Non-commercial use (非商用利用) で利用可能&lt;/li&gt;
&lt;li&gt;.vimrc へ取得した API Key などをセット&lt;/li&gt;
&lt;li style="list-style-type: none;"&gt;
&lt;ul&gt;
&lt;li&gt;rtm_api_key: 取得した api_key 
&lt;pre class="prettyprint"&gt;let rtm_api_key='&lt;span style="color: maroon;"&gt;YOURAPIKEY&lt;/span&gt;'&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;rtm_shared_secret: 取得した shared secret 
&lt;pre class="prettyprint"&gt;let rtm_shared_secret='&lt;span style="color: maroon;"&gt;YOURSHAREDSECRET&lt;/span&gt;'&lt;/pre&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;RTM.vim のインストールと plugins への追加 &lt;br /&gt;ダウンロード URL: &lt;a href="http://bitbucket.org/Surgo/rtm.vim/src/"&gt;http://bitbucket.org/Surgo/rtm.vim/src/&lt;/a&gt; &lt;br /&gt;※ "get source" リンクからダウンロード可能&lt;/li&gt;
&lt;li&gt;API 経由でのアクセスをアクティベート &lt;br /&gt;vim を起動し、以下のコマンドを実行し、アクティベート用の URL を取得 
&lt;pre class="prettyprint"&gt;:RTM -a&lt;/pre&gt;
取得した URL にアクセス・ログインし、承認 (vim は起動したまま) 
&lt;/li&gt;
&lt;li&gt;Token を取得し、 .vimrc ファイルへセット &lt;br /&gt;以下のコマンドを実行し、Token を取得 
&lt;pre class="prettyprint"&gt;:RTM -t&lt;/pre&gt;
.vimrc へ取得した token をセット 
&lt;pre class="prettyprint"&gt;let rtm_token='&lt;span style="color: maroon;"&gt;YOURTOKEN&lt;/span&gt;'&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;利用方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;タスク追加用インタプリタの起動 
&lt;pre class="prettyprint"&gt;:RTM&lt;/pre&gt;
動作: "New Task" というメッセージに続き、タスクを入力、確定する
&lt;/li&gt;
&lt;li&gt;カレント行をタスクに追加 
&lt;pre class="prettyprint"&gt;:C[RTM] -a&lt;/pre&gt;
動作: コメントを除くカレント行をタスクとして登録 &lt;br /&gt;※ 今後、タスクの完了、編集などの機能を実装するため、カレント行の末尾に 'RTM-0000-0000-0000' 形式の ID が付与されます
&lt;/li&gt;
&lt;li&gt;カレントバッファーをタスクに追加 

&lt;pre class="prettyprint"&gt;:B[RTM] -a&lt;/pre&gt;
動作: コメントを除くカレントバッファーをタスクとして追加 (改行は空白へ置換)&lt;/li&gt;
&lt;/ul&gt;
※C[RTM] は他のコマンドと競合しないかぎり :C や :CR、:CRT、:CRTM で動作します。&lt;br /&gt;
&lt;h3&gt;注意事項&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;思いっきり Beta 以前の段階 (二重投稿バグあり・・・) で Tweet してしまい申し訳ありません&lt;/li&gt;
&lt;li&gt;実用性を (私なりに) 考え、コマンド当も変更しました&lt;/li&gt;
&lt;li&gt;キーマップは現在のところつけていません (私があまりマップしないもので・・・後回し)&lt;/li&gt;
&lt;li&gt;vim プラグイン初心者なのでバグ万歳の可能性がありますので、メール (script に記載)、&lt;a href="http://bitbucket.org/Surgo/rtm.vim/issues/" target="_blank" title="RTM.vim issues"&gt;Issue&lt;/a&gt;、&lt;a href="http://twitter.com/Surgo" target="_blank" title="Twitter - Surgo"&gt;@Surgo&lt;/a&gt; まで教えてください&lt;/li&gt;
&lt;li&gt;英語苦手なので、メッセージ系間違ってるかも&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;

TODO&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;タスクの完了、変更機能の追加&lt;/li&gt;
&lt;li&gt;"TODO .*" 行すべてをタスクへ登録機能の追加&lt;/li&gt;
&lt;li&gt;            &lt;a href="http://www.rememberthemilk.com/services/smartadd/" target="_blank" title="Remember The Milk - Smart Add"&gt;スマートアッド&lt;/a&gt;への対応 (UI 試行中)&lt;/li&gt;
&lt;li&gt;キーマップの追加&lt;/li&gt;
&lt;li&gt;その他、要望があった機能&lt;/li&gt;
&lt;/ul&gt;
最後に、pyspa 運営者の皆様ありがとうございました。参加者の皆様もお疲れ様でしたー！&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-8364431124200870077?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/c2FnjEcrfNQe3Tcc3Vbe_CCuPK4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c2FnjEcrfNQe3Tcc3Vbe_CCuPK4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/c2FnjEcrfNQe3Tcc3Vbe_CCuPK4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/c2FnjEcrfNQe3Tcc3Vbe_CCuPK4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=h4lRplNH0n8:F7-f8QzCRe4:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=h4lRplNH0n8:F7-f8QzCRe4:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/h4lRplNH0n8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/8364431124200870077/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=8364431124200870077" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/8364431124200870077?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/8364431124200870077?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/h4lRplNH0n8/rtmvim.html" title="RTM.vim" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/rtmvim.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGRX4zeCp7ImA9WxNVEEQ.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-6043451554878744607</id><published>2009-10-20T19:11:00.001+09:00</published><updated>2009-10-21T10:57:04.080+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-21T10:57:04.080+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="gui" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqt" /><title>pyqt4 の widget に マウスなイベントハンドラを追加する</title><content type="html">&lt;p&gt;qt では QLineEdit などの QWidget に デフォルトではマウスなイベントハンドラがないらしい。なので、clicked, pressed, released などを connect しても無反応です。もし、デフォルトの QWidget にマウスなイベントハンドラーを追加したい場合は、本家 ML に Widget のサブクラスを作ってフックしろとあった。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
from PyQt4 import QtCore, QtGui

class QLineEdit(QtGui.QLineEdit):
    def __init__(self, parent=None):
        QtGui.QLineEdit.__init__(self, parent)

    def mousePressEvent(self, event):
        self.emit(QtCore.SIGNAL("pressed()"))

    def mouseReleaseEvent(self, event):
        self.emit(QtCore.SIGNAL("clicked()"))
        self.emit(QtCore.SIGNAL("released()"))
&lt;/pre&gt;
 &lt;p&gt;乱暴ですが、上記のコードでデフォルトのイベントをハンドリングできます。 clicked については Press と Release を両方フックする必要があると書いてありましたけど、いつどこで押されて、何秒以内に離されたかとか厳密に制御されたい型は実装しちゃってください（笑&lt;/p&gt; &lt;p&gt;他にも Qt では、デフォルトのイベントで渡ってくる情報が少なかったりするので、サブクラスでフックしちゃってます。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-6043451554878744607?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QyrOjdMxcqs4XGDJjjZXhW4YVss/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QyrOjdMxcqs4XGDJjjZXhW4YVss/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QyrOjdMxcqs4XGDJjjZXhW4YVss/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QyrOjdMxcqs4XGDJjjZXhW4YVss/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=Lkwvg-1I2vk:1Cc5cvakpxo:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=Lkwvg-1I2vk:1Cc5cvakpxo:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/Lkwvg-1I2vk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/6043451554878744607/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=6043451554878744607" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6043451554878744607?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6043451554878744607?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/Lkwvg-1I2vk/pyqt4-widget.html" title="pyqt4 の widget に マウスなイベントハンドラを追加する" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/pyqt4-widget.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMMSH8yfyp7ImA9WxNWEEs.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-606377941196491206</id><published>2009-10-09T14:01:00.001+09:00</published><updated>2009-10-09T14:01:29.197+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-09T14:01:29.197+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pyinstaller" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="gui" /><category scheme="http://www.blogger.com/atom/ns#" term="pyqt" /><title>PyQt4 の qtdemo を PyInstaller で実行ファイル形式にする</title><content type="html">&lt;ol&gt; &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=9b2da534-3e03-4391-8a4d-074b9f2bc1bf&amp;amp;displaylang=ja" target="_blank" title="Microsoft Visual C++ 2008 再頒布可能パッケージ (x86)"&gt;vcredist&lt;/a&gt; のインストール (インストーラー) &lt;br/&gt;"C:\WINDOWS\WinSxS\x86_Microsoft.VC90.CRT_*" 配下に "msvcm90.dll", "msvcp90.dll", "msvcr90.dll" という dll が作成されている (フォルダが複数ある場合は最新のやつ) を、python path に複製する。&lt;/li&gt; &lt;li&gt;&lt;a href="http://starship.python.net/crew/mhammond/win32/" target="_blank" title="Python for Windows Extensions"&gt;pywin32&lt;/a&gt; のインストール (インストーラー)&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.riverbankcomputing.co.uk/software/pyqt/download" target="_blank" title="PyQt4 Download"&gt;PyQt4&lt;/a&gt; のインストール (インストーラー)&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.pyinstaller.org/" target="_blank" title="Welcome to PyInstaller Development website"&gt;PyInstaller&lt;/a&gt; のインストール &lt;br/&gt;これは svn から trunk をチェックアウトし、PATH に追加する &lt;br/&gt;svn co &lt;a href="http://svn.pyinstaller.org/trunk/"&gt;http://svn.pyinstaller.org/trunk/&lt;/a&gt; pyinstaller-trunk&lt;/li&gt; &lt;li&gt;PyInstaller の設定 
&lt;pre class="prittyprint"&gt;
python Configure.py
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;さくっと demo を実行ファイル形式にしてみる (なんでもいい) 
&lt;pre class="prittyprint"&gt;
cd \path\to\qtdemo\richtext\textobject
Makespec.py -F -K -w textobject.pyw
Build.py textobject.spec
&lt;/pre&gt;
 &lt;p&gt;実行するとメッセージがダーっと流れて、exe ファイルができる&lt;/p&gt; 
&lt;pre&gt;
...
...
Appending archive to EXE C:\path\to\qtdemo\richtext\textobject\dist\textobject.exe
&lt;/pre&gt;
 &lt;p&gt;実行できるよ (textobject を実行するときは files ディレクトリを作成された exe がある dist ディレクトリ配下に複製してください)&lt;/p&gt; &lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-606377941196491206?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7e0zTcArt5EePznCVJLM_8kHVzI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7e0zTcArt5EePznCVJLM_8kHVzI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7e0zTcArt5EePznCVJLM_8kHVzI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7e0zTcArt5EePznCVJLM_8kHVzI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=GKZiO36Zm-w:8szNtjkYNG0:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=GKZiO36Zm-w:8szNtjkYNG0:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/GKZiO36Zm-w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/606377941196491206/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=606377941196491206" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/606377941196491206?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/606377941196491206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/GKZiO36Zm-w/pyqt4-qtdemo-pyinstaller.html" title="PyQt4 の qtdemo を PyInstaller で実行ファイル形式にする" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/pyqt4-qtdemo-pyinstaller.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GQ386eSp7ImA9WxNXF0Q.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-6729750977512664627</id><published>2009-10-06T12:26:00.001+09:00</published><updated>2009-10-06T12:30:22.111+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-06T12:30:22.111+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="memcache" /><category scheme="http://www.blogger.com/atom/ns#" term="nginx" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>ubuntu で nginx から memcache を利用する</title><content type="html">&lt;ol&gt; &lt;li&gt;memcached, python-memcache のインストールと起動 
&lt;pre class="prettyprint"&gt;
sudo apt-get install memcached python-memcache
sudo /etc/init.d/memcached start
&lt;/pre&gt;
 &lt;p&gt;初期設定だと 11211 番ポートで起動しています。変えたい場合は /etc/memcached.conf で。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;memcached とお話してみる (telnet 編) &lt;p&gt;まずは telnet 経由でお話してみる。プロトコルについては &lt;a href="http://code.google.com/p/memcached/wiki/MemcacheBinaryProtocol"&gt;official wiki&lt;/a&gt; を見ればいいと思います。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
telnet 127.0.0.1 11211

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
&lt;/pre&gt;
 &lt;p&gt;'foo' という key で フラグ 0、無期限 (0)、 3 byte のデータ 'bar' を格納&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
set foo 0 0 3
bar
STORED
&lt;/pre&gt;
 &lt;p&gt;'foo' という key の value を取得する&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
get foo
VALUE foo 0 3
&lt;/pre&gt;
 &lt;p&gt;memcached の情報を見てみる&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
stats items
STAT items:1:number 4
STAT items:1:age 56560
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;memcached とお話してみる (python-memcache 編) &lt;p&gt;上記の一連の流れを python-memcache でやってみる。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
&amp;gt;&amp;gt;&amp;gt; import memcache
&amp;gt;&amp;gt;&amp;gt; cache = memcache.Client(['127.0.0.1:11211'])
&amp;gt;&amp;gt;&amp;gt; dir(cache)
&amp;gt;&amp;gt;&amp;gt; cache.flush_all() # いったんクリアしといた
&amp;gt;&amp;gt;&amp;gt; cache.set('foo', 'bar')
True
&amp;gt;&amp;gt;&amp;gt; cache.get('foo')
'bar'
&amp;gt;&amp;gt;&amp;gt;
&lt;/pre&gt;
&lt;/li&gt; &lt;li&gt;nginx に memcached を設定する &lt;p&gt;nginx は、まず memcache 内を url を key とした value を探しに行く。ない場合にのみ、アプリケーションサーバに問い合わせる。なので、アプリケーション側では、url を key にしたコンテンツを value として set する必要がある。その辺はまた後日。 &lt;br/&gt;まずは、nginx の conf から。前提条件として、nginx はロードバランサーとして利用することにします。今回はテストのために、 django の開発用サーバを 自マシーン内に 2 インスタンス起動ししました。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
# LBする apps サーバ郡だよ
upstream apps {
  server 127.0.0.1:8081; # python test1/manage.py runserver 0.0.0.0:8081
  server 127.0.0.1:8082; # python test2/manage.py runserver 0.0.0.0:8082
}

server {
  listen　80;
  server_name　localhost;
  # 静的コンテンツは nginx が返すよ
  location /media {
    root /var/www/nginx-default;
    access_log off;
    expires 30d;
  }
　　# http://127.0.0.1/* の処理
  location / {
    # POST リクエストだったら memcached 見ないで、そのまんま LB しちゃうよ
    if ($request_method = POST) {
      proxy_pass http://apps;
      break;
    }
    # POST 以外だったら (GET リクエストだったら) memcached に uri を key にコンテンツを探しに行くよ
    set $memcached_key "$uri";
    memcached_pass 127.0.0.1:11211;
    default_type "text/html; charset=utf-8";
    # memcached になかったら (memcached が 404 だったら /_apps を経由して LB しちゃうよ
    # error_page で LB してるってのがおもしろいな
    error_page 404 502 = /_apps$uri;
  }

  location /_apps {
    proxy_pass http://apps; # http://127.0.0.1/_apps へのアクセスはロードバランスする
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /var/www/nginx-default;
  }
  access_log  /var/log/nginx/localhost.access.log;
}
&lt;/pre&gt;
 
&lt;pre class="prettyprint"&gt;
sudo /etc/init.d/nginx restart
&lt;/pre&gt;
 &lt;p&gt;この状態で http://127.0.0.1/ を参照すると、 test1, test2 が交互に切り替わるページが表示される。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;nginx から memcached が呼ばれるかテスト &lt;p&gt;この状態だと、url を key にした value がないので、ただの LB です。テスト的に、memcached になんか入れて 表示してみる。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
&amp;gt;&amp;gt;&amp;gt; import memcache
&amp;gt;&amp;gt;&amp;gt; cache = memcache.Client(['127.0.0.1:11211'])
&amp;gt;&amp;gt;&amp;gt; cache.flush_all()
&amp;gt;&amp;gt;&amp;gt; cache.set('/foo', 'bar')
True
&amp;gt;&amp;gt;&amp;gt;
&lt;/pre&gt;
 &lt;p&gt;'/foo' という key で 'bar' を追加してみた。これで http://127.0.0.1/foo にアクセスすると "bar" と表示されますよ。nginx lb いいですよ！&lt;/p&gt; &lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-6729750977512664627?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/voCpg-GBL1hQcWZGLOsRpN22aFI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/voCpg-GBL1hQcWZGLOsRpN22aFI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/voCpg-GBL1hQcWZGLOsRpN22aFI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/voCpg-GBL1hQcWZGLOsRpN22aFI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=ta723mFimos:DzlbycELcWY:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=ta723mFimos:DzlbycELcWY:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/ta723mFimos" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/6729750977512664627/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=6729750977512664627" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6729750977512664627?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6729750977512664627?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/ta723mFimos/ubuntu-nginx-memcache.html" title="ubuntu で nginx から memcache を利用する" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/ubuntu-nginx-memcache.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEGQ3k-fSp7ImA9WxNXF0w.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-5019252099413823763</id><published>2009-10-05T12:39:00.001+09:00</published><updated>2009-10-05T13:40:22.755+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-05T13:40:22.755+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="server" /><category scheme="http://www.blogger.com/atom/ns#" term="nginx" /><category scheme="http://www.blogger.com/atom/ns#" term="ubuntu" /><title>ubuntu への nginx のインストールと load balancer としての利用</title><content type="html">&lt;ol&gt; &lt;li&gt;nginx のインストール &lt;p&gt;aptitude で リポジトリからインストールしてみる。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
sudo aptitude install nginx
sudo /etc/init.d/nginx start
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;nginx の初期設定 &lt;p&gt;ubuntu では、(apache 同様) サイト毎の conf がモジュール化されており、default のモジュールは /etc/nginx/sites-enabled/default となっている。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
sudo vi /etc/nginx/sites-enabled/default
&lt;/pre&gt;
 &lt;p&gt;私は apache2 同様、 ./sites-available/* にモジュール化したサイトの conf をつっこんでおき、 ./sites-enabled/* 内にシンボリックリンクを作成するようにしています。 nginx では、いまのところ apache2 のように a2emod などのコマンドがないため、自作しておくと便利かも(指定されたモジュールのシンボリックリンクをはるだけだけど・・・)。&lt;/p&gt; &lt;/li&gt; &lt;li&gt;ロードバランサの設定 &lt;p&gt;テストとして、google のホストをロードバランスしてみる。ubuntu の nginx.conf は ./conf.d/* を include するため、 conf.d 内に loadbalance.conf を作成する。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
sudo vi /etc/nginx/conf.d/loadbalance.conf
&lt;/pre&gt;
 &lt;p&gt;以下のように書いてみる。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
upstream httpdcluster {
   server www.google.com:80;
   server www.google.co.jp:80;
   server www.google.co.uk:80;
}

server {
   listen 8080;
   server_name localhost;
   location / {
       proxy_pass http://httpdcluster;
   }
}
&lt;/pre&gt;
 &lt;p&gt;例では、 httpdcluster と命名したサーバー郡をロードバランシングする。 これにより、 8080 番の /* を httpdcluster 郡に振り分けることができる。 &lt;br/&gt;&lt;a href="http://localhost:8080/search?q=python"&gt;http://localhost:8080/search?q=python&lt;/a&gt; などにアクセスし、更新を押し続けると、ロードバランスされます (全部表示が同じだけど、されてるはずｗ)。&lt;/p&gt; &lt;/li&gt; &lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-5019252099413823763?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/JLdUR0-FUYhEtcFl7RPIzclQTwQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JLdUR0-FUYhEtcFl7RPIzclQTwQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/JLdUR0-FUYhEtcFl7RPIzclQTwQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/JLdUR0-FUYhEtcFl7RPIzclQTwQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=Ay_-IVkJVf4:VQAmDGDbZvw:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=Ay_-IVkJVf4:VQAmDGDbZvw:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/Ay_-IVkJVf4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/5019252099413823763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=5019252099413823763" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5019252099413823763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/5019252099413823763?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/Ay_-IVkJVf4/ubuntu-nginx-load-balancer.html" title="ubuntu への nginx のインストールと load balancer としての利用" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/10/ubuntu-nginx-load-balancer.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkIDQng9eyp7ImA9WxNRFUg.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3485054126023946230</id><published>2009-09-10T13:56:00.001+09:00</published><updated>2009-09-10T13:56:13.663+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T13:56:13.663+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="life" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>new iTunes and iPod Touch / iPhone interface</title><content type="html">&lt;p&gt;ついに来ましたね。iTunes から iPod Touch / iPhone アプリケーションの配置ができるようになりました。いろんなところで要望は上がっていましたけど、それを形にできるのが apple さん！カメラ付き iPod Touch お待ちしてます (笑&lt;/p&gt; &lt;p&gt;          &lt;a href="http://lh4.ggpht.com/_prnhyeZ3SnQ/SqiG43AMHFI/AAAAAAAAFs8/vOz1ADmpwnE/newitunes.png?imgmax=800"&gt;            &lt;img src="http://lh4.ggpht.com/_prnhyeZ3SnQ/SqiG5vP1RhI/AAAAAAAAFtA/0b4_47zAvI4/zrtn_002n32a1c62e_tn.jpg?imgmax=640" style="DISPLAY: block; MARGIN-LEFT: auto; WIDTH: 600px; MARGIN-RIGHT: auto; HEIGHT: 408px; TEXT-ALIGN: center" height="408" width="600"/&gt;          &lt;/a&gt;        &lt;/p&gt; &lt;p&gt;俄然整理もしやすくなりましたし、 iPod Touch / iPhone からはめんどくさかった、アプリの移動や削除が楽すぎます。他にも genius mix で再生リストを自動生成（下の図みたいなのが出来上がりますよ）してくれたり、アカウントが一緒であれば音楽を共有できたりできるようになりました。jobs 氏も復活したようですし、今後も期待せざるを得ない！&lt;/p&gt; &lt;p&gt;          &lt;img src="http://lh6.ggpht.com/_prnhyeZ3SnQ/SqiG6ysq4bI/AAAAAAAAFtE/a44UnA_9ReU/newgeniusmix.png?imgmax=576" style="DISPLAY: block; MARGIN-LEFT: auto; WIDTH: 556px; MARGIN-RIGHT: auto; HEIGHT: 557px; TEXT-ALIGN: center" height="557" alt="newgeniusmix.png" width="556"/&gt;        &lt;/p&gt; &lt;p&gt;大事なことなので、もう一回言っておきますね。&lt;strong&gt;カメラ付き iPod Touch お待ちしてます&lt;/strong&gt; (笑&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3485054126023946230?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nYh-1g-P7hJvUx4WC8xduo94A6M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nYh-1g-P7hJvUx4WC8xduo94A6M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nYh-1g-P7hJvUx4WC8xduo94A6M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nYh-1g-P7hJvUx4WC8xduo94A6M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=HcXvaB7bs3A:lZkmw8C4EDY:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=HcXvaB7bs3A:lZkmw8C4EDY:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/HcXvaB7bs3A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3485054126023946230/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3485054126023946230" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3485054126023946230?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3485054126023946230?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/HcXvaB7bs3A/new-itunes-and-ipod-touch-iphone.html" title="new iTunes and iPod Touch / iPhone interface" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/09/new-itunes-and-ipod-touch-iphone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4HRX47cSp7ImA9WxNRFUg.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-2729181524281299531</id><published>2009-08-11T17:51:00.001+09:00</published><updated>2009-09-10T14:02:14.009+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-10T14:02:14.009+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="developper" /><category scheme="http://www.blogger.com/atom/ns#" term="trac" /><category scheme="http://www.blogger.com/atom/ns#" term="subversion" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><title>Trac with Multi SVN Repos</title><content type="html">&lt;p&gt;複数の SVN リポジトリを 1 つの Trac で管理する方法です。元ネタは &lt;a href="http://trac.edgewall.org/milestone/0.12" target="_blank" title="Milestone 0.12"&gt;2009-07-14&lt;/a&gt; に対応された &lt;a href="http://trac.edgewall.org/wiki/MultipleRepositorySupport#" target="_blank" title="Multiple Repository Support for 0.12"&gt;Multiple Repository Support for 0.12&lt;/a&gt; です。multirepos のソースコードは edgewall の &lt;a href="http://trac.edgewall.org/browser/sandbox/multirepos" target="_blank" title="root/sandbox/multirepos"&gt;sandbox&lt;/a&gt; 内に公開されています。インスコ環境は ubuntu です。私は動作環境については、mysql, mod_python を利用していますが、sqlite でも mod_wsgi でも同じように動作すると思います。また、trac と SVN のユーザは一元的に LDAP で管理します。&lt;/p&gt; &lt;h3&gt;LDAP のインストールと設定&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;LDAP のインストール (Ubuntu の場合) 
&lt;pre class="prettyprint"&gt;
sudo apt-get install slapd ldap-utils
sudo dpkg-reconfigure slapd
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;LDAP の設定とユーザの追加など &lt;br/&gt;&lt;a href="https://help.ubuntu.com/8.10/serverguide/C/openldap-server.html" target="_blank" title="OpenLDAP Server"&gt;Ubuntu の LDAP ページ&lt;/a&gt;など、各 Linux ディストリのページがオヌヌメ&lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;SVN のインストールと設定&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;SVN のインストール 
&lt;pre class="prettyprint"&gt;
sudo apt-get install subversion libapache2-svn　subversion-tools
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;SVN リポジトリの作成 (複数個ね) 
&lt;pre class="prettyprint"&gt;
sudo -u www-data svnadmin create /var/svn/repo1
sudo -u www-data svnadmin create /var/svn/repo2
sudo -u www-data svnadmin create /var/svn/repo3
sudo -u www-data svnadmin create /var/svn/repo4
sudo -u www-data svnadmin create /var/svn/repo5
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;Apache の設定と認証の LDAP 統合 
&lt;pre class="prettyprint"&gt;
sudo a2enmod dav_svn
sudo a2enmod authnz_ldap
cd /etc/apache2/mods-enabled
sudo vi dav_svn.conf
&lt;/pre&gt;
 以下のように編集します 
&lt;pre class="prettyprint"&gt;
&amp;lt;Location /svn&amp;gt;
  DAV svn
  SVNParentPath /var/svn
  SVNListParentPath on
  AuthType Basic
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://localhost:389/ou=people,dc=example,dc=com?uid"
  AuthzLDAPAuthoritative off
  Require valid-user
  # チェックアウトは誰でもできるけど、コミットだけ絞りたいときは Require valid-user を以下のようにする
  # &amp;lt;LimitExcept GET PROPFIND OPTIONS REPORT&amp;gt;
  #   Require valid-user
  # &amp;lt;/LimitExcept&amp;gt;
&amp;lt;/Location&amp;gt;
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;Apache の設定を適用する 
&lt;pre class="prettyprint"&gt;
sudo /etc/init.d/apache2 reload
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;http://localhost/svn/ とかにアクセス可能であれば正常にインストールされている。また subversion client からも同様の URL でチェックアウトできる&lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;Trac のインストールと設定&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;必要なパッケージをインストールするなどしておく (Genshiの最新版が必要です) 
&lt;pre class="prettyprint"&gt;
sudo apt-get install libapache2-mod-python python-setuptools darcs unzip wget
sudo easy_install -U "Genshi==dev"
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;svn より最新のソースコードを取得します (edgewall の svn って遅いですよね・・・) 
&lt;pre class="prettyprint"&gt;
cd /tmp/
svn co http://svn.edgewall.com/repos/trac/sandbox/multirepos
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;セットアップを実行します 
&lt;pre class="prettyprint"&gt;
sudo python setup.py install
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;ディレクトリー群の作成 
&lt;pre class="prettyprint"&gt;
sudo mkdir /var/trac /var/trac/htdigest /var/cache/egg
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;trac-env の作成 
&lt;pre class="prettyprint"&gt;
sudo -u www-data trac-admin /var/trac/sample permission add admin TRAC_ADMIN
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;trac の設定 
&lt;pre class="prettyprint"&gt;
sudo -u www-data trac-admin /var/trac/sample permission add admin TRAC_ADMIN
&lt;/pre&gt;
 以下の箇所を編集 (hg を使いたい場合はプラグインを入れて repository_type = hg にすればok。あと svn と hg を共有したいときは repo1.type = hg、 repo2.type = svn みたいに個別に設定もできる) 
&lt;pre class="prettyprint"&gt;
[trac]
repository_dir = /var/svn/repo1
repository_type = svn
[repositories]
repo1.dir = /var/svn/repo2
repo2.dir = /var/svn/repo3
repo3.dir = /var/svn/repo4
repo4.dir = /var/svn/repo5
&lt;/pre&gt;
 編集を適用 
&lt;pre class="prettyprint"&gt;
sudo trac-admin /var/trac/sample repository resync "(default)"
sudo trac-admin /var/trac/sample repository resync repo2
sudo trac-admin /var/trac/sample repository resync repo3
sudo trac-admin /var/trac/sample repository resync repo4
sudo trac-admin /var/trac/sample repository resync repo5
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;commit hook に以下を追加 
&lt;pre class="prettyprint"&gt;
sudo trac-admin /var/trac/sample changeset added "(default)" $REV
sudo trac-admin /var/trac/sample changeset added repo2 $REV
sudo trac-admin /var/trac/sample changeset added repo3 $REV
sudo trac-admin /var/trac/sample changeset added repo4 $REV
sudo trac-admin /var/trac/sample changeset added repo5 $REV
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;apache の設定 
&lt;pre class="prettyprint"&gt;
sudo vi /etc/apache2/sites-available/trac
&lt;/pre&gt;
 以下の記述を追加 
&lt;pre class="prettyprint"&gt;
 &amp;lt;Location "/trac"&amp;gt;
   SetHandler mod_python
   PythonHandler trac.web.modpython_frontend
   PythonOption TracEnvParentDir "/var/trac/"
   PythonOption TracUriRoot /trac
   SetEnv PYTHON_EGG_CACHE "/var/cache/egg"
 &amp;lt;/Location&amp;gt;
 &amp;lt;LocationMatch "/[^/]+/login"&amp;gt;
  AuthType Basic
  AuthBasicProvider ldap
  AuthLDAPURL "ldap://localhost:389/ou=people,dc=example,dc=com?uid"
  AuthzLDAPAuthoritative off
  Require valid-user
 &amp;lt;/LocationMatch&amp;gt;
&lt;/pre&gt;
 apache の設定を適用する 
&lt;pre class="prettyprint"&gt;
sudo a2enmod auth_digest
sudo a2ensite trac
sudo /etc/init.d/apache2 reload
&lt;/pre&gt;
          &lt;/li&gt; &lt;li&gt;http://localhost/trac/sample にアクセスすれば見れますよ。実際の動作させると Browse Source がこんなんになります。リポジトリがいっぱいあって Trac を使ってみたい方はぜひ。&lt;/li&gt; &lt;/ol&gt; &lt;table style="WIDTH: auto"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;                &lt;a href="http://picasaweb.google.com/lh/photo/xU4mOZ4LGgOLbj5ElH8Eww?authkey=Gv1sRgCNCOzoXugc_nwgE&amp;amp;feat=embedwebsite"&gt;                  &lt;img src="http://lh4.ggpht.com/_prnhyeZ3SnQ/SoExHAj6WTI/AAAAAAAAFsE/2OVqTjDcc1g/s800/2009-08-11-173913.png" height="401" width="650"/&gt;                &lt;/a&gt;              &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: right"&gt;送信者 &lt;a href="http://picasaweb.google.com/koseipics/Surgo?authkey=Gv1sRgCNCOzoXugc_nwgE&amp;amp;feat=embedwebsite"&gt;Surgo&lt;/a&gt;              &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-2729181524281299531?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nrm_cDobJdxSFfWRRrX-izGfS_w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nrm_cDobJdxSFfWRRrX-izGfS_w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nrm_cDobJdxSFfWRRrX-izGfS_w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nrm_cDobJdxSFfWRRrX-izGfS_w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=yJgnhjiZ87g:YqJCagzZi80:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=yJgnhjiZ87g:YqJCagzZi80:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/yJgnhjiZ87g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/2729181524281299531/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=2729181524281299531" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/2729181524281299531?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/2729181524281299531?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/yJgnhjiZ87g/trac-with-multi-svn-repos.html" title="Trac with Multi SVN Repos" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_prnhyeZ3SnQ/SoExHAj6WTI/AAAAAAAAFsE/2OVqTjDcc1g/s72-c/2009-08-11-173913.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/08/trac-with-multi-svn-repos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQERnc9fip7ImA9WxJUFEw.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-1958506245466350958</id><published>2009-07-13T00:33:00.001+09:00</published><updated>2009-07-13T00:41:47.966+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-13T00:41:47.966+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="application" /><category scheme="http://www.blogger.com/atom/ns#" term="life" /><category scheme="http://www.blogger.com/atom/ns#" term="iphone" /><title>お気に入り iPhone / iPod Touch アプリ - App Store 1st Anniversary</title><content type="html">&lt;p&gt;App Store 1 周年ですね。Happy Birthday ! この 1 年で 15,000 以上のアプリがリリースされ、10 億以上がダウンロードされたようですね。そこで、私がこの 1 年間で App Store でダウンロードしたアプリ 223個 のうち、お気に入りのアプリをご紹介したいと思います。(2009-07-11 時点)&lt;/p&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Title&lt;/th&gt; &lt;th&gt;Price&lt;/th&gt; &lt;th&gt;Category&lt;/th&gt; &lt;th&gt;Notes&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=309324235&amp;amp;mt=8" target="_blank" title="RSS Flash g"&gt;RSS Flash g&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥600&lt;/td&gt; &lt;td&gt;News&lt;/td&gt; &lt;td&gt;Google Reader と同期する RSS Reader。たまにフリーズするけど、同期速度が速く、Twitter、Delicious と連携する。Google Reader の斜め読み用に利用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284946773&amp;amp;mt=8" target="_blank" title="Byline"&gt;Byline&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥600&lt;/td&gt; &lt;td&gt;News&lt;/td&gt; &lt;td&gt;Google Reader と同期する RSS Reader。同様のアプリの中では動作が一番安定している。同期速度はちょっと遅い。Google Reader で購読しているブログのうち、デザインブログやフォトログ等を読むために利用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=309601447&amp;amp;mt=8" target="_blank" title="Read Later"&gt;Read Later&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥230&lt;/td&gt; &lt;td&gt;Buisiness&lt;/td&gt; &lt;td&gt;Delicious と連携し、ブクマしたサイトをそのまま持ち歩ける。RSS Flash g から Delicious にブクマし、それを Read Later で持ち歩くという導線。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=292504894&amp;amp;mt=8" target="_blank" title="ZumoDrive"&gt;ZumoDrive&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;Utility&lt;/td&gt; &lt;td&gt;PC 間とのファイル同期。PDF 等のドキュメント (主にチートシート系) を参照するために利用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=281796108&amp;amp;mt=8" target="_blank" title="Evernote"&gt;Evernote&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;Buisiness&lt;/td&gt; &lt;td&gt;PC間とのノートの同期。Mind-Map や Restructured-Text (仕様書系) 等を持ち歩くために利用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=299469807&amp;amp;mt=8" target="_blank" title="Milpon"&gt;Milpon&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;Buisiness&lt;/td&gt; &lt;td&gt;Remember the milk と同期する ToDo アプリ。タグ検索もできる。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=320090110&amp;amp;mt=8" target="_blank" title="FastFinga"&gt;FastFinga&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥115&lt;/td&gt; &lt;td&gt;Buisiness&lt;/td&gt; &lt;td&gt;手書きノート。さらっと書いて、メール送信して、あとで整理という導線。写真の上にメモすることもできる。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298592032&amp;amp;mt=8" target="_blank" title="産経新聞"&gt;産経新聞&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;News&lt;/td&gt; &lt;td&gt;産経新聞の紙面をそのまま閲覧。いわずと知れた神アプリ。私はRSSで読むほうが多いので、入れてるだけで使わない。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=313613344&amp;amp;mt=8" target="_blank" title="GNReader Z"&gt;GNReader Z&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥115&lt;/td&gt; &lt;td&gt;News&lt;/td&gt; &lt;td&gt;Google News の閲覧。気になる記事をクリップし、メールで送信できる。ほぼ休日に斜め読み専用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=306019558&amp;amp;mt=8" title="Diggle"&gt;Diggle&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥350&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Digg と連携。海外の人気 Tech 系記事を斜め読みするために利用。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=301520250&amp;amp;mt=8" target="_blank" title="Ustream"&gt;Ustream&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;Entertainment&lt;/td&gt; &lt;td&gt;Ustream クライアント。参加できなかった勉強会をこっそり見るために利用。検索機能を強化してほしい。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307764057&amp;amp;mt=8" target="_blank" title="ニコニコ動画"&gt;ニコニコ動画&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;Entertainment&lt;/td&gt; &lt;td&gt;ニコニコ動画クライアント。笑い疲れて寝る用ｗ&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=290948830&amp;amp;mt=8" target="_blank" title="fring"&gt;fring&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;マルチプロトコル IM クライアント。Skype、Live、Google Talk、ICQ、SIP、Yahoo、AIM、Twitter に対応している。IM 系はこれ 1 本で十分。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=304878510&amp;amp;mt=8" target="_blank" title="Skype"&gt;Skype&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Skype クライアント。使うなら fring なので、そんなに起動しない。UI が好き。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=284882215&amp;amp;mt=8" target="_blank" title="facebook"&gt;facebook&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;facebook クライアント。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289559439&amp;amp;mt=8" target="_blank"&gt;Yammer&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Yammer クライアント。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=315209567&amp;amp;mt=8" target="_blank" title="tumblr gear"&gt;tumblr gear&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Tumblr クライアント。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=298820042&amp;amp;mt=8" target="_blank" title="BB2C"&gt;BB2C&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;2ch クライアント。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=318518757&amp;amp;mt=8" target="_blank" title="Tweet Deck"&gt;Tweet Deck&lt;/a&gt;&lt;/td&gt; &lt;td&gt;無料&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Twitter クライアント。UIに優れている。動作も軽快で直感的。マルチアカウントに対応しており、タグやユーザに対応するデッキを追加することができる。&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=317777108&amp;amp;mt=8" target="_blank" title="iT witter"&gt;iT witter&lt;/a&gt;&lt;/td&gt; &lt;td&gt;¥450&lt;/td&gt; &lt;td&gt;SNS&lt;/td&gt; &lt;td&gt;Twitter クライアント。プッシュ通知機能あり。&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;ul&gt; &lt;li&gt;Google Reader は 1 万 / 日を超える記事を購読しているため。すべてのアプリを購入し、試しました。Byline から始まり、Doppler、Gazetta などなど・・・。でもやっぱり同期が遅いのと、フリーズしてしまうため、Byline と RSS flash g に落ち着きました。&lt;/li&gt; &lt;li&gt;PC とのファイル同期は Box.net や Dropbox (Web IF のみ) 等を試した結果、各デバイスでシームレスに同期可能な ZumoDrive に落ち着きました。&lt;/li&gt; &lt;li&gt;上表にはゲームを含んでいませんが、3 割ぐらいはゲームです。&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=307986363&amp;amp;mt=8" target="_blank" title="Elemental monster TD"&gt;Elemental monster TD&lt;/a&gt; (¥450)、カードゲーム系、パズルゲーム系を買っています。&lt;/li&gt; &lt;li&gt;同様に上表には含んでいませんが、4 割ぐらいは本とリファレンスです。&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=318546714&amp;amp;mt=8" target="_blank" title="色の辞典"&gt;色の辞典&lt;/a&gt; (¥350)、&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=291232656&amp;amp;mt=8" target="_blank" title="i英辞郎"&gt;i英辞郎&lt;/a&gt; (¥1000) など、サイトの作成や仕事に役立ちそうな辞書を持ち歩いています。&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;以上ですが、購入したアプリは 1 万円前後ぐらいでしょうか。だけど、この 1 万円の投資以上に効率のいいライフを送れているし、手放せないガジェットです。次の 1 年を予想するのは難しいですが、Dropbox クライアント、システムのメンテに使えるアプリとか期待してたりします。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-1958506245466350958?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/70VyeWZf5zc0qBqMLTXSFH47lzc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70VyeWZf5zc0qBqMLTXSFH47lzc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/70VyeWZf5zc0qBqMLTXSFH47lzc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/70VyeWZf5zc0qBqMLTXSFH47lzc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=HTuYiNoQ8bg:46rGrNZnWPA:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=HTuYiNoQ8bg:46rGrNZnWPA:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/HTuYiNoQ8bg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/1958506245466350958/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=1958506245466350958" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1958506245466350958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/1958506245466350958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/HTuYiNoQ8bg/iphone-ipod-touch-app-store-1st.html" title="お気に入り iPhone / iPod Touch アプリ - App Store 1st Anniversary" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/07/iphone-ipod-touch-app-store-1st.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUCSHk4eyp7ImA9WxJUEUg.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-6671903612863808170</id><published>2009-07-05T01:22:00.003+09:00</published><updated>2009-07-10T00:27:49.733+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-10T00:27:49.733+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="study" /><category scheme="http://www.blogger.com/atom/ns#" term="financial statements" /><category scheme="http://www.blogger.com/atom/ns#" term="cheat" /><title>財務諸表 (Financial Statements)</title><content type="html">&lt;p&gt;※ 業務 &amp;amp; 英語の勉強&lt;/p&gt; &lt;h3&gt;財務諸表 (Financial Statements) の種類&lt;/h3&gt; &lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th&gt;諸表名&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;損益計算書&lt;/td&gt; &lt;td&gt; &lt;p&gt;Profit and Loss Statement [P/L] &lt;br/&gt;※ Income Statement など様々&lt;/p&gt; &lt;/td&gt; &lt;td&gt;収益と費用の状態を表す&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;貸借対照表&lt;/td&gt; &lt;td&gt;Balance sheet [B/S]&lt;/td&gt; &lt;td&gt;資産、負債、純資産を表す&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;キャッシュ・フロー計算書&lt;/td&gt; &lt;td&gt;Cash flow Statement [C/S]&lt;/td&gt; &lt;td&gt;資金の増減を表す&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;株主資本等変動計算書&lt;/td&gt; &lt;td&gt;Statements of Shareholders' Equity [S/S]&lt;/td&gt; &lt;td&gt;純資産の変動状況を表す&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;h3&gt;損益計算書&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;損益計算書とは &lt;br/&gt;収益から費用を差し引いた利益を計算するためのもの &lt;br/&gt;&lt;span style="TEXT-DECORATION: underline"&gt;利益 (profit) = 収益 (revenue) - 費用 (expense)&lt;/span&gt;&lt;/li&gt; &lt;li&gt;損益計算書の構成 &lt;br/&gt;&lt;table&gt; &lt;tbody&gt; &lt;tr&gt; &lt;th&gt;記載内容&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;売上高&lt;/td&gt; &lt;td&gt;Sales&lt;/td&gt; &lt;td&gt;販売した財やサービスの金額&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;売上原価&lt;/td&gt; &lt;td&gt;Cost of Sales&lt;/td&gt; &lt;td&gt; &lt;p&gt;財やサービスを生み出すための経費 &lt;br/&gt;&lt;span style="TEXT-DECORATION: underline"&gt;期首繰越高＋当期仕入高－期末棚卸高&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;- &lt;strong&gt;売上総利益&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Gross Profit&lt;/td&gt; &lt;td&gt; &lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;= 売上高 - 売上原価&lt;/span&gt; &lt;br/&gt;※ &lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;売上高総利益率&lt;/strong&gt;[&lt;/span&gt; &lt;span style="TEXT-DECORATION: underline"&gt;粗利益率] (Shareholder Equity Ratio) = 売上総利益 / 売上高&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;販売費及び一般管理費&lt;/td&gt; &lt;td&gt;Selling and General Administrative expenses [SGA]&lt;/td&gt; &lt;td&gt; &lt;p&gt;売上原価以外の企業を運営するための経費 &lt;br/&gt;&lt;span&gt;販売費: 販売手数料、広告宣伝費など &lt;br/&gt;一般管理費: 人件費、福利厚生費、交際費、賃借料、減価償却費、雑費など&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;- &lt;strong&gt;営業利益&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Operating Profit&lt;/td&gt; &lt;td&gt;&lt;span style="TEXT-DECORATION: underline"&gt;= 売上総利益 - 販売費及び一般管理費&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;営業外収益&lt;/td&gt; &lt;td&gt;Non-operating income&lt;/td&gt; &lt;td&gt;本業以外で経常的に発生する収益 &lt;br/&gt;&lt;span&gt;受取利息、有価証券売却益、配当金、不動産賃貸収入など&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;営業外費用&lt;/td&gt; &lt;td&gt;Non-operating expense&lt;/td&gt; &lt;td&gt;本業以外で経常的に発生する経費 &lt;br/&gt;&lt;span&gt;支払利息、有価証券売却損など&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;- &lt;strong&gt;経常利益&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Ordinary Profit&lt;/td&gt; &lt;td&gt;&lt;span style="TEXT-DECORATION: none"&gt;&lt;span style="TEXT-DECORATION: underline"&gt;= 営業利益 + 営業外収益 - 営業外費用&lt;/span&gt; &lt;br/&gt;※ &lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;売上高対経常利益率&lt;/strong&gt; (Ordinary Income Ratio) = 経常利益 / 売上高&lt;/span&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;特別利益&lt;/td&gt; &lt;td&gt;Extraordinary Profit&lt;/td&gt; &lt;td&gt;経常的ではない臨時的な利益 &lt;br/&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;固定資産売却益、投資有価証券売却益、貸倒引当金戻入など&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;特別損失&lt;/td&gt; &lt;td&gt;Extraordinary Loss&lt;/td&gt; &lt;td&gt;経常的ではない臨時的な損失 &lt;br/&gt;&lt;span&gt;固定資産売却損、投資有価証券売却損、固定資産除去損、災害損失など&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;- &lt;strong&gt;税引前当期純利益&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Pre-tax Profit&lt;/td&gt; &lt;td&gt;&lt;span style="TEXT-DECORATION: underline"&gt;= 経常利益 + 特別利益 - 特別損失 &lt;br/&gt;&lt;/span&gt; ※ &lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;売上高税引前利益率&lt;/strong&gt; = 税引前利益 / 売上高&lt;/span&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;法人税等&lt;/td&gt; &lt;td&gt;Corporation Tax&lt;/td&gt; &lt;td&gt;「法人税、住民税 (Inhabitant Tax) 及び事業税 (Enterprize Tax) 等」の略&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;- &lt;strong&gt;当期純利益&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Net income&lt;/td&gt; &lt;td&gt; &lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;= 税引前当期純利益 - 法人税等&lt;/span&gt; &lt;br/&gt;※ &lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;売上高当期純利益率&lt;/strong&gt; = 当期純利益 / 売上高&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;貸借対照表&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;貸借対照表とは &lt;br/&gt;左: &lt;span style="TEXT-DECORATION: underline"&gt;借り方&lt;/span&gt; (debit) に&lt;strong&gt;資産&lt;/strong&gt;、右: &lt;span style="TEXT-DECORATION: underline"&gt;貸し方&lt;/span&gt; (credit) に&lt;strong&gt;負債&lt;/strong&gt;と&lt;strong&gt;純資産&lt;/strong&gt;[資本]を記述する &lt;br/&gt;資産 (asset) = 負債 (liability) + 純資産 (equity)&lt;/li&gt; &lt;li&gt;貸借対照表の構成 &lt;br/&gt;&lt;table&gt; &lt;thead style="WHITE-SPACE: nowrap"&gt; &lt;tr&gt; &lt;th colspan="3"&gt;借り方&lt;/th&gt; &lt;th colspan="3"&gt;貸し方&lt;/th&gt; &lt;/tr&gt; &lt;tr&gt; &lt;th style="WHITE-SPACE: nowrap"&gt;記載内容&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;th style="WHITE-SPACE: nowrap"&gt;記載内容&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td colspan="3"&gt;&lt;strong&gt;資産&lt;/strong&gt;&lt;/td&gt; &lt;td colspan="3"&gt;&lt;strong&gt;負債&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;流動資産&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Current Assets&lt;/td&gt; &lt;td&gt;1年以内に現金化、費用化ができる資産&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;流動負債&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Current Liabilities&lt;/td&gt; &lt;td&gt;1年以内に支払の期限がくる債務 &lt;br/&gt;支払手形 (Notes payable)、買掛金 (Accounts payable-trade)、短期借入金 (Short-term Debt) など&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 当座資産&lt;/td&gt; &lt;td&gt;Quick Assets&lt;/td&gt; &lt;td&gt;現金・預金 (Cash)、受取手形 (Note Receivable)、売掛金 (Accounts Receivables)、一時所有の有価証券 (Temporary Investments) など&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;固定負債&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Fixed Liabilities&lt;/td&gt; &lt;td&gt; &lt;p&gt;1年を超えて保有する負債 &lt;br/&gt;社債 (Bonds payable)、長期借入金 (Long-term debt)、退職給付引当金　（Allowance for employee retirement)、役員退職慰労引当金 (Allowance for directors'retirement benefits)、特別修繕準備金 (Special Repair Reserve) など&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 棚卸資産&lt;/td&gt; &lt;td&gt;Inventories&lt;/td&gt; &lt;td&gt;商品 (Merchandise)、製品 (Finished Goods)、仕掛品 (Work in Process)、原材料 Materials) など&lt;/td&gt; &lt;td colspan="3"&gt;&lt;strong&gt;純資産&lt;/strong&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- その他流動資産&lt;/td&gt; &lt;td&gt;Other Liquid Assets&lt;/td&gt; &lt;td&gt;短期貸付金 (Short-term Loans Receivable)、前渡金 (Advances)、仮払金 (Reimbursement) など&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;株主資本&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Shareholder's equity&lt;/td&gt; &lt;td&gt;株主に帰属する純資産&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;固定資産&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Fixed Assets&lt;/td&gt; &lt;td&gt;1年を超えて保有する資産&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 資本金&lt;/td&gt; &lt;td&gt;Paid in Capital&lt;/td&gt; &lt;td&gt;株式を発行しその払込を受けた金額のうち、資本金として繰り入れた額&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 有形固定資産&lt;/td&gt; &lt;td&gt;Tangible Fixed Assets&lt;/td&gt; &lt;td&gt;土地 (Land)、建物 (Building)、機械 (Machinery and equipment)、車両 (Automotive equipment, Delivery equipment, Vehicles)、備品(Equipment) など&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 資本剰余金&lt;/td&gt; &lt;td&gt;Capital Surplus&lt;/td&gt; &lt;td&gt;資本準備金 (Capital Reserve) とその他資本剰余金の合計 &lt;br/&gt;※ 資本準備金は株式拠出金のうち 50 % 以下&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 無形固定資産&lt;/td&gt; &lt;td&gt;Intangible Fixed Assets&lt;/td&gt; &lt;td&gt;営業権[のれん] (Goodwill)、特許権 (Patents)、著作権(Copyrights)、商標権 (Trade marks)、ソフトウェア (Software) など&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 利益準備金&lt;/td&gt; &lt;td&gt;Earned Surplus Reserve&lt;/td&gt; &lt;td&gt;利益のうち内部留保すべきとして規定された金額&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 投資その他の資産&lt;/td&gt; &lt;td&gt;Total Investments and Other Assets&lt;/td&gt; &lt;td&gt;長期前払費用 (Long-term prepaid expenses)、 &lt;br/&gt;長期貸付金 (Long-term loans receivable)、 &lt;br/&gt;長期保有の株式及び社債 (Investment stocks &amp;amp; bonds)&lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;- 自己株式&lt;/td&gt; &lt;td&gt;Treasury Stock&lt;/td&gt; &lt;td&gt;株式会社が発行した株式のうち、その会社自身で保有している株式&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;評価・換算差額等&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Valuation and Translation Adjustments&lt;/td&gt; &lt;td&gt;有価証券の評価差額金など&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;新株予約権&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Share Subscription Rights&lt;/td&gt; &lt;td&gt;新株式の発行、自己株式の提供請求・購入できる権利&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td&gt; &lt;p style="TEXT-ALIGN: center"&gt;-&lt;/p&gt; &lt;/td&gt; &lt;td style="WHITE-SPACE: nowrap"&gt;&lt;strong&gt;少数株主持分&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Minority Interests in Consolidated Subsidiaries&lt;/td&gt; &lt;td&gt;連結決算を行う際、連結親会社の持ち株比率に応じ、計算上当該親会社には帰属しない純資産&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;  &lt;br/&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;流動比率&lt;/strong&gt; = 流動資産 / 流動負債&lt;/span&gt; &lt;br/&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;当座比率&lt;/strong&gt; = 当座資産 / 流動負債&lt;/span&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;キャッシュ・フロー計算書&lt;/h3&gt; &lt;ol&gt; &lt;li&gt;キャッシュ・フロー計算書とは &lt;br/&gt;資金 (現金及び現金同等物) の増減 (収入と支出) を表す&lt;/li&gt; &lt;li&gt;キャッシュ・フロー計算書の構成 &lt;br/&gt;&lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;記載内容&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;&lt;strong&gt;営業活動&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Cash Flows from Operating Activities&lt;/td&gt; &lt;td&gt; &lt;p&gt;営業活動から得られたキャッシュフローと売上債権の増減などその計算根拠 &lt;br/&gt;「減価償却費などの非現金支出費用の加算」「棚卸資産、売掛・買掛金など営業債権債務の増減」「支払・受取利息など財務活動部分の調整」&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;strong&gt;投資活動&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Cash Flows from Investing Activities&lt;/td&gt; &lt;td&gt;投資活動から得られたキャッシュフローと設備投資及び固定資産の売却などその計算根拠 &lt;br/&gt;「有形、無形固定資産の購入や売却」「有価証券の購入や売却」&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;&lt;strong&gt;財務活動&lt;/strong&gt;&lt;/td&gt; &lt;td&gt;Cash Flows from Financing activities&lt;/td&gt; &lt;td&gt;財務活動から得られたキャッシュフローと借入や弁済などその計算根拠 &lt;br/&gt;「銀行からの借入の増減」「社債発行や償還」&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;経営分析&lt;/h3&gt; &lt;p&gt;経営分析に利用される指標&lt;/p&gt; &lt;table&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;指標&lt;/th&gt; &lt;th&gt;英語表記&lt;/th&gt; &lt;th&gt;概要&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;変動費&lt;/td&gt; &lt;td&gt;Variable Cost&lt;/td&gt; &lt;td&gt;売上には関係しなくかかる費用&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;固定費&lt;/td&gt; &lt;td&gt;Fixed Cost&lt;/td&gt; &lt;td&gt;売上に比例して増加する費用&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;損益分岐点&lt;/td&gt; &lt;td&gt;Break-Even Point [BEP]&lt;/td&gt; &lt;td&gt;&lt;span style="TEXT-DECORATION: underline"&gt;固定費 / (1 - 変動費 / 売上高)&lt;/span&gt; &lt;br/&gt;※低いほどよい&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;目標利益達成売上高&lt;/td&gt; &lt;td/&gt; &lt;td&gt;(固定費 + 目標利益) / (1 - 変動比率)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;変動費率&lt;/td&gt; &lt;td&gt;Variable Cost Ratio&lt;/td&gt; &lt;td&gt;変動費 / 売上高&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;固定比率&lt;/td&gt; &lt;td&gt;Fixed Cost Ratio&lt;/td&gt; &lt;td&gt;固定費 / 売上高&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;総資本&lt;/td&gt; &lt;td/&gt; &lt;td&gt;負債 + 純資産&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;総資本(産)利益率&lt;/td&gt; &lt;td&gt;Return On Assets [ROA]&lt;/td&gt; &lt;td&gt;利益 / 総資本 (産)&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;自己資本利益率&lt;/td&gt; &lt;td&gt;Return On Equity [ROE]&lt;/td&gt; &lt;td&gt;利益 / 自己資本&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-6671903612863808170?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2x2cszm78F_EYE5XZAts-huyynY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2x2cszm78F_EYE5XZAts-huyynY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2x2cszm78F_EYE5XZAts-huyynY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2x2cszm78F_EYE5XZAts-huyynY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=DOIIMFe3M2E:joCkEssQHPE:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=DOIIMFe3M2E:joCkEssQHPE:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/DOIIMFe3M2E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/6671903612863808170/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=6671903612863808170" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6671903612863808170?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6671903612863808170?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/DOIIMFe3M2E/financial-statements.html" title="財務諸表 (Financial Statements)" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/07/financial-statements.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkAGQnkycSp7ImA9WxJVF0g.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3659659086853659210</id><published>2009-06-27T23:37:00.002+09:00</published><updated>2009-07-05T09:45:23.799+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-05T09:45:23.799+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pyspa" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><category scheme="http://www.blogger.com/atom/ns#" term="wave" /><title>Google Wave @ pySpa</title><content type="html">pySpa こと、python 温泉 2 日目です。昨日から今日にかけて、&lt;a href="http://twitter.com/atusi" title="@atusi"&gt;@atusi&lt;/a&gt; さんと、&lt;a href="http://wave.google.com/" title="Google Wave"&gt;Google Wave&lt;/a&gt; のロボットを作ってみました。&lt;a href="https://bitbucket.org/Surgo/pyzon/" title="pyZon"&gt;pyzon&lt;/a&gt; (旧 pyAWWS) を使って、&lt;b&gt;asin:&lt;i&gt;[ASINコード]&lt;/i&gt;&lt;/b&gt; をタイトルに変換するというボットです。アカウントをお持ちの方は、&lt;a href="mailto:amzbot@appspot.com"&gt;amzbot@appspot.com&lt;/a&gt; を追加すると試すことができます。&lt;a href="http://groups.google.com/group/google-wave-api/browse_thread/thread/bf2b21a2f3277407" title="HTML in Blip"&gt;今のところ&lt;/a&gt;、html を blip に表示することはできないので、リンクもテキストになっています。&lt;br /&gt;
参考にさせていただいたサイト、およびコード&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/a2c/20090624/1245774584" title="誰も知らない夜のwaveのrobot"&gt;誰も知らない夜のwaveのrobot&lt;/a&gt; (&lt;a href="http://twitter.com/atusi" title="@atusi"&gt;@atusi&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://gihyo.jp/dev/serial/01/google-wave" title="最速！Google Wave API解説"&gt;最速！Google Wave API解説&lt;/a&gt; (&lt;a href="http://twitter.com/technohippy" title="@technohippy"&gt;@technohipy&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/apis/wave/samples/" title="Google Wave API Samples"&gt;Google Wave API Samples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
以下が実際のコードです。&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
# coding:utf-8

from waveapi import events
from waveapi import model
from waveapi import robot
from pyzon import AWSECommerceService

ROBOT_NAME = 'amzbot'
PROFILE_URL = 'http://%s.appspot.com/' % ROBOT_NAME
IMAGE_URL = PROFILE_URL + 'icon.gif'

awsecapi = AWSECommerceService(
  ACCESS_KEY_ID,
  SECRET_ACCESS_KEY,
  associate_tag = ASSOCIATE_TAG,
  locale = LOCALE
)

DEBUG = True

def get_title_from_asin(contents):
  pass
  """
  contents の中身を変換するための関数
  """

def OnBlipSubmitted(properties, context):
  # blip の取得
  blip = context.GetBlipById(properties['blipId'])
  logging.info(u'blip (%s -&amp;gt; %s' % (blip.GetWaveId(), blip.GetId()))

  # blip のテキストを取得
  contents = blip.GetDocument().GetText()

  # テキストを変換
  result = get_title_from_asin(contents)

  # blip に変換後のテキストをセット
  if result:
    blip.GetDocument().SetText(result)

if __name__ == '__main__':
  # ボットの作成
  bot = robot.Robot(
    ROBOT_NAME.capitalize(),
    '1',
    image_url=IMAGE_URL,
    profile_url=PROFILE_URL
  )

  # サブミット時のハンドリング
  bot.RegisterHandler(events.BLIP_SUBMITTED, OnBlipSubmitted)
  bot.Run(debug=DEBUG)
&lt;/pre&gt;
&lt;br /&gt;
appengine で bot 書いて wave に突っ込むというのは、すっごい楽ですね。メールやチャットでのコミュニケーションではできない、情報に付加価値をつけていくことが wave では可能となると思います。&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3659659086853659210?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/7GBHzDkvOeOufmqs-fYA5gZ1KhE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GBHzDkvOeOufmqs-fYA5gZ1KhE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/7GBHzDkvOeOufmqs-fYA5gZ1KhE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/7GBHzDkvOeOufmqs-fYA5gZ1KhE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=HvXS5TBti0k:c9DhTWEnjdg:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=HvXS5TBti0k:c9DhTWEnjdg:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/HvXS5TBti0k" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3659659086853659210/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3659659086853659210" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3659659086853659210?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3659659086853659210?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/HvXS5TBti0k/google-wave-pyspa.html" title="Google Wave @ pySpa" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/06/google-wave-pyspa.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak8NR3w5eCp7ImA9WxJXFUg.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-6812737185686661333</id><published>2009-06-09T14:11:00.000+09:00</published><updated>2009-06-09T23:48:16.220+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-09T23:48:16.220+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gdd2009" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Developper Day 2009 in Japan</title><content type="html">&lt;table style="PADDING-LEFT: 16px; FLOAT: right; PADDING-BOTTOM: 16px; WIDTH: 194px"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td style="BACKGROUND: url(http://picasaweb.google.co.jp/s/c/transparent_album_background.gif) no-repeat left center; HEIGHT: 194px; -moz-background-clip: -moz-initial; -moz-background-inline-policy: -moz-initial; -moz-background-origin: -moz-initial" align="middle"&gt;&lt;a href="http://picasaweb.google.co.jp/koseipics/GoogleDevelopperDay2009Japan?feat=embedwebsite"&gt;&lt;img src="http://lh5.ggpht.com/_prnhyeZ3SnQ/Si3tIpT6cME/AAAAAAAAEus/mqBTeduHZLo/s160-c/GoogleDevelopperDay2009Japan.jpg" style="MARGIN: 1px 0pt 0pt 4px" height="160" width="160"/&gt;&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td style="FONT-SIZE: 11px; FONT-FAMILY: arial,sans-serif; TEXT-ALIGN: center"&gt;&lt;a style="FONT-WEIGHT: bold; COLOR: #4d4d4d; TEXT-DECORATION: none" href="http://picasaweb.google.co.jp/koseipics/GoogleDevelopperDay2009Japan?feat=embedwebsite"&gt;Google Developper Day 2009 Japan&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;a href="http://twitter.com/#search?q=#gdd09"&gt;#gdd09&lt;/a&gt; @パシフィコ横浜です。html5, opensocial, android, appengine enterprise, etc...。&lt;/p&gt; &lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;HTML5 により拓かれる次世代 Web&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;あんまり良い表現が思いつかないけど、最近の buzzword は html5 な予感。昨日の wwdc で apple も html5 について触れていたけど、open なブラウザは、10年越しで メジャーバージョンアップ (?) する。google, apple, mozilla, opera 等のいわゆるモダンブラウザは順に対応するかと。ie は... "ie8 から web 標準に準拠していく" という言葉を信じるｗ&lt;/p&gt; &lt;p&gt;html5 でできるようになること。ブラウザは html5 でアプリケーションプラットフォームになる。学生時代に、C言語で座標で絵を描いていたようなことでも、現行のブラウザでは難しい。html5 では、canvas タグや video タグ等の新しいメディアタグが提供される。3d 等も browser + html + dom のみで動作する。これは、&lt;a href="http://www.youtube.com/html5" title="O3D Beach Demo"&gt;デモ&lt;/a&gt;を見た方が速い。flash, java, silverlight...とかが必要だったグラフィックスがブラウザだけでいけるというのはすごい。他にも、オフラインで動作するための、aplcash/db や、スレッド処理機能、ジオ機能も提供される。これでアプリケーションプラットフォーム完成。時代は js ですね。。。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;OpenSocial in Japan / OpenSocial Advance&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;mixi や goo 等、日本国内でも開発が盛んな opensocial。もともと sns は人と人を結びつけるものだったけど、そこに技術者が参加した。技術者が参加することで、コンテンツが増え、コンテンツが増えることでユーザが増え、ユーザーが増えることで技術者もウハウハというエコシステム。javascript, xml 等で開発。Advanced セクションではローレベルなテクニックを紹介。リクエスト数、転送量に発生するコストを削減する。私のサイトでも使っているyahoo user interface (通称: YUI) の使用や、画像は 1 つにまとめて、css のみで制御するなど。それにより、リクエスト数、転送量毎にかかるコストが 1/3 ぐらいに抑えることも可能。要らない部分は省いて、ローレベルなテクニックを使って、速く、低コストなサービスを作る。ユーザ、開発者共に win-win。safari なら inspector、firefox なら firebug + yslow 等を利用して開発。ちなみに、google の oss な &lt;a href="http://code.google.com/p/page-speed/" title="page-speed"&gt;page-speed&lt;/a&gt; なプラグインを firebug と一緒に使うとスピード計測ができる。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Google Wave&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;きたこれ。新しいコミュニケーションツール。wave = im + mail + apps (opensocial) + much more... って印象。wave -&amp;gt; wavelet -&amp;gt; blip という構成。embedding と extention という拡張。embedding は map 等外部のサービスで wave を使うというもの。 extention は wave に他のサービスを組み込むというもの。embedd の例として、orkut は wave をコミュニケーションプラットフォームとして実験的に使いはじめている。extention は robot と gadget から構成されている。 GDD 参加者には開発用のアカウントが払いだされます。&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Office Ours&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Google App Engine の管理コンソールを開発している john 氏と、lindsey 氏と対談。App Engine についての要望を聞かれたので、「容量制限あるし、zipimport 遅いし、java でいう maven 的なものを提供してほしい」と言いました。Google がリポジトリを管理してくれて、利用するライブラリーとバージョンを yaml 等に書けば、パスを通してくれる的な。そしたら、いちいち django 1.0 や pytz みたいにファイル数が多いライブラリーは、制限に引っ掛かるからといって遅い zipimport なんて使わなくてよくなる。それに、ローカルで easyinstall でインスコして、ライブラリーの同梱とか気にせずにデプロイできるしハッピー。ついでにいうとライブラリーがアップストアに並ぶ時代がくればいいとおもふｗ&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;me&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;さて、今回の gdd では思いっきり遊べるおもちゃを新たに 2 ついただいた。google wave, android 。とりあえずは wave の api を読むことにする。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-6812737185686661333?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/oPevDe8UCk9US-h5-GXKYewLjAc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oPevDe8UCk9US-h5-GXKYewLjAc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/oPevDe8UCk9US-h5-GXKYewLjAc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/oPevDe8UCk9US-h5-GXKYewLjAc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=afIrX3X-v4U:3cpqIkTSXUU:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=afIrX3X-v4U:3cpqIkTSXUU:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/afIrX3X-v4U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/6812737185686661333/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=6812737185686661333" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6812737185686661333?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/6812737185686661333?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/afIrX3X-v4U/google-developper-day-2009-in-japan.html" title="Google Developper Day 2009 in Japan" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/06/google-developper-day-2009-in-japan.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEGQ347fip7ImA9WxJQFUw.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-7101870549219907587</id><published>2009-05-28T21:10:00.001+09:00</published><updated>2009-05-28T21:10:22.006+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-28T21:10:22.006+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="developper" /><category scheme="http://www.blogger.com/atom/ns#" term="gdd2009" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Developper Day 2009 の セッション情報</title><content type="html">&lt;p&gt;GDD の セッション説明会に行ってきました。情報を公開です。&lt;/p&gt; &lt;p&gt;          &lt;strong&gt;クラウドコンピューティングがもたらす 5 つのメリット&lt;/strong&gt;        &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Google Apps（Mail, Office, Calendar, Video, Site, IM...）&lt;/li&gt; &lt;li style="list-style: none"&gt; &lt;ul&gt; &lt;li&gt;アプリ: コスト: \6,000/year&lt;/li&gt; &lt;li&gt;ランニング: グーグルが一元管理する&lt;/li&gt; &lt;li&gt;ビジネススタイル: Chrome, Android と連携。オフライン作業も可能&lt;/li&gt; &lt;li&gt;生産性: Office 製品による共同作業&lt;/li&gt; &lt;li&gt;統合: 他のSaaS製品とかと統合可能 (Salesforceなど&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;          &lt;strong&gt;Google エンタープライズ エコシステム&lt;/strong&gt;        &lt;/p&gt; &lt;ul&gt; &lt;li&gt;Google Search Appliance&lt;/li&gt; &lt;li style="list-style: none"&gt; &lt;ul&gt; &lt;li&gt;Google Enterprise Partner (GEP) が多種多様な情報のインデックス化をしてくれる&lt;/li&gt; &lt;li style="list-style: none"&gt; &lt;ul&gt; &lt;li&gt;リアルコム: ノーツデータを検索可能とする&lt;/li&gt; &lt;li&gt;印刷した紙媒体もインデックス (会社名聞き取れませんでした)&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Google Apps クラウド内に保存しているデータも検索可能&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Google Apps&lt;/li&gt; &lt;li style="list-style: none"&gt; &lt;ul&gt; &lt;li&gt;LDAP や AD と連携した SSO&lt;/li&gt; &lt;li&gt;SAML2.0 に同期可能なアプリケーションであれば同期可能&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;          &lt;strong&gt;HTML 5&lt;/strong&gt;        &lt;/p&gt; &lt;ul&gt; &lt;li&gt;ハイパーテキストというよりはアプリケーションプラットフォームになる&lt;/li&gt; &lt;li&gt;HTML本体の中の構造化ドキュメント、メディア系のタグ、フォームの新機能を詳しく紹介予定&lt;/li&gt; &lt;li&gt;ユーザーメリット、開発者メリットを紹介予定&lt;/li&gt; &lt;li&gt;2010 年にファイナライズ予定&lt;/li&gt; &lt;li&gt;Gears と HTML 5 対応ブラウザ のすみわけを聞いてみた -&amp;gt; 古いブラウザへの HTML 5 の一部機能の提供？&lt;/li&gt; &lt;li&gt;HTML 5 に対応したアプリのみの提供は不可。下位互換をプロバイダーが保障する必要がある&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;HTML 5 になると、Flash とか アプレットはいらなくなるのではという話が興味深かったです。Google IO の結果が楽しみです！&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-7101870549219907587?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/v6UpTZx5A-skSC92LBEDtGSrR60/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v6UpTZx5A-skSC92LBEDtGSrR60/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/v6UpTZx5A-skSC92LBEDtGSrR60/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/v6UpTZx5A-skSC92LBEDtGSrR60/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=JOOHq70lbC8:qav9ZVpYyWc:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=JOOHq70lbC8:qav9ZVpYyWc:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/JOOHq70lbC8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/7101870549219907587/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=7101870549219907587" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7101870549219907587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/7101870549219907587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/JOOHq70lbC8/google-developper-day-2009_28.html" title="Google Developper Day 2009 の セッション情報" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/05/google-developper-day-2009_28.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8CRX46eCp7ImA9WxJRGUQ.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-4635924422439534327</id><published>2009-05-22T21:54:00.001+09:00</published><updated>2009-05-22T21:54:24.010+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-22T21:54:24.010+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="code" /><category scheme="http://www.blogger.com/atom/ns#" term="pagination" /><category scheme="http://www.blogger.com/atom/ns#" term="php" /><title>PHP で Django の paginator 的なもの</title><content type="html">&lt;p&gt;PHPで Django 的なページング処理。&lt;a href="http://gist.github.com/116097"&gt;http://gist.github.com/116097&lt;/a&gt;。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
$page = new Page($publisher-&amp;gt;books, 10);
for($i = $page-&amp;gt;start_index(); $i &amp;lt;= $page-&amp;gt;end_index(); $i++) {
  $page-&amp;gt;number = $i;
  $books = $page-&amp;gt;get_page();
  print $publisher-&amp;gt;name;
  foreach ($books as $book) {
    print $book-&amp;gt;title;
  }
}
&lt;/pre&gt;
 &lt;p&gt;みたいな使い方。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-4635924422439534327?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/NhJBKI1CzrKPiyHGnouraBsPlvA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NhJBKI1CzrKPiyHGnouraBsPlvA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/NhJBKI1CzrKPiyHGnouraBsPlvA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/NhJBKI1CzrKPiyHGnouraBsPlvA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=CtBR1UlUEPg:ilujcaQl0JU:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=CtBR1UlUEPg:ilujcaQl0JU:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/CtBR1UlUEPg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/4635924422439534327/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=4635924422439534327" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/4635924422439534327?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/4635924422439534327?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/CtBR1UlUEPg/php-django-paginator.html" title="PHP で Django の paginator 的なもの" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/05/php-django-paginator.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGQn85fyp7ImA9WxJRF0Q.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3893337620200815784</id><published>2009-05-20T14:25:00.001+09:00</published><updated>2009-05-20T14:25:23.127+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T14:25:23.127+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pyaaws" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>pyAWWS バグ対応とか</title><content type="html">&lt;p&gt;&lt;a href="http://sekimura.vox.com/" title="Sekimura"&gt;Sekimura&lt;/a&gt; さまより、pyAWWS のパッチを送っていただきました。ありがとうございます！初歩的なバグでした・・・。送っていただいたパッチは &lt;a href="http://gist.github.com/114552" title="Patch"&gt;http://gist.github.com/114552&lt;/a&gt; です。さっそく当てたものを&lt;a href="http://bitbucket.org/Surgo/pyaaws/changeset/3e6874ba0f91/" title="pyAAWS 3e6874ba0f91"&gt;コミット&lt;/a&gt;しました。&lt;/p&gt; &lt;p&gt;バグはあんまほめられたことじゃないですけど、パッチ送ってもらうのはうれしいもんですねｗ&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3893337620200815784?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/HCLx7zpmlXPTyCxOSJvnZCPDWek/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HCLx7zpmlXPTyCxOSJvnZCPDWek/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/HCLx7zpmlXPTyCxOSJvnZCPDWek/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/HCLx7zpmlXPTyCxOSJvnZCPDWek/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=qLHRr4Ghi70:CTr5aKwxo5Q:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=qLHRr4Ghi70:CTr5aKwxo5Q:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/qLHRr4Ghi70" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3893337620200815784/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3893337620200815784" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3893337620200815784?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3893337620200815784?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/qLHRr4Ghi70/pyawws.html" title="pyAWWS バグ対応とか" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/05/pyawws.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAQXc-cCp7ImA9WxJQFUw.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3743029366259588109</id><published>2009-05-13T18:20:00.004+09:00</published><updated>2009-05-28T21:10:40.958+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-28T21:10:40.958+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="conference" /><category scheme="http://www.blogger.com/atom/ns#" term="developper" /><category scheme="http://www.blogger.com/atom/ns#" term="gdd2009" /><category scheme="http://www.blogger.com/atom/ns#" term="google" /><title>Google Developper Day 2009 について</title><content type="html">&lt;p&gt;          &lt;img src="http://lh3.ggpht.com/_prnhyeZ3SnQ/ShahEQvHf2I/AAAAAAAAEq4/Osp161slOGs/20090512202505.jpg?imgmax=288" style="DISPLAY: inline; FLOAT: right; MARGIN: 0px 0px 8px 8px; WIDTH: 250px; HEIGHT: 187px" height="187" alt="Google Office" width="250"/&gt; &lt;a href="http://code.google.com/intl/ja/events/developerday/2009/home.html" title="Google Developer Day 2009"&gt;Google Developper Day 2009&lt;/a&gt; のサポーターブログ vol.1 です。12日に事前MTGがあるとのことで参加してきました。以下、事前情報で公開されている内容です。&lt;/p&gt; &lt;p&gt;Google Developper Day 2009 について&lt;/p&gt; &lt;ul&gt; &lt;li&gt;開催日: 2009 年 6 月 9 日&lt;/li&gt; &lt;li&gt;場所: パシフィコ横浜&lt;/li&gt; &lt;li&gt;概要: Google の最新テクノロジーの紹介、デベロッパーとの交流&lt;/li&gt; &lt;li&gt;参加方法: 満席のため、締め切り終了 (紹介枠のみ) &lt;br/&gt;※ &lt;a href="http://groups.google.co.jp/group/developer_rt?hl=ja" title="Google Code ディスカッショングループ"&gt;Google Group&lt;/a&gt; 等で最新情報を取得することができます&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;以下、事前 MTG で紹介されたセッションの概要です（おそらく公開して良いと思われるｗ）。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;App Engine, Geo (Maps API), Open Social, Chrome, HTML5, Social Web等などのGoogle テクノロジー。ライトニングトーク、オープンソース、エンタープライズエコシステム、新ユーザエクスピアリアンス、新卒 Engineer のお話他。ほぼ Fix ですが、変更の可能性あり&lt;/li&gt; &lt;li&gt;今年は、Open Social のセッションの枠が拡大されています&lt;/li&gt; &lt;li&gt;スピーカーは Open Social プロバイダーの有名な会社の社長さん ("m" ではじまる) 等、非常に豪華です。楽しみです！&lt;/li&gt; &lt;li&gt;ライトニングトークには、&lt;a href="http://twitter.com/tmatsuo" title="Takashi Matsuo on Twitter"&gt;@tmatsuo&lt;/a&gt; さんも参加されます&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;以下、その他の有用な？情報です。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;当日は早く来るといいこと（Google ノベルティ的な）がある。&lt;/li&gt; &lt;li&gt;Office Hour にスピーカーとお話ができる。 &lt;br/&gt;※ Office Hour: 米国大学で使われている用語で、教授が絶対に捕まる時間らしい。Developper Day では教授ではなく、有名なスピーカーの皆様が捕まります。&lt;/li&gt; &lt;li&gt;サードパーティーがディスプレイしたりしてます。&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;以下、Hack-a-thon 情報です。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;今年から、Hack-a-thon に時間を割くため、Developper Day とは別に Hack-a-thon の時間を設けることに&lt;/li&gt; &lt;li&gt;Hack-a-thon は 6/10-11 に秋葉原でやる予定&lt;/li&gt; &lt;li style="LIST-STYLE-TYPE: none"&gt; &lt;ul&gt; &lt;li&gt;6/10: Geo API, Android (cross presentation) 定員 30&lt;/li&gt; &lt;li&gt;6/11: App Engine, Open Social (cross presentation) 定員 30&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Hack-a-thon の申し込みは別途&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;以下、私のメモ。&lt;/p&gt; &lt;ul&gt; &lt;li&gt;レポート担当セッション: HTML5, Social Web, Open Social, Open Social Advanced, Open Social Panel Discussion&lt;/li&gt; &lt;li&gt;Idea-Thon が事前にある予定&lt;/li&gt; &lt;li&gt;京都から来られてる方もいらっしゃいました&lt;/li&gt; &lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3743029366259588109?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dKrJSjTu582zDvTiH1-0xB8uGkA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dKrJSjTu582zDvTiH1-0xB8uGkA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dKrJSjTu582zDvTiH1-0xB8uGkA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dKrJSjTu582zDvTiH1-0xB8uGkA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=2xlqSbqQTAc:cC47fGfeWQg:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=2xlqSbqQTAc:cC47fGfeWQg:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/2xlqSbqQTAc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3743029366259588109/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3743029366259588109" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3743029366259588109?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3743029366259588109?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/2xlqSbqQTAc/google-developper-day-2009.html" title="Google Developper Day 2009 について" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/05/google-developper-day-2009.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEGQHkyfip7ImA9WxJREEs.&quot;"><id>tag:blogger.com,1999:blog-18400048.post-3875944368901167315</id><published>2009-05-12T02:54:00.001+09:00</published><updated>2009-05-12T02:57:01.796+09:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-12T02:57:01.796+09:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="pyaaws" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="code" /><title>pyAAWS for Product Advertising API</title><content type="html">&lt;p&gt;&lt;a href="http://bitbucket.org/Surgo/pyaaws/" target="_blank" title="ｐｙAAWS"&gt;Python library of Amazon Associates Web Service&lt;/a&gt; を &lt;a href="https://affiliate.amazon.co.jp/gp/advertising/api/detail/main.html" target="_blank" title="Product Advertising API"&gt;Product Advertising API&lt;/a&gt; に対応させました。電子署名とか・・・。追加点は新API仕様のとおりです。解説がめんどいので、diff 貼ります。&lt;/p&gt; 
&lt;pre class="prettyprint"&gt;
+import hashlib
+import hmac
+import base64

-Version = '2009-02-01'
+Version = '2009-03-31'

   def _get_url(self, kw):
-    url = 'http://%s/onca/xml?Service=%s&amp;amp;AWSAccessKeyId=%s&amp;amp;Version=%s&amp;amp;' % (
-      supported_locales[self.locale],
-      Service,
-      self.AWSAccessKeyId,
-      Version,
-    )
     if not kw:
       kw = {}
+    kw['Service'] = Service
+    kw['Version'] = Version
+    kw['AWSAccessKeyId'] = self.AccessKeyId
+    kw['Timestamp'] = datetime.datetime.utcnow().isoformat()
     if (not 'AssociateTag' in kw) or (not kw['AssociateTag'] and self.AssociateTag):
       kw['AssociateTag'] = self.AssociateTag
     if (not 'MerchantId' in kw) or (not kw['MerchantId'] and self.MerchantId):
       kw['MerchantId'] = self.MerchantId
     if (not 'Validate' in kw) or (not kw['Validate'] and Validate):
       kw['Validate'] = Validate
-    url += '&amp;amp;'.join(['%s=%s' % (k, urllib.quote(unicode(v))) \
-      for (k, v) in kw.items() if v])
-    return url
+    [kw.pop(k) for (k, v) in kw.items() if not v]
+    payload = urllib.urlencode(sorted(kw.items()))
+    urllib2.quote
+    strings = [
+      'GET',
+      supported_locales[self.locale],
+      end_point,
+      payload
+    ]
+    digest = hmac.new(
+      self.SecretAccessKey,
+      '\n'.join(strings),
+      hashlib.sha256
+    ).digest()
+    signature = base64.b64encode(digest)
+    return 'http://%(uri)s%(end_point)s?%(payload)s&amp;amp;Signature=%(signature)s' % {
+      'uri':supported_locales[self.locale],
+      'end_point':end_point,
+      'payload':payload,
+      'signature':signature,
+    }
&lt;/pre&gt;
 &lt;p&gt;詳細の diff は &lt;a href="http://bitbucket.org/Surgo/pyaaws/changeset/296251e1941f/" title="changeset 296251e1941f"&gt;bitbucket&lt;/a&gt; （なんちゅうブログやｗ） へ。ノットリファクタリング。使い方が変わったところは、Secret Access Key が必須になったところぐらいです。&lt;/p&gt; 
&lt;pre&gt;
import awws
- api = Api('[取得した Access Key Id]')
+ api = Api('[取得した Access Key Id]', '[取得した Secret Access Key]')
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/18400048-3875944368901167315?l=surgo.jp' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/prO3eP4ZcGfYwW1MMxtlZsoXJ1A/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/prO3eP4ZcGfYwW1MMxtlZsoXJ1A/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/prO3eP4ZcGfYwW1MMxtlZsoXJ1A/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/prO3eP4ZcGfYwW1MMxtlZsoXJ1A/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/surgo/posts?a=ZiZ8Y2kWouE:IwLvg-2yJsA:j5ujfbmacDE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/surgo/posts?i=ZiZ8Y2kWouE:IwLvg-2yJsA:j5ujfbmacDE" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/surgo/posts/~4/ZiZ8Y2kWouE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://surgo.jp/feeds/3875944368901167315/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=18400048&amp;postID=3875944368901167315" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3875944368901167315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/18400048/posts/default/3875944368901167315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/surgo/posts/~3/ZiZ8Y2kWouE/pyaaws-for-product-advertising-api.html" title="pyAAWS for Product Advertising API" /><author><name>Kosei Kitahara</name><uri>http://www.blogger.com/profile/15440023982376653770</uri><email>surgo.jp@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="13943147798805448469" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://surgo.jp/2009/05/pyaaws-for-product-advertising-api.html</feedburner:origLink></entry></feed>
