トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2005-10-10 (Mon) [長年日記]

_ [ソフトウェア] DocDiffとパイプとzshの<()

SVKの作業ディレクトリでDocDiffを次のように実行したらエラーになってしまった。

$ docdiff --tty <(svk cat foo.txt) foo.txt | lv -c
/usr/bin/docdiff:297: /proc/self/fd/18 is not a file. (RuntimeError)

とりあえず、297行目の以下の2行をコメントアウトしたらうまく動いた。

raise "#{ARGV[0]} is not a file." unless FileTest.file?(ARGV[0])
raise "#{ARGV[1]} is not a file." unless FileTest.file?(ARGV[1])

それはそれとして、zshの<()記法って/proc/self/fd以下のファイルを渡してた のね。なるほど。

Linux以外のシステムではどうやるんだろ、と思ってmanを見ると、

If the system supports the /dev/fd mechanism, the command argument is the name of the device file corresponding to a file descriptor; otherwise, if the system supports named pipes (FIFOs), the command argument will be a named pipe.

[zshexpn(1)より引用]

ふむふむ、/dev/fd*1というものがあるのか。 なかったら名前付きパイプを使うんだね、なるほど。

*1  Linuxでは/proc/self/fdへのsymlinkみたい。/dev/fdって何かフロッピーディスクと間違えそうだな。

本日のツッコミ(全2件) [ツッコミを入れる]

_ hisashim [ご指摘ありがとうございます。件の箇所は、引数がreadableかどうかとdirかどうかをチェックするように直しておこ..]

_ shugo [ちゃんと報告しなくてすみません、よろしくお願いします。 =()ならだいじょうぶそうですね。]


2005-10-12 (Wed) [長年日記]

_ [Ruby] Rubyist Hotlinks 【第 10 回】 わたなべひろふみさん

ささだ 今まで読んだコードの中で最も美しいソースコードはなんですか?

eban んーとね、美しいっていうか好きなのはね、前田さん*10が書くコード。

[Rubyist Magazine - Rubyist Hotlinks 【第 10 回】 わたなべひろふみさんより引用]

おお、なんて光栄な。

しかし、mailclientって自分のマシンにも見あたらないんですが...。 たぶん、とくに見るべきところはないと思うので、期待しないように。 > all

_ [Ruby] Ruby Conference 2005への道のり

20:00に夜行バスですで松江を出発予定。 6:35に渋谷について、17:00の飛行機でアメリカへ。

しんどそうだなあ。


2005-10-13 (Thu) [長年日記]

_ [Rails] Agile Web Development with Railsの翻訳

オーム社さんから来年の2月ごろに出る予定です。 まだ公式なアナウンスはありませんので、書店などへのお問い合わせは今しばらくお待ちを。

実は軽い気持ちで監訳を引き受けてしまったのですが、なかなか大変です。 Dave Thomasの英語はわかりやすい方だと思うので、おもに自分の問題なのですが...。


2005-10-14 (Fri) [長年日記]

_ [Ruby] RubyConf 2005

行って来た。

各セッションについてはコメントできるほど内容を理解できなかったので とくに何も書かないことに。 (後でmputさんの日記見て、「へー、そんな話だったんだ」とか思ったり...だめじゃん。) まつもとさんはアドリブでぺらぺら英語を話していてやっぱりすごいですね。 キーノートの質問タイムなんか、みんなマイクを待たずに言いたい放題で聖徳太子 状態だったのに、的確に受け答えをしていたり。 (いや、ほんとに的確だったのかどうかは自分にはよくわかんなかったんだけど。)

直接話をしてくれた人たちについて。

David Heinemeier Hansson
Rails本の監訳をするのでよろしく的な挨拶をして、おみやげを渡すと、とても 喜んでくれた(少なくともそのように振る舞ってくれた)。 勝手に思っていたのよりもずっと若くて(RubyConf中に26才になったとか)驚いたが、 なかなかのナイスガイである。
Dave Thomas
監訳する旨の挨拶をしておみやげを渡すと、DHHと同様とても喜んでくれた。 当初は簡単な質問をしようと思っていたが、あまり時間もなかったので、後でメール で質問するかもしれないけどよろしくと言う話にとどめておいた (ほんとは回答を聞き取れる自信がなかったのもあるけど)。 ちょっとこわい印象だったけど、話をするととても気さくな人であった。
Patrick May
まつもとさんから「cgi.rbの代替を作ってる人で、mod_rubyのサポートについて 話があるらしい」と紹介を受けて、聞いてみるとどうもNarfの人らしい。 今はruby-webというアプリケーションを作っていて、mod_rubyを配布物に含めていいかどうかという話だった。 もちろん何の問題もないので、ぜひ作ってくれという話をした(つもり)。
Geoffrey Grosenbach
Railsのpodcastの人。 友達に、名古屋に6年くらい住んでいた人がいるらしい。 実家が愛知なので何かコメントしようと思ったが、名古屋ではないので 説明が面倒でやめておいた。 だいたい、日本人にもわかってくれない(愛知=名古屋と思っている)人が いるくらいだし。
Jim Freeze
夕食のテーブルで一緒になって、まつもとさんと->について話をするのを 聞いていた。^もどうかと思うけどなあ。しかし、->は実に評判が悪かったですね。 年を聞かれて、自分の年を答えたら、聞かれていたのは子供の年ですごく 恥ずかしかった。
John Labovitz
Net::IMAPを使ってくれている人で、IMAPサーバ上のメールの振り分けを するアプリケーションを作っているらしい。 Net::IMAPについて前にメールしたんだけど、と言われて、返事をしてなかった メールがあったのを思い出し、あわてて誤ったのだが、どうも人違いだったらしい。 ximapdに興味を持ってくれたので、デモをしようとしたのだが、「ruby rails」 とかで検索したら15000通ものメールがヒットしてしまって、ひどい有り様だった。 デモ用のムービーとか作っとくといいんだろうなあ。Linuxだと何使うんだろ。
Austin Ziegler
PDF::Writerの作者で、ruby-profを作ってくれてありがとう、みたいな お礼を言われてうれしかった。 あとで聞いたら、RubyGemの熱烈な信奉者で、ruby-devでも話題になっていた 人だったらしい。 森脇さんと議論していた時にも、ちょっと話に入ってみたけど、結局何が問題 なのかよくわからず。

