

<?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/"
	>

<channel>
	<title>変なヤバいもんログ &#187; Ruby</title>
	<atom:link href="http://ecpplus.net/weblog/tag/ruby/feed/" rel="self" type="application/rss+xml" />
	<link>http://ecpplus.net/weblog</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Sat, 17 Jul 2010 09:10:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>WebSocket でリアルタイムお絵かきチャット作った</title>
		<link>http://ecpplus.net/weblog/websocket-%e3%81%a7%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%8a%e7%b5%b5%e3%81%8b%e3%81%8d%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e4%bd%9c%e3%81%a3%e3%81%9f/</link>
		<comments>http://ecpplus.net/weblog/websocket-%e3%81%a7%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%8a%e7%b5%b5%e3%81%8b%e3%81%8d%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e4%bd%9c%e3%81%a3%e3%81%9f/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 16:26:50 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[Sinatra]]></category>
		<category><![CDATA[WebSocket]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=952</guid>
		<description><![CDATA[　WebSocketを使って、@projecthl2先生といっしょにリアルタイム連動お絵かきチャットを作ってみました。 
おえかきちゃっと♥
　WebSocket 速いです！リアルタイムで同期しているので、数人でやると、 [...]]]></description>
			<content:encoded><![CDATA[<p>　WebSocketを使って、<a href="http://twitter.com/projecthl2" target="_blank">@projecthl2</a>先生といっしょにリアルタイム連動お絵かきチャットを作ってみました。 </p>
<p><a href="http://paint.ecpplus.net/" target="_blank">おえかきちゃっと♥</a></p>
<p>　WebSocket 速いです！リアルタイムで同期しているので、数人でやると、毎秒サーバと50回とかやりとりしてるのだけど (1回の通信はおそらく100bytesくらい)、サーバ側はほとんどCPU食ってないみたいですね。すごぃ。もし AJAX とか使うとすると、毎秒50回とかサーバにリクエスト飛ばそうとか絶対考えないよ。2窓開いてみると、遅延はほぼ0で通信できてることが分かります。</p>
<p>　WebSocket は、やってみたところでは文字列しか送れなさそうなので、今までAJAXでJSON扱ってたようなものは文字列にして送る必要がありました。</p>

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;">JSON.<span style="color: #660066;">stringfy</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>x<span style="color: #339933;">:</span><span style="color: #CC0000;">100</span><span style="color: #339933;">,</span> y<span style="color: #339933;">:</span><span style="color: #CC0000;">100</span><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>みたいにしてサーバに送って、サーバからJSONを文字列にしたものを送って</p>

<div class="wp_syntax"><div class="code"><pre class="javascript javascript" style="font-family:monospace;">JSON.<span style="color: #660066;">parse</span><span style="color: #009900;">&#40;</span>event.<span style="color: #660066;">data</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>的な感じにJSONを得てみました。</p>
<p>　お絵かき部分と、チャット部分でWebSocketを使っています。サーバ側のWebSocket部分は <a href="http://github.com/igrigorik/em-websocket" target="_blank">em-websocket</a> を使いました。EventMachine を使った WebSocket 実装みたいです。WebSocket はシンプルでした。EventMachine の使い方を調べるのに時間がかかった。。</p>
<p>　お絵かき部分は、canvas を使っています。ファイルをロードの部分は XMLHttpRequest Level2 を使っています。最初は、FileAPI を使って実装すればサーバ経由せずにファイルロードできてｳﾏｰ!! と思ったけど、まだ Firefox でしか使えないみたいなので、あきらめました。Twitterに投稿っていう部分は、canvas から toDataURL() で canvas に描かれたデータが Base64エンコードされたものを取って、そいつをサーバ側に送って保存しています。今までの XMLHttpRequest ってファイルをサーバに送信出来なかったので、無理矢理 iframe 使ったりとか頑張っていたけど、ファイルが送れるようになってすごい便利そうです。使い方は今までのものと大して変わらないみたいですし。</p>
<p>　<br />
　HTMLを生成する部分は sinatra ちゃんです。sinatra ちゃん可愛いよ。センスいいと思う。</p>
<p>　2日で作られたものなので、例外処理とかあんまりしてなぃ。。でも2日でこのくらいのもの出来るとは、高機能なHTMLですねー</p>
]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/websocket-%e3%81%a7%e3%83%aa%e3%82%a2%e3%83%ab%e3%82%bf%e3%82%a4%e3%83%a0%e3%81%8a%e7%b5%b5%e3%81%8b%e3%81%8d%e3%83%81%e3%83%a3%e3%83%83%e3%83%88%e4%bd%9c%e3%81%a3%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>amazon Product Advertising API 署名</title>
		<link>http://ecpplus.net/weblog/amazon-product-advertising-api-signiture/</link>
		<comments>http://ecpplus.net/weblog/amazon-product-advertising-api-signiture/#comments</comments>
		<pubDate>Thu, 12 Nov 2009 06:57:22 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=886</guid>
		<description><![CDATA[　amazon web services が署名が必要になって、名前も amazon Product  Advertising API とかなってたので、コードを変更しなきゃと思ってサンプルページ見たけど、途中に描かれて [...]]]></description>
			<content:encoded><![CDATA[<p>　amazon web services が署名が必要になって、名前も amazon Product  Advertising API とかなってたので、コードを変更しなきゃと思ってサンプルページ見たけど、途中に描かれている値が間違っているみたいだ…。</p>
<p><a href="https://affiliate.amazon.co.jp/gp/associates/help/t126/a13?pf_rd_t=501&#038;ref_=amb_link_84046556_2&#038;pf_rd_m=AN1VRQENFRJN5&#038;pf_rd_p=&#038;pf_rd_s=center-1&#038;pf_rd_r=&#038;pf_rd_i=assoc_help_t126_a12">サンプルリクエストに署名を行うためのステップ 【amazonヘルプ】</a> の、<code>Version=2009-03-31</code> という文字列が、正しくは <code>Version=2009-01-06</code> みたいです。</p>
<p>下記のサイトを参考にしました。下記のページだと、ヘルプページと最終出力は同じなのに、入力値が違う！って気づいたので、合わせてみたらちゃんと出来ました。</p>
<ul>
<li><a href="http://postcard.blog.ocn.ne.jp/itazura/2009/05/product_adverti.html">アマゾンのProduct Advertising APIにRubyでアクセス: ふと思う&#8211;ちょっと考える （いたずら編）</a></li>
<li><a href="http://d.hatena.ne.jp/zorio/20090509/1241886502">Amazon Product Advertising APIの認証の件 &#8211; zorioの日記</a></li>
</ul>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'hmac/sha2'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'base64'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">def</span> genreate_hash<span style="color:#006600; font-weight:bold;">&#40;</span>original_url<span style="color:#006600; font-weight:bold;">&#41;</span>
  url_string = original_url.<span style="color:#CC0066; font-weight:bold;">split</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'&amp;'</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">sort</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'&amp;'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC0066; font-weight:bold;">string</span> = <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">'GET'</span>, <span style="color:#996600;">'webservices.amazon.com'</span>, <span style="color:#996600;">'/onca/xml'</span>, url_string<span style="color:#006600; font-weight:bold;">&#93;</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;<span style="color:#000099;">\n</span>&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#CC00FF; font-weight:bold;">Base64</span>.<span style="color:#9900CC;">encode64</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#6666ff; font-weight:bold;">HMAC::SHA256</span>.<span style="color:#9900CC;">digest</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'1234567890'</span>, <span style="color:#CC0066; font-weight:bold;">string</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>上記で original_url を</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">&quot;Service=AWSECommerceService&amp;AWSAccessKeyId=00000000000000000000&amp;Operation=ItemLookup&amp;ItemId=0679722769&amp;ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&amp;Version=<span style="">2009</span>-01-06&amp;Timestamp=<span style="">2009</span>-01-01T12%3A00%3A00Z&quot;</pre></div></div>

<p>とすれば、</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=\n</pre></div></div>

<p>が出力されます。</p>
<p>なお、サンプル通りの文字列でやると、url_string が</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">&quot;Service=AWSECommerceService&amp;AWSAccessKeyId=00000000000000000000&amp;Operation=ItemLookup&amp;ItemId=0679722769&amp;ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&amp;Version=<span style="">2009</span>-03-<span style="">31</span>&amp;Timestamp=<span style="">2009</span>-01-01T12%3A00%3A00Z&quot;</pre></div></div>

<p>となって、</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">EDWJ1+VXQhAtPDKQ0f+wpaFQcBVDJyTIpDP7BZgxMiA=\n</pre></div></div>

<p>が出力されます。</p>
]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/amazon-product-advertising-api-signiture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WindowsのRubyでThread内でプロセス作成すると止まっちゃう</title>
		<link>http://ecpplus.net/weblog/windows_ruby_threa/</link>
		<comments>http://ecpplus.net/weblog/windows_ruby_threa/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 06:24:53 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=820</guid>
		<description><![CDATA[Windows の Ruby で、Thread 内で新規プロセスを立ち上げようとすると、Thread 内で全体の動作を止めてしまうらしい。たとえば、

Thread.new do 
  `something.exe`
e [...]]]></description>
			<content:encoded><![CDATA[<p>Windows の Ruby で、Thread 内で新規プロセスを立ち上げようとすると、Thread 内で全体の動作を止めてしまうらしい。たとえば、</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span> 
  <span style="color:#996600;">`something.exe`</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>とやってみると、`something.exe` の処理が終わるのを待っているようだ。</p>
<p><a href="http://d.hatena.ne.jp/yotaropg/20070523/1179932947">Windows+Rubyで外部プロセスを立ち上げる時の注意</a> にまさにその情報が載っていた。Windows は、Windows::Process 等を使う必要があるみたいです。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'rubygems'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'win32/process'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'windows/synchronize'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'windows/process'</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'windows/handle'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">Windows::Synchronize</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">Windows::Process</span>
<span style="color:#9966CC; font-weight:bold;">include</span> <span style="color:#6666ff; font-weight:bold;">Windows::Handle</span>
&nbsp;
t = <span style="color:#CC00FF; font-weight:bold;">Thread</span>.<span style="color:#9900CC;">new</span> <span style="color:#9966CC; font-weight:bold;">do</span> 
  <span style="color:#CC00FF; font-weight:bold;">Process</span>.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'app_name'</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'something.exe'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;hello!&quot;</span>
t.<span style="color:#9900CC;">join</span></pre></div></div>

<p>のようにしたら、プロセス生成してもそこで止まることは無くなりました。</p>
]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/windows_ruby_threa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActiveRecord の例外処理</title>
		<link>http://ecpplus.net/weblog/activerecord-%e3%81%ae%e4%be%8b%e5%a4%96%e5%87%a6%e7%90%86/</link>
		<comments>http://ecpplus.net/weblog/activerecord-%e3%81%ae%e4%be%8b%e5%a4%96%e5%87%a6%e7%90%86/#comments</comments>
		<pubDate>Wed, 20 May 2009 07:11:37 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=806</guid>
		<description><![CDATA[RailsのActiveRecordで、save! とかすると保存に失敗したとき例外を投げてくれる。例えば、User.create!(params[:user]) とかして、失敗すると、ActiveRecord::Rec [...]]]></description>
			<content:encoded><![CDATA[<p>RailsのActiveRecordで、save! とかすると保存に失敗したとき例外を投げてくれる。例えば、User.create!(params[:user]) とかして、失敗すると、<code>ActiveRecord::RecordInvalid</code> を投げてくれるのだけど、エラーをどうやって取るのか調べたのでメモ。</p>
<p>よくある例で、ユーザが作れたら index へ遷移して、作れなかったら new で再入力させるという場合。</p>
<h3>createを使う場合</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> create
  <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">create</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:notice</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">'ユーザ作成しました'</span>
    redirect_to <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'index'</span>
  <span style="color:#9966CC; font-weight:bold;">else</span>
    <span style="color:#008000; font-style:italic;"># ここでは、@user.errors でエラーが取れる</span>
    render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'new'</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<h3>create!を使う場合</h3>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> create
  <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">create</span>!<span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:notice</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">'ユーザ作成しました'</span>
  redirect_to <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'index'</span>
<span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::RecordInvalid</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
  <span style="color:#008000; font-style:italic;"># @user は nil になっているので、 @user.errors でエラーが取れない。</span>
  render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'new'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>としたとき、create! で例外が飛んでいるので、当然 @user は nil となってます。なので、rescue 句の中で @user.errors ではエラーが取れません。</p>
<p>調べたところ、e.record で、ActiveRecord の例外を発生させたインスタンスが取れるようです。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> create
  <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">create</span>!<span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
  flash<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:notice</span><span style="color:#006600; font-weight:bold;">&#93;</span> = <span style="color:#996600;">'ユーザ作成しました'</span>
  redirect_to <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'index'</span>
<span style="color:#9966CC; font-weight:bold;">rescue</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::RecordInvalid</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> e
  <span style="color:#008000; font-style:italic;"># e.record に Userクラスのインスタンスが入ってる。</span>
  <span style="color:#0066ff; font-weight:bold;">@user</span> = e.<span style="color:#9900CC;">record</span>
  render <span style="color:#ff3333; font-weight:bold;">:action</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'new'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>たとえば、View内で</p>

<div class="wp_syntax"><div class="code"><pre class="ruby ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#006600; font-weight:bold;">%</span>= error_messages_for <span style="color:#ff3333; font-weight:bold;">:user</span> <span style="color:#006600; font-weight:bold;">%&gt;</span></pre></div></div>

<p>とかしたい場合は、<code>@user = e.record</code> として置けばエラーが楽に表示出来て良い。</p>
]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/activerecord-%e3%81%ae%e4%be%8b%e5%a4%96%e5%87%a6%e7%90%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rubyでtokyotyrant使ってみた</title>
		<link>http://ecpplus.net/weblog/ruby%e3%81%a7tokyotyrant%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/</link>
		<comments>http://ecpplus.net/weblog/ruby%e3%81%a7tokyotyrant%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/#comments</comments>
		<pubDate>Tue, 12 May 2009 10:00:50 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=794</guid>
		<description><![CDATA[OSXを使って、rubyでtokyotyrant使ってみた。
インストール
tokyocabinet
最新版を公式サイトから落としてくる。現時点での最新は、1.4.20だった。

% curl -O http://tok [...]]]></description>
			<content:encoded><![CDATA[<p>OSXを使って、rubyで<a href="http://tokyocabinet.sourceforge.net/">tokyotyrant</a>使ってみた。</p>
<h4>インストール</h4>
<h5>tokyocabinet</h5>
<p>最新版を<a href="http://tokyocabinet.sourceforge.net/">公式サイト</a>から落としてくる。現時点での最新は、1.4.20だった。</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">% curl -O http://tokyocabinet.sourceforge.net/tokyocabinet-1.4.20.tar.gz
% tar xvzf tokyocabinet-1.4.20.tar.gz
% cd tokyocabinet-1.4.20
% ./confiruge --prefix=/usr/local
% make 
# make install</pre></div></div>

<h5>tokyotyrant</h5>
<p>同様に、最新版を<a href="http://tokyocabinet.sourceforge.net/tyrantpkg/">公式サイトのtokyotyrantのパッケージ一覧</a>から落としてくる。現時点での最新は、1.1.26だった。</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">% curl -O http://tokyocabinet.sourceforge.net/tyrantpkg/tokyotyrant-1.1.26.tar.gz
% tar xvzf tokyotyrant-1.1.26.tar.gz
% cd tokyotyrant-1.1.26
% ./confiruge --prefix=/usr/local
% make 
# make install</pre></div></div>

<h5>tokyocabinet Ruby用API</h5>
<p>同様に、最新版を<a href="http://tokyocabinet.sourceforge.net/rubypkg/">公式サイトのRubyAPIの一覧</a>から落としてくる。現時点での最新は、1.23だった。</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">% curl -O http://tokyocabinet.sourceforge.net/rubypkg/tokyocabinet-ruby-1.23.tar.gz
% tar xvzf tokyocabinet-ruby-1.23.tar.gz
% cd tokyocabinet-ruby-<span style="">1.23</span>
% ruby extconf.rb
% make 
# make install</pre></div></div>

<h5>tokyotyrant Ruby用API</h5>
<p>同様に、最新版を<a href="http://tokyocabinet.sourceforge.net/tyrantrubypkg/">公式サイトのRubyAPIの一覧</a>から落としてくる。現時点での最新は、1.5だった。</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">% curl -O http://tokyocabinet.sourceforge.net/tyrantrubypkg/tokyotyrant-ruby-1.5.tar.gz
% tar xvzf tokyotyrant-ruby-1.5.tar.gz
% cd cd tokyotyrant-ruby-<span style="">1.5</span>
# ruby install.rb</pre></div></div>

<h4>tokyotyrantサーバを起動してみる</h4>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">% sudo /usr/local/sbin/ttservctl start
Starting the server of Tokyo Tyrant
/usr/local/sbin/ttservctl: line <span style="">49</span>: ulimit: open files: cannot modify limit: Invalid argument
Executing: ttserver -port <span style="">1978</span> -dmn -pid /var/ttserver/pid
Done</pre></div></div>

<p>なんかエラーが出るので、/usr/local/sbin/ttservctl の49行目を見てみる。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>48
49
50
</pre></td><td class="code"><pre class="bash 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;">-n</span> <span style="color: #ff0000;">&quot;$maxcon&quot;</span> <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;">ulimit</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;$maxcon&quot;</span>
 <span style="color: #000000; font-weight: bold;">fi</span></pre></td></tr></table></div>

<p>maxcon という変数を見てみると</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>21
22
23
</pre></td><td class="code"><pre class="bash bash" style="font-family:monospace;"><span style="color: #007800;">dbname</span>=<span style="color: #ff0000;">&quot;$basedir/casket.tch#bnum=1000000&quot;</span>
<span style="color: #007800;">maxcon</span>=<span style="color: #ff0000;">&quot;65535&quot;</span>
<span style="color: #007800;">retval</span>=0</pre></td></tr></table></div>

<p>ulimit がエラーらしいが、ulimit がよく分からない。適当に数字を maxcon=6000 とかしたらエラー消えたけどいいのか…？</p>
<p>というわけで、無事起動。</p>
<h4>接続</h4>
<p>シェルから接続する場合は、<code>tcrmgr</code> というコマンドを使うらしい。</p>
<h5>値の設定</h5>
<p><code>tcrmgr <strong>put</strong> {host} {key} {value}</code> という書式でセットする。name というキーに、CHU といれるならば、</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">tcrmgr set localhost name CHU</pre></div></div>

<h5>値の取得</h5>
<p><code>tcrmgr <strong>get</strong> {host} {key}</code> という書式でゲットする。name というキーの値を取得するならば、</p>

<div class="wp_syntax"><div class="code"><pre class="" style="font-family:monospace;">tcrmgr get localhost name</pre></div></div>

<p>とりあえず、起動して動いているようだ。</p>
]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/ruby%e3%81%a7tokyotyrant%e4%bd%bf%e3%81%a3%e3%81%a6%e3%81%bf%e3%81%9f/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
