リンク: [ホーム] [自己紹介] [リンク集] [アルバム] [ソフトウェア] [発表文献] [その他]

まさおのChangeLogメモ / 2005-02-09

01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

2005-02-09 Wed

* Rubyの遅さ

freqfiles.rb が異様に遅かった件について、検証してみたい。

なんとなく、ハッシュテーブルの実装に問題がありそうな気がしてきた。
amazon 上で、最新版を取ってきて、確認してみよう。

ベンチマークは、ランダムなアルファベット 5〜20 文字を一行ずつで
10000 行というものを作って確認してみる。

ついでに、Perl/Python などとの比較もしてみたい。

同様の疑問を持った人は他にもいるみたいで、ruby-talk では 2001 年ご
ろに以下のようなスレッドが立っている。
[ruby-talk:24466] Why is ruby slow (compared to perl):
http://blade.nagaokaut.ac.jp/cgi-bin/vframe.rb/ruby/ruby-talk/24466?24273-25371

ちなみに、色々なプログラミング言語のベンチマークを取った Language
Shootout のサイトは以下に移動した模様:
http://shootout.alioth.debian.org/
http://shootout.alioth.debian.org/benchmark.php?test=wordfreq

手元のデータでやってみると、ruby-1.6 系だと遅いが、CVS 最新版をビ
ルドしてテストすると、格段に速くなっていた。

% time perl -w test.pl test.dat ; time ./ruby -w test.rb test.dat
0.70u 0.03s 0:01.13 64.6%
1.79u 0.10s 0:03.22 58.6%

これなら問題なさそうだね。

念のため、ruby-1.8.2 でもやってみたが、同様に速かった。
なお、比較に使った Perl は v5.6.1(amazon にデフォルトで入っていた
Sun 由来のやつ)

* Wiki+Weblog

両者をまとめたようなツールが欲しい。

* SpamFilter

PaulGraham御大のSpam論文3部作:
・A Plan for Spam
・Better Bayesian Filtering
・Filters That Fight Back

を読んでいたら、スパムフィルタをいじりたくなってきた。

CJK などでのトークン分割手法で、形態素解析/n-gram/文字種のどれが一
番性能が良いかなど確認してみたいなあ…。

* lessの画面消去

arno などの Linux 上の less において、終了時に表示していた画面が消
えてしまう現象が出ることがある。

これは、less の FAQ にもあるように、less が termcap(terminfo) の
ti/te (smcup/rmcup) を発動することによって起きる現象のようである。
cf. http://www.greenwoodsoftware.com/less/#tite

さて、これを変えるには以下の方法がある:

1. less -X
上記の FAQ にも載っている方法。

ただし、FAQ にもあるように less 内で矢印キーが使えなくなるなどの別
の不具合が出た。

2. LESS_TERMCAP_te=" " && LESS_TERMCAP_ti=" "
less のソースを読んでみると、less では、こういう環境変数で te/ti
の実際の設定を置き換えることが可能みたい。ただし、空文字列になって
いると無視されるので、何か入れておく必要がある。

かなり裏技的だが、less 以外の curses アプリケーションには効かない
のが痛い。

3. $TERM の変更
ti/te を使わないような $TERM を使用する。
→ xterm1 など(参照文献参照のこと)

ただし、どの環境でも汎用的に使える $TERM を探すのは面倒かも…。

4. termcap(terminfo) DB の書き換え
単純に termcap/terminfo に載っている xterm の定義を変える。

いくつものマシンを使っていると、それぞれのマシン上で設定を変更して
いかないといけないのが面倒。

5. 端末エミュレータの設定変更(titeInhibit)
手元でよく使う端末エミュレータに、この ti/te を無視する設定があれ
ば、うまくいく。

Putty の場合、[端末]→[特徴] にある「Alternate端末画面への切替を無
効にする」("Disable switching to alternate terminal screen")をオン
にしておけば良い。

ちなみに、xterm の場合、titeInhibit というリソースを設定すれば良い。
という記述がマニュアルにあったところからの類推で辿りついた。
cf. http://www.fifi.org/doc/xterm/xterm.faq.html#xterm_tite

