Hatena::Grouprubyist

takuma104のRuby/Rails日記

ツッコミ大歓迎!間違等ありましたらご指摘ください! / はてダはこちらで書いてます。

2008-08-06

Ruby で Google Maps Street View 的な パノラマビューア作ってみた

02:09 | Ruby で Google Maps Street View 的な パノラマビューア作ってみた - takuma104のRuby/Rails日記 を含むブックマーク はてなブックマーク - Ruby で Google Maps Street View 的な パノラマビューア作ってみた - takuma104のRuby/Rails日記 Ruby で Google Maps Street View 的な パノラマビューア作ってみた - takuma104のRuby/Rails日記 のブックマークコメント

Google Maps Street View が先日、日本のマップ分が追加されて、時の経つのも忘れて遊んで(徘徊して)ます。こういう360度ぐりぐり見渡せるようなVeiwって簡単にできるのかと調べていたら、どうもOpenGLを使えばかなり簡単に出来そうな気がしたので、Ruby-opengl (OpenGLのRubyバインド) を使って書いてみました。

なお、はじめての Ruby-opengl だったので、fujiの雑記 などを参考にさせていただいております。基本はGLUTとかからおんなじなので、CでGLUTを使って書いていたような人だとなじみやすいかも(というかそのまま)です。

まず動作には、JPEGのローディングに使っている ImageMagick と、gem では、ruby-opengl および rmagick が必要ですので、たとえば

$ sudo port install ImageMagick
$ sudo gem install ruby-opengl
$ sudo gem install rmagick

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

$ ruby panorama.rb test.jpg

のようにすると、test.jpg をテクスチャに読んで表示されます。テクスチャ画像(権利的に大丈夫と思われるもの)は このへん から入手できます。

起動すると、以下のような画面が出て、Street viewと同様な操作感マウスでDragができます。あとwキーでワイヤーフレーム表示、qキーで終了です。ズームは出来ませんので、適当に改造してみてね。

f:id:takuma104:20080807022717j:imagef:id:takuma104:20080807022718j:image

どうもこれは、Spherical Panoramasというジャンルっぽいです。仕組みは凄く単純で、球面の内側にべたっと普通にテクスチャを貼るとその急の内側から見ると全天が見渡せる、というような感じです。

コードは以下になります。 なんか変なのでgistで貼ってみました。

MsmMsm2012/08/05 01:53So true. Honesty and everything reocgniezd.

qyuvaeqyuvae2012/08/05 16:20xZ0trQ <a href="http://sxfwcrbbegue.com/">sxfwcrbbegue</a>

