<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:xhtml="http://www.w3.org/1999/xhtml" version="2.0">

<channel>
	<title>おいぬま日報</title>
	
	<link>http://tech.lampetty.net/tech</link>
	<description>Apache, MySQL, Perl, Python あたり</description>
	<lastBuildDate>Sun, 05 Feb 2012 12:36:09 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/feed" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/oinume/diary" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="oinume/diary" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://superfeedr.com/hubbub" /><item>
		<title>Shellでset -e の状態を解除するにはset +e</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/444?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=shell%25e3%2581%25a7set-e-%25e3%2581%25ae%25e7%258a%25b6%25e6%2585%258b%25e3%2582%2592%25e8%25a7%25a3%25e9%2599%25a4%25e3%2581%2599%25e3%2582%258b%25e3%2581%25ab%25e3%2581%25afset-e</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/444#comments</comments>
		<pubDate>Sun, 05 Feb 2012 12:36:09 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=444</guid>
		<description>&amp;#8220;set -e&amp;#8221;: 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する &amp;#8211; RX-7乗りの適当な日々にある通り、Shellスクリプトで set -e すると実行結果が0 [...]</description>
			<content:encoded><![CDATA[<p><a title="\"set -e\": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - RX-7乗りの適当な日々" href="http://d.hatena.ne.jp/rx7/20101226/p1">&#8220;set -e&#8221;: 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する &#8211; RX-7乗りの適当な日々</a>にある通り、Shellスクリプトで set -e すると実行結果が0以外の場合、勝手にスクリプトが終了する。で、この挙動をスクリプトの途中で元に戻したい(＝エラーにしたくない)場合は以下のように set +e すればいい。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">set</span> <span style="color: #660033;">-e</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;in set -e&quot;</span>
...
<span style="color: #000000; font-weight: bold;">set</span> +e
hoge
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;in set +e&quot;</span></pre></div></div>

<p>これで hoge でコマンドが失敗してもエラーでShell自体は終了しなくなる。<br />
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6UNIX%E3%81%AE%E4%B8%96%E7%95%8C-%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9-%E3%83%96%E3%83%AA%E3%83%B3/dp/4797321946%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797321946"><img src="http://ecx.images-amazon.com/images/I/41shA4AJs9L._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E2%80%95%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6UNIX%E3%81%AE%E4%B8%96%E7%95%8C-%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9-%E3%83%96%E3%83%AA%E3%83%B3/dp/4797321946%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797321946">入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界</a></p>
	<p><em>著者／訳者：</em>ブルース ブリン</p>
	<p><em>出版社：</em>ソフトバンククリエイティブ( 2003-02 )</p>
	<p>単行本 ( 434 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/F_Li4ZXHMKRjBMLyRJNMCxl0xd8/0/da"><img src="http://feedads.g.doubleclick.net/~a/F_Li4ZXHMKRjBMLyRJNMCxl0xd8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/F_Li4ZXHMKRjBMLyRJNMCxl0xd8/1/da"><img src="http://feedads.g.doubleclick.net/~a/F_Li4ZXHMKRjBMLyRJNMCxl0xd8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/25TVbI5QBKo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/444/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/444" />
	</item>
		<item>
		<title>python-mode + auto-complete-mode + ac-pythonでPythonのコード補完</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/443?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=python-mode-auto-complete-mode-ac-python%25e3%2581%25a7python%25e3%2581%25ae%25e3%2582%25b3%25e3%2583%25bc%25e3%2583%2589%25e8%25a3%259c%25e5%25ae%258c</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/443#comments</comments>
		<pubDate>Wed, 18 Jan 2012 15:52:48 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Emacs]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=443</guid>
		<description>Pythonの補完をEmacsでシンプルに最小労力で手早く使えるようにする &amp;#8211; 牌語備忘録 &amp;#8211; pygoの通りなんですが、手っ取り早くEmacsでPythonのコード補完を実現できた。ちなみにpy [...]</description>
			<content:encoded><![CDATA[<p><a title="Pythonの補完をEmacsでシンプルに最小労力で手早く使えるようにする - 牌語備忘録 - pygo" href="http://d.hatena.ne.jp/CortYuming/20111224/p1">Pythonの補完をEmacsでシンプルに最小労力で手早く使えるようにする &#8211; 牌語備忘録 &#8211; pygo</a>の通りなんですが、手っ取り早くEmacsでPythonのコード補完を実現できた。ちなみにpython-modeでもac-pythonは問題なく動いてる。これ設定したらコード書くスピードが今までの1.5倍ぐらい速くなったっす！</p>

<p><a href="http://feedads.g.doubleclick.net/~a/BsKaKLPrSkTKKrBsQiBOdq0b4hs/0/da"><img src="http://feedads.g.doubleclick.net/~a/BsKaKLPrSkTKKrBsQiBOdq0b4hs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/BsKaKLPrSkTKKrBsQiBOdq0b4hs/1/da"><img src="http://feedads.g.doubleclick.net/~a/BsKaKLPrSkTKKrBsQiBOdq0b4hs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/ElZbhdNqqiQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/443/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/443" />
	</item>
		<item>
		<title>特定のホスト用のssh秘密鍵は ~/.ssh/config に記述しておくとラク</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/441?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e7%2589%25b9%25e5%25ae%259a%25e3%2581%25ae%25e3%2583%259b%25e3%2582%25b9%25e3%2583%2588%25e7%2594%25a8%25e3%2581%25aessh%25e7%25a7%2598%25e5%25af%2586%25e9%258d%25b5%25e3%2581%25af-sshconfig-%25e3%2581%25ab%25e8%25a8%2598%25e8%25bf%25b0%25e3%2581%2597%25e3%2581%25a6%25e3%2581%258a%25e3%2581%258f%25e3%2581%25a8</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/441#comments</comments>
		<pubDate>Sun, 15 Jan 2012 16:26:56 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=441</guid>
		<description>例えばお仕事で使っているサーバで 仕事用のサーバへのssh秘密鍵 github.comなどの個人用のssh秘密鍵 などと複数の秘密鍵を持ちたい場合がよくある。メインは1.の仕事用のサーバだとすると ~/.ssh/id_r [...]</description>
			<content:encoded><![CDATA[<p>例えばお仕事で使っているサーバで</p>
<ol>
<li>仕事用のサーバへのssh秘密鍵</li>
<li>github.comなどの個人用のssh秘密鍵</li>
</ol>
<p>などと複数の秘密鍵を持ちたい場合がよくある。メインは1.の仕事用のサーバだとすると</p>
<ul>
<li>~/.ssh/id_rsa (id_dsa) は仕事用サーバ向けの秘密鍵</li>
<li>~/.ssh/id_rsa-private を個人用の秘密鍵</li>
</ul>
<p>となることが多いのではないかと思う。</p>
<p>この場合</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> <span style="color: #660033;">-i</span> ~<span style="color: #000000; font-weight: bold;">/</span>.ssh<span style="color: #000000; font-weight: bold;">/</span>id_rsa-private yourhost</pre></div></div>

<p>などと毎回秘密鍵のファイルを指定するのはつらいので、~/.ssh/config に</p>
<pre>
Host yourhost
  IdentityFile ~/.ssh/id_rsa-private
</pre>
<p>と書いておくと、</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ssh</span> yourhost</pre></div></div>

<p>だけでいけるので便利だと思った次第です。</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80SSH-MY-UNIX-%E6%98%A5%E5%B1%B1-%E5%BE%81%E5%90%BE/dp/4756145531%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4756145531"><img src="http://ecx.images-amazon.com/images/I/41BY36VMEGL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/%E5%85%A5%E9%96%80SSH-MY-UNIX-%E6%98%A5%E5%B1%B1-%E5%BE%81%E5%90%BE/dp/4756145531%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4756145531">入門SSH (MY UNIX SERIES)</a></p>
	<p><em>著者／訳者：</em>春山 征吾</p>
	<p><em>出版社：</em>アスキー( 2004-11 )</p>
	<p>単行本 ( 206 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/tGLj3ZIwyrw9aRh19Fgz8in9PgA/0/da"><img src="http://feedads.g.doubleclick.net/~a/tGLj3ZIwyrw9aRh19Fgz8in9PgA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tGLj3ZIwyrw9aRh19Fgz8in9PgA/1/da"><img src="http://feedads.g.doubleclick.net/~a/tGLj3ZIwyrw9aRh19Fgz8in9PgA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/feNd1RG1j_k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/441/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/441" />
	</item>
		<item>
		<title>Sphinxで複数のman pageを生成する</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/437?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sphinx%25e3%2581%25a7%25e8%25a4%2587%25e6%2595%25b0%25e3%2581%25aeman-page%25e3%2582%2592%25e7%2594%259f%25e6%2588%2590%25e3%2581%2599%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/437#comments</comments>
		<pubDate>Fri, 06 Jan 2012 21:23:40 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Sphinx]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=437</guid>
		<description>前置き つい最近tomahawkのドキュメントをGithub WikiからSphinxに移行したのでそのメモ。SphinxにはHTMLを生成する以外にもman pageを生成する機能があって $ make man を実行 [...]</description>
			<content:encoded><![CDATA[<h3>前置き</h3>
<p>つい最近<a href="https://github.com/oinume/tomahawk">tomahawk</a>のドキュメントをGithub Wikiから<a href="http://sphinx.pocoo.org/">Sphinx</a>に移行したのでそのメモ。SphinxにはHTMLを生成する以外にもman pageを生成する機能があって</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">make</span> <span style="color: #c20cb9; font-weight: bold;">man</span></pre></div></div>

<p>を実行すると _build/man/ 配下に mycommand.1 みたいな感じでman pageが生成される。</p>
<p>でで、tomahawkの場合は tomahawk, tomahawk-rsync という２つの実行ファイルがあるので、この2つのman pageを生成したくて、tomahawk.rst, tomahawk-rsync.rst ファイルを作ってみたけど、デフォルトでは tomahawk.1 に全部入りのman pageができるだけで「独立したrstファイルから個別のman page生成するのってどうやるんだろう？」となっていた。</p>
<h3>複数のman pageを生成する方法</h3>
<p>結論としては、Sphinxのconf.pyに man_pages という設定があるので、これを下記のように man pageの数だけ用意してあげれば良かった。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">authors = <span style="color: black;">&#40;</span><span style="color: #483d8b;">'Kazuhiro Oinuma'</span><span style="color: black;">&#41;</span>
man_pages = <span style="color: black;">&#91;</span>
    <span style="color: black;">&#40;</span><span style="color: #483d8b;">'index'</span>, <span style="color: #483d8b;">'tomahawk-all'</span>, <span style="color: #483d8b;">'tomahawk manual'</span>, authors, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>,
    <span style="color: black;">&#40;</span><span style="color: #483d8b;">'tomahawk'</span>, <span style="color: #483d8b;">'tomahawk'</span>, <span style="color: #483d8b;">'enables to execute a command to many hosts'</span>, authors, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>,
    <span style="color: black;">&#40;</span><span style="color: #483d8b;">'tomahawk-rsync'</span>, <span style="color: #483d8b;">'tomahawk-rsync'</span>, <span style="color: #483d8b;">'enables to copy files to many hosts'</span>, authors, <span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>,
<span style="color: black;">&#93;</span></pre></div></div>

<p>それぞれのタプルは順に</p>
<ul>
<li>source start file &#8211; manページの”ルート”となるドキュメントの名前です。このファイルから参照されたすべてのドキュメントはLaTeXファイルの中のTOCツリーにも含まれるようになります。もしも1つのファイルをマスターにしたmanページにしたい場合には、 master_doc で設定した値をここに指定して下さい。</li>
<li>name &#8211; manページの名前です。これには、スペースや特別な文字を含まない、短い文字列を指定します。この項目は出力ファイル名と、manページの名前(NAMEセクション内)として使用されます。</li>
<li>description &#8211; manページの説明です。これはNAMEセクション内で使用されます。</li>
<li>authors &#8211; 著者名の文字列のリスト、もしくは単一の文字列です。manページのAUTHORSセクションを自動的に生成したくない場合には、空の文字列や空の配列を指定することもできます。</li>
<li>section &#8211; manページのセクションです。出力ファイル名や、manページのヘッダー内で使われます。</li>
</ul>
<p>ということらしい。このように複数のman pageを生成するやり方はSphinxのドキュメントにも書いてなかったので、Sphinx自体のドキュメントのソースを見てみたらビンゴだった。</p>
<h3>なんでSphinxを使うのか</h3>
<p>mkouheiさんにtomahawkのDebianパッケージを作ってもらっている時に「コマンドにはman pageが必要」といわれたので、どうせならHTMLもmanも生成できるSphinxに移行してみたというのが理由。最初はreStructuredTextのフォーマットを覚えるに苦労したけど、これさえ覚えれば色んなフォーマットに出力できるのでいい投資かなぁと思う。</p>
<p>あと、<a href="http://readthedocs.org/">Read The Docs</a>というサービスを使えば、Git/Mercurial/Bzr/SVNで管理しているファイルから自動的にSphinxでHTML生成して readthedocs.org から見れるようになるので非常に便利れす(ReadTheDocsについて詳しくは<a href="http://d.hatena.ne.jp/ymotongpoo/20110627/1309181077">ここ</a>)。</p>
<p>というわけでソフトウェアのドキュメントにはSphinxがおすすめです！</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Git%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%B2%A9%E6%9D%BE-%E4%BF%A1%E6%B4%8B/dp/4274068641%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274068641"><img src="http://ecx.images-amazon.com/images/I/51WQ7GsnOZL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Git%E3%81%AB%E3%82%88%E3%82%8B%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E7%AE%A1%E7%90%86-%E5%B2%A9%E6%9D%BE-%E4%BF%A1%E6%B4%8B/dp/4274068641%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4274068641">Gitによるバージョン管理</a></p>
	<p><em>著者／訳者：</em>岩松 信洋 上川 純一 まえだこうへい 小川 伸一郎 </p>
	<p><em>出版社：</em>オーム社( 2011-10-25 )</p>
	<p>単行本（ソフトカバー） ( 320 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/CKGFzkMRFxIyV5z_IitdzyLzr7g/0/da"><img src="http://feedads.g.doubleclick.net/~a/CKGFzkMRFxIyV5z_IitdzyLzr7g/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CKGFzkMRFxIyV5z_IitdzyLzr7g/1/da"><img src="http://feedads.g.doubleclick.net/~a/CKGFzkMRFxIyV5z_IitdzyLzr7g/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/LwZ59fvKj8U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/437/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/437" />
	</item>
		<item>
		<title>rlwrapを使ってmysqlコマンドのプロンプトに色をつける</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/434?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rlwrap%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6mysql%25e3%2582%25b3%25e3%2583%259e%25e3%2583%25b3%25e3%2583%2589%25e3%2581%25ae%25e3%2583%2597%25e3%2583%25ad%25e3%2583%25b3%25e3%2583%2597%25e3%2583%2588%25e3%2581%25ab%25e8%2589%25b2%25e3%2582%2592%25e3%2581%25a4%25e3%2581%2591%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/434#comments</comments>
		<pubDate>Sat, 10 Dec 2011 23:24:43 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=434</guid>
		<description>どうもこんにちは。北海道に旅行中でこの記事は札幌のホテルから書いている oinume です。MySQL Casual Advent Calendarも11日目になりました。「MySQL Casualが全然カジュアルじゃな [...]</description>
			<content:encoded><![CDATA[<p>どうもこんにちは。北海道に旅行中でこの記事は札幌のホテルから書いている <a href="http://twitter.com/#!/oinume">oinume</a> です。<a href="http://atnd.org/events/22528">MySQL Casual Advent Calendar</a>も11日目になりました。「MySQL Casualが全然カジュアルじゃない！」という意見をよく耳にするので、今日はウルトラカジュアルなエントリーを書こうと思います。</p>
<h3>はじめに</h3>
<p>MySQLを使って開発をしていると、本番と開発用サーバの見分けがつかずに、間違って本番で重いクエリを発行しちゃったりします。そういうオペミスを少しでも防ぐために「本番環境ではmysqlコマンドのプロンプトの色を変える」という技を紹介したいと思います。</p>
<h3>rlwrap</h3>
<p>紹介といってもやり方は非常に簡単で、下記のように <a href="http://utopia.knoware.nl/~hlub/rlwrap/rlwrap.html">rlwrap</a> というコマンドを使って mysql コマンドを実行します。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">rlwrap <span style="color: #660033;">-a</span> <span style="color: #660033;">-pRED</span> mysql <span style="color: #660033;">-uroot</span></pre></div></div>

<p>するとあら不思議！MySQLのプロンプトが下記のように赤くなりました！</p>
<p><a class="" rel="lightbox" title="pydoc -g" href="http://www.flickr.com/photos/8250493@N05/6486939925/"><img src="http://farm8.staticflickr.com/7030/6486939925_7ffb187781.jpg" alt="rlwrapでmysqlプロンプトに色をつけてみる"></a></p>
<p>というわけで、rlwrapがインストールされているマシンであれば、下記のように .bashrc 的なファイルに書いておくことでmysqlのプロンプトを常に赤くすることができてオペミスも減らせますね！</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #660033;">-x</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>bin<span style="color: #000000; font-weight: bold;">/</span>rlwrap <span style="color: #7a0874; font-weight: bold;">&#93;</span>; <span style="color: #000000; font-weight: bold;">then</span>
    <span style="color: #7a0874; font-weight: bold;">alias</span> <span style="color: #007800;">mysql</span>=<span style="color: #ff0000;">'/usr/bin/rlwrap -a -pRED mysql'</span>
<span style="color: #000000; font-weight: bold;">fi</span></pre></div></div>

<p>ちなみに rlwrap は Debian(Ubuntu) であれば apt でインストールできます。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">aptitude</span> <span style="color: #c20cb9; font-weight: bold;">install</span> rlwrap</pre></div></div>

<p>CentOSの場合はepelリポジトリが追加されていれば yum でインストールできます。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sudo</span> yum <span style="color: #c20cb9; font-weight: bold;">install</span> rlwrap</pre></div></div>

<h3>さいごに</h3>
<p>このウルトラカジュアルっぷりいかがでしたでしょうか。Advent Calendar 12日目は <a href="http://twitter.com/#!/ikasam_a">ikasam_a</a> さんです。よろしくお願いします！</p>

<p><a href="http://feedads.g.doubleclick.net/~a/MKSvwyeTQHqMDFcTn4WfKsb5_NU/0/da"><img src="http://feedads.g.doubleclick.net/~a/MKSvwyeTQHqMDFcTn4WfKsb5_NU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/MKSvwyeTQHqMDFcTn4WfKsb5_NU/1/da"><img src="http://feedads.g.doubleclick.net/~a/MKSvwyeTQHqMDFcTn4WfKsb5_NU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/_lv0n2xOPVU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/434/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/434" />
	</item>
		<item>
		<title>Pythonでモジュール内のクラスを抽出する</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/433?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=python%25e3%2581%25a7%25e3%2583%25a2%25e3%2582%25b8%25e3%2583%25a5%25e3%2583%25bc%25e3%2583%25ab%25e5%2586%2585%25e3%2581%25ae%25e3%2582%25af%25e3%2583%25a9%25e3%2582%25b9%25e3%2582%2592%25e6%258a%25bd%25e5%2587%25ba%25e3%2581%2599%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/433#comments</comments>
		<pubDate>Sat, 26 Nov 2011 00:15:45 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=433</guid>
		<description>inspectを使えば簡単にできる。 class MyClass&amp;#40;object&amp;#41;: pass &amp;#160; def func&amp;#40;&amp;#41;: pass な感じのmymodule.py があるとして  [...]</description>
			<content:encoded><![CDATA[<p><a href="http://docs.python.org/library/inspect.html">inspect</a>を使えば簡単にできる。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">class</span> MyClass<span style="color: black;">&#40;</span><span style="color: #008000;">object</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> func<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">pass</span></pre></div></div>

<p>な感じのmymodule.py があるとして</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">inspect</span>
<span style="color: #ff7700;font-weight:bold;">import</span> mymodule
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> name, member <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">inspect</span>.<span style="color: black;">getmembers</span><span style="color: black;">&#40;</span>mymodule<span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">inspect</span>.<span style="color: black;">isclass</span><span style="color: black;">&#40;</span>member<span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;%s is class.&quot;</span> <span style="color: #66cc66;">%</span> name</pre></div></div>

<p>みたいにやれば mymodule からクラスだけ抜き出せる。</p>
<p><a href="http://docs.python.org/library/inspect.html">inspect</a>というモジュールはリンク先のマニュアルをざっと見てもらえばわかるように、モジュールやクラスや関数のメタ情報を色々取れるので超絶便利である。これは本当にすごい。</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Tarek-Ziade/dp/4048686291%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048686291"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Tarek-Ziade/dp/4048686291%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048686291">エキスパートPythonプログラミング</a></p>
	<p><em>著者／訳者：</em>Tarek Ziade</p>
	<p><em>出版社：</em>アスキー・メディアワークス( 2010-05-28 )</p>
	<p>大型本 ( 416 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/bz_FDSvgLrg4ClcR9zqE7ggOiPw/0/da"><img src="http://feedads.g.doubleclick.net/~a/bz_FDSvgLrg4ClcR9zqE7ggOiPw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/bz_FDSvgLrg4ClcR9zqE7ggOiPw/1/da"><img src="http://feedads.g.doubleclick.net/~a/bz_FDSvgLrg4ClcR9zqE7ggOiPw/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/X8Qy3TSQb9g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/433/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/433" />
	</item>
		<item>
		<title>uWSGI+virtualenv+Flask</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/430?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=uwsgi%25e3%2582%2592virtualenv%25e3%2581%25aa%25e7%2592%25b0%25e5%25a2%2583%25e3%2581%25a7%25e5%258b%2595%25e3%2581%258b%25e3%2581%2599</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/430#comments</comments>
		<pubDate>Sat, 19 Nov 2011 11:11:17 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[uWSGI]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=430</guid>
		<description>Pythonで今一番熱そうなWSGIコンテナのuWSGIというものをインストールしてみたんだけど、virtualenvと組み合わせた時にちょっとはまったのでメモ。 前提 Pythonは2.6 virtualenv(wra [...]</description>
			<content:encoded><![CDATA[<p>Pythonで今一番熱そうなWSGIコンテナの<a href="http://projects.unbit.it/uwsgi/">uWSGI</a>というものをインストールしてみたんだけど、<a href="http://www.virtualenv.org/en/latest/index.html">virtualenv</a>と組み合わせた時にちょっとはまったのでメモ。</p>
<h3>前提</h3>
<ul>
<li>Pythonは2.6</li>
<li>virtualenv(wrapper)を使って /usr/local/virtualenvs 配下に flask という環境を作っている</li>
<li>flask には Flask や Jinja2 などアプリの実行に必要なものがインストールされている</li>
<li>実行するアプリは /var/www/wiki-converter にディプロイされている(<a href="https://github.com/oinume/wiki-converter">wiki-converterのソース</a>)</li>
</ul>
<h3>uWSGIのインストール</h3>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ workon flask
$ pip <span style="color: #c20cb9; font-weight: bold;">install</span> uwsgi</pre></div></div>

<p>でいける。</p>
<h3>uWSGIの起動</h3>
<p>まずは本格的なアプリを起動する前に<a href="http://projects.unbit.it/uwsgi/wiki/Quickstart">Quickstart</a>に書いてあるhello world的なものを試しみる。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># /var/www/hello.py</span>
<span style="color: #ff7700;font-weight:bold;">def</span> application<span style="color: black;">&#40;</span>env, start_response<span style="color: black;">&#41;</span>:
    start_response<span style="color: black;">&#40;</span><span style="color: #483d8b;">'200 OK'</span>, <span style="color: black;">&#91;</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Content-Type'</span>,<span style="color: #483d8b;">'text/html'</span><span style="color: black;">&#41;</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #483d8b;">&quot;Hello World&quot;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ uwsgi <span style="color: #660033;">--http</span> :<span style="color: #000000;">9090</span> <span style="color: #660033;">--wsgi-file</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>hello.py</pre></div></div>

<p>これでブラウザから http://&lt;host&gt;:9090/ にアクセスして&#8221;Hello World&#8221;が表示されればうまくいっている。</p>
<p>次はFlaskアプリで試してみる。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ uwsgi <span style="color: #660033;">--http</span> :<span style="color: #000000;">9090</span> <span style="color: #660033;">-H</span> <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>virtualenvs<span style="color: #000000; font-weight: bold;">/</span>flask <span style="color: #660033;">--python-path</span> <span style="color: #000000; font-weight: bold;">/</span>var<span style="color: #000000; font-weight: bold;">/</span>www<span style="color: #000000; font-weight: bold;">/</span>wiki-converter <span style="color: #660033;">-w</span> wiki_converter:app</pre></div></div>

<p>で起動できる。</p>
<ul>
<li>-H でvirtualenv な環境のディレクトリを指定</li>
<li>&#8211;python-pathにアプリがあるディレクトリを指定</li>
</ul>
<p>しているのがミソ。-Hがない場合 flask が見つからなくて<br />
<bq><br />
ImportError: No module named flask<br />
unable to load app mountpoint=<br />
</bq><br />
というエラーが出てuwsgiがうまく起動できないので注意！</p>
<p>なお、uWSGIはnginxと組み合わせてよく使われるらしい。nginxとの組み合わせについては<a href="http://taichino.com/engineer-life/linux/2170">CentOSでnginx + uwsgi + Djangoを試してみた « taichino.com:</a>が詳しい。</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9HTTP%E3%82%B5%E3%83%BC%E3%83%90-Nginx%E5%85%A5%E9%96%80-Clement-Nedelcu/dp/4048702270%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048702270"><img src="http://ecx.images-amazon.com/images/I/51xpswg%2BkkL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9HTTP%E3%82%B5%E3%83%BC%E3%83%90-Nginx%E5%85%A5%E9%96%80-Clement-Nedelcu/dp/4048702270%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048702270">ハイパフォーマンスHTTPサーバ Nginx入門</a></p>
	<p><em>著者／訳者：</em>Clement Nedelcu</p>
	<p><em>出版社：</em>アスキー・メディアワークス( 2011-04-21 )</p>
	<p>大型本 ( 280 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/w_lGZslgJA5MBTGsesPZ9gHVYac/0/da"><img src="http://feedads.g.doubleclick.net/~a/w_lGZslgJA5MBTGsesPZ9gHVYac/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/w_lGZslgJA5MBTGsesPZ9gHVYac/1/da"><img src="http://feedads.g.doubleclick.net/~a/w_lGZslgJA5MBTGsesPZ9gHVYac/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/LXRLZyyOzh0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/430/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/430" />
	</item>
		<item>
		<title>pydoc -g でモジュールのドキュメントが読める</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/428?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=pydoc-g-%25e3%2581%25a7%25e3%2583%25a2%25e3%2582%25b8%25e3%2583%25a5%25e3%2583%25bc%25e3%2583%25ab%25e3%2581%25ae%25e3%2583%2589%25e3%2582%25ad%25e3%2583%25a5%25e3%2583%25a1%25e3%2583%25b3%25e3%2583%2588%25e3%2581%258c%25e8%25aa%25ad%25e3%2582%2581%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/428#comments</comments>
		<pubDate>Fri, 14 Oct 2011 17:28:00 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=428</guid>
		<description>Shellで $ pydoc -g ってやったら↓のようなダイアログが出てきて &amp;#8220;open browser&amp;#8221; クリックしたら、ブラウザで標準モジュールやインストールされているモジュールのドキュメン [...]</description>
			<content:encoded><![CDATA[<p>Shellで</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ pydoc <span style="color: #660033;">-g</span></pre></div></div>

<p>ってやったら↓のようなダイアログが出てきて</p>
<p><a class="" rel="lightbox" title="pydoc -g" href="http://www.flickr.com/photos/8250493@N05/6243690687/"><img src="http://farm7.static.flickr.com/6180/6243690687_ff345a423f.jpg" alt="pydoc -g"></a></p>
<p>&#8220;open browser&#8221; クリックしたら、ブラウザで標準モジュールやインストールされているモジュールのドキュメントが読めましたとさ。Pythonすげー。</p>
<p><a class="" rel="lightbox" title="pydoc -g でモジュールのドキュメントが読める" href="http://www.flickr.com/photos/8250493@N05/6243690791/"><img src="http://farm7.static.flickr.com/6177/6243690791_11ebc31d8a_b.jpg" alt="pydoc -g でモジュールのドキュメントが読める"></a></p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761"><img src="http://ecx.images-amazon.com/images/I/41XWUXpgeuL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761">Python クックブック 第2版</a></p>
	<p><em>著者／訳者：</em>Alex Martelli Anna Martelli Ravenscroft David Ascher </p>
	<p><em>出版社：</em>オライリー・ジャパン( 2007-06-26 )</p>
	<p>大型本 ( 652 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/iVvE5oLvb2ucl-9KUOGH-BCwfpY/0/da"><img src="http://feedads.g.doubleclick.net/~a/iVvE5oLvb2ucl-9KUOGH-BCwfpY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/iVvE5oLvb2ucl-9KUOGH-BCwfpY/1/da"><img src="http://feedads.g.doubleclick.net/~a/iVvE5oLvb2ucl-9KUOGH-BCwfpY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/OtmwgyQLuiY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/428/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/428" />
	</item>
		<item>
		<title>SQLAlchemyでMySQL独自のDDL方言を使う</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/427?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=sqlalchemy%25e3%2581%25a7mysql%25e7%258b%25ac%25e8%2587%25aa%25e3%2581%25aeddl%25e6%2596%25b9%25e8%25a8%2580%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%2586</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/427#comments</comments>
		<pubDate>Wed, 14 Sep 2011 14:17:43 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[SQLAlchemy]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=427</guid>
		<description>例えばDDLでBIGINT使いたい場合は下記のように sqlalchemy.dialects.mysql から import する。 あと engine = InnoDB したい場合は __table_args__ を使 [...]</description>
			<content:encoded><![CDATA[<p>例えばDDLでBIGINT使いたい場合は下記のように sqlalchemy.dialects.mysql から import する。<br />
あと engine = InnoDB したい場合は __table_args__ を使うらしい。詳細は<a href="http://www.sqlalchemy.org/docs/dialects/mysql.html">SQLAlchemyのドキュメント</a>を参照。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> sqlalchemy <span style="color: #ff7700;font-weight:bold;">import</span> Column, Unicode
<span style="color: #ff7700;font-weight:bold;">from</span> sqlalchemy.<span style="color: black;">dialects</span>.<span style="color: black;">mysql</span> <span style="color: #ff7700;font-weight:bold;">import</span> BIGINT
<span style="color: #ff7700;font-weight:bold;">from</span> sqlalchemy.<span style="color: black;">ext</span>.<span style="color: black;">declarative</span> <span style="color: #ff7700;font-weight:bold;">import</span> declarative_base
&nbsp;
Base = declarative_base<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">class</span> User<span style="color: black;">&#40;</span>Base<span style="color: black;">&#41;</span>:
    __tablename__ = <span style="color: #483d8b;">'user'</span>
    __table_args__ = <span style="color: black;">&#123;</span> <span style="color: #483d8b;">'mysql_engine'</span>:<span style="color: #483d8b;">'InnoDB'</span> <span style="color: black;">&#125;</span>
    <span style="color: #008000;">id</span> = Column<span style="color: black;">&#40;</span>BIGINT, primary_key = <span style="color: #008000;">True</span>, server_default = <span style="color: #483d8b;">'0'</span><span style="color: black;">&#41;</span>
    name = Column<span style="color: black;">&#40;</span>Unicode<span style="color: black;">&#40;</span><span style="color: #ff4500;">255</span><span style="color: black;">&#41;</span>, nullable = <span style="color: #008000;">False</span><span style="color: black;">&#41;</span></pre></div></div>

<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761"><img src="http://ecx.images-amazon.com/images/I/41XWUXpgeuL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761">Python クックブック 第2版</a></p>
	<p><em>著者／訳者：</em>Alex Martelli Anna Martelli Ravenscroft David Ascher </p>
	<p><em>出版社：</em>オライリー・ジャパン( 2007-06-26 )</p>
	<p>大型本 ( 652 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/4OOimRPFYSd7GhnsVa5_icqeA-c/0/da"><img src="http://feedads.g.doubleclick.net/~a/4OOimRPFYSd7GhnsVa5_icqeA-c/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4OOimRPFYSd7GhnsVa5_icqeA-c/1/da"><img src="http://feedads.g.doubleclick.net/~a/4OOimRPFYSd7GhnsVa5_icqeA-c/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/DAggmWvdrGM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/427/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/427" />
	</item>
		<item>
		<title>Flask + python-oauth2 + python-twitterでTwitter APIを叩く</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/426?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=flask-oauth2-python-twitter%25e3%2581%25a7twitter-api%25e3%2582%2592%25e5%258f%25a9%25e3%2581%258f</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/426#comments</comments>
		<pubDate>Sat, 10 Sep 2011 16:02:16 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=426</guid>
		<description>いろいろ面倒だった。</description>
			<content:encoded><![CDATA[<p>いろいろ面倒だった。<br />
<script src="https://gist.github.com/1208466.js"></script></p>

<p><a href="http://feedads.g.doubleclick.net/~a/x0AvJEddjk-0k6CA_2ijZjTBpiA/0/da"><img src="http://feedads.g.doubleclick.net/~a/x0AvJEddjk-0k6CA_2ijZjTBpiA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/x0AvJEddjk-0k6CA_2ijZjTBpiA/1/da"><img src="http://feedads.g.doubleclick.net/~a/x0AvJEddjk-0k6CA_2ijZjTBpiA/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/a6h6oaBzXbs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/426/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/426" />
	</item>
		<item>
		<title>JavaのString.format()とStringBuilder#append()の文字列結合速度比較</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/425?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=java%25e3%2581%25aestring-format%25e3%2581%25a8stringbuilderappend%25e3%2581%25ae%25e6%2596%2587%25e5%25ad%2597%25e5%2588%2597%25e7%25b5%2590%25e5%2590%2588%25e9%2580%259f%25e5%25ba%25a6%25e6%25af%2594%25e8%25bc%2583</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/425#comments</comments>
		<pubDate>Sun, 04 Sep 2011 13:48:43 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=425</guid>
		<description>Javaで文字列を結合するときは一般的にはStringBuilderを使うけど、個人的には結合後の文字列がより直感的になるString.format() が好き。ただ、ソースを見ると明らかにString.format() [...]</description>
			<content:encoded><![CDATA[<p>Javaで文字列を結合するときは一般的にはStringBuilderを使うけど、個人的には結合後の文字列がより直感的になるString.format() が好き。ただ、ソースを見ると明らかにString.format()は遅そうなのでベンチを取ってみた。</p>
<p><script src="https://gist.github.com/1192865.js?file=gistfile1.java"></script></p>
<p>1万回ループを実行した場合の結果は</p>
<ul>
<li>StringBuilder: 76 ms</li>
<li>String.format: 615 ms</li>
</ul>
<p>となってStringBuilderの方が圧倒的に速い。個人的にはLL慣れしているのもあってString.format()の方が圧倒的に見やすくて好きなんだけど、スピードが要求されるときはやっぱりStringBuilder使わないと駄目だと思った次第。</p>
<p>ちなみに測定環境は下記。</p>
<ul>
<li>CPU: Intel Core i5 2.3Ghz Macbook Pro</li>
<li>OS: Mac OSX SnowLeopard</li>
<li>Java: java version &#8220;1.6.0_26&#8243;, Java(TM) SE Runtime Environment (build 1.6.0_26-b03-384-10M3425), Java HotSpot(TM) 64-Bit Server VM (build 20.1-b02-384, mixed mode)</li>
</ul>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Java%E4%B8%A6%E8%A1%8C%E5%87%A6%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95%E3%81%9D%E3%81%AE%E3%80%8C%E5%9F%BA%E7%9B%A4%E3%80%8D%E3%81%A8%E3%80%8C%E6%9C%80%E6%96%B0API%E3%80%8D%E3%82%92%E7%A9%B6%E3%82%81%E3%82%8B%E2%80%95-Brian-Goetz/dp/4797337206%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797337206"><img src="http://ecx.images-amazon.com/images/I/511lSU4bcXL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Java%E4%B8%A6%E8%A1%8C%E5%87%A6%E7%90%86%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95%E3%81%9D%E3%81%AE%E3%80%8C%E5%9F%BA%E7%9B%A4%E3%80%8D%E3%81%A8%E3%80%8C%E6%9C%80%E6%96%B0API%E3%80%8D%E3%82%92%E7%A9%B6%E3%82%81%E3%82%8B%E2%80%95-Brian-Goetz/dp/4797337206%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4797337206">Java並行処理プログラミング ―その「基盤」と「最新API」を究める―</a></p>
	<p><em>著者／訳者：</em>Brian Goetz Joshua Bloch Doug Lea </p>
	<p><em>出版社：</em>ソフトバンククリエイティブ( 2006-11-22 )</p>
	<p>単行本 ( 480 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/mkhXVdwv4ZZ7T6lelIBJh-t00Qs/0/da"><img src="http://feedads.g.doubleclick.net/~a/mkhXVdwv4ZZ7T6lelIBJh-t00Qs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/mkhXVdwv4ZZ7T6lelIBJh-t00Qs/1/da"><img src="http://feedads.g.doubleclick.net/~a/mkhXVdwv4ZZ7T6lelIBJh-t00Qs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/hrrkQPzDX9Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/425/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/425" />
	</item>
		<item>
		<title>MySQL Casual Talks Vol.2 で話してきた</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/423?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=mysql-casual-talks-vol-2-%25e3%2581%25a7%25e8%25a9%25b1%25e3%2581%2597%25e3%2581%25a6%25e3%2581%258d%25e3%2581%259f</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/423#comments</comments>
		<pubDate>Thu, 11 Aug 2011 11:31:36 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=423</guid>
		<description>MySQL Casual Talks Vol.2で20分枠をもらって話してきた！こんなに長い時間人前で話すのは初めてだったので緊張しまくりでした。話した内容は仕事(ピグ)で利用しているMySQL上で運用しているNoSQL [...]</description>
			<content:encoded><![CDATA[<p><a href="http://togetter.com/li/172489">MySQL Casual Talks Vol.2</a>で20分枠をもらって話してきた！こんなに長い時間人前で話すのは初めてだったので緊張しまくりでした。話した内容は仕事(ピグ)で利用しているMySQL上で運用しているNoSQLのやり方について。MySQLの設定とかの話は一切せずJavaのコードがメインでした。</p>
<div style="width:510px" id="__ss_8819474"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/oinume/mysql-casual-talks220110809" title="MySQLでNoSQL - アメーバピグでのNoSQLの実例" target="_blank">MySQLでNoSQL &#8211; アメーバピグでのNoSQLの実例</a></strong> <object id="__sse8819474" width="510" height="426"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlcasualtalks220110809-110810111850-phpapp01&#038;stripped_title=mysql-casual-talks220110809&#038;userName=oinume" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse8819474" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=mysqlcasualtalks220110809-110810111850-phpapp01&#038;stripped_title=mysql-casual-talks220110809&#038;userName=oinume" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="510" height="426"></embed></object>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/oinume" target="_blank">Kazuhiro Oinuma</a> </div>
</p></div>
<p>正直、<a href="http://twitter.com/#!/myfinder">myfinder</a>さんに声をかけられたときはどうしようかと悩んだけど、こういう経験はなかなかできないので良かったです。場数を踏むっていうのも重要ですしね。懇親会では riywo さんとシステム運用のガチトークをできたし、DeNAの人とたくさん絡めてよかったですｗ riywo さんが「MySQL Formal Talksやっても来るメンバーって変わらないよね」って言ってたのがなんともこの勉強会を象徴していて妙に印象に残っていますｗ</p>
<p>Vol.3 があったら今度は弊社メンバーの誰かにFusion-IOの話をしてもらいたいなぁ。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/sf-31EESGMiYWnoip2y0JCoCsoY/0/da"><img src="http://feedads.g.doubleclick.net/~a/sf-31EESGMiYWnoip2y0JCoCsoY/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/sf-31EESGMiYWnoip2y0JCoCsoY/1/da"><img src="http://feedads.g.doubleclick.net/~a/sf-31EESGMiYWnoip2y0JCoCsoY/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/f_p_rE2PVIs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/423/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/423" />
	</item>
		<item>
		<title>rednoseを使ってnoseの出力をわかりやすくする</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/422?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rednose%25e3%2582%2592%25e4%25bd%25bf%25e3%2581%25a3%25e3%2581%25a6nose%25e3%2581%25ae%25e5%2587%25ba%25e5%258a%259b%25e3%2582%2592%25e3%2582%258f%25e3%2581%258b%25e3%2582%258a%25e3%2582%2584%25e3%2581%2599%25e3%2581%258f%25e3%2581%2599%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/422#comments</comments>
		<pubDate>Wed, 27 Jul 2011 17:37:50 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=422</guid>
		<description>下記のようにテスト結果をカラフリャにしてくれる。ただし0.2.4はテストに失敗すると&amp;#8221;TypeError: enumerate() takes exactly 1 argument (2 given)&amp;#82 [...]</description>
			<content:encoded><![CDATA[<p>下記のようにテスト結果をカラフリャにしてくれる。ただし0.2.4はテストに失敗すると&#8221;TypeError: enumerate() takes exactly 1 argument (2 given)&#8221;というエラーになるので、<a href="https://github.com/oinume/rednose/commit/7244323adcf9d2366bb846fb057e260b662db0b5">こんな感じで</a>修正が必要。</p>
<h3>びふぉー</h3>
<p><a class="" rel="lightbox" title="rednose_before" href="http://www.flickr.com/photos/8250493@N05/5982074936/"><img src="http://farm7.static.flickr.com/6130/5982074936_a5bed69158.jpg" alt="rednose_before"></a></p>
<h3>あふたー</h3>
<p><a class="" rel="lightbox" title="rednose_after" href="http://www.flickr.com/photos/8250493@N05/5982075050/"><img src="http://farm7.static.flickr.com/6148/5982075050_8e583bd8b6.jpg" alt="rednose_after"></a></p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Tarek-Ziade/dp/4048686291%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048686291"><img src="http://ecx.images-amazon.com/images/I/51wSTTIQtgL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/%E3%82%A8%E3%82%AD%E3%82%B9%E3%83%91%E3%83%BC%E3%83%88Python%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-Tarek-Ziade/dp/4048686291%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4048686291">エキスパートPythonプログラミング</a></p>
	<p><em>著者／訳者：</em>Tarek Ziade</p>
	<p><em>出版社：</em>アスキー・メディアワークス( 2010-05-28 )</p>
	<p>大型本 ( 416 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/H4zQYEsPkt-C1rhfOxEmXph7U4A/0/da"><img src="http://feedads.g.doubleclick.net/~a/H4zQYEsPkt-C1rhfOxEmXph7U4A/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/H4zQYEsPkt-C1rhfOxEmXph7U4A/1/da"><img src="http://feedads.g.doubleclick.net/~a/H4zQYEsPkt-C1rhfOxEmXph7U4A/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/4gsatn-KRAQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/422/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/422" />
	</item>
		<item>
		<title>Pythonでファイルを読み込むスマートなやり方</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/418?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=python%25e3%2581%25a7%25e3%2583%2595%25e3%2582%25a1%25e3%2582%25a4%25e3%2583%25ab%25e3%2582%2592%25e8%25aa%25ad%25e3%2581%25bf%25e8%25be%25bc%25e3%2582%2580%25e3%2582%25b9%25e3%2583%259e%25e3%2583%25bc%25e3%2583%2588%25e3%2581%25aa%25e3%2582%2584%25e3%2582%258a%25e6%2596%25b9</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/418#comments</comments>
		<pubDate>Mon, 13 Jun 2011 13:16:59 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=418</guid>
		<description>結論から言うと下記が最もスマートでモダンな書き方っぽい。 f = open&amp;#40;'/tmp/test.txt'&amp;#41; for line in f: print line f.close&amp;#40;&amp;#41; ※追記 [...]</description>
			<content:encoded><![CDATA[<p>結論から言うと下記が最もスマートでモダンな書き方っぽい。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/tmp/test.txt'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> f:
    <span style="color: #ff7700;font-weight:bold;">print</span> line
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>※追記<br />
Python2.5以降ならwithを使うともっとモダンというのをコメントやらブクマコメントで教えてもらった。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">__future__</span> <span style="color: #ff7700;font-weight:bold;">import</span> with_statement
&nbsp;
<span style="color: #ff7700;font-weight:bold;">with</span> <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/tmp/test.txt'</span><span style="color: black;">&#41;</span> <span style="color: #ff7700;font-weight:bold;">as</span> f:
    <span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> f:
        <span style="color: #ff7700;font-weight:bold;">print</span> line</pre></div></div>

<p>下記は古いやり方。(ってPythonクックブックに書いてあった)</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/tmp/test.txt'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">while</span> <span style="color: #008000;">True</span>:
    line = f.<span style="color: #dc143c;">readline</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> line:
        <span style="color: #ff7700;font-weight:bold;">break</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> line
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<p>下記はファイルの中味が全部メモリに乗っちゃうから危険。</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;">f = <span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'/tmp/test.txt'</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> f.<span style="color: black;">readlines</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">print</span> line
f.<span style="color: black;">close</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></div></div>

<h3>まとめ(イテレータ)</h3>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">for</span> line <span style="color: #ff7700;font-weight:bold;">in</span> f:
    <span style="color: #ff7700;font-weight:bold;">print</span> line</pre></div></div>

<p>という書き方ができるのはfileが__iter__()とnext()を実装しているおかげ。詳しくは<a href="http://www.python.org/dev/peps/pep-0234/">PEP-234</a>に詳しく書いてある。</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761"><img src="http://ecx.images-amazon.com/images/I/41XWUXpgeuL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Python-%E3%82%AF%E3%83%83%E3%82%AF%E3%83%96%E3%83%83%E3%82%AF-%E7%AC%AC2%E7%89%88-Alex-Martelli/dp/4873112761%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873112761">Python クックブック 第2版</a></p>
	<p><em>著者／訳者：</em>Alex Martelli Anna Martelli Ravenscroft David Ascher </p>
	<p><em>出版社：</em>オライリー・ジャパン( 2007-06-26 )</p>
	<p>大型本 ( 652 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/PsG1S9r2HIIxyQMVZ5p0u4Oidu4/0/da"><img src="http://feedads.g.doubleclick.net/~a/PsG1S9r2HIIxyQMVZ5p0u4Oidu4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/PsG1S9r2HIIxyQMVZ5p0u4Oidu4/1/da"><img src="http://feedads.g.doubleclick.net/~a/PsG1S9r2HIIxyQMVZ5p0u4Oidu4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/qrGDFME7_fU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/418/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/418" />
	</item>
		<item>
		<title>自宅サーバからso-netのSMTPにリレーする</title>
		<link>http://tech.lampetty.net/tech/index.php/archives/417?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e8%2587%25aa%25e5%25ae%2585%25e3%2582%25b5%25e3%2583%25bc%25e3%2583%2590%25e3%2581%258b%25e3%2582%2589so-net%25e3%2581%25aesmtp%25e3%2581%25ab%25e3%2583%25aa%25e3%2583%25ac%25e3%2583%25bc%25e3%2581%2599%25e3%2582%258b</link>
		<comments>http://tech.lampetty.net/tech/index.php/archives/417#comments</comments>
		<pubDate>Sun, 12 Jun 2011 14:19:35 +0000</pubDate>
		<dc:creator>oinume</dc:creator>
				<category><![CDATA[SysAdmin]]></category>

		<guid isPermaLink="false">http://tech.lampetty.net/tech/?p=417</guid>
		<description>そういえばISPをso-netに変えてからSMTPの設定変更してなかったのでメモ。 まずは /etc/postfix/main.cf に以下を追記。 relayhost = [mail.so-net.ne.jp]:587 [...]</description>
			<content:encoded><![CDATA[<p>そういえばISPをso-netに変えてからSMTPの設定変更してなかったのでメモ。</p>
<p>まずは /etc/postfix/main.cf に以下を追記。</p>
<pre>
relayhost = [mail.so-net.ne.jp]:587
smtp_sasl_type = cyrus
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/so-net_password
smtp_sasl_security_options = noanonymous
smtp_sasl_mechanism_filter = PLAIN
</pre>
<p>/etc/postfix/so-net_passwordはこんな感じ。</p>
<pre>
[mail.so-net.ne.jp]:587 <user>@<subdomain>.so-net.ne.jp:
<password>
</pre>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #c20cb9; font-weight: bold;">chmod</span> <span style="color: #000000;">640</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>so-net_password
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> postmap <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>postfix<span style="color: #000000; font-weight: bold;">/</span>so-net_password
$ <span style="color: #c20cb9; font-weight: bold;">sudo</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span>init.d<span style="color: #000000; font-weight: bold;">/</span>postfix restart</pre></div></div>

<p>でおｋ。あとはメール送信のテストする。</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #7a0874; font-weight: bold;">test</span> <span style="color: #000000; font-weight: bold;">|</span> mail <span style="color: #000000; font-weight: bold;">*****@</span>gmail.com</pre></div></div>

<p>これでメールが送られていれば成功。</p>
<div class="tmkm-amazon-view">
	<p><a href="http://www.amazon.co.jp/Postfix%E5%AE%9F%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-Kyle-D-Dent/dp/4873111951%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873111951"><img src="http://ecx.images-amazon.com/images/I/51BXWJEEMSL._SL160_.jpg" border="0" alt="" /></a></p>
	<p><a href="http://www.amazon.co.jp/Postfix%E5%AE%9F%E7%94%A8%E3%82%AC%E3%82%A4%E3%83%89-Kyle-D-Dent/dp/4873111951%3FSubscriptionId%3DAKIAJGVWECUONT35GEJA%26tag%3Dkazzhomeunixo-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4873111951">Postfix実用ガイド</a></p>
	<p><em>著者／訳者：</em>Kyle D. Dent</p>
	<p><em>出版社：</em>オライリージャパン( 2004-08-15 )</p>
	<p>大型本 ( 307 ページ )</p>
<hr class="tmkm-amazon-clear" /></div>

<p><a href="http://feedads.g.doubleclick.net/~a/fBtYVc9YiaF5p-sZ6h_OFpQ8eXg/0/da"><img src="http://feedads.g.doubleclick.net/~a/fBtYVc9YiaF5p-sZ6h_OFpQ8eXg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/fBtYVc9YiaF5p-sZ6h_OFpQ8eXg/1/da"><img src="http://feedads.g.doubleclick.net/~a/fBtYVc9YiaF5p-sZ6h_OFpQ8eXg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/oinume/diary/~4/Fg3BEDUEfWU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://tech.lampetty.net/tech/index.php/archives/417/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tech.lampetty.net/tech/index.php/archives/417" />
	</item>
	</channel>
</rss>

