<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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"
>

<channel>
	<title>tjun memo</title>
	<atom:link href="http://tjun.jp/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://tjun.jp/blog</link>
	<description>面白いこと探してます。</description>
	<lastBuildDate>Sun, 05 Feb 2012 09:17:15 +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://tjun.jp/blog/feed/" />
		<item>
		<title>なぜStormを使うか</title>
		<link>http://tjun.jp/blog/2012/02/storm_rationale/</link>
		<comments>http://tjun.jp/blog/2012/02/storm_rationale/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 15:01:51 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[storm]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1095</guid>
		<description><![CDATA[Stormとは、twitterが公開して開発中のリアルタイム分散処理フレームワークです。 開発も活発で結構よいのでこれからHadoopのように使われるようになるんじゃないかと個人的に思っていて、日本語の情報が全然ないので [...]]]></description>
			<content:encoded><![CDATA[<p>
Stormとは、twitterが公開して開発中のリアルタイム分散処理フレームワークです。<br />
開発も活発で結構よいのでこれからHadoopのように使われるようになるんじゃないかと個人的に思っていて、日本語の情報が全然ないので勝手に日本語で紹介しています。<br />
<br />
Stormの概要については前にも書いたけど、今回はその前の、なぜStormを使うのか、どういう処理がターゲットなのか、と言う話について書きます。<br />
<br />
Stormの概要について書いた記事：　<a href="http://tjun.jp/blog/2011/10/storm_intro/">twitterが発表したリアルタイム分散処理フレームワークStorm | tjun memo</a><br />
<br />
<br />
<br />
本記事は、Stormの公式の<a href="https://github.com/nathanmarz/storm/wiki/Rationale">Rationale</a>を元に書いているので、できれば公式を読むことをお勧めします。<br />
<br />
<hr /><br />
<br />
<h3>なぜStormを使うのか</h3>
最近はMapReduceやHadoop等の技術で、以前には考えられなかったスケールでデータ処理を行うことができるようになりました。しかし、それらの技術はリアルタイム処理のための技術ではありません。リアルタイム処理は、バッチ処理とは根本的に異なる要求があるため、Hadoopをリアルタイム処理に利用することはできません。<br />
しかし、大きなスケールでのリアルタイムデータ処理に対する要求は高まっています。「リアルタイムなHadoop」がないことは、データ処理のエコシステムにおける大きな問題と言えます。<br />
<br />
Stormはこの問題を解決します。<br />
<br />
Storm以前は、リアルタイム処理のためには例によってキューとワーカーからなるネットワークを作り上げていたでしょう。ワーカーはキューからメッセージを取り出し、データベースを更新して、次の処理のために新たなメッセージを異なるキューへ送ります。残念ながら、この手法には、深刻な制限があります。<br />
<br />
<ol>
	<li><strong>1. 退屈な仕事</strong>：開発者は、開発時間のほとんどをメッセージの送信先の設定、ワーカーや中間キューのデプロイに取られ、リアルタイムなデータ処理のロジックへかけられる時間はわずかです。</li>
<br />
	<li><strong>2. 脆弱</strong>：　耐故障性に欠けるため、あなたはワーカーとキューが落ちていないか気を配る必要があります。</li>
<br />
	<li><strong>3. 拡張が大変</strong>：　１つのワーカーやキューにおけるメッセージのスループットが高まった時、データをどのように分散させるか考える必要があります。メッセージの送り先が変わるため、ワーカーの再設定も必要です。</li>
</ol>
<br />
キューとワーカーによるモデルが大量のメッセージの処理を可能にしましたが、メッセージ処理がリアルタイム処理の基本となるパラダイムです。<br />
そこで、問題となるとは、どうやって、データを失うことなく、スケールして膨大なデータに対応するか、またどうやってそれを簡単に使い、操作できるようにするか、ということです。<br />
<br />
Stormはこれを実現します。<br />
<br />
<br />
<h3>Stormの重要性</h3>
<br />
Stormはリアルタイム処理のための簡単な枠組みを提供します。MapReduceが並列バッチ処理をとても簡単に書けるようにしたように、Stormの基本機能は並列リアルタイム処理を簡単に書けます。<br />
<br />
Stormの特徴は、<br />
<ol>
	<li><strong>1. 幅広いユースケース</strong>：　Stormはメッセージ処理、データベースの更新、連続的なクエリ処理、そしてクライアントに対する処理の結果のストリーミング、検索クエリのようなクエリの並列処理、などいろいろなことができます。Stormの基本機能は、これらの幅広いユースケースを実現します。</li>
<br />
	<li><strong>2. スケーラブル</strong>：　Stormは膨大なメッセージに対してもスケールします。Topologyをスケールするには、マシンを追加して、並列数の設定を大きくするだけでいいのです。例えば、１０台のノードで毎秒100万メッセージの処理と、数百回のデータベース呼び出しを行うようなシステムが作れます。ZookeeperがStormのクラスタの調停を行っているため、さらに大きいサイズへスケールさせることもできます。</li>
<br />
	<li><strong>3. データの保証</strong>：リアルタイム処理システムは、データが処理されることを必ず保証する必要があります。データの処理漏れがあるシステムはほとんどユースケースがないでしょう。Stormは、すべてのメッセージが処理されることを保証します。この点において、S4のようなシステムと決定的に異なります。	</li>
<br />
	<li><strong>4. 堅牢性</strong>：　Hadoopのように扱いにくいシステムと違って、Stormは管理が簡単です。Stormプロジェクトは、ユーザにとって扱いやすいクラスタを実現する、という明確なゴールを持っています。</li>
<br />
	<li><strong>5. 耐故障性</strong>：　もし処理中に故障しても、Stormは処理の再割当てを行います。Stormは処理が動き続けることを保証します。（処理のkillをするまで）</li>
<br />
	<li><strong>6. 言語非依存</strong>：　ロバストでスケーラブルなリアルタイム処理は、プログラミング言語に縛られるべきではない。StormのTopologyや処理のコンポーネントは、さまざまな言語で定義でき、誰でも利用できます。</li>
</ol>
<br />
今回の記事は以上です。<br />
以下のスライドの前半部でも同じようなことが書いてあります。<br />
<br />
<div style="width:500px" id="__ss_11164672"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/nathanmarz/storm-11164672" title="Storm" target="_blank">Storm</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/11164672" width="500" height="418" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe> <div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/nathanmarz" target="_blank">nathanmarz</a> </div> </div></p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/02/storm_rationale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/02/storm_rationale/" />
	</item>
		<item>
		<title>iPhoneアプリと室伏広治</title>
		<link>http://tjun.jp/blog/2012/01/iphone_throw/</link>
		<comments>http://tjun.jp/blog/2012/01/iphone_throw/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 15:13:26 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[Diary]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[sensor]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1091</guid>
		<description><![CDATA[そろそろiPhoneじゃないケータイにしたいなぁと思い、もうiPhoneが使えなくなってもいいや、っていう視点に立ったときに、iPhoneを投げてその距離を計測して、他の人と距離や滞空時間を競いあうっていうクソアプリを思 [...]]]></description>
			<content:encoded><![CDATA[<p>
そろそろiPhoneじゃないケータイにしたいなぁと思い、もうiPhoneが使えなくなってもいいや、っていう視点に立ったときに、iPhoneを投げてその距離を計測して、他の人と距離や滞空時間を競いあうっていうクソアプリを思いつきました。誰もいらないけど、ネタアプリとしては結構レベルが高いきがする。<br />
<a href="http://www.flickr.com/photos/24926669@N07/3971359430/" title="iPhone Sensor" target="_blank"><img src="http://farm4.static.flickr.com/3517/3971359430_2218c41c53_m.jpg" alt="iPhone Sensor" border="0" /></a><br /><small><a href="http://creativecommons.org/licenses/by/2.0/" title="Attribution License" target="_blank"><img src="http://tjun.jp/blog/wp-content/plugins/photo-dropper/images/cc.png" alt="Creative Commons License" border="0" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a href="http://www.flickr.com/photos/24926669@N07/3971359430/" title="raneko" target="_blank">raneko</a></small><br />
<br />
調べてみたら、投げて滞空時間を競うアプリはあった。<br />
<a href="http://www.100shiki.com/archives/2009/11/iphone_hang_time.html">iPhoneを空中に放り投げて滞空時間を競うアプリ『iPhone Hang Time』 | 100SHIKI</a><br />
<br />
でもこれは、あとでキャッチすることを想定しているみたいで、ぶっ飛びきれてない。<br />
もっと2階からぶん投げるくらいの、壊れるか壊れないかギリギリを攻めるようなやつがいい。<br />
<br />
<br />
で、加速度センサを使えば、たぶんだいたいの距離は出せるんじゃないか、と思い、&#8221;<a href="http://www.google.co.jp/webhp?q=%E5%8A%A0%E9%80%9F%E5%BA%A6%E3%82%BB%E3%83%B3%E3%82%B5%E3%80%80%E6%8A%95%E3%80%80%E8%B7%9D%E9%9B%A2" title=""加速度 投 距離 "でググる" target="_blank">加速度センサ　投　距離&#8221; というキーワードでググってみたら</a>、<a href="http://www.kojimurofushi.net/blog/research/" target="_blank">室伏広治オフィシャルウェブサイト</a>がトップにヒットしてびっくりした。 research っていうカテゴリがあって、なんかもうすごいです。思わずlikeボタンを押してしまいました。<br />
<br />
残念ながらクソアプリ開発に使える情報はなかったので、とりあえず加速度センサの値を記録するアプリでも作ってiPhoneを投げるときの加速度の変化を見てみる実験をするのがいいと思ってます。iPhoneを思いっきり投げられる場所と、思いっきり投げても大丈夫なiPhoneが必要。<br />
<br />
※1 たぶん挫折するので、このアプリのネタを使いたい人がいたら、どうぞ。<br />
※2 これを読む限り、iPhoneが壊れそうになるアプリはAppleの審査通らないようだ<br />
<a href="http://php6.jp/iphone/2011/12/11/iphone_rejected_twic/">iPhone投げが2度拒否された理由 « iPhoneアプリ練習帳</a></p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/iphone_throw/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/iphone_throw/" />
	</item>
		<item>
		<title>ブログを書く理由</title>
		<link>http://tjun.jp/blog/2012/01/why_i_write_this_blog/</link>
		<comments>http://tjun.jp/blog/2012/01/why_i_write_this_blog/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 14:33:27 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[Diary]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1090</guid>
		<description><![CDATA[photo credit: gogoloopie このブログをなんで書いているかっていうと、プログラム書いていたり何かソフトを使ったりしていて問題が発生したときに、いろいろググったりして調べて解決できたことをメモっておく [...]]]></description>
			<content:encoded><![CDATA[<p>
<a title="You Must Have Remembered it Wrong." href="http://www.flickr.com/photos/43559902@N07/6758895977/" target="_blank"><img src="http://farm8.static.flickr.com/7156/6758895977_8ba232748e_m.jpg" border="0" alt="You Must Have Remembered it Wrong." /></a><br />
<small><a title="Attribution License" href="http://creativecommons.org/licenses/by/2.0/" target="_blank"><img src="http://tjun.jp/blog/wp-content/plugins/photo-dropper/images/cc.png" border="0" alt="Creative Commons License" width="16" height="16" align="absmiddle" /></a> <a href="http://www.photodropper.com/photos/" target="_blank">photo</a> credit: <a title="gogoloopie" href="http://www.flickr.com/photos/43559902@N07/6758895977/" target="_blank">gogoloopie</a></small><br />
<br />
このブログをなんで書いているかっていうと、プログラム書いていたり何かソフトを使ったりしていて問題が発生したときに、いろいろググったりして調べて解決できたことをメモっておくことで、同じ問題ではまった人（自分含む）がこのブログの記事を読んで簡単に解決できればいいかな、と思って書いています。<br />
<br />
英語のドキュメントしかなかったり、ググっても簡単に分からなかったり、ってことはときどきあるので。<br />
だから、記事の内容もrubyだったりjavaだったりmacだったりcentosだったりと、バラバラ。<br />
<br />
あとはブログという目的以外にも、VPSにwebサーバ立ててwordpress入れて設定とかいじって…、っていう実験台なところもあります。<br />
<br />
でも、こんなブログをsubscribeしている人が30人くらいいて、脈絡のない技術的な話ばかりだとたぶんほとんどの記事は興味が沸かない気がするので、もうちょっと近況とか考え的なこと、誰でも読める内容のものをもうちょっと書こうかなあと思う最近思ったりします。</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/why_i_write_this_blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/why_i_write_this_blog/" />
	</item>
		<item>
		<title>gem install memcached ではまったメモ</title>
		<link>http://tjun.jp/blog/2012/01/gem_memcached_error/</link>
		<comments>http://tjun.jp/blog/2012/01/gem_memcached_error/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 14:22:07 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[memcached]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1085</guid>
		<description><![CDATA[Error: $gem install memcached ... rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_set’: rl [...]]]></description>
			<content:encoded><![CDATA[<p>
Error:<br />
<pre>
$gem install memcached
...
rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_set’:
rlibmemcached_wrap.c:6669: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:6669: error: (Each undeclared identifier is reported only once
rlibmemcached_wrap.c:6669: error: for each function it appears in.)
rlibmemcached_wrap.c:6669: error: ‘arg2’ undeclared (first use in this function)
rlibmemcached_wrap.c:6669: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6687: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6688: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’
rlibmemcached_wrap.c:6688: error: expected ‘)’ before ‘const’
rlibmemcached_wrap.c:6688: error: expected ‘;’ before ‘arg2’
rlibmemcached_wrap.c: In function ‘_wrap_MemcachedSt_sasl_callbacks_get’:
rlibmemcached_wrap.c:6700: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:6700: error: ‘result’ undeclared (first use in this function)
rlibmemcached_wrap.c:6711: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:6711: error: ‘struct memcached_st’ has no member named ‘sasl_callbacks’
rlibmemcached_wrap.c: In function ‘_wrap_memcached_set_sasl_callbacks’:
rlibmemcached_wrap.c:12021: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:12021: error: ‘arg2’ undeclared (first use in this function)
rlibmemcached_wrap.c:12021: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:12039: error: expected expression before ‘)’ token
rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘const’
rlibmemcached_wrap.c:12040: error: expected ‘)’ before ‘arg2’
rlibmemcached_wrap.c: In function ‘_wrap_memcached_get_sasl_callbacks’:
rlibmemcached_wrap.c:12122: error: ‘sasl_callback_t’ undeclared (first use in this function)
rlibmemcached_wrap.c:12122: error: ‘result’ undeclared (first use in this function)
rlibmemcached_wrap.c:12133: error: expected expression before ‘)’ token
rlibmemcached_wrap.c: In function ‘Init_rlibmemcached’:
rlibmemcached_wrap.c:13285: error: ‘SASL_OK’ undeclared (first use in this function)
make: *** [rlibmemcached_wrap.o] Error 1
</pre>
<br />
<pre>
$ gem clean memcached
</pre>
<br />
centos<br />
<pre>
$ yum install cyrus-sasl2 cyrus-sasl-devel
</pre>
<br />
ubuntu, debian<br />
<pre>
$ apt-get install libsasl2-2 libsasl2-dev
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/gem_memcached_error/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/gem_memcached_error/" />
	</item>
		<item>
		<title>stormのcluster環境のセットアップ(centos)</title>
		<link>http://tjun.jp/blog/2012/01/storm-cluster-setup/</link>
		<comments>http://tjun.jp/blog/2012/01/storm-cluster-setup/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 04:55:44 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[centos]]></category>
		<category><![CDATA[storm]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1072</guid>
		<description><![CDATA[Stormと、その設定やローカルモードでの実行は下記の記事を参照してください。 twitterが発表したリアルタイム分散処理フレームワークStorm &#124; tjun memo EclipseでStormの開発環境を作る &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>
Stormと、その設定やローカルモードでの実行は下記の記事を参照してください。<br />
<br />
<ul>
	<li><a href="http://tjun.jp/blog/2011/10/storm_intro/">twitterが発表したリアルタイム分散処理フレームワークStorm | tjun memo</a></li>
	<li><a href="http://tjun.jp/blog/2011/11/storm_eclipse/">EclipseでStormの開発環境を作る | tjun memo</a></li>
	<li><a href="http://tjun.jp/blog/2011/11/storm_localmode/">Stormをlocalmodeで実行する | tjun memo</a></li>
</ul>
<br />
今回は、stormのnimbusやsupervisorを利用する、クラスタ環境をセットアップするときのメモです。<br />
centosで試していますが、linux環境であれば同じような感じで動くと思います。<br />
マシンは複数台を想定していますが、１台の中で動かすこともできます。<br />
<br />
<h2>関連モジュールのインストール</h2>
stormを動かすのに必要なものをインストールします。<br />
基本的には、ここに書かれている手順に従います。<br />
<ul>
	<li><a href="https://github.com/nathanmarz/storm/wiki/Setting-up-a-Storm-cluster">Setting up a Storm cluster &#8211; GitHub</a></li>
</ul>
<br />
<h3>zookeeper のセットアップ</h3>
<br />
Apache zookeeper からリリースのアーカイブを取得(今回は 3.3.3 を使いました)<br />
<ul>
	<li><a href="http://zookeeper.apache.org/releases.html">Apache ZooKeeper &#8211; Releases</a></li>
</ul>
<br />
<pre>
wget http://ftp.meisei-u.ac.jp/mirror/apache/dist//zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz
tar zxf zookeeper-3.3.3.tar.gz
sudo cp -R zookeeper-3.3.3 /usr/local/
sudo ln -s /usr/local/zookeeper-3.3.3/ /usr/local/zookeeper
</pre>
<br />
<br />
インストールしたディレクトリを ZOOKEEPER_HOME に設定し、$ZOOKEEPER_HOME/bin の実行パスに設定。<br />
<pre>
export ZOOKEEPER_HOME="/usr/local/zookeeper" 
export PATH=$PATH:$ZOOKEEPER_HOME/bin
</pre>
    <br />
$ZOOKEEPER_HOME/conf/zoo.cfg を作成する<br />
zoo_sample.cfg をベースに修正。<br />
<pre>sudo cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg </pre>
dataLogDir を追加して、ログの場所を決める。今回は &#8220;/var/log/zookeeper&#8221; とした。<br />
ディレクトリの作成も忘れずに。<br />
<pre>
sudo mkdir /tmp/zookeeper
sudo mkdir /var/log/zookeeper
</pre>
<br />
     <br />
<h3>zeromq &#038; jzmq のインストール</h3>
<br />
以下の手順に従ってインストール。<br />
<ul>
	<li><a href="https://github.com/nathanmarz/storm/wiki/Installing-native-dependencies">Installing native dependencies &#8211; GitHub</a></li>
</ul>
<br />
<pre>
wget http://download.zeromq.org/historic/zeromq-2.1.7.tar.gz
tar zxf zeromq-2.1.7.tar.gz
cd zeromq-2.1.7
./configure
make
sudo make install
</pre>
<br />
LD_LIBRARY_PATH に /usr/local/lib を追加しておく。<br />
そのあと<br />
<pre>
sudo ldconfig
</pre>
<br />
<pre>
#install jzmq
git clone git://github.com/nathanmarz/jzmq.git
cd jzmq
./autogen.sh
./configure
make
sudo make install
</pre>
<br />
uuid-dev が無いと言われたら yum install uuid-devel<br />
<br />
 <br />
<h3>python 2.6.6 インストール</h3>
<br />
python のバージョンが 2.4.3 なので 2.6.6 を入れる。<br />
<br />
以下を参考に、古いものを共存させながらインストール。<br />
<br />
<ul>
	<li><a href="http://labs.beatcraft.com/ja/index.php?Python2.6.6%2FCentOS5">Python2.6.6/CentOS5 &#8211; labs.beatcraft.com</a></li>
</ul>
<br />
<br />
<h2>Stormのインストール</h2>
前の記事と同様です。<br />
<a href="https://github.com/nathanmarz/storm/downloads">https://github.com/nathanmarz/storm/downloads</a> から最新のstormをダウンロードして、zipを解凍してください。（2011/12/27の最新verは0.6.0）<br />
<br />
そして、storm-*.*.*/binにpathを通します。<br />
<br />
<pre>
$ wget https://github.com/downloads/nathanmarz/storm/storm-0.6.0.zip --no-check-certificate
$ unzip storm-0.6.0.zip
$ sudo cp -R storm-0.6.0 /usr/local/
$ export STORM_HOME=/usr/local/storm-0.6.0
$ export PATH=$PATH:$STORM_HOME/bin
</pre>
<br />
今回はここまで。<br />
次回は、１台のマシンでnimbusもsupervisorも動かして、クラスタモードでサンプルプログラムを動かすところまでを書きます。<br />
<br />
<br />
参考になりそうな日本語サイト<br />
<ul>
	<li><a href="http://d.hatena.ne.jp/acro-engineer/20111123/1322059295">Twitter Stormをインストールしてみます！（その１ &#8211; Taste of Tech Topics</a></li>
</ul>
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/storm-cluster-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/storm-cluster-setup/" />
	</item>
		<item>
		<title>nginxでスマホからのアクセスをリダイレクト</title>
		<link>http://tjun.jp/blog/2012/01/nginx_redirect/</link>
		<comments>http://tjun.jp/blog/2012/01/nginx_redirect/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 03:22:29 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1081</guid>
		<description><![CDATA[nginxでiPhoneやAndroidからのアクセスをリダイレクトする方法のメモ。 Apacheなら.htaccessなどを使ってリダイレクトしますが、nginxだとちょっと違います。 /etc/nginx/sites [...]]]></description>
			<content:encoded><![CDATA[<p>
nginxでiPhoneやAndroidからのアクセスをリダイレクトする方法のメモ。<br />
<br />
Apacheなら.htaccessなどを使ってリダイレクトしますが、nginxだとちょっと違います。<br />
/etc/nginx/sites-available/ にある設定から行います。<br />
<br />
<br />
<pre>$vi /etc/nginx/sites-available/example.com</pre>
<br />
以下のように、rewriteを使ってリダイレクトします。<br />
<br />
<pre>
server {
    listen 80;      
    server_name example.com;
    access_log  /var/log/nginx/example.com.access.log;
    error_log  /var/log/nginx/example.com.error.log;

    （中略）
    # スマホからのトップページへのアクセスを、/mobile にリダイレクト
    if ($http_user_agent ~* “2.0\ 2MMP|240×320|400X240|BlackBerry|Cellphone|Googlebot-Mobile|Opera\ Mini|iPhone|iPod|Android|BlackBerry9530|Nokia5800″) {
           rewrite ^/$ /mobile last;
    }
}
</pre>
<br />
<br />
スマホ判定の部分は、どこかから持ってきたやつを適当にいじっただけなので、よく分からない端末名も入ってます。<br />
<br />
if 文は、ifのあとにスペースがないとダメみたいなので注意。<br />
<pre>
if (      #OK
if(       #NG
</pre>
<br />
あと、以下も注意。<br />
<ul>
	<li><a href="http://debiancdn.wordpress.com/2012/01/08/nginx-rewrite%e3%81%ab%e3%81%af%e3%81%a1%e3%82%83%e3%82%93%e3%81%a8%e3%81%a8%e3%82%92%e3%81%a4%e3%81%91%e3%82%88%e3%81%86/">Nginx: rewriteにはちゃんと^と$をつけよう « debiancdn</a></li>
</ul>
<br />
<br />
<h3>参考にしたサイト</h3>
２つめのサイトでは、rewriteのflagの使い方なども載っていて、参考になります。<br />
<br />
<ul>
	<li><a href="http://iandouglas.com/2010/01/20/howto-redirect-iphoneipod-users-on-nginx/">HOWTO: redirect iPhone/iPod users on nginx – iandouglas.com</a></li>
	<li><a href="http://sakura.off-soft.net/centos/apache-nginx-4-setting-redirect.html">apache のかわりにnginxを使ってみる(4) nginx でリダイレクトするには | レンタルサーバー・自宅サーバー設定・構築のヒント</a></li>
</ul>
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/nginx_redirect/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/nginx_redirect/" />
	</item>
		<item>
		<title>[PHP] twitterのRSSからreplyを取り除く</title>
		<link>http://tjun.jp/blog/2012/01/php_twitter_rss/</link>
		<comments>http://tjun.jp/blog/2012/01/php_twitter_rss/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 17:16:23 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1080</guid>
		<description><![CDATA[twitterのRSSを自分のウェブページに表示していたのですが、そのままだとつぶやきもリプライ(mention?)もすべて表示されてしまいます。 なので、正規表現でリプライだけ取り除いて表示するようにしました。 RTは [...]]]></description>
			<content:encoded><![CDATA[<p>
twitterのRSSを<a href="http://tjun.jp">自分のウェブページ</a>に表示していたのですが、そのままだとつぶやきもリプライ(mention?)もすべて表示されてしまいます。<br />
<br />
なので、正規表現でリプライだけ取り除いて表示するようにしました。<br />
RTはそのまま表示してます。<br />
<br />
<pre class="brush: php; title: ; notranslate">
require_once 'lib/rss_fetch.inc';

$twit_feed = 'http://twitter.com/statuses/user_timeline/********.rss';
$twit_rss = fetch_rss($twit_feed);

$max = 20;
$cnt = 0;

echo &quot;&lt;ul&gt;&quot;;
foreach($twit_rss-&gt;items as $item){
  $cnt++;
  if($cnt &gt; $max)break;
  $title = htmlspecialchars($item['title']);
  if(preg_match(&quot;/^tjun: @/&quot;, $title))continue;
  $url = htmlspecialchars($item['link']);
  echo &quot;  &lt;li&gt;&lt;a href=\&quot;$url\&quot;&gt;$title&lt;/a&gt;&lt;/li&gt;\n&quot;;
}
echo &quot;&lt;/ul&gt;&quot;;
</pre>
<br />
リプライを取り除くのは以下の部分です。<br />
<pre class="brush: php; title: ; notranslate">
  if(preg_match(&quot;/^tjun: @/&quot;, $title))continue;
</pre>
tjunは、自分のtwitterのユーザ名です。先頭が &#8220;ユーザ名: @&#8221; であれば、リプライと判定してます。<br />
<br />
<br />
久しぶりにPHP書きました。<br />
一応正しく動いているように見えますが、何か間違ってるかもしれません。<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/php_twitter_rss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/php_twitter_rss/" />
	</item>
		<item>
		<title>[mac]opendirectorydの暴走を解決</title>
		<link>http://tjun.jp/blog/2012/01/mac_opendirectoryd_cpu/</link>
		<comments>http://tjun.jp/blog/2012/01/mac_opendirectoryd_cpu/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 16:02:43 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[mac]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1078</guid>
		<description><![CDATA[環境はMacBookAir2010?, Mac OSX 10.7.2 Lionでした。 CPU使用率が突然高くなることがあって調べてみると、opendirectorydというプロセスが50%くらい消費してた。 で、自分の [...]]]></description>
			<content:encoded><![CDATA[<p>
環境はMacBookAir2010?, Mac OSX 10.7.2 Lionでした。<br />
CPU使用率が突然高くなることがあって調べてみると、opendirectorydというプロセスが50%くらい消費してた。<br />
<br />
で、自分の場合の原因は「宛先が存在しないシンボリックリンクがDropbox内に存在すること」でした。<br />
<br />
シンボリックリンクの探し方は以下のコマンドを実行。<br />
<pre>
$ find ~/Dropbox -type l
</pre>
<br />
これで、宛先がないシンボリックリンクが見つかって、それを消してからはopendirectorydの暴走はなくなりました。<br />
<br />
参考：<br />
<ul>
	<li><a href="http://superuser.com/questions/350879/opendirectoryd-consumes-40-of-cpu">osx &#8211; opendirectoryd consumes 40% of CPU &#8211; Super User</a></li>
</ul>
<br />
<br />
原因はこれ以外にもいろいろありえるみたいで、調べるの結構苦労しました。<br />
<ul>
	<li><a href="https://discussions.apple.com/thread/3198682?start=0&#038;tstart=0">launchd and opendirectoryd crazy CPU&#8230;: Apple Support Communities</a></li>
</ul>
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2012/01/mac_opendirectoryd_cpu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2012/01/mac_opendirectoryd_cpu/" />
	</item>
		<item>
		<title>Kyoto TycoonをJavaから利用する</title>
		<link>http://tjun.jp/blog/2011/12/kyoto-tycoon_java/</link>
		<comments>http://tjun.jp/blog/2011/12/kyoto-tycoon_java/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 12:51:42 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[db]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[kyoto_tycoon]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1065</guid>
		<description><![CDATA[Kyoto tycoonのセットアップは、以前のエントリを参照 kyoto tycoonをcentosにセットアップ &#124; tjun memo Kyoto Tycoonの起動 memcachedプラグインを有効にして起動し [...]]]></description>
			<content:encoded><![CDATA[<p>
Kyoto tycoonのセットアップは、以前のエントリを参照<br />
<ul>
	<li><a href="http://tjun.jp/blog/2011/12/kyototycoon_setup/">kyoto tycoonをcentosにセットアップ | tjun memo</a></li>
</ul>
<br />
<br />
<h2>Kyoto Tycoonの起動</h2>
memcachedプラグインを有効にして起動します。<br />
<pre>ktserver -plsv /usr/local/libexec/ktplugservmemc.so -plex 'port=22222' test.kch</pre>
<br />
Xmemcachedというライブラリを使います。<br />
参考：<br />
<ul>
	<li><a href="http://code.google.com/p/xmemcached/wiki/User_Guide#Talk_with_Kestrel">User_Guide &#8211; xmemcached &#8211; User Guide Version 0.3 &#8211; Extreme performance modern memcached client for java &#8211; Google Project Hosting</a></li>
</ul>
<br />
<h2>Xmemcachedのダウンロード</h2>
JavaプログラムからKestrelを利用するために、Xmemcachedというmemcached用のライブラリを利用します。<br />
http://code.google.com/p/xmemcached/downloads/list　からxmemcached-1.3.5-bin-with-dependencies.tar.gz をダウンロードして利用します。<br />
<br />
<br />
<br />
利用プログラム例<br />
<pre class="brush: java; title: ; notranslate">
String hostname = &quot;localhost&quot;;
String port = &quot;22222&quot;;
int expiration_time = 0;

XMemcachedClientBuilder builder = new XMemcachedClientBuilder(
        AddrUtil.getAddresses(hostname + &quot;:&quot; + port));
builder.setTranscoder(new TokyoTyrantTranscoder());
MemcachedClient client = builder.build();

ArrayList&lt;String&gt; keylist = new ArrayList&lt;String&gt;();

try{
    // set data
    System.out.println(&quot;set data&quot;);
　　　    for(Integer i = 0; i != 5; i++){
　　　　    String value = &quot;value&quot; + i;
        client.set(i.toString() , expiration_time, value);
        keylist.add(i.toString());
    }    

    // get data

    // bulk get
    System.out.println(&quot;bulk get&quot;);
    Map&lt;String, Object&gt; valuemap = client.get(keylist);
    for(Integer i =0; i != 5; i++){
        System.out.println(valuemap.get(keylist.get(i)));            
    }

    // single get
    System.out.println(&quot;single get&quot;);
    for(Integer i=0; i != 5; i++){
        String value = client.get(i.toString());
        System.out.println(value);
    }

　　　　// delete data
        System.out.println(&quot;delete data from db&quot;);

    for(Integer i=0; i != 5; i++){
        client.delete(i.toString());
    }

} catch (TimeoutException e) {
    // memcached operation timeout
    e.printStackTrace();
} catch (InterruptedException e) {
    // ignore
    //e.printStackTrace();
} catch (MemcachedException e) {
    // memcached operation fail
    e.printStackTrace();
}
</pre></p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2011/12/kyoto-tycoon_java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2011/12/kyoto-tycoon_java/" />
	</item>
		<item>
		<title>kyoto tycoonをcentosにセットアップ</title>
		<link>http://tjun.jp/blog/2011/12/kyototycoon_setup/</link>
		<comments>http://tjun.jp/blog/2011/12/kyototycoon_setup/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 12:37:26 +0000</pubDate>
		<dc:creator>tjun</dc:creator>
				<category><![CDATA[centos]]></category>
		<category><![CDATA[db]]></category>
		<category><![CDATA[kyoto_tycoon]]></category>
		<category><![CDATA[server]]></category>

		<guid isPermaLink="false">http://tjun.jp/blog/?p=1064</guid>
		<description><![CDATA[前準備 依存するpackageのインストール gcc44がないと、makeできないから注意です。 sudo yum install gcc44 gcc44-c++ boost-devel zlib-devel (libb [...]]]></description>
			<content:encoded><![CDATA[<p>
<h2>前準備</h2>
依存するpackageのインストール<br />
gcc44がないと、makeできないから注意です。<br />
<br />
<pre>sudo yum install gcc44 gcc44-c++ boost-devel zlib-devel
(libbzip2も必要かも)
</pre>
<br />
<h2>kyoto cabinetインストール</h2>
まずはkyoto cabinetを入れます。<br />
<br />
<pre>
wget http://fallabs.com/kyotocabinet/pkg/kyotocabinet-1.2.70.tar.gz
tar zxf kyotocabinet-1.2.70.tar.gz 
cd kyotocabinet-1.2.70
./configure CC=gcc44 CXX=g++44
make
sudo make install
</pre>
<br />
/etc/ld.so.conf に /usr/local/lib を追加<br />
<pre>
sudo ldconfig
</pre>
<br />
<h2>kyoto tycoonのインストール</h2>
<br />
<pre>
wget http://fallabs.com/kyototycoon/pkg/kyototycoon-0.9.52.tar.gz
tar zxf kyototycoon-0.9.52.tar.gz 
cd kyototycoon-0.9.52
./configure CC=gcc44 CXX=g++44
make 
sudo make install
sudo ldconfig
</pre>
<br />
<br />
<h2>kyoto tycoonの起動</h2>
<br />
memcachedプロトコルで使いたいので、memcachedプラグインを有効にします<br />
<br />
<pre>ktserver -plsv /usr/local/libexec/ktplugservmemc.so -plex 'port=22222'</pre>
永続化するためには、db ファイル名を指定する必要があるようです。<br />
<pre>ktserver -plsv /usr/local/libexec/ktplugservmemc.so -plex 'port=22222' [db filename]</pre>
<br />
[db filename]は、拡張子によってKyoto Cabinet内のdb（索引付け）が変わります。<br />
<br />
(null): オンメモリ<br />
 &#8220;.kch&#8221;: ハッシュDB<br />
 &#8220;.kct&#8221;: ツリーDB<br />
 &#8220;.kcd&#8221;: ディレクトリハッシュdb<br />
 &#8220;.kcf&#8221;: ディレクトリツリーdb<br />
<br />
例<br />
<pre>ktserver -plsv /usr/local/libexec/ktplugservmemc.so -plex 'port=22222' test.kch</pre>
<br />
参考:<br />
<ul>
	<li><a href="http://fallabs.com/blog-ja/promenade.cgi?id=98">開発メモ: Kyoto Tycoonベータ版リリースすた</a></li>
	<li><a href="http://www.slideshare.net/estraier/kyoto-tycoon-guide-in-japanese">Kyoto Tycoon Guide in Japanese</a></li>
	<li><a href="http://www.omakase.org/perl/freebsdkyototycoon.html">FreeBSDでKyotoTycoonを使ってみた｜perl｜@OMAKASE</a></li>
<br />
</ul>
<br />
<br />
</p>
]]></content:encoded>
			<wfw:commentRss>http://tjun.jp/blog/2011/12/kyototycoon_setup/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://tjun.jp/blog/2011/12/kyototycoon_setup/" />
	</item>
	</channel>
</rss>