yozpxrnuxyozpxrnux2012/08/06 12:41GFwcGE , [url=http://estrntccwaob.com/]estrntccwaob[/url], [link=http://lxgmczwecpyy.com/]lxgmczwecpyy[/link], http://bxemxzbciyep.com/

qqmaxfsywgqqmaxfsywg2012/08/07 19:55sYLVWw , [url=http://lqhfkgvtymir.com/]lqhfkgvtymir[/url], [link=http://zlvjcygmbnfh.com/]zlvjcygmbnfh[/link], http://wlhzirrthjlf.com/

トラックバック - http://rubyist.g.hatena.ne.jp/takuma104/20080806

2008-05-19

Mac OSX の binary plist 形式から、XML plist 形式に一括変換

| 02:18 | Mac OSX の binary plist 形式から、XML plist 形式に一括変換 - takuma104のRuby/Rails日記 を含むブックマーク はてなブックマーク - Mac OSX の binary plist 形式から、XML plist 形式に一括変換 - takuma104のRuby/Rails日記 Mac OSX の binary plist 形式から、XML plist 形式に一括変換 - takuma104のRuby/Rails日記 のブックマークコメント

Mac OSX のリソース形式や、ちょっとした値などの保存によく使われる plist という形式のファイルがあります. たとえば OSX のリソース等の保存にもよく使われます. この plist には、形式として2種類あって、binary と xml があり、どちらも OS 的には同様に処理されます(OSから見ると等価になります).

たとえばリソースエディタの Interface Builder で編集した際には、ほぼ、binaryのplist形式になってしまいます. これだと、たとえば Subversion などでソース管理をしている際に、diff が見れず、変更点が些細な物であっても差分が見れない、という問題があります.

解決するには簡単で、OSXのコマンドの plist を使って binary から xml に変換すれば良いのですが、このコマンドは再起的に処理してくれないというのがあり、あと一括して、あるディレクトリ以下の バイナリ plist を見つけて処理してくれる物が欲しかったので、ruby でくるんでみました。

#!/usr/bin/env ruby -wKU

dir = ARGV.shift || '.'
Dir::glob(File.expand_path(dir) + "/**/*") do |fn|
  if File.ftype(fn) == 'file'
    open(fn, 'rb') do |f|
      magic = f.read(8)
      if magic == 'bplist00'
        r = system "plutil -convert xml1 '#{fn}'"
        if r
          puts "Success: #{fn}"
        else
          puts "Failed: #{fn}"
        end
      end
    end
  end
end

使い方は、適当な名前たとえば conv.rb とかで保存して

$ ruby conv.rb ./

とかすると、カレントディレクトリ以下の全バイナリ plist を検出して、すべてxml形式に変換してくれます. 変換した物は Success: とか表示されます. Subversion などに commit する際に毎回実行すると幸せになれると思います.

(おまけのoneliner)

Subversion で binary mode になっているときに、そのプロパティを一括削除

$ svn st | awk '{print $2}' | xargs svn pd svn:mime-type 
トラックバック - http://rubyist.g.hatena.ne.jp/takuma104/20080519

2008-05-07

Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く [その2]

| 03:28 | Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く [その2] - takuma104のRuby/Rails日記 を含むブックマーク はてなブックマーク - Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く [その2] - takuma104のRuby/Rails日記 Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く [その2] - takuma104のRuby/Rails日記 のブックマークコメント

昨日の続きで、さらに TCPServer での Thread-loop 内と全く同じメソッドが EventMachine でも使えるように改良してみました。

使い方は、

ruby hoge.rb -e

とか -e オプションをつけると、EventMachine を使用したサーバになり、-eをつけないと TCPServer を使用したサーバになります。

ポイントは、on_accept メソッドを両者で使い回しているところです。EventMachine のほうを socket に合わせる形にしている FilberIO クラスにほとんど秘密があります(この名前が微妙だな。なにかいい名前無いかな??)

ソースは以下です。

続きを読む

トラックバック - http://rubyist.g.hatena.ne.jp/takuma104/20080507

2008-05-06

Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く

| 04:24 | Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く - takuma104のRuby/Rails日記 を含むブックマーク はてなブックマーク - Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く - takuma104のRuby/Rails日記 Ruby/EventMachine での非同期サーバを Generator を使って同期サーバっぽく書く - takuma104のRuby/Rails日記 のブックマークコメント

Ruby/EventMachine という、非同期サーバがお手軽に書けるライブラリを教えてもらいました。ほかにも、Rev というのもあるようですが、今回試したのは、EventMachine のほう。Ruby/EventMachine は、現在の実装だと select(2) に落ちているようです。Rev はすでに epoll(2) 実装になっているようです。

続きを読む

takuma104takuma1042008/05/08 03:31EventMachineとはなにか、というところから解説を追記しました。

トラックバック - http://rubyist.g.hatena.ne.jp/takuma104/20080506

2008-05-05

RubyでDP1のRAW画像からサムネイルとかのJPEGを抜き出すコードを書いた

| 01:54 | RubyでDP1のRAW画像からサムネイルとかのJPEGを抜き出すコードを書いた - takuma104のRuby/Rails日記 を含むブックマーク はてなブックマーク - RubyでDP1のRAW画像からサムネイルとかのJPEGを抜き出すコードを書いた - takuma104のRuby/Rails日記 RubyでDP1のRAW画像からサムネイルとかのJPEGを抜き出すコードを書いた - takuma104のRuby/Rails日記 のブックマークコメント

これまたニッチwなのを書きました。SIGMA DP1 というすばらしい絵が撮れるデジカメがあるのですが、この RAW 画像が、なかなか普通の RAW 現像ソフトとかで対応してもらえなくて結構ファイルの取り扱いに困ります。DP1 付属の RAW 現像ソフトはよく出来ているのですが、やっぱり OS のプレビュー使いたいなとかで、JPEG にしたいとかがあると思います。そんな時 RAW の中に JPEG がそのまま格納(オリジナルサイズのも!)されているのを知ったので、それを抜き出せないかと。ちょっと書いてみたらまあまあシンプルだったので貼ってみます。

DP1 の RAW フォーマットである X3F の解説は、こちらから。作者さんthanks!

http://anotherm8.exblog.jp/7838817/

続きを読む

きたしきたし2008/05/11 12:41すばらしい!
実は同じことをやろうとして昨日半日X3FファイルをHexエディタで読んでいました。。。
既にやっておられる方がいらっしゃったとは。

jpeg以外の部分のデータ形式が早く解読(or 公開)されるといいですね。

takuma104takuma1042008/05/11 15:34ありがとうございます。Foveonデータの方ですが、dcraw.cではまだ対応されてないみたいですね...
http://cybercom.net/~dcoffin/dcraw/

SIGMA社のSD9/SD10/SD14には対応しているので、そのうち対応するのかな?作者の人に聞いてみようかと思います.

takuma104takuma1042008/05/11 22:37さきほど作者のdcoffinさんに、サンプルのRAWファイルとともに対応を聞いておきました。何かレスがあったらまたここに書き込みます。

トラックバック - http://rubyist.g.hatena.ne.jp/takuma104/20080505