NAKAMURA Minoru の日記 (2004年10月)

先月の日記(2004年09月) 今月の日記(2004年10月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3 | 4
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita



10/31 (日)

電話

山口県にいる友人 M 氏から電話がある。
来週 彼は友人の結婚披露宴に出席するために横須賀まで出てくるのだが、 田舎への土産をデリー@上野のカシミールカレーにするので、 購入しておいてくれとのこと。 DVD も欲しかったので秋葉原・上野に出ることにする。

[Food] ゆうき亭@元住吉 (Gourmet)

まず昼飯に元住吉のゆうき亭で、サービスランチを食べる。
本日のランチはチーズ掛けハンバーグ。

ゆうき亭:サービスランチ

秋葉原でお買い物

秋葉原のカクタソフマップで DVD を購入。 中央通り沿いに EXCELSIOR CAFE ができていた。

Big Fish
10/27 に出たティム・バートン監督のビッグ・フィッシュ(Big Fish) の DVD を購入。
アメリカでは RotK の連続一位を食い止めた本作だが、 日本での興行はパっとしなかったためか 販促に力を入れてもらえないのが悲しい。 同時期に「トロイ」とか「ハリー・ポッター」とかも出ているし間が悪いのか!?
近所のコンビニでも売っていない。

320 GB の HDD を購入して、11/28 に発売される DVD-Video の予約を入れる。

Amazon から本がくる

家に帰るとペリカン便で Amazon で注文していた本が届く。

ヒューマン・ユニヴァーサルズ Human Universals ― 文化相対主義から普遍性の認識へ (Donald E. Brown著、鈴木 光太郎・中村 潔訳、新曜社)
J. Alcock の 「社会生物学の勝利」 を読むと、 社会生物学と文化人類学は犬猿の仲のように思えるが、 文化人類学の中に文化相対主義に疑問を感じる人が増えているようだ。 著者のブラウンもそういう文化人類学者で、 かつて文化相対主義の立場にいたが徐々にその立場に疑問を感じて、 人間の普遍要素 (Human Universals) の存在を重視するようになったとのこと。
これを読み終わったら 文化相対主義の本家 Geertz からの反論、 「解釈人類学と反=反相対主義」 も読んでみることにする。
アルフォンス・ミュシャ
アルフォンス・ミュシャ展が 1/27 より開かれるので、 復習(?) にミュシャの画集を賄って鑑賞(10/17 の日記)。

今日のカレー

帰りに デリーで カシミールカレーを食べて帰る。二日連続で辛いカレー。
管理人には 夢民 の 5 倍よりは、 デリーのカシミールカレーの方が辛いように感じられる。


10/30 (土)

[Food] 夢民@池袋

池袋のインド式カリーの店 夢民
辛さが -1 倍から自由に選べる。 グリーンカリー5倍カレーを食べる。

夢民:店の前 夢民:ルー 夢民:ライス

池袋のジュンク堂で本を買う

池袋の ジュンク堂書店 へ。 文京区に住んでいた頃は時々来ていたが、 就職してからは初めてだ。

Linkers & Loaders (John R. Levine著、榊原 一矢・ポジティブエッジ訳)
10/22 の日記にも書いたが実行時リンカーの仕組みを知りたくて購入したのだが、非常に惜しい本だということに気づかされる。 というのも管理人が難読な他の文献をあさって得た情報が、かなり明解に書かれているのだ。 この本をもっと前に買ってれば、苦労は軽減されたと思われる。
残念なのは管理人が今知りたいのはこの本の先、Linux や Solaris の実装固有の部分。 そのあたりの情報は Linkers & Loaders Vol.2 でもないと駄目っぽい。 とはいえ Linkers & Loaders ですら人を選ぶ本なので、そんな本は誰も書かないだろう。 glibc のソースを真面目に読むか。。。
ローマ帝国衰亡史 The History of The Decline and Fall of The Roman Empire (エドワード・ギボン著、中野 好夫訳、筑摩書房)
前々から読みたかった「ローマ帝国衰亡史」を読み始めようと全11巻の1・2巻分を購入。
共和国時代のローマは素っ飛ばしていきなりアウグストゥスから始まるのにびっくりするが、とりあえず今年中に全巻読破を目指そう。

一緒に行った aiit の人たちは、会社の経費でコンピューター関連の本をしこたま購入していた。
しかし、H.R. 女氏の買った「バカ日本地図」まで経費で落ちるのかしら。。。 謎だ、企業の経理。

便利なサイト: Thesaurus.com

Web 上でシソーラス(類語辞典) の検索サービスを公開しているサイト。
"diary" の類語を検索 のようなキーワードリンクが許可されている他、以下のような検索BOXも公開されている。

 Search:   for    

10/29 (金)

[Java] BCEL

BCEL を使って Java のバイトコードの書き換えルーチンを書いているのだが、いまさらながら BCEL のあまり嬉しくない仕様に気づいた。 BCEL は Java のクラスファイル(.class) をパースしている最中に、コード中に含まれるクラスのロードとリンクを同時に行っているようだ。

つまり。。。。
例えば unexecutedMethod というメソッドを含む Test クラスがあったとする。 unexecutedMethod の引数 UnresolvedClass1 クラスは未解決なクラスなので、当然 unexecutedMethod メソッドが実行される前に UnresolvedClass1 クラスのロード & リンクが行われなくてはならない。 しかし Java 言語 & Java VM の仕様では、JavaVM は Test クラスを読み込んだ後でも、unexecutedMethod メソッドが初めて実行されるまで UnresolvedClass1 クラスのロードが遅延される。 unexecutedMethod メソッドが一度も実行されないのであれば、UnresolvedClass1 クラスのロードは不要。

class Test {

  public void unexecutedMethod(UnresolvedClass1 clazz1) {
    //
  }
}

一方、BCEL で Test クラスを読み込んだ場合、unexecutedMethod メソッドを解決する途中で、UnresolvedClass1 をロードしてしまうようだ。 今書いてるプログラムでは、この動作の違いが問題になる。 Test クラスが読み込まれてから、unexecutedMethod メソッドが実行されるまでの間に、UnresolvedClass1 クラスを動的に生成したいのだが、さてどうしたものか。。。

追記:11/1

ぜんぜん違った。
BCEL もクラスファイルをパーズしただけでは、メソッドの引数やコード中のクラスのリゾルブは行わない。 もっと別の場所でリゾルバーを起動しているようだ。

追記:11/2

BCEL の MethodGen クラスを Method を引数として構築する コンストラクタMethod型の引数m に与えられるのは、同じ ConstantPoolGen を共有している Method だけのようだ。 別のクラスのメソッドを操作中のメソッドに貼り付けたい場合には、[bcel-user:00565] のように MethodGen.copy() を使う必要がある。


10/28 (木)

お客様の都合により…

NTT DoCoMo 2003年の3/6 に続いて DoCoMo の携帯が携帯電話が止められていた。 お昼休みに慌てて武蔵新城にある DoCoMo ショップへ行く。 8月、9月分の料金が滞納だった。8月分は料金は支払った記憶があるのだが、、、

せっかく武蔵新城まできたので当地のラーメン屋へGO!
駅前にあって前から気になっていた「あじくら」で食べることにする。

あじくら:店の前
店の前
あじくら:とんからラーメン
とんからラーメン

ちゃんぽんの麺みたいに太いのはいいのだが柔らかすぎ。 麺が伸びているのでは、、、
スープの辛子味噌入り豚骨もそれほど美味しいとは思えぬなり。 あぅ。

[Work] 今日の意味不明

FF が大変なことに。
いや、FF で大変なことに。


10/27 (水)

[Tips] Postfix のキュー制御

MTA として Postfix を使っている場合の TIPS。
送り先サーバーが止まっていたりして、Postfix の送信キューにいつまでもメールが溜まってしまうことがある。 その場合の対象方法。
まず mailq コマンド でどのようなメールがキューに溜まっているのか確認する。

# mailq
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient-------
7DB7697467*     636 Thu Oct 28 10:59:46  nminoru@nminoru.jp
                                         nminoru@hoge.moge

-- 0 Kbytes in 1 Request.

キューに溜まったメールを削除したい場合には root 権限で postsuper コマンド を用いる。 -d オプションの後に削除したい Queue ID を指定。

# postsuper -d 7DB7697467
postsuper: 7DB7697467: removed
postsuper: Deleted: 1 message

キューに溜まったメールを強制的に再送信したい場合には、postfix flush と打つ。

[Work] UML! UML!

IBM Rational Rose Professional をインストール。

Sound Horizon の『Elysion』

10/8 に書いた「Elysion」の CD が到着。
発売日に届いたのはいいのだが、 宅急便屋はアパートの部屋の前に無造作に置いていきやがった。


10/26 (火)

[Bench] Athlon64 FX-55 の SPECcpu2000 スコアが公開される

AMD から Athlon64 FX-55 (2.6GHz) のスコアが公開される。
SPECint2000 が 1,854 となり、 Petnium4 w/HT EE 3.4GHzを越えて全アーキテクチャー最速に踊りです。
SPECfp2000 は 1,782 で、 Itanium2、POWER5、SPARC64V が上にいるが IA-32 系としては最速。

その他、めぼしいところでは Supermicro の Prescott コアの Xeon 3.6GHz のスコアが公開された。
ただ スコアは int2000 が 1,481、 fp2000 が 1,375 と振るわず。 システムバスが 533MHz → 800MHz に向上したものの L3 キャッシュがないのが響いたのか、 ベンチマーク馴れしていない Supermicro の計測のためなのかは不明。

更新


10/25 (月)

[Tips][OS] Loopback Virtual File System (lofs)

Linux には loop device を利用したファイルシステムがあり、単一のファイルの中にファイルシステムを作り出してディレクトリツリーにマウントすることができる。

Solaris や HP-UX にはこれとは異なるループバックファイルシステムがあり、 Loopback Virtual File System (lofs) と呼ばれる。 これは現在のディレクトリツリーの任意のディレクトリを、 ファイルシステムに見立ててマウントできるというもの。 ディレクトリの hard link だと思えばよろし。
existing-directory 以下を mount-point にマウントする場合、 以下のように打てばよい。

# mount -F lofs existing-directory mount-point

Linux の loop device と異なり、 lofs は元のディレクトリのファイルを操作するのとほとんど変わらない速度でアクセス可能。

Solaris の場合は設定を /etc/vfstab に書き込む。 以下は /export/opt/ 以下を /opt0 にマウントする例。

#device         device          mount           FS      fsck    mount   mount
#to mount       to fsck         point           type    pass    at boot options
/export/opt     -               /opt0           lofs    -       yes     -

10/24 (日)

[Food] インド風カレー「エチオピア」

神保町のカレー屋「エチオピア」 (Yahoo!グルメ) に。
「インド風カレーを謳うのに店名がエチオピアなのはなぜ?」とか
「インド風カレーならビーフカレーは止めろよな」とか内心で突っ込む。

お店は満員だが、回転がよいのですぐ座れる。
カウンター席に座ると茹でたジャガイモにバターが出てくる。

エチオピア:店の前
店の前
エチオピア:前菜のジャガイモ
前菜のジャガイモ
エチオピア:チキンカレー
チキンカレー(2辛)
880円

辛さのインパクトはなく、フルーティーな味。 ルーはさらさらしていて、和風カレーと「デリー」のカレーの中間ぐらいね。
# カレーは写真に撮るのが難しいね。。。

[Food] ビッグアップル@元住吉

夜は元住吉のハンバーグ & オムライス屋さんビッグアップルへ。
新製品と思われる「タンポポ色のオムライス」を食する。

ビッグアップル:タンポポ色のオムライス

(自称) 世界一美味しいポテトチップス

元住吉駅前にある住吉書房という 本屋 で売っていたポテトチップス。 オリーブオイルで揚げた、世界一美味しいポテトチップスらしい。 米の国の食べ物だが、「うまさが違う」との宣伝文句に思わず買って帰る。 一袋、450円なり。

さぞや上品な味わいのポテトチップスなのだろうと期待するが、 袋を開けると裏切られた。 カルビーのポテトチップスが、プリングルスより厚くなった 形状だ。 あるいは、昔あった「おさつスナック」を、そのままの形状でポテトチップスにしたような感じだ。

Olive Oil Potato Chips Olive Oil Potato Chips
焦げに見える茶色の部分が厚みです
Olive Oil Potato Chips

こんなお馬鹿な製品をいったいどこが作ったのかと訝しがるが、 袋を見ても会社の名前がない。 しばらく考えて袋に意匠がある Good Health が社名だと気づく。 ググると Good Health が見つかる。 トホホな製品に激しく惹かれるぞ。

Olive Oil Potato Chips

10/23 (土)

[Food] モスバーガーの「匠味アボカド山葵」

元住吉のモスバーガーで、 匠味シリーズの「アボカド山葵」(公式)を食する。
山葵は別の皿に盛られているのを ナイフとフォークでぬすくって食べるという形式。
ハンバーガーというよりはパン付きハンバーグだ。

モスバーガー:匠味アボカド山葵
フォークとナイフが並べられる
モスバーガー:匠味アボカド山葵
アボカドバーガー
モスバーガー:匠味アボカド山葵
山葵は別

お味の方は、アボカドのハンバーグはよくあっていてグッド。 山葵は少し余り気味だ。
ちなみに以下のような「お召しあがり方」という小さなパンフレットが渡される。

「匠味アボカド山葵」のおいしいお召しあがり方
一、 本山葵をアボカドにつけて
アボカドのまろやかさと
本山葵のすがすがしい香りを
お楽しみください。
二、お肉に本山葵をつけて
お召しあがりください。
本山葵で味を引き締めたお肉と
たれのうまみをお楽しみいただけます。
三、本山葵をたっぷりとつけて
お召しあがりください。
本山葵のすりたてのやわらかい辛みを
お楽しみいただけます。

[時事] 新潟で地震

職場で仕事をしていると建物がぐらぐらと揺れる。
かつてない揺れ具合だと思ったら、新潟で震度6の地震だったもよう。

追記:10/27

新潟県中越地震
23 日 17:56 M6.8


10/22 (金)

[Prog] 実行時リンカーの調査 (1)

Windows のモジュールのインポートセクション操作による API フックのようなことを UNIX でも行いたくて、共有ライブラリ(shared library) 周辺の仕様の調査を行っている。 とりあえず、人から聞いたり 調べて分かったりしたことをその都度 日記にメモしていくことにする。

まず DLL コールのコアになっている再配置処理について。
C ソースプログラムは a.c は、malloc 等の C 標準ライブラリを呼び出しているとする。 C 標準ライブラリの関数は libc.so に存在しているので、 a.c をコンパイルした a.o から見た malloc の位置は 状況によって変わり実行時にしか解決できない。 このような問題を解決するために、 Global Offset Table (GOT) と呼ばれる機構を使う。 GOT は Windows で言うところのインポートセクションで、関数ポインタの配列となっている。
イメージとしては以下のような感じ。

.got
  void*  _GLOBAL_OFFSET_TABLE_[];

a.c を含むプログラム a.out をリンカーがリンクする時に、 リンカーは malloc を見つけて GOT の中に malloc のエントリを用意する。 これが n 番目と決め打てれば実行時には _GLOBAL_OFFSET_TABLE_[n]malloc のアドレスが入ることになる。

ただし、_GLOBAL_OFFSET_TABLE_[n]malloc のアドレスが入るのは、a.outlibc.so がリンクされた時ではなく、a.out 中のコードが初めて malloc を呼び出した時である (遅延参照)。 初回の malloc 呼び出しでは、まず実行時リンカー(runtime linker) に誘導され malloc の名前解決と GOT のセットが行われる。 2回目かは malloc を呼び出すことになる。

このような遅延参照を実現するために、GOT のエントリ数と同じ数の PLT セクションが用意されている。 PLT セクションは自己書き換えが行われるコード領域で、PLT の1エントリーは 3〜4命令を格納できる大きさになっている(アーキテクチャーや OS によって変わる)。 (.text セクションにある) プログラムのコードは GOT を直接参照せず、プロシージャーリンクテーブル (PLT) のエントリにジャンプすることになる。

.plt
 .PLTn :   // malloc 用
  // 初期状態では runtime linker の呼び出しが、
  // 書き換え後は _GLOBAL_OFFSET_TABLE_[n] を参照してジャンプするコードが入る。

 .PLTn+1 : // 別の関数用
  //

.text
  
 _foo
  // ... 
  call PLTn  // malloc 呼び出し
  // ...

.got
  void*  _GLOBAL_OFFSET_TABLE_[];  

PLT セクションに置かれる命令はプロセッサ固有なので、各々のマニュアルを参照する必要がある。

参考

東大駒場キャンパスへ

プログラム研究会を聴講しに、久しぶりに東大駒場キャンパスへ。
先端研にはしばしば足を運ぶのだが、駒場の本体に来るのは久しぶり。

東大駒場キャンパス 東大駒場キャンパス

駒場キャンパスも随分いろいろ様変わり。
駒場寮の棟は全て撤去。その跡地に図書館と数理科学科の研究等が新しく建っていた。

東大駒場キャンパス:駒場寮跡
この後ろに寮があった
東大駒場キャンパス:駒場寮跡
つわものどもの夢の跡

ついでに教育計算機センターを見てゆく。 本当に iMac TFT が導入されている〜。
# 昔 ここには高見沢の X 端末がずら〜と並んでいてんだよなぁ。
# その頃は X 端末にまでグローバルIPが割り振られていたっけ。。。。

東大駒場キャンパス:教育計算機センター
教育計算機センター
東大駒場キャンパス:教育計算機センター
iMacTFT

お昼は 香港ガーデン で飲茶に行く、、、 つもりだったけど満席で予約できず。
駒場くんだり出てきたのは、飲茶をするためなんだゾ ヽ(`Д´)ノ
渋谷で適当に飯食って帰る。

コメントを書き込む
[本店] 2004-10-25 10:10:35
何もかもみな懐かしい、、、、
[本店] 2004-10-25 10:11:38
香港ガーデンって、駒場からは結構遠くないですか?
[管理人] 2004-10-25 10:32:47
駒場からは結構あるけど帰り道の途中なんで。
駒場 → (井の頭線) → 渋谷 → (東横線) → 武蔵小杉 → (南武線) → 某所なんで、東横線の中目黒から寄り道して日比谷線で広尾(香港ガーデン所在地)に向かうつもりでした。

10/20 (水)

[Work] 台風23号と特急アスティ

本日は沼津に出張だったが、静岡は台風23号の影響圏内に入り、某工場は早期退社の運びになる。

所用後、 管理人は出張先のネット環境を借りて昨日書き上げたビジネス研修のレポートを提出しようとするが、 Java アプレットを使った提出ページがうまく動作せず四苦八苦。 その間に周りの人はどんどん退社して行く。 16 時頃に諦めて自宅から送信し直そうという気になる(提出期限は19時)。 退社すると、その時間には台風のために帰りのバスが。。。

出張先の人に車で三島の駅まで送ってもらう。 だが駅についてみると東海道・山陽新幹線は全面的運行停止に (涙)。
どうしようもないので、 在来線を使ってヨチヨチ帰りますた。

追記:10/25
事情を話して提出期限を延長してもらった。 本日提出。

今日見つけた面白い看板

三島駅の在来線のホームから見える雀荘の看板。
「リーチ麻雀タンヤオ君」って。

タンヤオ君
かりあげ君にしか見えない

10/19 (火)

[Work] ビジネス研修

「会計と財務」のレポートを徹夜でしこしこ書く。眠い。
明日は(もう今日だが) 出張なので新幹線の中で見直そう。


10/18 (月)

[Food] びっくり寿司@武蔵中原

武蔵中原駅の側のビルの1階に入っているお寿司屋さん。
お昼のランチは830円から。それでも ちゃんと握ります。

びっくり寿司:Aランチ
Aランチ(830円)
びっくり寿司:お吸い物
お吸い物が付きます

10/17 (日)

[Food] ラーメン「山頭火」@上野店

北海道 旭川市が発祥のラーメン屋 山頭火 へ。
山頭火は全国展開しているので割と色々なところにあるが上野店で食べる。
ここは塩ラーメンがおすすめなのだが、今回は新製品 辛味噌ラーメンを注文。

山頭火:店の前
店の前
山頭火:のれん
のれん
山頭火:辛味噌ラーメン
辛味噌ラーメン
山頭火:辛味噌ラーメン

辛味噌ラーメンは、あまり特徴のない普通なラーメンだ。 辛さはそれほどでもない。

買い物

覇権か、生存か ― アメリカの世界戦略と人類の未来 (ノーム チョムスキー(Noam Chomsky)著、鈴木 主税訳)
覇権か、生存か ― アメリカの世界戦略と人類の未来
      ノーム・チョムスキーが発表・発言した内容をまとめた本。 今回はイラク戦争後の発言内容も含まれている。
ただ以前の発言と重複した内容が非常に多く、 すでに何冊もチョムスキーの本を読んでいる人は 新しい内容は含まれず冗長に感じるだろう。 とはいえ同じことを言い続けられる胆力はたいしたものだ。
1984年 (ジョージ・オーウェル(George Orwell)著、新庄 哲夫訳)
1984年 あまりにも有名な「1984」だが管理人は未読だった。 動物農場 (Animal Farm) が面白かったので購入。
Kill Bill2
Kill Bill2 DVD を買っても見ないのでしばらく DVD 購入は控えようと思っていたのだが、
1を持っているからという惰性で購入してしまう。 駄目コレクター。

ミュシャが来るよ

少し気の早い話だが、 来年の1月27日より上野の東京都美術館で、 アルフォンス・マリア・ミュシャ展が開かれる予定。 暇があってもなくても行くことに決定。

ミュシャは19世紀末に活躍したイラストレーターだが、 100年の時を経た21世紀の日本でもミュシャ調・ミュシャ様式のイラストが溢れているぐらい影響のでかい巨匠です。 とはいえ、 管理人はミュシャの絵を初めて見たときは 19 世紀末のイラストレーターの絵とは思わずに 「出渕 裕や山田 章博に似た絵を描く人がいるな〜」 と思ったなり。 いや実際はまったく逆だけどね。

P.S.
これも気が早いが来年の3月19日より 国立科学博物館の上野本館で 恐竜博2005が開かれる。
こちらも Go!


10/16 (土)

MPEG2 → DivX 化のついでに、撮り貯めた動画ファイルを見る(?)

某アニメが始まったので 岩波文庫の 「モンテ・クリスト伯」 を 再読してみる。
通して読むのは 5 回ぐらいになると思うが、 それでも繰り返し読むといろいろ新しい発見があるものだ。 「66章 結婚政策」で100万フランの損害をダングラールに与えた ジャコポ・マンフレディというのが、 「ジャコポ」でありモンテ・クリスト伯の数年越しの策略だったということに初めて気づく。

あと アニメの 人物相関図 を見る限り アンドレア・カヴァルカンティ(ベネデット) が出てこないようだ。 原作でもベネデット周辺の伏線はかなり無理があるので、 スタックもばっさり切ったのかしら?

P.S.
MovieWalker の特設サイト を見ると アンドレア(ベネデット) でるようだ。

P.P.S.
原作のヴィルフォール - ベネデットラインの年表を作ってみようと思う。
年表を書き足して行くと、 ベネデット周辺の伏線に無理があるのが分かると思う。

???ヴィルフォール、ナルゴンヌ夫人 (後 ダングラール夫人)と不倫を始める。
1815年 2.28ヴィルフォール、ルネ・メラン嬢と婚約。
1815年 3.20〜6.22ナポレオンの百日政治。王政復古後ルネと結婚。
1815年 9月末オートィユのサン・メラン邸で ナルゴンヌ出産 (これがベネデット)。
ヴィルフォール、ベルッチオに刺される瀕死。

10/15 (金)

[Tips] DNS forwarders

我が家の LAN はB フレッツの ISP 経由でインターネットに常時接続しているが、 いろいろ特殊設定があるので LAN 内の PC は LAN 内に立てたイントラネット用 DNS サーバー (bind-8.3.1 で運用) を 参照するようになっている。

しかし、最近 イントラネット DNS サーバーを参照するとフレッツ・スクェアに接続するときに 不便なことに気が付いた。 フレッツ・スクェアへは常時接続ではなくアクセスが発生した時に接続を行うようにしているのだが、 これはブロードバンドルーター内の DNS サーバーに TLD が flets の DNS 正引きを行うことがトリガーになる。 Windows にせよ Linux にせよドメインに応じてネームサーバーを切り替えることはできないので、 イントラネット DNS サーバーを向いていると このクエリーが自然に出せない。

ネットワーク図

これを解決するためにイントラネット DNS サーバーの bind-8.3.1 に forwarders 設定を行った。 forwarders 設定が行われているゾーンは、 本来の検索方法を無視して まず forwarders に設定されているホストに DNS クエリーを投げてみる。 検索が成功すればそれが使用される。 失敗した時は、 forwardfirst が指定されていた場合には 通常の方法で DNS クエリーを処理しようとする。 forwardonly が指定されていた場合は 本来の設定を無視して打ち止めにしてしまう。

forwarders 設定は全体または個別のゾーン単位で行うことができる。 ゾーンに対する設定方法は named.conf に以下の指定を追加する。 Format 1. の場合は本来のゾーン設定に forwarders 設定を追加した形で、 Format 2. はそのゾーンはすべて指定した DNS サーバーにフォワードする形である。
forwarders は IP アドレスを書かない空の設定も許される。 その場合は グローバルな設定を打ち消す効果がある。

# Format 1.
zone domain_name {
  type (master | slave);

  # それぞれの独自設定
 
  # 追加 
  forwarders { [ ip_addr1 ; [ ip_addr2 ; ... ] ] }; # Router's IP
  forward ( only | first );
};

# Format 2.
zone domain_name {
  type forward;
  forwarders { [ ip_addr1 ; [ ip_addr2 ; ... ] ] }; # Router's IP
  forward ( only | first );
};

我が家の設定だが flets. ドメインの場合だけ、 ルーターの DNS サーバーにフォワードする設定を追加。

zone "flets" {
  type forward;
  forwarders { 10.XX.YY.ZZ; }; # Router's IP
  forward only;
};

とりあえずこの設定でクライアント側で フレッツ・スクェアが快適に見れるようになったス。


10/14 (木)

[OS] Solaris の libXpm.so に深刻な脆弱性

Solaris の libXpm.so にスタックオーバーフローが起きる脆弱性が発見される。 現在まだパッチが出ていないもよう ( ITmedia)。 生まれながら NX (No Execute) 機能を持っている SPARC がこれだとすると、 後付け IA-32 で NX がどこまで効くか疑問なり。

追記:11/12

Solaris2.6 以降ではカーネル変数 noexec_user_stack を 1 に設定することによって、 スタック領域が実行不能になる(マニュアル)。 またカーネル変数 noexec_user_stack_log を 1 に設定することによって、 実行不能スタック上でプログラムを実行しようとした場合に、 警告ログをとるようになる(マニュアル)。 変更はルート権限を得て /etc/system ファイルに設定を書き込み、 リブートすることによって反映される。

なお Solaris7 以降の 64-bit アプリケーションモードを動作させる場合は、 カーネル変数 noexec_user_stack によらずに スタックはデフォルトで実行不能になる。

[OS] Solaris9 の MPSS をチェキするが

9/29 以来 気になっている MPSS 機能のチェックをするために、 他人様の SPARC/Solaris マシンにアカウントを作ってもらう。
だが、このマシンは emacs はおろか gcc も入っとらん ヽ(;´Д`)ノ
他人様は、 教育用にと貰ったマシンに OS をインストールしただけで、 全然使っていないようだ。

しょうがないので Sunfreeware.com から gcc バイナリを落としてインストールしようとするが、
Solaris 形式のソフトウェアパッケージなので root 権限がないとホームディレクトリにすらインストールできない。
ソフトウェアパッケージをファイルに展開する方法も不明 (そもそもそういう方法はあるのかしら?)

Solaris9 には JDK (1.4.1_02a-b01) が入っていることを思い出して、気を取り直す。 ヒープの増減を繰り返し続けるプログラムを作成して、 外側から ppgsz コマンドを適用する。 効果は pmap コマンドに -sx オプションを付けて確認。

  • java を立ち上げておいて ppgsz -o heap=8M -p pid を適用する。 仮想メモリサイズは変らず。
  • java を立ち上げておいて ppgsz -F -o heap=8M -p pid を適用する。 仮想メモリサイズは変らず。
  • ppgsz -F -o heap=8M java ... で java を起動。 仮想メモリサイズは 8KB のまま。

いったい、どうやればラージページが使えるなりか???

[Tips] Apache Web Server に URL forwarding ルール追加

9/10 の日記にも書いたが、 正体不明だがターゲットの URL の階層を一つづつ掘り下げていく Web ブラウザが最近増えている。 そのようなブラウザで この日記を読むと /~nminoru/diary/2003//~nminoru/diary/2004/ へ 自動的にアクセスすることになるが、 Indexing を禁止しているのでエラーログに残ってしまう。

エラーログを減らすことを目的に /~nminoru/diary/ へ誘導することにしてみた。
以下は /~nminoru/ 直下の .htaccess に追加したコード。

# この 2 行は元々書いてある。
# RewriteEngine on           
# RewriteBase	/~nminoru/
RewriteRule	^diary/2003/$	diary/ [R=301]
RewriteRule	^diary/2004/$	diary/ [R=301]

10/13 (水)

[OS] Solaris 本が出るにょ

Solaris Systems Programming (Richard Teer 著)
Solaris Systems Programming 新しく Solaris のプログラミング本が発売に。
Linux でない UNIX プログラムの本が出るのは珍しいかも?
出版元はピアソンエデュケーションで、 装丁は Solaris Internals と同じで 期待できるかも(?)。
詳しい章立は 公式ページ(?) で読める。

10/12 (火)

[Prog] (再) メモリ・オーダリング (Memory Ordering) についての覚え書き

2002年 10月 30日 の続きといっては何だが memory ordering についての覚書。 IA-32、IA-64、SPARC プロセッサーのメモリオーダリングのモードについて、 OS との組み合わせで一般的なものに絞ってメモする。

IA-32 & SPARC のメモリオーダリング

IA-32、SPARC 系プロセッサでは、 同一プロセッサによる同一メモリアドレスに対する順序 (self consistency) は保たれている。 異なるメモリアドレスに対する、 複数の load/store 命令がどのような順序で実行されるかをまとめると以下の表のようになる。 「A → B」 は 「先行する A 命令と後続の B 命令が順番通りに実行される」という意味。 R はメモリ読み込み(load命令)、 W はメモリ書き込み(store命令)。

 R → RR → WW → WW → R システム備考
Sequential Ordering
(Strong Ordering / Program Ordering)
i386 追い越しなし
Total Store Ordering (TSO) × SPARC/Solaris 後発の Read は先発の Write を追い越せる
Partial Store Ordering (PSO) ××   後発の Read または Write は、先発の Write を追い越せる
Weak Ordering ××××   依存関係なし。自由に入れ替え可能
Processor Ordering × i486、Pentium 実際には CPU 以外の制約により Strong Ordering のシステムが多い
Speculative Processor Ordering (SPO) ××× PentiumPro系、Pentium4系  

TSO は厳密には、 同じプロセッサによって Write された値を Read する load 命令がある場合、 別のアドレスを Read しようとしている後続の load 命令が追い越すことを認めている。

Itanium2 のメモリオーダーリング (Release Consistency)

Itanium2 の load/store 命令は weak ordering で弱い consistency しか持たない。 プログラマーは順序同期命令を挟み込むことで陽に同期を取る必要がある。 このような同期命令として Load Acquire (LA)Store Release (SR) がある。 LA は、その命令が完了するまで 後続の load 命令が実行されないことが保証される。 SR は、その前に実行された store 命令の終了が終わるまで完了しないことが保証される。

Itanium2 の W、R、LA、SR の関係をまとめると、以下の表のようになる。

× LA → W○ LA → R× W → LA× R → LA
× SR → W× SR → R○ W → SR× R → SR

もう少し細かいルールがあるのだが、 眠いので後で書こう。

参考

コメントを書き込む
[furukawa] 2004-10-14 20:46:43
天野先生の資料にもありますが、SuperSPARC以降はPSOです。
[管理人] 2004-10-15 00:18:37
furukawa さん今晩は。cmodel.ppt は天野先生の資料だったんですね。

PSO が初めて採用されプロセッサーは SuperSPARC だったようですが、SuperSPARC を含む SPARC-V8 アーキテクチャは PSO と同時に TSO も定義しています (TSO は IBM370 が最初)。 実際の使われ方としては、SPARC/Solaris が TSO のみサポートで、PSO は標準では使用することができないはずです。
# SPARC/Linux は PSO が使えましたっけ?

現行の SPARC-V9 では TSO、PSO に加えて RMO(Relaxed Memory Order) が定義されています。ただ V9 では PSO と RMO は実装してもしなくてもよいという扱いです。

10/10 (日)

ジャック・デリダ死す

フランスの哲学者 ジャック・デリダ氏が 8日、 膵臓癌 のためパリ市内の病院で死去したとのこと。 享年74歳。(Asashi)
アーメン。


10/9 (土)

mAgic TV はいい感じ

9/26 に購入した I/O-DATA のキャプチャーカード GV-MVP/RX の TV 視聴・録画ソフトの mAgic TV は望外にいい感じ。 以前に使っていた BUFFALO の PC-MV5/U2 に付属の WinDVR3 と比較すると。

  • 起動が早い
    WinDVR3 の起動がもともと遅いのか、 USB 接続の TV キャプチャー装置だったからかは分からぬが、 起動まで10秒前後掛かっていたのが、 mAgic TV は起動時間が3秒ぐらいに短縮された。
  • 視聴中の番組の情報を表示
    ADAMS-EPG+ の情報を使って、 今見ている番組のタイトル等を表示してくれる。 ただ時間帯の変更には対応していないので、 野球の延長があったりすると 実際の番組と番組情報がずれる。
  • 予約した番組が番組表に重ねて赤い⇔で表示される
    予約の確認がすごく楽に。 逆に WinDVR3 はテーブル表示される上に、 登録順にしか表示されず予約の確認が面倒だった。
  • 視聴せずの録画が可能
    作業中に録画が始まっても CPU 負荷が上がらず安心。

逆に不満としては、

  • mAgic ガイドの文字がちょっと大きい
    1ページに入る情報が少し少ない。
  • 予約時刻が 1分単位でしかできない
    少しマージンをとって録画したいのだが、 せめて 5 秒単位で指定できないかしら?
  • tvk の番組表が 2日分しか表示されない。
    ADAMS-EPG+ サイトが用意している番組情報のせいだと思うが、 UHF局対応が悪いのかしら?
  • 録画されたファイル名が数字の羅列になる
    録画した番組 1 つに対して 4A03002900 のようなディレクトリを作って 中に 0000.MPG4A03002900.iniFileInfo.dat を作るので、 他のソフトから見るとどういう番組なのか把握できない。 mAgic TV から見ると 4A03002900.ini の中身を見て番組名を表示してくれるので、 WinDVR3 よりも情報量が多くなり

もうちょっと使った I/O-DATA に感想メールを送ってみよう。

P.S.
本日始まった某番組を録画してみるが、 台風 22 号の情報の表示のために周囲に枠が入っていた。
これがオサレフレームなのか〜〜〜。
まぁ Flet's Square で見直すことができたので問題なし。


10/8 (金)

発売予定の音楽 CD

Elysion 〜楽園への前奏曲〜 (10/27 発売)
SoundHorizon:Elysion
同人音楽サークル Sound Horizon がメジャー進出。 初の一般販売に。
Eysion 自体はは既存 CD の再収録曲が多いので、 自分としては買うかどうは微妙。
エレクトリックパーク (仮) (11/17 発売)
家電店の宣伝曲を集めたコンピレーションアルバムが発売されるそうな (Yahoo!JAPAN CD Jorunals)。
収録曲は
  1. 石丸電気の歌 (石丸電気)
  2. オノデンボーヤ CMソング (オノデン)
  3. It's Happy YASUIWorld (コジマ)
  4. ハートでさくらや (さくらや)
  5. サトームセン CMソング (サトームセン)
  6. HELLO, SOFMAP WORLD (ソフマップ)
  7. ビッグカメラサウンドロゴ (ビックカメラ)
  8. ヤマダ電機 (ヤマダ電機)
  9. ヨドバシカメラの歌 (ヨドバシカメラ)
Joshin とロケットを加えて欲しいなり。

追記:10/18
10/27 には Big Fish の DVD も発売になる。

crawler

Apache Web Server のログを見ていると Google の画像収集用の crawler の User-Agent が 10/5 以降 Mediapartners-Google/2.1 から Googlebot-Image/1.0 に 変わっている。

一部、 重なった時期があるがあるが Mediapartners-Google/2.1 の時は 以下のホストからアクセスがきているが、

crawler*.googlebot.com
crawl*.googlebot.com
Googlebot-Image/1.0 になってからは 以下のように変わる。
crawl-*-*-*-*.googlebot.com

Mediapartners-Google と Googlebot-Image の違いは よく分からん。

P.S.
あと、 山名研のロボットと思われる e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/) という User-Agent も発見。

