Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
Matzにっき(2006-02-03)
[go: Go Back, main page]

«前の日記(2006-02-02) 最新 次の日記(2006-02-04)» 編集

Matzにっき

<< 2006/02/ 1 1. 『よくわかる現代魔法
2. ActiveState To Spin Out
2 1. Rast高速化パッチ
2. レノボ、Core Duoを搭載したThinkPad X60 / T60を発表
3 1. ruby_class削減
2. Rastが遅いわけ
3. 英会話
4. 雪
5. コンピュータは難しすぎて使えない
4 1. 参観日
2. 『コンピュータ技術者になるには』
3. Ruby温泉ミーティング2006春
5 1. 断食安息日
6 1. 日経Linuxとオープンソースマガジン 2006年4月号
2. るびま 13号
7 1. 日経Linux
2. 日本国民全員にプログラマになってほしい
8 1. 妻の誕生日
2. 日本政府はさっさとオープンソース振興から手を引いてしまえ
3. 良書
9 1. デベロッパーズサミット
10 1. デブサミ2日目
2. 「サミット」
11 1. 実家へ
2. 『i』
12 1. 松江
2. バリアフリー
13 1. Why Ruby?
2. WebプログラマはRailsに乗るべきか?
3. Language Design Is Not Just Solving Puzzles
4. 第7回アジアOSSシンポジウム
14 1. バレンタインデー
2. 機械は人狼を見つけられるかな
3. C#への期待。アンダースからの返答
15 1. オープンソースマガジン・ゲラ
2. 小人さん
3. 「仕事でオープンソース・ソフトを開発したければ有名人になれ」,Seasar2開発者のひが氏
16 1. 日経Linux・ゲラ
2. Otaku, Cedric's weblog: Python going extinct?
3. 競争に打ち勝つための最新武器--オープンソース
17 1. ご当地バカ百景
2. OSSにとってどのような支援策が必要か?
3. 定数探索ルール変更
18 1. 掃除
2. 多重継承言語としてのRuby
3. Rails' Ridiculous Restrictions, a Rant
19 1. 娘のお話
2. バプテスマ会
20 1. お客さま
2. るびマっ 13号
21 1. 「Matzにっき」が壊れた
2. 「有名」になること
3. テレビ出演
22 1. reddit.com日本語版
2. 「有名」になること(2)
3. 風邪ひいた
4. private問題
23 1. 体調不良・スライド
2. 父親の誕生日
24 1. 平成17年度上期未踏ソフトウェア創造事業 千葉PM 成果報告会
2. 『Joel on Software
25 1. 次女誕生日・買い物
26 1. 定例集会・監査
27 1. private問題、その後
2. 復刊ドットコム
28 1. Joelが腹立たしいわけ
2. Ruby2.0への一歩
>>
迷惑メール対策なら Dr.WEB
『Dr.WEB メールデーモン』、MTA 用迷惑メール対策製品です!


2006-02-03 [長年日記]

NEW!_ [Ruby] ruby_class削減

メソッド定義の対象となるクラスを指すruby_classと、定数参照の対象となるクラスを 指すruby_cbase(その実態はruby_cref)は、非常に似通っている。というか、このふたつ って本来は統一した方がわかりやすいんじゃないだろうか。きっとユーザーもそれを期 待してると思うし。

ということで、統一する。今回はruby_classを全削除して、 ruby_cbaseに置き換えるこ とにする。

で、思い立ったら30分で作業が終了してしまった。今まで10年以上これらスタック と格闘してきたのは一体なんだったんだろう。

というわけで、1.9ではスタックを3本削減。残るは以下の5本。

  • prot_tag
  • ruby_frame
  • ruby_scope
  • ruby_cref
  • ruby_dyna_vars

これらも手を入れる余地はありそうな気がする。たとえばprot_tagを一つ一つジャンプ しながらチェーンするのではなく、目的の場所までいっきにジャンプするとか。 ruby_dyna_varsをリンクではなく各レベルごとの配列にするとか。

