@m_seki の

I like ruby tooから引っ越し

dRubyの25周年を祝う、美麗なLPサイズの画集

dRuby25周年だった!

LPサイズ。美麗で開封できない...

RECORD / 江口寿史、初のジャケットアートワーク集。LPサイズのイラスト全29点、本人による全作品解説、吉田拓郎の寄稿文、銀杏BOYZ峯田和伸とのスペシャル対談を収録した超豪華画集!

片桐さんからのギフトで、25年前の今日、dRubyメーリングリストに投稿したことを思い出した。いただいたバージョンは緑のシールになってる(amazonの写真は茶色)。何種類あるんだろうか。

RECORD

dRubyのプロキシー的なもの

最近、dRubyを使う機会が多い。イントラネットRWikiをホストしているマシンのリプレイスのために、旧マシンのRWikiを稼働させながら新マシンに移行する実験をしてる。

旧マシンのRWikiのDRbObjectを操作(RMI)すると、自動的に新マシンを操作するようにしたいなーと思ってプロキシを書いてみた。 ORG_URIが旧マシン、NEW_URIが新マシンだよ。

require 'drb'

DRb.start_service(ORG_URI, DRbObject.new_with_uri(NEW_URI))

短い。

別マシンへのエクスポート

旧マシンのページを新マシンにコピーしたい。

RWikiのfrontオブジェクト(dRubyで最初に反応する係)にはデータをファイルに出力する口がついている。

    def export(port, since)
      n = 0
      @book.each {|x|
        next unless x.modified
        next if x.modified < since
        Marshal.dump([x.name, x.src, x.modified], port)
        n += 1
      }
      n
    end

exportは指定した日よりも新しく更新されたページをファイルに出力する。

稼働中のRWikiのfrontオブジェクトにexportをRMIすればよい。 仮引数portはMarshal.dumpの書き込み先である。 通常はIO等を渡すのだが、今回はdRubyなので(RWikiサーバーにとっては)リモートのFileを渡すことになる。 *1

クライアントはこんな感じ。クライアントはFileオブジェクトの暗黙的なサーバーになるので、DRb.start_serviceが必要。

DRb.start_service

rwiki = DRbObject.new_with_uri('druby://hogehgoe:8470')
File.open('hoge.dump', 'wb') {|fp|
  rwiki.export(fp, Time.new(2024, 7, 1))
}

もちろん、同じマシンに限らず、別のマシンからもRMIできるので、同じスクリプトでexportできるのである。

dRuby、まるでオブジェクト指向みたい!べんりー

dRuby25周年を物理的に祝おう!

(物理じゃないのも混じってた)

suzuri

amazon

dRubyによる分散・Webプログラミング https://www.amazon.co.jp/hz/wishlist/ls/1R43BBPSPUEEE/r

☕️

Masatoshi Seki is creating code. - Buymeacoffee

AIタイトルべんり!

*1:Marshalも内部で変なショートカットしないでオブジェクトへのメソッド呼び出しで書いてるから動くんだよなー。