Intel の販促品

Intel VTune Performance Analyzer 2.0 for Linux を 購入した時にもらったハンカチというかタオル。
intel inside XEON。

Intel の販促品

10/7 (木)

Amazon から来たメール

Amazon のアソシエイトプログラムから前四半期分の紹介料の振込み(Amazonギフト券)がないので訝しがっていると、 MTA (postfix) のログにそれらしいアクセスがあった。

connect from 207-171-180-101.amazon.com[207.171.180.101]
reject: EHLO from 207-171-180-101.amazon.com[207.171.180.101]: 450 <jp-mm-outgoing-0104.amazon.com>: Helo command rejected: Host not found
disconnect from 207-171-180-101.amazon.com[207.171.180.101]

HELO コマンドによるホスト名の自己申告で jp-mm-outgoing-0104.amazon.com と名乗っているが、 外側から DNS 名をルックアップできないので postfix は reject されているようだ。 イントラネットの内側から NAT サーバー越しにメールを直接送信しているので、 内側の DNS 名をさらしてしまっているのではないかと予想。

対処方法としては、

  1. Amazon 側が設定を変える → おそらく無理。
  2. @nminoru.jp の HELO チェックを甘くする → 危険。
  3. 他のメールサービスのメールアドレスを使う

ということで 3. を選択しよう。
# 一応、Amazon には伝えておくことにするよ。

