Google SketchUp の API は ruby !
http://sketchup.google.com/
http://sketchup.google.com/support/bin/search.py?query=ruby
先日公開された Google SketchUp の API はなんと ruby*1 ! ということで rubyist の間では話題になってたりなかったりします。ということで早速使ってみて RSS を読み込んで表示する単純な Plugin を書いてみました。表示はこんな感じ。
API のドキュメントがまとまっている*2 し、サンプルコードもあるので ruby 使える人ならすぐにでも Plugin 書くことができると思います。使い方も簡単で Plugins ディレクトリに .rb ファイルを放り込むだけ。また window -> ruby Console から対話型のコンソールを使えるので簡単な動作テストが簡単にできるでしょう。
しかし、RSS を読み込むのに大きな問題点があったのです。それは SketchUp に組み込んである ruby では socket 周りが使えない、つまり http でデータの取得ができないのです。セキュリティ考えると解る気もしますが…。
というわけでどうしようもないので `` 使って windows にインストールしてある ruby 叩いてます…。また RSS::Parser も windows にインストールしてある ruby ライブラリの Path を LOADPATH に追加して使ってるので、下記 Plugin を動かすのに windows の ruby が必要だったりします。うーん。
とはいえ、ruby 使って簡単に操作や SketchUp 上のオブジェクトの作成ができるので、ruby 大好きな人は弄ってみると面白いと思いますよ。
以下 RSS 表示スクリプト。Plugins ディレクトリに rssreader.rb という名前で保存してから起動すると、Draw メニューの中に RSSReader というサブメニューが追加されていると思います。
require 'sketchup.rb' $LOAD_PATH << 'C:\ruby\lib\ruby\1.8' require 'rss/1.0' require 'rss/2.0' class RSSReader def initialize @model = Sketchup.active_model @entities = @model.entities @boxes = 0 end def input uri = inputbox(['URL'], ['http://d.hatena.ne.jp/secondlife/rss'], "RSS URL").first rss_draw uri end def draw(title) @entities.add_text( title, [100 * (@boxes % 4), 10 + @boxes / 4 * 100,-1] ) @boxes += 1 end def rss_draw(uri) source = `ruby -r 'open-uri' -e 'puts open("#{uri}").read'` RSS::Parser.parse(source).items.each do |item| draw item.title end end end if( not file_loaded?("rssreader.rb") ) add_separator_to_menu($exStrings.GetString("Draw")) UI.menu($exStrings.GetString("Draw")).add_item($exStrings.GetString("RSSReader")) { RSSReader.new.input } end file_loaded("rssreader.rb")
CSSXSS脆弱性よりもっとヤバイ脆弱性がIEに発見されたようですね の対策
hoshikuzu | star_dust の書斎#P20060428MHTMLREDIRECT
で指摘されているように、現在の WinIE では mhtml スキームを悪用して、クロスドメインの html を取得することが可能になってしまっています。これを利用したはまちちゃんの実証コードを踏んだ人も居るでしょう(実際に WinIE だと情報が抜かれるので、安易に WinIE で見に行かないで下さい)。
この対策として id:hosikuzu:20060428#P20060428MHTMLREDIRECT では以下のような対策方法が提示されています。
- そもそも信頼できないページを見ない
- IE使わない
- アクティブスクリプトとAxtiveXを切る
- レジストリでmhtmlスキームのハンドラを殺す
この中で一番簡単かつ安心なのは WinIE を使わないことですが、IE コンポーネントブラウザなどを使っており IE Love! な人は使うのを辞めるのはちょっと辛いですよね。
ここでは一番下のレジストリで mhtml スキームのハンドラを殺す方法をご紹介。mhtml なんてつかわねーよ!って云う人はレジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS\Handler\mhtml
を削除すれば良いでしょう。
Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFTWARE\Classes\PROTOCOLS\Handler\mhtml]
な .reg ファイルを作って実行するのも良いでしょう。それもめんどくさい人は http://rails2u.com/misc/mhtml_del.reg を落として実行しても良いかもしれません。実行は自己責任でお願いします。
追記
削除ではなくてデータの先頭に『!』をつける方法もあります。この方法の方が元に戻しやすいので良いと思います(コメント欄参照)