history

青木日記 RSS

<前月 | 最新 | 次月>

2004-10-08

下山

うおー!

やーっとヤマを越えたよ。 そろそろ日記を再開できるかな。

(17:13)

怒涛のBitChannel更新

明日は原稿を書くと決めてるので今日は BitChannel をガシガシと書く。

  • refresh-linkcache.rb 補修
  • 外部で更新されたページに追従するコマンド misc/page-updated.rb を追加
  • おまかせ一発初期化コマンド misc/init.rb

diff RSS もだいたい実装したけど終わらなかった。

(04:12)

fileutils ToDo

chown と chown_R を新設する。

(04:14)


2004-10-10

Mixiな飲み会

Mixi の Ruby コミュニティつながりで飲み会。 ちょっと油断してビールを飲みすぎたようだ。 内容をはっきり覚えてないので自分の感想を適当に混ぜつつ進行しよう。

一次会の話題

  • Ruby Conference どうだった?
  • FastCGI と mod_ruby
  • FastCGI の C 版はおかしい? (各種言語バインディングでどれも同じエラーが出てるらしい)
  • pure Ruby 版もオリジナルのも何かおかしい。 ruby-talk では 8KB を越えるとおかしくなるという話もあったな
  • BitChannel で使ってるやつはいまのとこエラーは一度も出てない
  • mod_rubyってスレッド使うんだっけ? → 使わないらしい
  • WEBrick servlet にするならマルチスレッドセーフにしないとだめ
  • スレッドセーフにするのは結構たいへんなんだよねー
  • なぜポップコーンがあるんだろう
  • 「Rubyはプリキュア」 (ところでかねがね思ってたんだけど「キュアキュア」って何なの?)
  • ネコミミモード♪
  • mixi の「最終ログイン時刻」とか「足あと」はコミュニケーションを強制されるような感じがする
  • そのくせメッセージを相手が読んだかどうかはわからないし
  • その機能ができたらさらに強制されそう
  • Ruby 占い
  • Ruby で定番の GUI ツールキットが欲しい
  • 定番ができないのは、それを使った定番アプリがないからだろう
  • それはそういうのを作りたい人がいないからだろう
  • つーかいまでもそんなに GUI アプリ作りたいのかよ?
  • サーバサイドでいいじゃん! (Java戦略)
  • Windows だとやっぱりちょっとした GUI は作りたい
  • じゃあ GUI は Windows だけでいいんじゃないか
  • ついでに Mac OS X で動いてくれるとすごく嬉しいけど
  • Windows なら Visualu Ruby か?
  • ASR にもついてるし
  • Visualu Ruby は MFC そのまんますぎて結構たいへん
  • プラス FormDesigner だとなんとか
  • もうちょっとライブラリが厚いと嬉しい
  • tk ではないのか?
  • tk は tk ランタイムが必要
  • MS の Platform SDK だとそのへんがコンパイルできない?
  • (コンパイラの) ライセンスってどうなってるんだっけ
  • CGI はどのライブラリがいいんだろうか
  • RSS
  • ping back
  • bloglines
  • サイトの背景色は識別のために重要
  • テーマはサイトごとにできるだけ固定してほしい
  • クリスマスになるとそこらの tDiary が全部クリスマステーマになってゲンナリ
  • 「あなたにぴったりの tDiary テーマ教えます」占い
  • RSS になってもテーマを保持できないものか
  • インラインスタイルシートで全部埋め込み?
  • tDiary の作りってどうよ
  • tDiary の ping.rbって何の役にたつの?
  • 昔は役に立った……ような気がする

