トップ «前の日記(2007-11-24) 最新 次の日記(2007-11-28)» 編集

Route 477



2007-11-27

[prog] PAC(Presentation-Abstraction-Control)パターン

なんかMVCの進化系パターンとして、PACなるものがあるらしい。

MとVとCを持った小さいコンポーネントがたくさんあり、それぞれがCを介してやりとりする…みたいなイメージか。

2番目のサイトでは、使用例として「新しいGUIコンポーネントを開発するとき」が挙げられている。 ボタンやパネルなどいろいろなコンポーネントがあり、それぞれのCを通してイベントをやりとりすると。

[ruby] LiveConsole

実行中のRubyプログラムにTCP経由で接続して、デバックプリントしたりパッチ当てたりなんだり、というソフトウェア。

Lisperはよくそういうことをやる(らしい)けど。

まだ認証機能がないので、イントラネット以外で使わないように、とのこと。

[ruby] Rubyスクリプトであり、バッチファイルでもあるファイルの作り方

こういうのがテンプレらしい。

@echo off
ruby -x "%~f0" %*
goto :EOF

#!ruby
#---------------ruby script starts here
puts "hello, rb.bat"
#---------------ruby script ends here
__END__
:EOF

-xなんてオプションがあったんですねえ。

メッセージ中のスクリプトを取り出して実行します。スクリプトを読み込む時に、`#!'で始まり, 'ruby'という文字列を含む行までを読み飛ばします。スクリプトの終りはEOF(ファイルの終り), ^D(コントロールD), ^Z(コントロールZ)または予約語__END__で指定されます。

[Rubyリファレンスマニュアル - Rubyの起動より引用]

「%~f0」についてはDOS窓で call /? なんかを。

wget.rb.bat

試しに、超適当なwgetもどきを作ってみました。

@echo off
ruby -x "%~f0" %*
goto :EOF

#!ruby
#---------------ruby script starts here
require 'open-uri'

if ARGV.size == 0
  puts "usage: #{$0} url"
else
  url = ARGV[0]
  fname = File.basename(url)
  
  puts "downloading #{url} to #{fname}..."
  File.open(fname, "w") do |f|
    f.write open(url){|io| io.read}
  end
  puts "done."
end

#---------------ruby script ends here
__END__
:EOF

普通にやると

  1. wget.rbを書く
  2. それを呼び出すwget.batを書く
  3. それらをPATHが通ったディレクトリに置く

という手順になるんですが、これだと wget.rb.bat というファイルを作るだけで済むので楽ですね。

本日のツッコミ(全2件) [ツッコミを入れる]
garyo (2007-12-01 08:11)

始めましてgaryoです。<br>Windowsのバグのせいで標準入出力でリダイレクトパイプを使うRubyスクリプトはBAT埋め込みが必要らしいですね。<br><br>http://ruby.g.hatena.ne.jp/garyo/20071129/1196287722

yhara (2007-12-02 01:29)

らしいですねぇ。僕は単純に、rbの関連付けをしてなかっただけなんですが…^^;