[Work] 社員証が IC カード化

会社の社員証が IC カード化されるので写真の撮り直しになる。
同僚の Y 氏は「サラリーマンのコスプレ」をして行ったが、 当方は真面目な研究者なので普通の格好で撮ってきました。

最近 食べたちょっと変なもの

カルビーのポテトチップスのチーズフォンデュ味が出ていた。
タイトルどおりの濃厚な味。

カルビーポテトチップス:チーズフォンデュ
カルビーポテトチップス
チーズフォンデュ

万豚記 の 新メニューの「あつあつキノコのとろみ麺」を食す。
餡の中に麺を入れたような感じで、ラーメンとは異なる食べ物になっていた。 これも濃厚なり。

万豚記:香(くさかんむりに女古)湯麺
あつあつキノコととろみ麺

10/6 (水)

[Work] 覚え書き

今日も沼津に出張。
体調がいまいち不良で三島駅から乗るシャトルバスに揺られて吐きそうになる。

[CPU][Java] Azul Systems

Azul Systems は SUN のエンジニアが大挙して spin-off して作った会社。 Java や C# を高速に稼動する Network Attached Processing (以下、NAP) で 一山当てようとしている。 NAP は独自のプロセッサを積んだ Java アクセラレーター。

  • Vega チップは 24 コアの CMT (SMT?) で、最大 16 プロセッサ。 384 コアの SMP として動作。 メモリは最大 256GB。
  • JVM、CLR などを高速に動かすことが可能な独自のアーキテクチャー。
  • J2EE システムを透過的にアクセラレートするそうだ。
    本体側の JavaVM を入れ替えると NAP にバイパスしてくれるような感じかしら?