他にもちょっとした会話をした人はいると思うけど、相手がだれだかちゃんと 認識してある程度話せたのはこのくらいかなあ。 またこういう機会があるかどうかはわかんないけど、もっと英語を勉強しなきゃね。

結局、一番の収穫は、ライブラリがuntaintする際の指針について、akrさんと 合意に至ったことかもしれない。 私の案でいいから、ちゃんとマニュアルにポリシーを書いとけ、 ということですが。 落ち着いたらちゃんとまとめます...。


2005-10-28 (Fri) [長年日記]

_ [ximapd][Rast] 関西オープンソース発表

ximapd

Rastの枠でximapdの発表をすることになりました。 もう明日ですね。

ぜんぜん準備できてないけどだいじょうぶかなあ。 とりあえず、スライドのタイトルはこんな感じで行くことに。


2005-10-29 (Sat) [長年日記]

_ [ximapd][Rast] 関西オープンソース2005発表

発表してきた。

ちょっと会場入りが遅れたせいもあり、進行がぐだぐだになってしまって、 申し訳なかったです。

_ [Haskell] 非決定性計算

今回いちばん面白かったのが、Haskell同好会のセッション。

吉田さんのプレゼンで非決定性計算の話が出て来たのだが、 Wikiでも紹介されていたようだ。

「他の言語じゃこんなことできないでしょ」という話だったが、 実はRubyConf2005のChad FowlerとJim Weirichのチュートリアルでも同じようなデモをやっていた。 それを使って書くと、

require "amb"

A = Amb.new

baker = A.choose(1, 2, 3, 4, 5)
cooper = A.choose(1, 2, 3, 4, 5)
fletcher = A.choose(1, 2, 3, 4, 5)
miller = A.choose(1, 2, 3, 4, 5)
smith = A.choose(1, 2, 3, 4, 5)

A.assert([baker, cooper, fletcher, miller, smith].uniq.length == 5)
A.assert(baker != 5)
A.assert(cooper != 1)
A.assert(fletcher != 1 && fletcher != 5)
A.assert(miller > cooper)
A.assert((smith - fletcher).abs != 1)
A.assert((fletcher - cooper).abs != 1)

p [baker, cooper, fletcher, miller, smith]

こんな感じ。 (Haskell版は全部の解が得られるけど、Ruby版は最初の解しか得られないところ がちょっと違う。)

どうやっているかというと、A.assertの呼びだしで継続を使ってバックトラック しているのだが、Rubyもなかなか面白いでしょ? ちなみに、amb.rbはこんな内容。

class Amb
  class ExhaustedError < RuntimeError; end

  def initialize
    @fail = proc { fail ExhaustedError, "amb tree exhausted" }
  end

  def choose(*choices)
    prev_fail = @fail
    callcc { |sk|
      choices.each { |choice|
        callcc { |fk|
          @fail = proc {
            @fail = prev_fail
            fk.call(:fail)
          }
          if choice.respond_to? :call
            sk.call(choice.call)
          else
            sk.call(choice)
          end
        }
      }
      @fail.call
    }
  end

  def failure
    choose
  end

  def assert(cond)
    failure unless cond
  end
end

あとで、池上くんや山下さんとちょっと話したのだが、Haskell版はlazy なのがポイントらしい。 だからRubyでは無理でしょと言われて、その時はブロック使えばいいじゃん と話したのだが、継続版だとブロックも使わずにすっきり書けますね。

元ネタはSICPらしいけど、どんな解なんだろうな。 会社に行ったら調べてみよう。

追記:

リンク元のWikiページ を見ると、継続使うのはやっぱりSchemeからの借用っぽいですね。 そらそうだよなあ。

_ [Ruby] KOF宴会

sheepmanさん、柳川さん、池上くんという豪華なメンバのテーブルに。 池上くんが一番よくしゃべってたような気がする。 何かたのしそうでいいなあ。

帰ってから気付いたけど、kdmsnrさんと話していたのかー。 ぜんぜんわかってなかったorz...。 須藤さんが「ブリキの人」っていうから「ブリキ」って何だろうな と思っていたのだが、blikiでしたか。 色々バカな話をしたかと思いますが、忘れてくださいm(..)m

あと、馬場さんとかとも話せなかったし、悔いの残る宴会でした。 全部須藤さんのせいだっ。

本日のツッコミ(全4件) [ツッコミを入れる]

_ oxy [これはまた、かんなりテクニカルですね。同じことをしているはずのに、こうも実装方法が違うとは…。ちなみにHaskell..]

_ kdmsnr [お話できて光栄でした。 sheepmanさんいらっしゃったんですか...orz]

_ shugo [いえ、そんな畏れ多い。 sheepmanさんはkdmsnrさんの斜め後ろあたりに座っていらっしゃいました。]

_ hs [amb.rbとても面白い。 Rubyでも以下のようにすれば全ての解を尽くせますよ。 p [baker, cooper..]