NEW!_ [OSS] Rastが遅いわけ

昨日の高速化パッチは高速なんだけど、どうやらN-GramのインデックスになっているBDBの更新に問題があるようで、検索結果に大きな漏れがある。morqのようなタイプのメールリーダーでは検索以外にメールに到達する方法が無いので、漏れは致命的だ。

しばらくソースを眺めてみたが、かなり大規模な修正で、どこに問題があるのか発見することはできなかった。

しかたがない。このパッチは当面断念しよう。

で、パッチを当てる前のRastのソースを眺めてみる。とりあえず遅いのはsyncする部分のようなので、そのへんを重点的に。

まず、明示的なfflush(3)とBDBのsyncはおそらく不要なので外すことにする。 stdioの方はfseek(3)を呼んでいるのでそのタイミングでflushされているはずだし、 BDBの方も明示的にsyncする理由はなさそうだ。BDB自身に任せた方が賢いsyncをしてくれるだろう。

次にソースをよく読むと、データファイルの書き出しで、各N-Gramごとに fseek+fread+fwriteを繰り返している。

デバッガで実行してみると、 syncの遅さはどうやらここに由来しているようだ。プロファイラまで動かせると確実なんだが、 Rubyで書いてあるmorqからRast部分だけのプロファイルを取る良い方法を知らないのだ。

というわけで、できればここをページ単位での書き出しにしたいところ。

だが、なかなか良いアイディアが思いつかない。

いっそ、現在の「BDBによるインデックス+データファイル」という構成から「全部QDBM」にしてしまうってのはどうだろうか(QDBMS好き)。

Curiaを使えば、データ容量の問題もさほどではなさそうに思うし、素朴に要素ごとにfeek+read+writeするよりは、 (ページングしてるから)速度的にも、(圧縮してるから)容量的にも有利だと思うんだけど。

でも、確かRast設計段階でこのアイディアはボツにされたんだよな。ま、単なる「上司の思いつき」だったので、その時は強くは出なかったんだけど。自分が作業するわけじゃないから、当事者の意見の方が重要だしね。

でも、担当者が忙しい今のうちに、こっそり試してみるか*1

はっ、...もう2月か。原稿の〆切が近づいているぞ。もうちょっと先まで我慢したほう がよいか。

追記:

後でQDBMのソースを読んだら、DepotやCuriaはデータ圧縮してなかった。容量的な利点 は無いようだ。

*1  ここに書いたら全然「こっそり」じゃないなあ

NEW!_ 英会話

教会の宣教師による英会話を手伝ってくる。

今日は「英語によるスキット」。我々の班(6名)は、即興で「三匹の子豚」を演じたの だった。急だったわりには全員ノリノリだったという。

確かに結構楽しかった。

NEW!_

降ってきたよ。7時前に帰宅したときには降ってなかったのに、 7時10分に英会話に出発 しようとしたら、わずか20分ほどで地面が真っ白になっていた。

明日の温泉は大丈夫かな。寒い方が風情が出るけど。

そして、明日こそは安来苑の温泉に入ろう。古くからインターネット接続完備の温泉旅 館として(知る人には)知られている安来苑では過去数回宴会を行っているのだが、私は いずれもハックに熱中していて、温泉に入りそこねているのだ。

明日こそは。明日の「Ruby温泉ミーティング」こそは。

NEW!_ コンピュータは難しすぎて使えない

今日になってからFirefoxを始めとするいろいろなプログラムが起動に失敗して coredumpするようになる。どうもフォントに問題があるらしい、と気がつくまでずいぶんかかった。

strace付きでFirefoxを起動して、フォントファイルの読み込みあたりで落ちていることでようやくわかった。その後、fc-cacheも落ちるので、これもstrace付きで実行させ、原因がttf-arabeyesというTrueTypeフォントであることを突き止めた。

そういえば何日か前にdselectでチェックを入れたような気がする。