SUN の JavaVM 関連の人が大量に止めて移ったと聞いている。
今、だ〜れが Hotspot VM のメンテナンスをしているのやら。

[Compiler] C++ コンパイラの最適化の効きすぎにご用心

Sun Forte C/C++ Compiler 6.0 (SPARC/Solaris) で見つかったいや〜んなバグ。
下のコードは普通に考えると、

  1. Test だけのメモリを確保
  2. コンストラクタ (Test::Test()) の呼び出し
  3. 変数 p へ代入

という順序で実行が進みそうだが、 コンパイラの最適化によっては 1. → 3. → 2. のコードが吐き出されることがあるようだ。 この場合 他のスレッドから変数 g_pTest を見ると 3. → 2. の途中の状態が見えて、 初期化されていないインスタンスにアクセスしてしまうことがある。

class Test {
  private:
    int field1;
  public:
    Test() {
      field1 = ...;
    }
};

extern Test* g_pTest;

::g_pTest = new Test();

日記の修正

9/29 の Solaris9 の MPSS (Multiple Page Size Support) の記述を加筆。


10/5 (火)

[Patent] Kodak v.s. SUN の特許訴訟

米 Kodak 社が米 Sun Microsystems の Java を特許侵害で訴え、陪審評決を勝ち取ったようだ (ITmedia, CNET Japan)。
Kodak が訴えた特許は 3 つ。 Groklaw の記事 中のコメントを参考にすると、

  • Patent 5,206,951, Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types, seems to cover object-oriented technology in general and 'remote objects', like CORBA/RMI, in particular.
  • Patent 5,421,012, Multitasking computer system for integrating the operation of different application programs which manipulate data objects of different types, seems to cover at least the Microsoft object-exchange protocol, the thing that lets you paste an Excel diagram into Word document.
  • Patent 5,226,161, Integration of data between typed data structures by mutual direct invocation between data managers corresponding to data types (yes, it's the same title as the first one) seems to deal with subclassing and virtual functions.
As a programmer, I'm of course whole-heartedly against these kinds of patents. But it seems PJ is stating that case better than I could. Thanks :)
The patents

当たるとクリティカルだが、先行事例がありそうなのだが、、、

追記:10/8
9,200万ドルで緊急和解 (CNet)。

追記:10/8
特許で思い出したが
某所で私が「○○○○ (← プロセッサの名前) には×××の機能 (← 他のプロセッサはすでに実装済み) が欲しい」と言うと
「そういう機能はすでに実装されているが、特許に抵触するのであqwせdrftgyふじこ。。。

ガーガー、ガーガー。マイクのテスト中。本日は晴天なり。

。。。 Hyper-threading も Pentium4 コア内に実装されていたけど、 Compaq から Alpha の IP を買い取るまでは公開できなかった。 Intel のプロセッサのうち詳細が公開されていない部分の中には 特許絡みで公開できない所がありやんす。」
という話でした。

コメントを書き込む
[ぶぅ] 2004-10-08 09:20:31
昨日のコメントを引き継いでいますが、私はSPARCに逆数近似値命令と逆数平方根近似値命令が欲しいっス。IntelのチップにもAMDのチップにもPOWERにもあるんだからどこかの特許になってないよね。

10/4 (月)

[Work] 職場の空調が停止CHU!

建屋空調の入れ替えのため空調が止まってしまってワンワンワワン。
こんな日に限って徹夜になりそう。
10月の最中に熱帯夜を味わえるとは。。。

追記:9/5

ビジネス研修のマーケティングのレポートがやっと書きあがる。 朝日がまぶしい。

[Java][CPU] J2SE 5.0 は IA-64 サポートなし

J2SE 5.0 は Itanium 2 をサポートしません。Itanium 2 は今後のアップデートリリースでサポートされる可能性があります。
サポート対象のシステム構成

ブツはあるけど お蔵入りなのね。

[CPU] SPARC の VIS Instruction Set

プロセッサがメモリにデータをストアする時、 (1) 書き込むアドレスを含むキャッシュラインを読み込む → (2) キャッシュ上に書き込み → (3) キャッシュがパージされる という手順を踏むが、 広範なメモリ領域を塗りつぶすように書き換える場合は (1) のフェイズが丸々余分になる。

これを防ぐために一部のプロセッサには (1) の動作の替わりにキャッシュラインを invalidate してから書き込みを始めるキャッシュ制御命令が備わっている (POWER(PowerPC) の Data Cache BLock Set to Zero(dcbz) や Alpha の Write Hint (WH64))。 同様の命令が SPARC に V9 に無いのを不満に思っていたのだが、 識者に聞くと VIS Instruction Setblock store 命令で実現可能とのこと。

あらためて VIS のインストラクションセットマニュアル を取り寄せて読んで見るが、 結構 知らない命令が多い。。。

コメントを書き込む
[ぶぅ] 2004-10-06 12:29:05
VIS 3.0について書かれたドキュメントってどこかに無いですかね?
SIMD FP命令がいくつかあるらしいんだけど。
[管理人] 2004-10-07 23:18:43
私もドキュメントを入手できていません (+_+;
VIS 3.0 が載るはずだった UltraSPARC V がぽしゃってしまったから、VIS 3.0 もお蔵入りになる危険性も。。。

10/2 (土)

[Food] キッチン「ラフト」

住吉駅からオズ通りをずっと歩いて行くと、ミャンマー料理「」やってい店 kitchen ラフト がある。 「」と書いたのは、この中途半端な地域でエスニック料理の専門店をやるのは厳しいようで、メニューにはおでんとか竜田揚げのようなミャンマー料理らしからぬ料理も並ぶ。

とりあえずミャンマー料理だと思われるメニューを注文。 ミミガーサラダはかなりスパイシーな香油がかかってかなり辛いです。 ココナッツミルクがきいたシーフードカレーは、タイ風カレーとも違うし不思議な味。

ラフト:店の前
店の前
ラフト:ミャンマー風ミミガーサラダ
ミャンマー風ミミガーサラダ
ラフト:エスニック風シーフードカレー
エスニック風シーフードカレー
ラフト:エスニック風シーフードカレー
お吸い物が付きます

美味しいのですが「本当にミャンマー料理なのか?」という疑念がつきまといます。


10/1 (金)

[Java] Java の文字列処理についてつらつら考えている

Java の高速化のために文字列処理の高速化を昔から色々考えているのだが、実際に性能を上げる最適化ポイントは見つからず。

文字列の検索

String.indexOf(String) は、被検索語長×検索語長の計算量が掛かる一番頭の悪いアルゴリズムを採用している。
もっと頭のいいアルゴリズムとして Knuth-Morris-Pratt 法や Boyer-Moore 法があるのだが、String.indexOf の実装をそれらに入れ替えて見るのだが、性能が向上するプログラムもあれば低下するプログラムもある。 どうも String.indexOf(String) の検索語が一般に短いので、スタートアップが必要な最適化アルゴリズムだと効果と事前準備に掛かるコストが打ち消しあってしまうようだ。

文字列連結

String オブジェクトを + 記号で結ぶ文字列連結だが、Java のソースコードの上のような表現は javac によって StringBuffer を用いた下のような表現に展開される。

String x = a + b + c;
String x = new StringBuffer().append(a).append(b).append(c).toString();

これのバイトコード表現は下のようになる。

new StringBuffer
dup
invokespecial StringBuffer()  
// a を評価
invokevirtual StringBuffer.append(String)
// b を評価
invokevirtual StringBuffer.append(String)
// c を評価
invokevirtual StringBuffer.append(String)
invokevirtual String.toString()

この書き方のいいところは、StringBuffer も含めて途中のデータを Java スタックだけで処理できる点で、ローカル変数を消費しなくていい。 ただ連結する入力の如何にかかわらずデフォルトコンストラクタで StringBuffer を作成しているのが問題。 StringBuffer は char[] 型フィールド value で文字列の内部表現を保持しているが、value のデフォルトは 16 文字分。 あらかじめ連結した後の文字列長が分かっているのあれば、最初からその大きさで確保した方がよい。

String x = new StringBuffer(a.length() + b.legnth() + c.length()).append(a).append(b).append(c).toString();

この方法の問題点は abc を評価した結果を退避するために、余分なローカル変数を消費してしまう点。 バイトコード長も伸びてしまうので、速くなったり遅くなったりする。


やはり入力データによってアルゴリズムの良し悪しは変わってくるのが問題で、できれば動的プロファイルの結果を見てアルゴリズムの切り替えができる吉。 とはいえ Java VM のプロファイラー部分に手を入れるのは難しいナリ。


先月の日記(2004年09月) 今月の日記(2004年10月)
2002 | 10 | 11 | 12
2003 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2004 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2005 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2006 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2007 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2008 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2009 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2010 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2011 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2012 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2013 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2014 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2015 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2016 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2017 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2018 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2019 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2020 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2021 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2022 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2023 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12
2024 | 1 | 2 | 3 | 4
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita


Written by NAKAMURA Minoru, Email: nminoru atmark nminoru dot jp, Twitter:@nminoru_jp