明日は原稿を書くと決めてるので今日は BitChannel をガシガシと書く。
diff RSS もだいたい実装したけど終わらなかった。
(04:12)
Mixi の Ruby コミュニティつながりで飲み会。 ちょっと油断してビールを飲みすぎたようだ。 内容をはっきり覚えてないので自分の感想を適当に混ぜつつ進行しよう。
一次会の話題
二次会の話題
わたしとしては初心者向けってどうも燃えないので そのへんはやりたい人にやってもらおうかなーという腑抜け全開な気分です、 というか物理的に無理。特に今年は無理。
Ruby 関係の活動としては、 とりあえず既存のやつをなんとなくカバーするだけで終わりそうだなあ。 できれば前々から気になってた公式ドキュメントの整理を やれたらいいなあと思うんだけど、そこまでは無理そう。
(02:49)
上のまとめをざっと見てみると、やっぱりというか当然というか、 自分が興味を引かれた話題が細かくなってるな。 あんまり気にしてない話は一行で終わってるか、最初から書いてない。 話の流れも自分のわかりやすい結論に至るように並び変えている節がある。
(03:01)
何も考えずに「主観はまとめに出る」とキャプションを付けたが、 それじゃあまとめ以外には主観は出ないのかよ! と一人ツッコミを入れておくことにする。
(03:04)
http://japan.cnet.com/news/ent/story/0,2000047623,20074961,00.htm
ちょ、ちょっと待て! なんなんだこれは。 もし本当にこの文面通りの特許なら、 分散オブジェクト関係が軒並やばいんじゃないか?
ちょっと調べてみた。 特許の素人が abstract と claim を斜め読みしただけなので信用しないように。 気になったら自分で原文を読んでください。 (Detailed Description に具体的な API が載ってるので、 プログラマならそれを見るのが早いかも)
この二つは data と object の違いだけ?
うむむ……。型から object manager を invoke してオブジェクトを得る機構? COM で言うと COM サーバを検索・起動してプロクシインターフェイスを 用意する部分 (CoXXXX と ORPC) が該当するのかな。 こっちは主に in-process activation を書いているようだ。
そんでこっちが out-process activation だろう。
いったんクラスオブジェクト (?) (原文の object manager) を検索してオブジェクトを得る、という段階が重要みたいだし、 "... A matchmaker facility permits two processes that are to cooperate..." と書いてあるあたりから推測しても、 単なるオブジェクト指向言語処理系は念頭にないように思える。 主眼は分散機構だろう。あと "Customized versions of resources can be created and co-exist with standard resources" はインターフェイス継承っぽいし、 「クラスを得てオブジェクトを得る」みたいなことが書いてあるので オブジェクト指向じゃないのは該当しないと考えてよさそう。 つまり RPC とか doors みたいな単なる手続き呼び出しは該当しないと思う。 当然だけど fork-exec みたいのも該当しないだろう。 ニュース記事だと「助けを求める」とか書いてあるから妙に広く見えるけど、 例によって全然当てにならない模様。
総合して考えると、とりあえず COM は当たりの予感。 が、MS はすでにライセンス供与を受けてるらしいので射程外。 その代わりに Mozilla の XPCOM が大当たり。 GNOME・KDE のオブジェクトシステムもダメだろう。 Sun がどこの部分に対して金を払ったのかわからんけど、 該当するのは RMI あたりだろうか。 dRuby はセーフ? でもクラスオブジェクトをリモートにズラズラ並べて 名前から検索して new、みたいなことするとアウト?
うーん、もしこの特許がすぐ取り消しにならないようなら、 ソフトウェアと特許、両方の知識がある人にちゃんと解説してほしいな。
groklaw というところで議論してるみたいだが、 とんでもねー量になっててとても読めん。
あ、Java に関してはソースがあった。
RMI, IDL, JAE が問題らしい。やっぱり分散機構だな。
(19:21)
http://japan.internet.com/busnews/20041008/10.html
む、
> ニューヨーク西区連邦地裁の Michael Telesca 判事は、 > 同訴訟を「権利制限付き」で棄却する文書に署名した。 > 権利制限付きとは、Kodak が別の裁判所で同じ訴訟を起こした場合、 > 同社の主張が却下されるリスクを伴うことを意味する。
なのか。ということは追加訴訟のリスクはちょっと少なめなのかな。 今回 Sun から金をせしめられればよかった、ということもありうる?
(21:49)
今週土曜 13:00 から RHG 読書会です。 場所は前回に引き続き農工大におじゃまします。
とか書いといてなんだけど、出られるだろうか……。 何も考えずに日曜に一日バイトを入れてしまったのが実に痛い。
金もないことだし、今回は読書会だけ出ようかなあ。 とか言ってると間違いなく飲み会まで行くことになるんだよね。 それとも読書会に出つつ原稿を書けばいいんだろうか? (激しく遠回りな逃避)
(01:40)
http://d.hatena.ne.jp/naoya/20041014 (圏外からのひとことより)
はてなの question: 記法で出力される円グラフを使って絵を描いてしまったらしい。 すごい発想だ。
これを見て思い出したのが性善説サーバでの出来事。 ホームディレクトリ直下に見慣れないディレクトリがあるなーと思って そのディレクトリを ls すると、AA を使って絵が出るようになっていた。 あれには驚いたなあ。
(16:07)
風邪ひいた……。 心当たりが多すぎて原因が特定できません。
くそー今月も RHG 読書会行けないじゃん!
どうも今度の風邪は鼻にくる。 昨日開けたばっかりのティッシュがなくなりそうだ。 そういえば大学でも鼻かんでる人が多かったような気がする。 はやってんのか。
(20:13)
みんな、ちょっとこれを見てくれ。
L I S P
「L I S P …… lisp がどうしたって言うんだ」
そうだこのままなら Lisp としか読めない……。 ではほんの少し工夫して、こう書いたらどうだ?
| | +------ +-----+ |_____ | | | | | +-----+ +-----+ | | | | ------+ |
「ん? こ、これは……まさか!?」
ああ。この状態から直線をほんの一本動かすだけで……
| | +------ +-----+ | | | | | +------+ +-----+ +-----+ | | | | | | ------+ |
「え、HSP! 21 世紀にもなってこ (ry とか 言われて某一部の世間を騒がしている HSP か!」
そうだ…… HSP が流行しているのは すべて Lisp プログラマによる陰謀だったんだよ!
Ω ΩΩ < な (ry
続きも考えたけど飽きたので略。
(21:00)
61.144.184.27からWiki荒らし
http://www.otsune.com/diary/2004/10/15.html#200410152
む、家の BitChannel に来てるのとまったく同じ IP ですね。 htaccess で deny しとく。
(22:58)
るびま第二号
http://jp.rubyist.net/magazine/?0002
おっと、今日発行だったんですね。すげえ増量している。 そういえばこないだの飲み会で笹田さんが 「いまは発行直後だからいいけど……」 みたいなことを言ってたけど、なるほど、こんなに増えてたのね。 「いきなり減りそう」って心配になるのもわかるなあ。
ピックアップ
ルーマンで来たかっ! かなり面白かったんだけど、 正直、プログラミングに関係してくるところより システム論のとこのほうが面白かった……。
あと、入門じゃないと思う。
こんなに報告してたんですか。 とりあえず $SAFE=4 は信用するなということですね。 まとめの「Rubyを信用しすぎるのはやめましょう」に賛成。
なかなかいい感じじゃないですか。 「文字列と数値は違う」というあたりもちゃんと書いてくれてるし。 ゲームではかなり頻繁に rand が欲しくなるけど、さすがにそのへんも抜かりない。 強いて細かいところに注文をつけるなら、
というあたりでしょうか。
(00:43)
いつだか忘れたけど、Ripper で空行が移動するバグは修正しました。 これで標準添付ライブラリの範囲では正常にパースできるようになったはずです。 ただし __END__ 以降の文字列を取る簡単な手段がないのですが、 これはいまのところ仕様です。 __END__ が登場したことはわかるはずですし、 入力についての情報は Ripper を使う側のほうがたくさん持っているはずなので、 パース終了時の位置情報を使って適当に取ってください。
残るはスキャナイベントの semantic value だな。 yylval への代入を全部洗うのか〜……ダルい。
そのあたりが終わったら普及にむけてドキュメントを書きますか。
(02:45)
また Wiki 荒らしが来てるし……。 誰だかわかりませんけど直してくれた人ありがとう。
スクリプトならまだ対処しようもあるけど、 件数の少なさと、ページ数の少なさを見ると手動でやっているように見える。 となると機械的にはじくのは難しいな。 とりあえずは地道に IP を ban するくらいしかないすかね。
が、地道にやるとは言っても、 せめてもうちょっと作業を自動化したいものだ。 いまのところ以下のような手順なんだけど、 じつにめんどくさい。
BitChannel 側に情報は揃ってるはずだから、 もっと直接的に 「このリビジョンをコミットした奴は排除!」と指定できればよいのだ。 ただしこの機能は逆用されると危なすぎるので、 実行できるのは管理者だけに限定したほうがよさそうだ。 どこに仕掛けをつけようかな。
んー、いや待てよ、 まず前提として IP フィルタを Wiki 側に持つべきかどうか考えよう。 今回は特定 IP を切れば済むけど、 ダイヤルアップの場合はネットワークまるごと捨てる必要もあるかもしれないし、 そうすると他のユーザを巻き込む可能性もある。
ban するかどうかは置いといて、 特定のリビジョンを投稿したクライアントに関する情報を ウェブからモニタできると便利そう? しかしこれが公開されてしまうのはやばすぎなので、 かなり厳格にユーザを認証する必要がある。うむむ……実にめんどい。 こういうのってどんなに注意しててもいずれ何かのミスで穴が開くんだよな。 そーいうのは潔く仕組みごと切るのが BitChannel 的ではある。 どうせ実装する暇もないし、もうちょい考えよう。
とりあえずログにクライアントの IP を出力するだけにしとくかな。
(19:43)
これでいいんかな。
% find -type f | xargs fgrep -L '\-*-'
ruby だとどうだろう。
% ruby -rfind -e 'Find.find(".") {|path| (/-\*-/ !~ File.read(path) rescue nil) and puts path }'
長い。これはだめだ…… しかもデバイスファイルがあったらえろい^H^H^Hえらいことになるオマケつき。
% find -type f | ruby -ne '/-\*-/ !~ File.read($_) and puts $_ }'
find を分けるとちょっと短くなった。
(18:40)
遅れに遅れまくった Linux プログラミング本も今日ようやく全体が揃いそう。 ここから読み直して手直しして……今年中に出せるのだろうか。
~/c/linuxintro % list 1. 19 intro.rd ........ Linuxプログラミングを始めよう 2. 42 abstract.rd ..... Linuxのすがた 3. 22 stream_sys.rd ... ストリーム(1)システムコール編 4. 24 stream_stdio.rd . ストリーム(2)stdio編 5. 19 practice1.rd .... 実習(1)headを作る 6. 30 practice2.rd .... 実習(2)grepを作る 7. 15 hier.rd ......... Linuxのディレクトリ構造 8. 21 fs.rd ........... ファイルシステム 9. 23 process.rd ...... プロセス 10. 10 signal.rd ....... シグナル 11. 16 etc.rd .......... プロセスの環境 12. 18 network.rd ...... ネットワークプログラミングの基礎 13. 32 httpd.rd ........ HTTPサーバを作る(1)基本編 14. 21 httpd2.rd ....... HTTPサーバを作る(2)発展編 15. 27 advanced.rd ..... 本書を終えた後は Total 330 Kbytes
(18:55)
そうだ、言ってなかったような気がするので追記しておくと、 今書いてる Linux 本は C の本です。Ruby じゃありません。 (目次を見ればわかるか……)
(03:27)
■ zunda [負けた!と思ったのですがfgrepじゃなくてgrepでせうか?いや、-Lオプション知らなかったのでマケはマケなのですが。]
■
青木 [え? Emacsのマークの「-*-」を探すんですよね?
fgrepだと何かまずいんでしたっけ。
ちなみに -L は man を見て探しただけです……]
■
zunda [わあ、失礼しました。手元では
find -type f | xargs fgrep -L '\-*-'
では期待した動作にならなくてダメやん、と思ったけど
find -type f | xargs fgrep -L -- '-*-'
が正解でした。fgrepは関係なかった。(GNUT grep 2.5.1)]
■
青木 [あ、そうか。
fgrep ならバックスラッシュ入れちゃだめですね。
コマンドラインでは -e を使ってたのを日記に
移すときにバックスラッシュに直したのが敗因でした……]
懸案の yylval 伝播をやろうと思って parse.y を見ると、 なぜか yylval への代入が既にパラメタライズされていた。
「おおっ? もしかして誰かがやってくれたのかっ!」
と思ったが、実装したのは昔の自分だったことがわかった。 やるな、過去の俺。
現在の状況……構文木がこんなふうになった
~/c/ruby % ruby -rripper/sexp -rpp -e 'pp Ripper.sexp("def obj.m(a,b) nil end")' [:program, [:stmts_add, [:stmts_new], [:defs, [:var_ref, [:@ident, "obj", [1, 4]]], [:@period, ".", [1, 7]], [:@ident, "m", [1, 8]], [:paren, [:params, [[:@ident, "a", [1, 10]], [:@ident, "b", [1, 12]]], nil, nil, nil]], [:bodystmt, [:stmts_add, [:stmts_new], [:var_ref, [:@kw, "nil", [1, 15]]]], nil, nil, nil]]]]
あと演算子がまるまる残ってるんだけど、 これをやると type clash (`' `val') の山に苦しめられるんだよなあ……
(14:35)
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
■ shiro [1992年半ばにfileされてますね。確かに、DCEだの何だのって分散オブジェクト環境とかコンポーネントモデルが取りざたされるようになったのが1990年代半ば、多分1993年頃からだったような記憶があります。そのタイプの分散オブジェクトブローカー技術としては、このパテントも先行研究の一つではあるのかもしれません。でもプロセス越えの分散オブジェクト技術なんてもっと前からあるわけで(ACMで"distributed object"で検索すると1980年代の論文もたくさん出てくる)、Sunなどが折れてるのは不思議ですねぇ。何か技術的にとてもspecificな点に引っかかってるのかなあ。]
■ 青木 [MS, IBM, hp あたりがみんなライセンス取得済っていうのが
嫌な感じですね。たいしたことない特許かと思ってましたけど、
実は結構クリティカルなんでしょうか。どこがひっかかるのかなあ……。]