

<?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>平日プログラミング休日ツーリング</description>
	<lastBuildDate>Sat, 03 Dec 2011 16:17:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ruby1.9 でメール解析</title>
		<link>http://ecpplus.net/weblog/ruby1-9-%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e8%a7%a3%e6%9e%90/</link>
		<comments>http://ecpplus.net/weblog/ruby1-9-%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e8%a7%a3%e6%9e%90/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 12:30:17 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=1179</guid>
		<description><![CDATA[　Ruby1.8 は、tmail で -&#62; Rubyで受信メール解析(変なヤバいもんログ内) どうぞ。 　gem で mail をインストールします。 # gem install mail メールのファイルを解析する方法です。 require 'mail' mail = Mail.read&#40;&#34;mail_dir/001.eml&#34;&#41; mail.from.first # 送信元 mail.from に配列で入ってる mail.to # 送信先 mail.to に配列で入ってる mail.subject # 件名 mail.body # 本文 みたいな感じに取得できます。<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/ruby1-9-%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e8%a7%a3%e6%9e%90/' addthis:title='Ruby1.9 でメール解析 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>　Ruby1.8 は、tmail で -&gt; <a href="http://ecpplus.net/weblog/ruby%E3%81%A7%E5%8F%97%E4%BF%A1%E3%83%A1%E3%83%BC%E3%83%AB%E8%A7%A3%E6%9E%90/">Rubyで受信メール解析(変なヤバいもんログ内)</a> どうぞ。</p>
<p>　gem で mail をインストールします。</p>

<div class="wp_syntax"><div class="code"><pre class="sh" style="font-family:monospace;"># gem install mail</pre></div></div>

<p>メールのファイルを解析する方法です。</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'mail'</span>
mail = Mail.<span style="color:#9900CC;">read</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;mail_dir/001.eml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
mail.<span style="color:#9900CC;">from</span>.<span style="color:#9900CC;">first</span> <span style="color:#008000; font-style:italic;"># 送信元 mail.from に配列で入ってる</span>
mail.<span style="color:#9900CC;">to</span>         <span style="color:#008000; font-style:italic;"># 送信先 mail.to に配列で入ってる</span>
mail.<span style="color:#9900CC;">subject</span>    <span style="color:#008000; font-style:italic;"># 件名</span>
mail.<span style="color:#9900CC;">body</span>       <span style="color:#008000; font-style:italic;"># 本文</span></pre></div></div>

<p>みたいな感じに取得できます。</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/ruby1-9-%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e8%a7%a3%e6%9e%90/' addthis:title='Ruby1.9 でメール解析 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/ruby1-9-%e3%81%a7%e3%83%a1%e3%83%bc%e3%83%ab%e8%a7%a3%e6%9e%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>unit test の fixtures で関連がないテーブルの primary key が取りたい</title>
		<link>http://ecpplus.net/weblog/unit-test-%e3%81%ae-fixtures-%e3%81%a7%e9%96%a2%e9%80%a3%e3%81%8c%e3%81%aa%e3%81%84%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae-primary-key-%e3%81%8c%e5%8f%96%e3%82%8a%e3%81%9f%e3%81%84/</link>
		<comments>http://ecpplus.net/weblog/unit-test-%e3%81%ae-fixtures-%e3%81%a7%e9%96%a2%e9%80%a3%e3%81%8c%e3%81%aa%e3%81%84%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae-primary-key-%e3%81%8c%e5%8f%96%e3%82%8a%e3%81%9f%e3%81%84/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 05:17:15 +0000</pubDate>
		<dc:creator>ちゅう</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[Rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://ecpplus.net/weblog/?p=1171</guid>
		<description><![CDATA[Rails の unit test を書いていて、関連がないテーブルの primary key が知りたい状況があった。 関連があるテーブルだと、 class User &#38;lt; ActiveRecord::Base has_many :posts end class Post &#38;lt; ActiveRecord::Base belongs_to :user end みたいなときに test/fixtures/users.yml chihaya: name: 千早 test/fixtures/posts.yml first: user: chihaya title: くっ…！ body: 先日フェスがあったのですが… みたいな感じにすると関連が作れる。 今回は、単純なログみたいなもので、色んなテーブルの id を、target_id みたいなところにしまって、クラス名と合わせてユニークになるように管理してた。数が多かったのと関連付けて取る必要が無かったので、関連を作ってなかったんだけれども、fixture を書く時に、外部の id の取得方法に迷った。 つまり、先ほどの例で、has_many, belongs_to が無かった時にどうするかということです。 users.yml に、 id:1 とか書くというのも1つの方法です。 id を指定せずに rake fixtures:load [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/unit-test-%e3%81%ae-fixtures-%e3%81%a7%e9%96%a2%e9%80%a3%e3%81%8c%e3%81%aa%e3%81%84%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae-primary-key-%e3%81%8c%e5%8f%96%e3%82%8a%e3%81%9f%e3%81%84/' addthis:title='unit test の fixtures で関連がないテーブルの primary key が取りたい '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Rails の unit test を書いていて、関連がないテーブルの primary key が知りたい状況があった。</p>
<p>関連があるテーブルだと、</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
has_many <span style="color:#ff3333; font-weight:bold;">:posts</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">class</span> Post <span style="color:#006600; font-weight:bold;">&amp;</span>lt; <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
belongs_to <span style="color:#ff3333; font-weight:bold;">:user</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>みたいなときに</p>
<p>test/fixtures/users.yml</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">chihaya:
name: 千早</pre></div></div>

<p>test/fixtures/posts.yml</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">first:
user: chihaya
title: くっ…！
body: 先日フェスがあったのですが…</pre></div></div>

<p>みたいな感じにすると関連が作れる。</p>
<p>今回は、単純なログみたいなもので、色んなテーブルの id を、target_id みたいなところにしまって、クラス名と合わせてユニークになるように管理してた。数が多かったのと関連付けて取る必要が無かったので、関連を作ってなかったんだけれども、fixture を書く時に、外部の id の取得方法に迷った。</p>
<p>つまり、先ほどの例で、has_many, belongs_to が無かった時にどうするかということです。<br />
users.yml に、 id:1 とか書くというのも1つの方法です。</p>
<p>id を指定せずに rake fixtures:load ってすると、id が結構大きな数字になりますが、あれはラベルの文字列によって計算された値みたいですね。</p>
<p><a href="http://api.rubyonrails.org/classes/ActiveRecord/Fixtures.html#method-c-identify" title="Fixtures#identify" target="_blank">ActiveRecord::Fixtures.identify(label)</a> というメソッドで計算されていて、プラットフォーム依存で、同じ文字列を与えれば同じ値が返ってくる仕組みになっているようです。</p>
<p>そうすると、先ほどの例だと</p>
<p>test/fixtures/posts.yml</p>

<div class="wp_syntax"><div class="code"><pre class="yml" style="font-family:monospace;">first:
user_id: &amp;lt;%= ActiveRecord::Fixtures.identify(:chihaya) %&amp;gt;
title: くっ…！
body: 先日フェスがあったのですが…</pre></div></div>

<p>とすると、常に千早の id が取れるようになります。ActiveRecord::Fixtures.identify(:chihaya) の値は、見て分かるようにテーブルに依存することはなく、別テーブルで chihaya というラベルを使うと、同じ id になります。ActiveRecord::Fixtures が見つからないときは、 require &#8216;active_record/fixtures&#8217; とします。</p>
<p>なんだろうなーと思ってた巨大な整数の id の計算方法がわかってすっきりしました。</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/unit-test-%e3%81%ae-fixtures-%e3%81%a7%e9%96%a2%e9%80%a3%e3%81%8c%e3%81%aa%e3%81%84%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae-primary-key-%e3%81%8c%e5%8f%96%e3%82%8a%e3%81%9f%e3%81%84/' addthis:title='unit test の fixtures で関連がないテーブルの primary key が取りたい '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/unit-test-%e3%81%ae-fixtures-%e3%81%a7%e9%96%a2%e9%80%a3%e3%81%8c%e3%81%aa%e3%81%84%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae-primary-key-%e3%81%8c%e5%8f%96%e3%82%8a%e3%81%9f%e3%81%84/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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 速いです！リアルタイムで同期しているので、数人でやると、毎秒サーバと50回とかやりとりしてるのだけど (1回の通信はおそらく100bytesくらい)、サーバ側はほとんどCPU食ってないみたいですね。すごぃ。もし AJAX とか使うとすると、毎秒50回とかサーバにリクエスト飛ばそうとか絶対考えないよ。2窓開いてみると、遅延はほぼ0で通信できてることが分かります。 　WebSocket は、やってみたところでは文字列しか送れなさそうなので、今までAJAXでJSON扱ってたようなものは文字列にして送る必要がありました。 JSON.stringfy&#40;&#123;x:100, y:100&#125;&#41; みたいにしてサーバに送って、サーバからJSONを文字列にしたものを送って JSON.parse&#40;event.data&#41; 的な感じにJSONを得てみました。 　お絵かき部分と、チャット部分でWebSocketを使っています。サーバ側のWebSocket部分は em-websocket を使いました。EventMachine を使った WebSocket 実装みたいです。WebSocket はシンプルでした。EventMachine の使い方を調べるのに時間がかかった。。 　お絵かき部分は、canvas を使っています。ファイルをロードの部分は XMLHttpRequest Level2 を使っています。最初は、FileAPI を使って実装すればサーバ経由せずにファイルロードできてｳﾏｰ!! と思ったけど、まだ Firefox でしか使えないみたいなので、あきらめました。Twitterに投稿っていう部分は、canvas から toDataURL() で canvas に描かれたデータが Base64エンコードされたものを取って、そいつをサーバ側に送って保存しています。今までの XMLHttpRequest ってファイルをサーバに送信出来なかったので、無理矢理 iframe 使ったりとか頑張っていたけど、ファイルが送れるようになってすごい便利そうです。使い方は今までのものと大して変わらないみたいですし。 　 　HTMLを生成する部分は sinatra ちゃんです。sinatra ちゃん可愛いよ。センスいいと思う。 　2日で作られたものなので、例外処理とかあんまりしてなぃ。。でも2日でこのくらいのもの出来るとは、高機能なHTMLですねー 　ソースコードを github で公開しています。 -> ecpplus / websocket_chat<div class="addthis_toolbox addthis_default_style " addthis:url='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/' addthis:title='WebSocket でリアルタイムお絵かきチャット作った '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></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" 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" 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>
<p>　ソースコードを github で公開しています。 -> <a href="https://github.com/ecpplus/websocket_chat" target="_blank">ecpplus / websocket_chat</a></p>
<div class="addthis_toolbox addthis_default_style " addthis:url='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/' addthis:title='WebSocket でリアルタイムお絵かきチャット作った '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></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 とかなってたので、コードを変更しなきゃと思ってサンプルページ見たけど、途中に描かれている値が間違っているみたいだ…。 サンプルリクエストに署名を行うためのステップ 【amazonヘルプ】 の、Version=2009-03-31 という文字列が、正しくは Version=2009-01-06 みたいです。 下記のサイトを参考にしました。下記のページだと、ヘルプページと最終出力は同じなのに、入力値が違う！って気づいたので、合わせてみたらちゃんと出来ました。 アマゾンのProduct Advertising APIにRubyでアクセス: ふと思う&#8211;ちょっと考える （いたずら編） Amazon Product Advertising APIの認証の件 &#8211; zorioの日記 require 'hmac/sha2' require 'base64' &#160; def genreate_hash&#40;original_url&#41; url_string = original_url.split&#40;'&#38;'&#41;.sort.join&#40;'&#38;'&#41; string = &#91;'GET', 'webservices.amazon.com', '/onca/xml', url_string&#93;.join&#40;&#34;\n&#34;&#41; Base64.encode64&#40;HMAC::SHA256.digest&#40;'1234567890', string&#41;&#41; end 上記で original_url を "Service=AWSECommerceService&#038;AWSAccessKeyId=00000000000000000000&#038;Operation=ItemLookup&#038;ItemId=0679722769&#038;ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&#038;Version=2009-01-06&#038;Timestamp=2009-01-01T12%3A00%3A00Z" とすれば、 Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=\n が出力されます。 なお、サンプル通りの文字列でやると、url_string が [...]<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/amazon-product-advertising-api-signiture/' addthis:title='amazon Product Advertising API 署名 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></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" 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>
<pre lang="">"Service=AWSECommerceService&#038;AWSAccessKeyId=00000000000000000000&#038;Operation=ItemLookup&#038;ItemId=0679722769&#038;ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&#038;Version=2009-01-06&#038;Timestamp=2009-01-01T12%3A00%3A00Z"</pre>
<p>とすれば、</p>
<pre lang="">Nace+U3Az4OhN7tISqgs1vdLBHBEijWcBeCqL5xN9xg=\n</pre>
<p>が出力されます。</p>
<p>なお、サンプル通りの文字列でやると、url_string が</p>
<pre lang="">"Service=AWSECommerceService&#038;AWSAccessKeyId=00000000000000000000&#038;Operation=ItemLookup&#038;ItemId=0679722769&#038;ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&#038;Version=2009-03-31&#038;Timestamp=2009-01-01T12%3A00%3A00Z"</pre>
<p>となって、</p>
<pre lang="">EDWJ1+VXQhAtPDKQ0f+wpaFQcBVDJyTIpDP7BZgxMiA=\n</pre>
<p>が出力されます。</p>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/amazon-product-advertising-api-signiture/' addthis:title='amazon Product Advertising API 署名 '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></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` end とやってみると、`something.exe` の処理が終わるのを待っているようだ。 Windows+Rubyで外部プロセスを立ち上げる時の注意 にまさにその情報が載っていた。Windows は、Windows::Process 等を使う必要があるみたいです。 require 'rubygems' require 'win32/process' require 'windows/synchronize' require 'windows/process' require 'windows/handle' &#160; include Windows::Synchronize include Windows::Process include Windows::Handle &#160; t = Thread.new do Process.create&#40;'app_name' =&#62; 'something.exe'&#41; end puts &#34;hello!&#34; t.join のようにしたら、プロセス生成してもそこで止まることは無くなりました。<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/windows_ruby_threa/' addthis:title='WindowsのRubyでThread内でプロセス作成すると止まっちゃう '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></description>
			<content:encoded><![CDATA[<p>Windows の Ruby で、Thread 内で新規プロセスを立ち上げようとすると、Thread 内で全体の動作を止めてしまうらしい。たとえば、</p>

<div class="wp_syntax"><div class="code"><pre class="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" 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> Windows::<span style="color:#CC00FF; font-weight:bold;">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>
<div class="addthis_toolbox addthis_default_style " addthis:url='http://ecpplus.net/weblog/windows_ruby_threa/' addthis:title='WindowsのRubyでThread内でプロセス作成すると止まっちゃう '  ><a class="addthis_button_facebook_like" fb:like:layout="button_count"></a><a class="addthis_button_tweet"></a><a class="addthis_counter addthis_pill_style"></a></div>]]></content:encoded>
			<wfw:commentRss>http://ecpplus.net/weblog/windows_ruby_threa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