・参照: つれづれ日記 2002年5月:
http://www.sshida.com/~shida/diary/200205-diary.html#20020509
X で利用する curses 対応ソフトで画面が復帰 (再描画) されないよう
にする

これは以前から非常に不満に思っていたのだが、
    * man, vi, less, w3m などを使ってちょっとファイルを見たあと、
    * プログラムを終了させて表示処理から抜けると、
    * そのソフトでわざわざ表示させた文字列がきれいに消えて
    * terminal に表示されている文字列がそのソフトの実行前の状態になる
例えば man termcap などとして、何かのアトリビュートの説明を 検索
して表示させたあと、その場で q と打てば、そのアトリビュート
の 説明が画面上に残っていてほしいわけだ。しかし、RedHat では
せっかく表示したものが消えてなくなってしまう。

このような画面の復帰をやめさせるには RedHat の場合は TERM=xterm1
を指定すればよい。/etc/termcap を見ると、 xterm1 のエントリがあ
るが、ここでは ti@, te@ を指定 している。

less --no-init, w3m -X などと する方法もあるが、これだと vi には
効かない。vi などでも 効果を出すには terminfo の変更が必要。

該当するのはこの部分になる:

:ti=\E[?1048h\E[?1047h: --- 端末初期化時処理
:te=\E[?1047l\E[?1048l: --- 端末終了時処理

ESC [ ? Pn h はモードの退避、
ESC [ ? Pn l はモードの復帰らしい。

1047,1048,1049 については man xterm を見ると、いくつかの 命令が
組み合わされた xterm 用のエスケープシーケンスらしい。

なお、その他の ANSI/ECMA のエスケープシーケンス表は /etc/termcap
の最後の方にある。

xterm1 をわざわざ指定するのがいやな場合は xterm-xfree86 の 部分
だけを別ファイルに取り出し、上の変更を加えたあと 自分のユーザ権
限のままで tic my-xterm.termcap などとすれば 自分のホームディレ
クトリの .terminfo/x/xterm-xfree86 という ファイルに terminfo が
作成され、利用できるようになる。

* 話せる・聞ける英語の勉強法

とりあえずメモ。
・On Off and Beyond: 話せる・聞ける英語の勉強法:
http://www.chikawatanabe.com/blog/2004/04/post_3.html
・On Off and Beyond: 話せる・聞ける英語の勉強法2:
http://www.chikawatanabe.com/blog/2004/04/post_8.html

* Unicodeライブラリ

cf.[2005-02-04]
Unicode 文字列および 文字属性(スクリプトなど)の情報を扱うような
ライブラリをいくつか見てみたが、libm17n が意外といいかも…。

候補は以下の通り:
・ICU4C http://oss.software.ibm.com/icu/
・mozilla/intl/ http://www.mozilla-japan.org/projects/intl/
・libm17n http://www.m17n.org/m17n-lib/

しかし、どれもライブラリのサイズが大きいなあ…。

* 英会話(皇居前)

朝の出勤後、皇居一周してきたら、パレスサイドビル脇の竹橋駅出口でつ
かまった。

外人: Excuse me. Where is the emperror parace?
自分: Parace?
外人: Yes. Where is the Japanese emperror parace?
自分: Well, over there. (皇居を指差す)
外人: Where is the entrance of the parace?
自分: Well, ... (えっとー、どこだったけかな?)
         (道路を指差して、右の方へ曲がる動作をしながら)
        Go to right over there,
        and, along with this street
         (えっと、どれくらいだったけかな?)
        about 2 or 3 hundred meter.
外人: OK. I see. Thank you.

ただし、帰ってきてから考えると、200〜300m ではきかない位遠かったみ
たい。mapfan で調べると 1.6km くらいあるみたい。

しばらくダウンをしていると、戻ってきたので、諦めたのかも…。
「What's up?(どうした?)」って声をかけてみれば良かったかも…。
Referrer (Inside): [2005-02-15-2]