著作一覧 |
とりあえず作ってみたstar.batが介入しているのは、StarRuby::FontとStarRuby::Textureだけなので、requireはだめなわけですが、どうせなら、requireにも介入するか。
というわけで、とりあえずお手元の、star.batに次のパッチを当ててみてください。
--- star.bat~ Fri Jun 27 21:34:47 2008 +++ star.bat Sat Jun 28 02:00:50 2008 @@ -34,11 +34,11 @@ end def self.to_local(uri, path) - [ '', '.TTF', '.png'].each do |ext| + [ '', '.TTF', '.png', '.rb' ].each do |ext| begin src = open(uri.to_s + ext, 'rb') FileUtils.mkdir_p File.dirname(path) - File.open(path, 'wb') do |f| + File.open(path + ext, 'wb') do |f| f.write src.read end src.close @@ -62,9 +62,22 @@ _load RemoteFile.get(path) end end + + end include StarRuby + +alias _require require + +def require(path) + begin + _require path + rescue LoadError + StarRuby::RemoteFile.get(path) + _require path + end +end load RemoteFile.get(ARGV[0])
一応、動くのは確認したので、ASR 1.8.7.6も作るけど。
追記:requireで拡張子pngとかTTFは無駄過ぎるな……
ASR 1.8.7.6(MD5checksum: bbdaad881ab3761b263b5af1de227f95)
requireの場合は拡張子rbのみ検索するようにしたstar.batに更新しました。
あと、RubyGemsを1.2に更新。
star http://arton.no-ip.info/data/test/star/falling_blocks.rb
も実行できます。
というか、知らない人にはなんだかさっぱりわからないよな。
Star Rubyは、SDLの上に星さんが作ったゲームツールキットというか、クラスライブラリ。
で、ASRに0.2.0バイナリ配布アーカイブからSDLを含むDLLを同梱したということです。約1.5MBの増量だけどまだまだOne Clickに比べればコンパクト。
あと、おまけにセキュリティについて一切考えていないスマートクライアント風な実行用バッチファイル(star.bat)を添付したと。Openクラスで良かった!
メモを整理してたら、
Rubinius: Cが少ないから互換性の問題がない
YARV: Rubyで書いたところが少ない
→RubiniusがRubyで書いたコアクラスを取る
ってのが出てきた。反映させるかと一瞬考えたが、ちょっと目線が異なる内容なので、ここに書いて終わりにしとく。
追記:メモなので短い言葉を選んでるため、「取る」という、なんかタマとかクニとかを対象にする物騒な言葉を使っているけど、実装の仕組みからJRubyよりRubiniusのほうが協力しあえるというような意味です(で、その中には、Rubiniusで作成したコアライブラリを流用してVM以外はピュアRuby環境というのも試せるとか、そんな感じ)
ジェズイットを見習え |
1.8.7.6 を入れてみたのですが、 require が変わっていないような。 1.8.7.5 を一旦消してから入れないとだめなのかな。<br>ところで star コマンドでゲームを実行する場合、 SAFE レベルを上げたほうがよろしいかと存じますが、いかがでしょうか。今のままだと、「あるディレクトリ以下のファイルを全部消す」とか平気で出来てしまいます。
一旦 1.8.7.5 (6?) を消して入れなおしたら star.bat も更新されて falling_blocks 動きましたー。
消してから入れる必要は謎です。VistaはOKだけどXPはだめとか何か条件があるみたいですが僕もわかりません(うまく上書きされるときもあるし、なんか残るときもあるので)。<br>一度、アンインストールして消してみていただけますか? (#p1のパッチを当てると、インストールしたファイルから変わるので、アンインストール時に削除しなくなるというのはあるかも知れませんが断言はできません)<br>$SAFEについては、2くらいに設定してもいいですけど、ファイルの削除はできないけど上書きはできるとか、ちょっといい加減なんですよねぇ。<br>ブラウザーからのリンクと異なり、気付かずにクリックとかメールから誘導みたいな操作がありえない、つまり、コマンドラインの引数でURIを指定することによって指定したファイルと、それが存在するディレクトリ以下のファイルのロードと実行に制限というので良いのではないでしょうか。<br>もちろん、サイトが書き変えられたら×とか、ドメイン乗っ取りとかを気にすればお話になりませんが、それを言い出すと、ASRをインストールするとか、StarRubyをインストールするとか、署名なしバイナリを扱うことがそもそもお話になっていないので、許容範囲かなとは思います。<br>が、infoseekへコピーするバージョンでは$SAFE=2は設定しておきましょう。
悪意はなくともバグはあり得るから、やはり$SAFE=2くらいの設定は必要ですね。
星一と一旦って遠目にはシメトリカルだなぁ。
星一<br>一旦<br><br>ほんとだ
で、試してみたら、ARGV[0].dup.untaintという書き方を覚えたのは良いとして、$SAFE=2ではDir.mkdirがエラーでした。$SAFE=1かなぁ。
いや、$SAFE=1はプログラムを信用している前提だから設定する意味はないですね。
あーそっか、 Texture.load とかのときに使うんですね。 > Dir.mkdir
Dir.mkdirは解消方法を見つけたのですが、今度は、Windows Vista固有(だと思う)でのtempdirライブラリの問題を見つけてしまいました……奥が深い。