history

青木日記 RSS

<前の日 | この月 | 次の日>

2006-08-27

LL ring

LL ring の「LLで関数プログラミング」でしゃべってきました。 聞いていただいた皆さん、ありがとうございました。

今回わたしは基本的にウケをとるか解説するか火種を撒くか、 てな狙いでしゃべってみました。 なので、喋ってることが一貫してない面があったかもしれません。 もうちょっと前もって内容を詰めておいたほうが よかったのかなあという気もします。

ちなみに、 「関数型言語は使いたいけど 遅延評価は欲しくないなんて そんなの微妙すぎ〜」 は、おっぱい占いをもじってみたつもりだったの。 スベったネタを解説するのも不粋だけどな。

ちなみに、リングのロープを一番上から乗り越えるのを 休憩時間中にやってみたけど、見事に失敗しました。

LL ring 飲み会

超幹事主催 (?) の二次会に参加。主な内容

  • とある商業ゲームは Ruby + SDL で実装されている (ある理由によりタイトルは書けないが、RPG ツクールではない。さっそく注文しといた)
  • ドドドについて
  • ドッギャーンについて
  • 次の本の打ち合わせ
  • 次じゃない本の打ち合わせ
  • ひのきのぼうでラスボスを倒す方法について (暗号)

暗号化しすぎた。

続いて、帰れなくなった人達による徹夜三次会。 なぜ 9 人もいますか? 一言でまとめると、あとで書く。

Ruby リファレンスマニュアル整備計画

いつまでたっても Ruby のリファレンスマニュアル整備計画が進展しない件を 高橋さん・西山さんと相談した結果、気合いと根性で実行することになりました。 8/31 までに (loveruby.net で) svn レポジトリを公開して、 9/20 までに (loveruby.net で) 新システムを公開します。

こんなんできるんですかねえ。

(07:49)

LL ring / 抽選

あさましくボールをゲット。そして

『みんなの Python』が当たった。

(08:07)

Ruby リファレンスマニュアル刷新計画 (2)

12 時間も寝てしまった……。

Ruby リファレンスマニュアル計画の目標について。

[クラスリファレンスについて]

  • Subversion でファイルを直接コミットできること
  • ファイル単位、クラス単位、メソッド単位でドキュメントを見られること
  • クラス単位のときは、継承したメソッドも同時に表示できること
  • メソッドのドキュメントを検索できること (最低でも ReFe レベル)
  • 既存クラスにメソッドを追加するライブラリをうまく取り扱うこと
  • 複数のクラスを含むライブラリをうまく扱うこと
  • Ruby のバージョンごとにドキュメントを分割すること (ソースドキュメントではすべて同居させる)
  • 現在手作業で埋め込んでいるクラスやメソッドのインデックスはすべて自動生成する
  • 現「添付ライブラリ」を統合
  • 静的 HTML アーカイブを全自動で生成できること
  • HTML Help を半自動で生成できること (コマンド一発で生成できるが、そのコマンドは手で打たなければいけない)

[その他について]

  • インストールマニュアル
  • 旧ユーザガイド + 旧チュートリアルの内容を書き直して新チュートリアルとする
  • 旧「Ruby言語仕様」と旧「Rubyの文法」を再統合して新「Ruby言語仕様」とする
  • 拡張ライブラリリファレンスマニュアルを復活・統合

分担について。

[俺が一人でやること]

  • Subversion レポジトリのセッティング
  • ドキュメント閲覧用ウェブアプリケーション
  • その他のドキュメントの物理的配置の決定

[他の人の協力を求めること]

  • 青木の決定したファイル配置に既存のドキュメントを配置しなおす
  • フォーマットの変換 (手作業でないとできない)
  • CSS

ファイルは一つか二つだけサンプルを作るので、 それを参考にして他のファイルをコミットする、 ということにする予定。

(20:44)

Subversion 1.3.2 のインストール

とりあえず Subversion をインストールしよう。

