■ net
net のバグをいくつか直した。
- net/http: プロクシ + HTTPS が動かなかったのを修正 [ruby-dev:23379]
- net/http: クラス変数除去
- net/pop: クラス変数除去
- net/smtp: SMTP-TLS パッチをマージ
なんか、クラス変数が継承しなくなったことで
単にクラス変数を使わなくなるという結果になってるな。
そういえば、クラスメソッドは継承するけど
インスタンス変数は (当然) 継承しないから、
継承したメソッドを使うと困るんだよね。
class A
@message = 'OK'
class << self
attr_reader :message
end
end
class B < A
end
p B.message #=> nil
これはけっこう嫌だ。
クラス変数にしとけばこういう場合に対処できたけど、
これからはできない。
クラス変数の仕様変更を好意的にとらえるなら、
そもそもクラスに情報をためこんじゃだめってことだろう。
実際、クラスの変数ってグローバル変数と変わらないわけだし。
(18:42)
■ Gmail
Gmail 自体はどうでもいいんだけど、
普通、メールの 1GB や 2GB くらいはたまるよね?
% du -sh ~/Mail
1.2G /home/aamine/Mail
(19:04)
■ Ripper
もーどうしょうもなくなったので Ripper に手を出す。
Moonwolf さんから報告されたバグは思ったより複雑で、
かなりたくさんの要因が複合していた。
- __END__ に対応していなかった
- パーサイベント if_tail, opt_rescue, opt_ensure, opt_else, cases
などにおいて Qundef が Ruby レベルに露出していた
うう、まだ lib 以下が全部通らないよう……。
嫌な感じだなあ。
~/c/ripper % ./ruby t data
t:8: [BUG] cannot convert ID to string: 327
ruby 1.9.0 (2004-04-19) [i686-linux]
ここで時間切れなので、続きは土曜か日曜になります。
(01:10)
(追記) [BUG] と出ていますが、これを出しているのは Ripper です。
■ BitChannel / 日本語ページ名 (11) ページ名調査
※ この項はずっと前に書いたんだけど機会を逸して出し損ねていたもの。
メモを兼ねてポストしておく。
各所の Wiki をまわって、
どんな日本語ページ名が使われているか調べている。
通したいページ名
- 固有名詞全般 (「らぐやねん」「でびるまん」「モナー」など)
- 一般名詞の組み合わせ (「開発日誌」「変更履歴」「改行コード」)
- 定番ページ 「〜反応リンク集」
- 「富豪的プログラミング」
普通の WikiName でも妥協できそうなページ名
- カタカナだけのページ (「オートリンク」「バージョンアップ」など)
むしろ禁止してしまいたいページ名
- 「ごあいさつ」
- 文章そのまま (「○○って使えそう?」「Perl6開発の補助金が底を尽きる」)
- 無駄な修飾がある (「(仮名)」「など」など)
やっぱり問題は固有名詞だな。
異様にバリエーションが多いうえに自動検出が難しい。
(01:46)
■ BitChannel / 日本語ページ名 (12)
※ 続き
例のページ名麻雀ルールについて。
思いつきがネタネタしいわりにちゃんと調査してしまった。
まず、以下のように文字種ごとに記号を定義する。
- H = ひらがな
- T = カタカナ
- K = 漢字
- A = a-zA-Z0-9 (全角含む)
- ' ' = それ以外
この定義に従ってテキストを [HTKA\ ] の列に変換し、
さらに同一アルファベットの連なりは HHH → H3 と圧縮する。
このとき例えば「大三元 (漢字 3 文字 + ひらがな 3 文字 + カタカナ 3 文字)」
は正規表現 /K3H3T3/ で表現できる。
以上の方法を用いて、
それぞれの役が BitChannel の既存ページに
何件存在するか調査した結果を以下に示す。
- /K3H3T3/ …… 3
- /K3H3K3/ …… 1
- /K3T3K3/ …… 0
- /K3T3H3/ …… 0
- /K4H4T4/ …… 0
- /([KHT]3){3}/ …… 13
- /([KHT]3){4}/ …… 4
- /K3[KHT]3[KHT]3/ …… 4
- /K4[KHT]4[KHT]4/ …… 1
- /([KHT]2){1}/ …… 3290
- /([KHT]2){2}/ …… 689
- /([KHT]2){3}/ …… 94
- /([KHT]2){4}/ …… 9
- /([KHT]2){5}/ …… 1
- /([KHT]2){6}/ …… 0
- /([KHT]2){7}/ …… 0
- /([KHT]3){1}/ …… 2369
- /([KHT]3){2}/ …… 229
- /([KHT]3){3}/ …… 13
- /([KHT]3){4}/ …… 0
- /([KHT]3){5}/ …… 0
- /([KHT]4){1}/ …… 1830
- /([KHT]4){2}/ …… 85
- /([KHT]4){3}/ …… 3
- /([KHT]4){4}/ …… 0
- /([KHT]4){5}/ …… 0
- /([KHT]5){1}/ …… 1349
- /([KHT]5){2}/ …… 34
- /([KHT]5){3}/ …… 0
- /([KHT]5){4}/ …… 0
- /K4/ …… 277
- /K5/ …… 48
- /K6/ …… 18
- /K7/ …… 3
- /K8/ …… 0
- /K9/ …… 0
- /[KHT]5[KHT]7[KHT]5/ …… 0
- /[KHT]5[KHT]7[KHT]5[KHT]7[KHT]7/ …… 0
この結果を使って使えそうな役を探すわけだが、
どのような検索結果になる役がよいのかを先に定義しておく。
- 件数が少ない。役に偶然一致してしまう確率は低いほうがよい。
- 不自然な連なりにヒットしないほうがよい。不自然な例: 「必然的にこのタイプ」(K3H3T3)
- 意図的に作るのは容易
試した結果、以下のようなことがわかった。
- 先頭にひらがなを許すと不自然なフレーズができやすい
- 漢字・カタカナのみの組み合わせはキーワードになりやすい
- 短いコンポーネントがたくさん続いているパターンはよくない。例:「検出して表示する機能」(K2H2K2H2K2)
以上の考察の結果、比較的成績のよかったパターンを挙げる。
- /[KT]3[KT]3H3/ 例:「ローマ字表記にする」
- /[KT]4[KT]4/ 例:「構造体型チェック」「関連日記アンテナ」
(01:47)
「ページ名が日本語である」ことと、
「日本語でWikiページにリンクをはれる」ことは分けて考えた方がいいような気もします。
バージョンアップは VersionUp でも理解はできますが、これが文章の中だと、
日本語の文章の中に突如として英語が出てくるのはやはり不自然であると感じています。
あと、「むしろ禁止したいページ名」で、「無駄な装飾がある」のは分かりますが、
「ごあいさつ」がNGというのは何故なのでしょうか?
Ripper期待してますw
日本語ページ名はKakasiで分かち書きして2語の組み合わせをページ名にしたらどうでしょう?
本来の WikiName の発想を逆転して、前後が 2byte 文字で
1byte 空白で挟まれた文字列を、日本語 WikiName としたら
良いのではないかと思うのですが。