もともと不要だったので、さくっと削除。やっと通常通りに動作するようになった。しかし、こんな問題が起きるようでは、まだまだ「コンピュータは難しすぎて使えない」ものだよなあ。普通の人がこんな問題に直面したら、対処しようがないじゃん。

答え: 「普通の人」はDebianを使いません。

ま、それは冗談としても。うちの妻のマシン(OSS貢献者賞でもらった日立のPrius)は、ネットワークが接続しているのに、「サーバーが見当たりません」というエラーをしばしば出す。どうやら、DNSがおかしいように思うのだが、ネットワークの仕組みはわかっていても、 Windows XPの仕組みがわからないので直しようがない。ネットワークの「修復」を行うと再接続をして、一時的には状況は改善するのだが、すぐに再発してしまう。

Debianでそんな問題起きたことがない(あるいは問題と意識する前に復旧できる)んだけどなあ。

本日のツッコミ(全9件) [ツッコミを入れる]
_ ささだ (2006-02-04 03:03)

えーと、結局文法変わっちゃったんでしょうか。

_ まつもと (2006-02-04 08:26)

「文法」は変わってませんね。parse.yには手を入れてないから。
あ、ruby_blockを消したときにNODE_POSTEXEだけ変えちゃったけど。
で、セマンティクスですが、make test-allが修正無しで動く程度には互換性があるようです。

_ mikio (2006-02-05 00:23)

DepotもCuriaもページ管理はせずに、個々のレコードの読み書きでlseek+read/readする方式です。
VillaとVistaではページ管理をしています。Hyper Estraierでは、Cabin(CBMAP)でキャッシュしたデータを、キーでソートしてから、一気にVillaに書き出すようにしています。ソートしてから書き出せば、B+木はハッシュ表より更新速度が出ます。しかもページングと圧縮のおかげで記憶効率は数倍になります。

_ 通りすがり (2006-02-05 16:15)

似たような事が以前あり、最近もありました。
~/.fonts.cache-1/
を消してログインし直したら戻りました。

_ Ono (2006-02-07 14:10)

Priusのネットワーク関係のエラーは、単純にハードウェアの
故障じゃないでしょうか。
PriusのLANアダプタの部品が故障しかかっているか、Priusを
接続している先のモデムなりルーターなりハブのポートもしくはポートだけじゃなくて(IPアドレスを発行する)中のチップが以下略ではないかと思います。

WinXPの「ネットワークの修復」でどういうことをやっているかは
http://www.atmarkit.co.jp/fwin2k/win2ktips/355netrepair/netrepair.html
を見ればよろしいかと。

_ うすあじ (2006-02-10 23:17)

はじめまして。
ネットワークのトラブルはケーブルの接触不良の様な気もします。
ツメが折れているケーブルなどではこんな感じになった記憶があります。
無線LANなら、電子レンジを疑いますけど・・・

_ まつもと (2006-02-11 00:44)

それが無線LANなんですよねえ。電子レンジも関係なさそうです。
さほど近くもない隣家で使ってるのが影響するとかありえるのかなあ。

_ Ono (2006-02-12 11:53)

接続ポイントの設定をしていないと、近所のアクセス制限皆無な
アクセスポイント(往々にしてYahoo!BB)に優先的に接続するように
なってしまい、接続ぶち切れで利用者もぶち切れというケースは
あります。

_ chaki (2006-02-17 22:53)

Xのフォントの件は、
単にXの設計が古くて
- 問題の発生場所の確認が難しいのと
 (これはWindowsもそうか)
- 不適切なフォントデータやフォント選択を
 事前に弾く安全策がとられていないから
じゃないかなぁ。
アプリ単位で落ちるだけまだマシな気がしますよ。
昔はXサーバ丸ごと落ちることも頻繁にあったような・・・(初期の*BSD時代)

お名前:
E-mail:
コメント:
本日のリンク元
検索

«前の日記(2006-02-02) 最新 次の日記(2006-02-04)» 編集

RSS feed meter for http://www.rubyist.net/~matz/ Creative Commons License This work is licensed under a Creative Commons License.