二次会の話題

  • nkf 2.0
  • rand じゃなくて乱数オブジェクトが作りたい (マルチスレッド環境で特定の乱数列を再現したい)
  • Random::MT みたいな
  • Subversion と CVS
  • Subversion 1.1.0 RC? がコンパイルできないんだよー
  • 文句言うからだよ
  • そうだったのか……
  • Subversion 使うと便利で CVS には戻れない
  • cvsup 相当のツールってあるの?
  • そういや annotate はどうなったんだ
  • Ruby初心者向け対策
  • Rubyの会でやるのかそれ以外でやるのか
  • メーリングリストはだめ?
  • ruby-list が、と言うよりメーリングリストという機構自体が敷居が高いのではないか
  • 個人宛メール?
  • メッセ?
  • チャット? (not IRC)
  • もう ML に出すのに緊張感も何もないしなー
  • どのくらいのレベルの「初心者」を相手にするのか?
  • 「プログラムやったことない」 (プログラム初心者)
  • 「変数わかりません」 (プログラム初心者)
  • 「HSPは知っている」 (Ruby初心者 1)
  • 「Perlは知っている」 (Ruby初心者 2)
  • とりあえず Perl は知ってるくらいの人を拾えばいいんじゃないの?
  • MS-DOS とか BASIC とか
  • それは戻りすぎ
  • 掲示板とか日記システムを題材にしたチュートリアルみたいなもの?
  • tDiary のプラグインから始める Ruby
  • さくらインターネットの tDiary 一発インストール
  • とりあえずさくらユーザをサポートしる!
  • Ruby が使えるホスティングサーバのリストってなかったっけ?
  • その逆に「Rubyが使えないサーバ」を作るとか? ページ名は略して「使えないサーバ」
  • ruby-lang.org から ASR なりワンクリックインストーラなりに直接行けないのはまずい
  • 逆に言うと、そのへんのリンクとかを整備すればそれなりに状況はよくなると思う
  • ライブラリが足りない?
  • メジャーどころは結構あるんじゃないか
  • それを入れるのがめんどい
  • インストールの面倒さを解決する手段が標準添付しかないのがいかんのだ
  • 例えば RubyGems ではどうか
  • 複数パッケージの微妙な依存関係が解決できない (例: A→B 1.1〜1.3, C→B 1.2 のとき、 A を先に require するとロードに失敗するが先に C をロードすると大丈夫だったりする)
  • そういうのは実行前に静的に解決してほしい (つまり .deb のようにちゃんと管理する)
  • 誰が管理するんだよ
  • require が動的じゃなければ検出できるんだけどね
  • exerb は実際に実行して require をフックして必要なライブラリを集めてるようだ
  • 実行できるとは限らないしなー
  • Ruby.NET VM では require まわりは静的にやるらしい?
  • grep するだけでも 95% はカバーできると思うけど残りの 5% をどーする
  • YARV はどのへんまで現行 API をカバーすればよいのか
  • C レベルに関してはある程度の非互換は許されると思う
  • rb_raise() をなくせると楽らしい (Python方式か)……が rb_raise() は欲しいな
  • スレッドとか Call/CC とかはいらん
  • require は動的にやるしかないし
  • インタプリタオブジェクトができたら rb_define_class とかに引数が一個増えるかも
  • るびまで原稿料を出せるか
  • 出すとしたら金額はどうやって決まるのか
  • ページビューとかアンケートで決めるとタイトルでほとんど決まっちゃうし
  • プロの編集者がいないと最低限の質が保証できないので均一は厳しい
  • PayPal とかで読者から直接還元?
  • (やっぱりこのへんは難しいよな……。金を動かすと税金の話とか出そうだし)
  • Brad Cox のキーノート
  • Objective C は PIM を書くために作ったらしい
  • オープンソースカンファレンス、おとなしすぎ

わたしとしては初心者向けってどうも燃えないので そのへんはやりたい人にやってもらおうかなーという腑抜け全開な気分です、 というか物理的に無理。特に今年は無理。

Ruby 関係の活動としては、 とりあえず既存のやつをなんとなくカバーするだけで終わりそうだなあ。 できれば前々から気になってた公式ドキュメントの整理を やれたらいいなあと思うんだけど、そこまでは無理そう。

(02:49)

主観はまとめに出る

上のまとめをざっと見てみると、やっぱりというか当然というか、 自分が興味を引かれた話題が細かくなってるな。 あんまり気にしてない話は一行で終わってるか、最初から書いてない。 話の流れも自分のわかりやすい結論に至るように並び変えている節がある。

(03:01)

主観はまとめに出る (2) それ以外にも出る

何も考えずに「主観はまとめに出る」とキャプションを付けたが、 それじゃあまとめ以外には主観は出ないのかよ! と一人ツッコミを入れておくことにする。

(03:04)


2004-10-11

半周遅れで Kodak 特許問題

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)

Kodak 特許

http://japan.internet.com/busnews/20041008/10.html

む、

> ニューヨーク西区連邦地裁の Michael Telesca 判事は、
> 同訴訟を「権利制限付き」で棄却する文書に署名した。
> 権利制限付きとは、Kodak が別の裁判所で同じ訴訟を起こした場合、
> 同社の主張が却下されるリスクを伴うことを意味する。

なのか。ということは追加訴訟のリスクはちょっと少なめなのかな。 今回 Sun から金をせしめられればよかった、ということもありうる?

(21:49)

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