tukumo:~/src/subversion-1.3.2/apr/dso/unix % make                 aamine@tukumo
make[1]: Entering directory `/home/aamine/src/subversion-1.3.2/apr/dso/unix'
/bin/sh /home/aamine/src/subversion-1.3.2/apr/libtool --silent --mode=compile gcc -g -O2 -pthread   -DHAVE_CONFIG_H -DLINUX=2 -D_REENTRANT -D_XOPEN_SOURCE=500 -D_BSD_SOURCE -D_SVID_SOURCE -D_GNU_SOURCE   -DHAVE_DLFCN_H -I../../include -I../../include/arch -I../../include/arch/unix  -c dso.c && touch dso.lo
dso.c:24:2: error: #error No DSO implementation specified.
dso.c: In function 'apr_dso_load':
dso.c:144: error: 'os_handle' undeclared (first use in this function)
dso.c:144: error: (Each undeclared identifier is reported only once
dso.c:144: error: for each function it appears in.)
make[1]: *** [dso.lo] Error 1

あれ?

configure --with-dso がいけなかったかな。 付けないでやってみよう。

cd subversion/tests/libsvn_delta && /bin/sh /home/aamine/src/subversion-1.3.2/libtool --tag=CC --silent --mode=link gcc  -g -O2  -g -O2 -pthread   -L/home/aamine/src/subversion-1.3.2/apr-util/xml/expat/lib  -rpath /usr/local/pkg/subversion-1.3.2/lib -o vdelta-test  vdelta-test.o ../../../subversion/libsvn_delta/libsvn_delta-1.la ../../../subversion/libsvn_subr/libsvn_subr-1.la /home/aamine/src/subversion-1.3.2/apr-util/libaprutil-0.la -lgdbm /home/aamine/src/subversion-1.3.2/apr-util/xml/expat/lib/libexpat.la /home/aamine/src/subversion-1.3.2/apr/libapr-0.la -lrt -lm -lcrypt -lnsl  -lpthread -ldl
tukumo:~/src/subversion-1.3.2 %                                   aamine@tukumo

でけた。

(22:16)

Subversion / Ruby インターフェイス

swig かあ……。Ruby 1.9 対応してんのかなあ。

/home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c: In function `svn_swig_rb_set_revision':
/home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:2418: error: `RE_OPTION_IGNORECASE' undeclared (first use in this function)
/home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:2418: error: (Each undeclared identifier is reported only once
/home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.c:2418: error: for each function it appears in.)
make: *** [subversion/bindings/swig/ruby/libsvn_swig_ruby/swigutil_rb.lo] Error 1

えらーキター。あああ、鬼車に対応してないよ……。 しょうがない、ガリガリ書き換えるしかないな。

……と、思ったけど、これを追加するだけで通った。

#include <version.h>
 
#if (RUBY_VERSION_CODE >= 190)
#define RE_OPTION_IGNORECASE ONIG_OPTION_IGNORECASE
#endif

とても嫌な予感がするけど、make check-swig-rb もやってみようか。

tukumo:~/src/subversion-1.3.2 % make check-swig-rb                aamine@tukumo
cd /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby; \
  /usr/local/pkg/ruby-20060827/bin/ruby -I /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby \
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/test/run-test.rb \
    --verbose=normal
/home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:59:in `BasicObject#__send__': private method `define_method' called for Svn::Core:Module (NoMethodError)
        from /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:59:in `Svn::Util#set_methods'

あああ、__send__ で private メソッドを呼んでるし。パッチ!

--- subversion/bindings/swig/ruby/svn/util.rb.org       2006-08-27 22:28:11.000000000 +0900
+++ subversion/bindings/swig/ruby/svn/util.rb   2006-08-27 22:28:14.000000000 +0900
@@ -1,3 +1,9 @@
+unless Object.method_defined?(:funcall)
+  class Object
+    alias funcall __send__
+  end
+end
+
 module Svn
   module Util
 
@@ -56,8 +62,8 @@ module Svn
           target_id = target_name.intern
           target_method = ext_mod.method(meth)
           target_proc = Proc.new{|*args| target_method.call(*args)}
-          target_mod.__send__(:define_method, target_id, target_proc)
-          target_mod.__send__(:module_function, target_id)
+          target_mod.funcall(:define_method, target_id, target_proc)
+          target_mod.funcall(:module_function, target_id)
           @@wrapper_procs << target_proc
         end
       end

tukumo:~/src/subversion-1.3.2 % make check-swig-rb                aamine@tukumo cd /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby; \
  /usr/local/pkg/ruby-20060827/bin/ruby -I /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby \
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/test/run-test.rb \
    --verbose=normal
Loaded suite test
Started
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE.......E..........EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE..EEEEEEEEEEE
Finished in 3.489725 seconds.
 
  1) Error:
test_add_force(SvnClientTest):
NoMethodError: private method `initialize' called for #<Svn::Ext::Client::Svn_client_ctx_t:0x002aaaad2e6c60>
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/client.rb:52:in `BasicObject#__send__'
 
中略
 
119 tests, 46 assertions, 0 failures, 100 errors

またしても __send__ で private メソッドを呼んでいる。パッチ!

--- svn/core.rb.org     2006-08-27 22:34:00.000000000 +0900
+++ svn/core.rb 2006-08-27 22:34:19.000000000 +0900
@@ -151,7 +151,7 @@ module Svn
       class << self
         def new(providers=[], *rest)
           baton = Core.auth_open(providers)
-          baton.__send__("initialize", providers, *rest)
+          baton.funcall(:initialize, providers, *rest)
           baton
         end
       end
@@ -405,7 +405,7 @@ module Svn
         undef new
         def new
           info = Core.create_commit_info
-          info.__send__("initialize")
+          info.funcall(:initialize)
           info
         end
       end
--- svn/client.rb.org    2006-08-27 22:36:56.000000000 +0900
+++ svn/client.rb       2006-08-27 22:37:15.000000000 +0900
@@ -49,7 +49,7 @@ module Svn
         undef new
         def new
           obj = Client.create_context
-          obj.funcall(:initialize)
+          obj.__send__(:initialize)
           obj
         end
       end

これで普通にテストができるようになった。

tukumo:~/src/subversion-1.3.2 % make check-swig-rb                aamine@tukumo
cd /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby; \
    /usr/local/pkg/ruby-20060827/bin/ruby -I /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby \
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/test/run-test.rb \
    --verbose=normal
Loaded suite test
Started
..........................................................................E...................E........................
Finished in 301.156637 seconds.
 
  1) Error:
test_create(SvnFsTest):
Svn::Error::VERSION_MISMATCH: subversion/libsvn_fs/fs-loader.c:137 Mismatched FS module version for 'bdb': found 1.3.2, expected 1.1.4
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `Svn::Ext::Fs#svn_fs_create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `Method#call'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `Svn::Fs#create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/fs.rb:27
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/fs.rb:27:in `Svn::Fs#create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/fs.rb:27:in `SWIG::TYPE_p_svn_fs_t#create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/test/test_fs.rb:31:in `test_create'
 
  2) Error:
test_create(SvnReposTest):
Svn::Error::VERSION_MISMATCH: subversion/libsvn_fs/fs-loader.c:137 Mismatched FS module version for 'bdb': found 1.3.2, expected 1.1.4
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `Svn::Ext::Repos#svn_repos_create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `Method#call'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/util.rb:64:in `create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/repos.rb:37
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/repos.rb:37:in `create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/svn/repos.rb:37:in `Svn::Repos#create'
    /home/aamine/src/subversion-1.3.2/subversion/bindings/swig/ruby/test/test_repos.rb:80:in `test_create'
 
119 tests, 612 assertions, 0 failures, 2 errors
make: *** [check-swig-rb] Error 1

1.1.4 は Debian 側の Subversion だな。 まあ、Ruby も Subversion も複数あるから、どっかで混じったんだろう。 このエラーは無視。

(22:42)

Subversion サーバ

Debian パッケージが一致せず apache2-threaded-dev がインストールできないので、 WebDAV を使うのはあきらめた。 しょーがないので svnserve(+ssh) を使うことにする。

(23:18)

Ruby リファレンスマニュアル刷新計画 (4)

今日の man-rd-ja.tar.gz を取ってきて分類。 うげー、500 ファイルもあるのかよ。

とか言いつつ 3 時間強で分類完了。

pack テンプレートと sprintf フォーマットは ReFe でも扱いに苦労したけど、 やっぱりこれは問題だなあ。 テキストレベルでの include で対応するべきか……。

組み込みライブラリのクラス・モジュール・関数・定数・変数という分類はどうにかしたい。 今度のデータベースはメソッド単位で管理することになるので、 関数と定数はそこに混ぜればよい。問題は変数だ。 Object か Kernel のあたりに無理矢理つっこもうかなあ。

(01:58)

Ruby リファレンスマニュアル刷新計画 (5)

RDP のアーカイブから拡張ライブラリリファレンスを救出。

(02:27)

宣言

そういえば昨日何回か同じことを尋ねられたので、 声を大にして宣言しておきたい!

わたしはあくまで「Ruby な人」であって「Haskell な人」ではないので 4649。

ちなみに昨日『みんなの Python』が当たったのを見せびらかしたら 見せる人見せる人全員に「次は『ふつうの Python プログラミング』か!」 とか言われたんですが、それナイから! ありえないから! ていうかそんなに SBCr から Python ばっか出してどうすんの!

(02:31)

本日のツッコミ(全3件) [ツッコミを入れる]
hyuki (2006-08-28 00:31)

刷新したRubyリファレンスマニュアルに「名前(愛称)」があると良いですね。

成瀬 (2006-08-28 02:57)

「るびー りふぁれんす まにゅある」略して「るりま」、とか(待

hyuki (2006-08-28 06:03)

そして「るびーリファレンスマニュアルを見なさい!」というのは、
  「るりまれ!」
というとか?(ぐぐれ!と同じ感覚)

「結構るりまったんですけれど、分かりませんでした」とか。

名前
メールアドレス

<前の日 | この月 | 次の日>
2002|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|