<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xml:lang="ja">
	<channel>
		<title>takuma104のRuby/Rails日記</title>
		<link>http://rubyist.g.hatena.ne.jp/takuma104/</link>
		<description>takuma104のRuby/Rails日記</description>
		<dc:creator>takuma104</dc:creator>


		<item>
			<title>Ruby で Google Maps Street View 的な パノラマビューア作ってみた</title>
			<link>http://rubyist.g.hatena.ne.jp/takuma104/20080806/1218042590</link>

			<description><![CDATA[
		<div class="section">
			<p>Google Maps Street View が先日、日本のマップ分が追加されて、時の経つのも忘れて遊んで（徘徊して）ます。こういう360度ぐりぐり見渡せるようなVeiwって簡単にできるのかと調べていたら、どうもOpenGLを使えばかなり簡単に出来そうな気がしたので、Ruby<a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a>opengl (OpenGLのRubyバインド) を使って書いてみました。</p>
			<p>なお、はじめての Ruby<a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a>opengl だったので、<a href="http://d.hatena.ne.jp/fuji-jr/20060528/p2" target="_blank">fujiの雑記</a> などを参考にさせていただいております。基本はGLUTとかからおんなじなので、CでGLUTを使って書いていたような人だとなじみやすいかも（というかそのまま）です。</p>
			<p>まず動作には、JPEGのローディングに使っている ImageMagick と、gem では、ruby<a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a>opengl および rmagick が必要ですので、たとえば</p>
<pre>
$ sudo port install ImageMagick
$ sudo gem install ruby-opengl
$ sudo gem install rmagick
</pre>

			<p>のようにしてインストールしておいてください。後は以下のソースを適当なファイル名(以下ではpanorama.rb)で保存して、</p>
<pre>
$ ruby panorama.rb test.jpg
</pre>

			<p>のようにすると、<a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/test">test</a>.jpg をテクスチャに読んで表示されます。テクスチャ画像（権利的に大丈夫と思われるもの）は <a href="http://www.all-in-one.ee/~dersch/" target="_blank">このへん</a> から入手できます。</p>
			<p>起動すると、以下のような画面が出て、Street viewと同様な操作感マウスでDragができます。あとwキーでワイヤーフレーム表示、qキーで終了です。ズームは出来ませんので、適当に改造してみてね。</p>
			<p><a href="http://f.hatena.ne.jp/takuma104/20080807022717" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/t/takuma104/20080807/20080807022717.jpg" alt="f:id:takuma104:20080807022717j:image" title="f:id:takuma104:20080807022717j:image" class="hatena-fotolife"></a><a href="http://f.hatena.ne.jp/takuma104/20080807022718" class="hatena-fotolife" target="_blank"><img src="http://f.hatena.ne.jp/images/fotolife/t/takuma104/20080807/20080807022718.jpg" alt="f:id:takuma104:20080807022718j:image" title="f:id:takuma104:20080807022718j:image" class="hatena-fotolife"></a></p>
			<p>どうもこれは、Spherical Panoramasというジャンルっぽいです。仕組みは凄く単純で、球面の内側にべたっと普通にテクスチャを貼るとその急の内側から見ると全天が見渡せる、というような感じです。</p>
			<p><s>コードは以下になります。</s> なんか変なのでgistで貼ってみました。</p>
			<p><script src="http://gist.github.com/4241.js"></script></p>
		</div>
]]></description>

			<dc:creator>takuma104</dc:creator>

			<pubDate>Wed, 06 Aug 2008 17:09:50 GMT</pubDate>



		</item>

		<item>
			<title>[ruby][osx]Mac OSX の binary plist 形式から、XML plist 形式に一括変換</title>
			<link>http://rubyist.g.hatena.ne.jp/takuma104/20080519/1211217499</link>

			<description><![CDATA[
		<div class="section">
			<p>Mac OSX のリソース形式や、ちょっとした値などの保存によく使われる plist という形式のファイルがあります. たとえば OSX のリソース等の保存にもよく使われます. この plist には、形式として２種類あって、binary と xml があり、どちらも OS 的には同様に処理されます（OSから見ると等価になります）.</p>
			<p>たとえばリソースエディタの Interface Builder で編集した際には、ほぼ、binaryのplist形式になってしまいます. これだと、たとえば Subversion などでソース管理をしている際に、diff が見れず、変更点が些細な物であっても差分が見れない、という問題があります.</p>
			<p>解決するには簡単で、OSXのコマンドの plist を使って binary から xml に変換すれば良いのですが、このコマンドは再起的に処理してくれないというのがあり、あと一括して、あるディレクトリ以下の バイナリ plist を見つけて処理してくれる物が欲しかったので、ruby でくるんでみました。</p>
<pre class="syntax-highlight">
<span class="synPreProc">#!/usr/bin/env ruby -wKU</span>

dir = <span class="synIdentifier">ARGV</span>.shift || <span class="synSpecial">'</span><span class="synConstant">.</span><span class="synSpecial">'</span>
<span class="synIdentifier">Dir</span>::glob(<span class="synIdentifier">File</span>.expand_path(dir) + <span class="synSpecial">&quot;</span><span class="synConstant">/**/*</span><span class="synSpecial">&quot;</span>) <span class="synStatement">do</span> |<span class="synIdentifier">fn</span>|
  <span class="synStatement">if</span> <span class="synIdentifier">File</span>.ftype(fn) == <span class="synSpecial">'</span><span class="synConstant">file</span><span class="synSpecial">'</span>
    open(fn, <span class="synSpecial">'</span><span class="synConstant">rb</span><span class="synSpecial">'</span>) <span class="synStatement">do</span> |<span class="synIdentifier">f</span>|
      magic = f.read(<span class="synConstant">8</span>)
      <span class="synStatement">if</span> magic == <span class="synSpecial">'</span><span class="synConstant">bplist00</span><span class="synSpecial">'</span>
        r = system <span class="synSpecial">&quot;</span><span class="synConstant">plutil -convert xml1 '</span><span class="synSpecial">#{fn}</span><span class="synConstant">'</span><span class="synSpecial">&quot;</span>
        <span class="synStatement">if</span> r
          puts <span class="synSpecial">&quot;</span><span class="synConstant">Success: </span><span class="synSpecial">#{fn}&quot;</span>
        <span class="synStatement">else</span>
          puts <span class="synSpecial">&quot;</span><span class="synConstant">Failed: </span><span class="synSpecial">#{fn}&quot;</span>
        <span class="synStatement">end</span>
      <span class="synStatement">end</span>
    <span class="synStatement">end</span>
  <span class="synStatement">end</span>
<span class="synStatement">end</span>
</pre>

			<p>使い方は、適当な名前たとえば conv.rb とかで保存して</p>
<pre>
$ ruby conv.rb ./
</pre>

			<p>とかすると、カレントディレクトリ以下の全バイナリ plist を検出して、すべてxml形式に変換してくれます. 変換した物は Success: とか表示されます. Subversion などに commit する際に毎回実行すると幸せになれると思います.</p>
			<p>（おまけのoneliner）</p>
			<p>Subversion で binary mode になっているときに、そのプロパティを一括削除</p>
<pre>
$ svn st | awk &#39;{print $2}&#39; | xargs svn pd svn:mime-type 
</pre>

		</div>
]]></description>

			<dc:creator>takuma104</dc:creator>

			<pubDate>Mon, 19 May 2008 17:18:19 GMT</pubDate>


			<category>ruby</category>

			<category>osx</category>


		</item>

		<item>
			<title>[ruby][eventmachine]Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く [その２]</title>
			<link>http://rubyist.g.hatena.ne.jp/takuma104/20080507/1210184908</link>

			<description><![CDATA[
		<div class="section">
			<p><a href="http://rubyist.g.hatena.ne.jp/takuma104/20080506/1210101848" target="_blank">昨日</a>の続きで、さらに <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/TCPServer">TCPServer</a> での <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/Thread">Thread</a><a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a><a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/loop">loop</a> 内と全く同じメソッドが EventMachine でも使えるように改良してみました。</p>
			<p>使い方は、</p>
<pre>
ruby hoge.rb -e
</pre>

			<p>とか <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a>e オプションをつけると、EventMachine を使用したサーバになり、<a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/%2d">-</a>eをつけないと <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/TCPServer">TCPServer</a> を使用したサーバになります。</p>
			<p>ポイントは、on_accept メソッドを両者で使い回しているところです。EventMachine のほうを <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/socket">socket</a> に合わせる形にしている FilberIO クラスにほとんど秘密があります（この名前が微妙だな。なにかいい名前無いかな??）</p>
			<p>ソースは以下です。</p>
			<a name="seeall"></a>

		</div>
]]></description>

			<dc:creator>takuma104</dc:creator>

			<pubDate>Wed, 07 May 2008 18:28:28 GMT</pubDate>


			<category>ruby</category>

			<category>eventmachine</category>


		</item>

		<item>
			<title>[ruby][eventmachine]Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く</title>
			<link>http://rubyist.g.hatena.ne.jp/takuma104/20080506/1210101848</link>

			<description><![CDATA[
		<div class="section">
			<p><a href="http://rubyforge.org/projects/eventmachine/" target="_blank">Ruby/EventMachine</a> という、非同期サーバがお手軽に書けるライブラリを教えてもらいました。ほかにも、<a href="http://rubyforge.org/projects/rev/" target="_blank">Rev</a> というのもあるようですが、今回試したのは、EventMachine のほう。Ruby/EventMachine は、現在の実装だと <a class="keyword" href="http://rubyist.g.hatena.ne.jp/keyword/select">select</a>(2) に落ちているようです。Rev はすでに epoll(2) 実装になっているようです。</p>
			<a name="seeall"></a>

		</div>
]]></description>

			<dc:creator>takuma104</dc:creator>

			<pubDate>Tue, 06 May 2008 19:24:08 GMT</pubDate>


			<category>ruby</category>

			<category>eventmachine</category>


		</item>

	</channel>
</rss>