shiro [1992年半ばにfileされてますね。確かに、DCEだの何だのって分散オブジェクト環境とかコンポーネントモデルが取りざたされるようになったのが1990年代半ば、多分1993年頃からだったような記憶があります。そのタイプの分散オブジェクトブローカー技術としては、このパテントも先行研究の一つではあるのかもしれません。でもプロセス越えの分散オブジェクト技術なんてもっと前からあるわけで(ACMで"distributed object"で検索すると1980年代の論文もたくさん出てくる)、Sunなどが折れてるのは不思議ですねぇ。何か技術的にとてもspecificな点に引っかかってるのかなあ。]

青木 [MS, IBM, hp あたりがみんなライセンス取得済っていうのが
嫌な感じですね。たいしたことない特許かと思ってましたけど、
実は結構クリティカルなんでしょうか。どこがひっかかるのかなあ……。]


2004-10-14

RHG 読書会

今週土曜 13:00 から RHG 読書会です。 場所は前回に引き続き農工大におじゃまします。

とか書いといてなんだけど、出られるだろうか……。 何も考えずに日曜に一日バイトを入れてしまったのが実に痛い。

金もないことだし、今回は読書会だけ出ようかなあ。 とか言ってると間違いなく飲み会まで行くことになるんだよね。 それとも読書会に出つつ原稿を書けばいいんだろうか? (激しく遠回りな逃避)

(01:40)


2004-10-15

意外な使いかた

http://d.hatena.ne.jp/naoya/20041014 (圏外からのひとことより)

はてなの question: 記法で出力される円グラフを使って絵を描いてしまったらしい。 すごい発想だ。

これを見て思い出したのが性善説サーバでの出来事。 ホームディレクトリ直下に見慣れないディレクトリがあるなーと思って そのディレクトリを ls すると、AA を使って絵が出るようになっていた。 あれには驚いたなあ。

(16:07)

Wiki SPAM

BitChannel にまで SPAM が来やがった。 いやー、revert 機能つけといてよかったよ。

(17:04)

かぜー

風邪ひいた……。 心当たりが多すぎて原因が特定できません。

  • 不規則な睡眠時間
  • 不規則な食生活
  • 徹夜
  • 今日の早朝、薄着で自転車をぶっとばした
  • 運動不足
  • 賞味期限とか

くそー今月も RHG 読書会行けないじゃん!

どうも今度の風邪は鼻にくる。 昨日開けたばっかりのティッシュがなくなりそうだ。 そういえば大学でも鼻かんでる人が多かったような気がする。 はやってんのか。

(20:13)

えすぴー

みんな、ちょっとこれを見てくれ。

L I S P

「L I S P …… lisp がどうしたって言うんだ」

そうだこのままなら Lisp としか読めない……。 ではほんの少し工夫して、こう書いたらどうだ?

  |      |     +------     +-----+
  |_____ |     |           |     |
         |     +-----+     +-----+
         |           |     |
         |     ------+     |

「ん? こ、これは……まさか!?」

ああ。この状態から直線をほんの一本動かすだけで……

  |      |     +------     +-----+
  |      |     |           |     |
  +------+     +-----+     +-----+
  |      |           |     |
  |      |     ------+     |

「え、HSP! 21 世紀にもなってこ (ry とか 言われて某一部の世間を騒がしている HSP か!」

そうだ…… HSP が流行しているのは すべて Lisp プログラマによる陰謀だったんだよ!

Ω ΩΩ < な (ry

続きも考えたけど飽きたので略。

(21:00)

Linux本

getopt(3) と getopt_long(3) について書いた。 head コマンド実習完了。

(00:37)


2004-10-16

Wiki荒らし

61.144.184.27からWiki荒らし
http://www.otsune.com/diary/2004/10/15.html#200410152

む、家の BitChannel に来てるのとまったく同じ IP ですね。 htaccess で deny しとく。

(22:58)

Ruby Magazine Vol.2

るびま第二号
http://jp.rubyist.net/magazine/?0002

おっと、今日発行だったんですね。すげえ増量している。 そういえばこないだの飲み会で笹田さんが 「いまは発行直後だからいいけど……」 みたいなことを言ってたけど、なるほど、こんなに増えてたのね。 「いきなり減りそう」って心配になるのもわかるなあ。

ピックアップ

  • 「ちょっと特異な特異メソッド入門」

ルーマンで来たかっ! かなり面白かったんだけど、 正直、プログラミングに関係してくるところより システム論のとこのほうが面白かった……。

あと、入門じゃないと思う。

  • 「Rubyの落とし方」

こんなに報告してたんですか。 とりあえず $SAFE=4 は信用するなということですね。 まとめの「Rubyを信用しすぎるのはやめましょう」に賛成。

  • 「Rubyではじめるプログラミング」第一回

なかなかいい感じじゃないですか。 「文字列と数値は違う」というあたりもちゃんと書いてくれてるし。 ゲームではかなり頻繁に rand が欲しくなるけど、さすがにそのへんも抜かりない。 強いて細かいところに注文をつけるなら、

  • IME を切っておくように指示すべき
  • 「入力」「出力」もちゃんと説明をつけたほうがいい
  • せめて「漢字コード」じゃなくて「文字コード」
  • puts (5 + 5) * 5 って (いつまで動くかわからないので) 危険じゃない?
  • いっそのこと呼び出し括弧は全部省略せずに書けばいいかもしれない
  • 無駄な脚注は捨てるべき

というあたりでしょうか。

(00:43)

Ripper

いつだか忘れたけど、Ripper で空行が移動するバグは修正しました。 これで標準添付ライブラリの範囲では正常にパースできるようになったはずです。 ただし __END__ 以降の文字列を取る簡単な手段がないのですが、 これはいまのところ仕様です。 __END__ が登場したことはわかるはずですし、 入力についての情報は Ripper を使う側のほうがたくさん持っているはずなので、 パース終了時の位置情報を使って適当に取ってください。

残るはスキャナイベントの semantic value だな。 yylval への代入を全部洗うのか〜……ダルい。

そのあたりが終わったら普及にむけてドキュメントを書きますか。

(02:45)


2004-10-20

Wiki荒らし再来

また Wiki 荒らしが来てるし……。 誰だかわかりませんけど直してくれた人ありがとう。

スクリプトならまだ対処しようもあるけど、 件数の少なさと、ページ数の少なさを見ると手動でやっているように見える。 となると機械的にはじくのは難しいな。 とりあえずは地道に IP を ban するくらいしかないすかね。

が、地道にやるとは言っても、 せめてもうちょっと作業を自動化したいものだ。 いまのところ以下のような手順なんだけど、 じつにめんどくさい。

  • BitChannel のログを見て ci を確認
  • Apache のログを見て IP を確認
  • dig -x ipaddr (いちおう確認)
  • .htaccess に書く

BitChannel 側に情報は揃ってるはずだから、 もっと直接的に 「このリビジョンをコミットした奴は排除!」と指定できればよいのだ。 ただしこの機能は逆用されると危なすぎるので、 実行できるのは管理者だけに限定したほうがよさそうだ。 どこに仕掛けをつけようかな。

んー、いや待てよ、 まず前提として IP フィルタを Wiki 側に持つべきかどうか考えよう。 今回は特定 IP を切れば済むけど、 ダイヤルアップの場合はネットワークまるごと捨てる必要もあるかもしれないし、 そうすると他のユーザを巻き込む可能性もある。

ban するかどうかは置いといて、 特定のリビジョンを投稿したクライアントに関する情報を ウェブからモニタできると便利そう? しかしこれが公開されてしまうのはやばすぎなので、 かなり厳格にユーザを認証する必要がある。うむむ……実にめんどい。 こういうのってどんなに注意しててもいずれ何かのミスで穴が開くんだよな。 そーいうのは潔く仕組みごと切るのが BitChannel 的ではある。 どうせ実装する暇もないし、もうちょい考えよう。

とりあえずログにクライアントの IP を出力するだけにしとくかな。

(19:43)


2004-10-28

-*- を含まないファイル

これでいいんかな。

% 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)

忘れた

何を書こうとしてたのか忘れました。 一瞬前までは覚えてたのに。

(18:41)

思い出した

思い出した。 「やっばー ruby-dev summary 忘れてた」って書こうと思ったんだ。

忘れたことを忘れる……再帰構成だな

(18:42)

Linux 本

遅れに遅れまくった 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本 (2)

そうだ、言ってなかったような気がするので追記しておくと、 今書いてる Linux 本は C の本です。Ruby じゃありません。 (目次を見ればわかるか……)

(03:27)

ruby-talk

[ruby-talk:118142] Matz's baby!

まつもとさんの日記、翻訳して読んでるんだねえ。 この反応の早さはすごいな。

(03:53)

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

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 を使ってたのを日記に
移すときにバックスラッシュに直したのが敗因でした……]


2004-10-31

ripper

懸案の 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)

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

Kouji [setup.rbを使っています。
ruby setup.rb all --rubypath=/usr/bin/ruby1.8と指定した場合、bin/のファイルの#!が上書きされないようです。
原因はFile.basename(rubypath)がrubyではないからなのですが、なんとかならないですかね。]

青木 [あ、それは単なるミスみたいです。
CVS HEAD では直ってると思います。]


<前月 | 最新 | 次月>
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|11|12|
2008|01|02|04|05|06|09|10|
2009|07|
2010|09|

Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved. LIRS