NAKAMURA Minoru の日記 (2003年11月)

先月の日記(2003年10月) 今月の日記(2003年11月)
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
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita



11/29 (土)

[時事] 今日は世の中ではいろいろあったようだ

管理人は一日寝て過ごしたが、 世間ではいろいろ事件が起こったようだ。
記録しておく。

  • H-IIA ロケット6号機(H-IIA・F6) 打ち上げ失敗。
  • イラクの日本人外交官ら 2 人が銃撃に遭い死亡。

足が痒い。


11/28 (金)

バグ & ウィルス & ワームよりも恐い白癬菌

研修に行っている 10月の間、 ずっと革靴を覆きっぱなしだったことが災いしたのか、 右足が水虫になった模様。 最初は 足の指の裏側の皮がぼろぼろはげて身がのぞいていたのだが、 今は足の指の側面と上面にまで皮が剥げるになってしまった。 とりあえず普段靴も靴下も脱ぐようにすると、 足の裏も乾燥して患部は改善したようだ。

P.S.
手の指で水虫の患部をこすっていたためか、 指の側面にも水虫が転移した予感。。。

11/27 (木)

[Tips] UNIX コマンドあれやこれや

UNIX コマンドに関しての覚書。

1. テキストファイルのフォーマット変換
複数の OS を跨って、 C、C++、C#、Java、Perl と色々なプログラム言語を使っていると 漢字コード、行末コード、タブ幅などがバラバラに なりがちだ。
# タブのスペース化
expand --tabs=<タブ幅>   [FILE] ...

# スペースのタブ化
unexpand --tabs=<インデント幅>   [FILE] ...
実際には、 複数のファイルを効率的に変換できるように、 以下のようなスクリプトで処理を行う。
#! /usr/bin/perl

$command  = 'expand --tabs=8'
# $command  = 'unexpand --tabs=8'
# $command  = 'nkf -e'
$tmp_file = '__tmp__';

foreach $file (@ARGV) {
  unless( -d $file ){
    rename( $file, $tmp_file ) || die "Can't convert $file.";
    open(IN,"$tmp_file") || die "Cant' open temporary file($tmp_file).";
    open(OUT,"| $command > $file") || die "Can't open $file.";
    while(<IN>){

      print OUT ;
    }
    close(OUT);
    close(IN);
    unlink($tmp_file) || die "Can't convert $file.";
  }
}
個人的には、 タブ幅の悩みを減らすためにも ソースコードのインデントはスペース文字で埋めて欲しいものだ。

2. 排他制御を行う
UNIX 系 OS 全般で使えるでロックの取り方。
Windows・MacOS と異なり UNIX 系 OS は普通 排他制御を行いながら ファイルを読み込むことができない。 シェルスクリプトなどでロックを取る場合、 ディレクトリの作成 (mkdir)シンボリックリンクの作成 (ln) を代用する。

mkdir や ln でディレクトリやシンボリックリンクの作成は、 OS によって排他的に行われる。 作成しようとするファイルがすでにあると失敗する。 Perl で書くと以下のようなかんじ。
# サブルーチン:ロック
sub lock_dir {
  my ($lock_name) = @_;
  return mkdir( $lock_name );
}

# サブルーチン:アンロック
sub unlock_dir {
  my ($lock_name) = @_;
  rmdir( $lock_name );
}

# 使い方
$lock_dir = '/tmp/dummy_lock_directory';

if( lock_dir($lock_dir) ){
  print "ロック獲得成功\n";
  unlock_dir($lock_dir);
} else {
  print "ロック獲得失敗\n";
}
シンボリックリンクでも同様のことが可能。

3. バックアップ & リストア
特定のディレクトリの中身を同期させたい場合には rsync コマンドを使う。
今、 /home/person/hoge ディレクトリの内容を /home/backup/person/hoge に移動したい場合、 以下のように行う。
rsync -avWu --delete /home/person/hoge/ /home/backup/person/hoge/
ディレクトリ名の '/' は重要なので忘れないこと。

特定のファイルやディレクトリだけをアーカイブにまとめたい場合には 普通は tar コマンドを使うのだが、 tar はデバイスファイルを保存することができないのが難点。 /dev 以下も保存する必要があるような場合には、 cpio コマンドを使う。
cpio はアーカイブを作成する場合には -o オプションを用いる。 保存したいファイルのリストを標準入力に与え、 標準出力からアーカイブの中身が出力される。
アーカイブを展開する場合には、 -i オプションを用いる。 展開したいアーカイブを標準入力にあたえる。 cpio はディレクトリを自動的に展開するためには -d オプションをいっしょに指定する必要がある。
# 特定ディレクトリ以下をアーカイブ
find 保存したいディレクトリを並べる -depth -print | cpio -o > archive-file

# カレントディレクトリ以下にアーカイブを展開
cpio -id  < archive-file

パーティション /dev/sda1 をまるごと保存したい場合、 dump コマンドを使う。
以下は file に中身を書き出している。 保存したファイルは restore で 取り出すことができる。 下の例では file の中身を カレントディレクトリ以下に展開する。
# ダンプ
dump 0uf - /dev/sda1 > file

# リストア
restore rf file
4. Linux で FD をフォーマットする方法
フロッピーディスクのフォーマットの方法。
フロッピーディスクなんて滅多に使わないので、 やり方をすぐ忘れるんだよなぁ。。。
# ディスクのフォーマット
fdformat /dev/fd0
fdformat /dev/fd0H1440

# フォーマットしたディスクにファイルシステムを作成
mkfs -t ext2 -m 0 /dev/fd0H1440 1440
mkfs -t msdos /dev/fd0

Astec-X がバージョンアップ

Astec-X が 4.10 にバージョンアップ。 複数の接続先から負荷が低いホストを探すロードバランス機能がついたようだ。 製品としてはすでに完成しているので だんだん余分な機能が増えているようにも見える。


11/25 (火)

i モードメールに spam が…

i モードメールのアドレスを変更してから 2ヶ月経つ。 その間、鬱陶しい spam メールの来ない平穏な日々を迎えたが、 再び spam がやってくるようになった。 最初の襲来は 10/23 19:01。 以降、10/25 22:35 までで 154通も spam が届く。 メールアドレスを変更した時に i モード迷惑メールを外したのが 運の尽きだったようだ。

送られてくる i モードメールの ほとんどは From を偽造したとした思えないアドレスが入っている。 i モードメールのペイロードには Received: が含まれていないので どこが発信元だか特定もできない。 一応、 NTT DoCoMo は メールヘッダーを提供するサービス をやってはようだが 事後に郵送で送られてくるようなので全然駄目だ。


11/24 (月)

Itanium2 サーバーを見積るも…

IA-64 サーバーを導入することになり 価格の調査を行っている。
いろいろなメーカーに見積を要求するが、 「安い」と言われている価格帯でも CPU (Itanium2 1.5GHz 6MB キャッシュ) が 1個 70 〜 100 万円、 メモリが 4GB で 40 〜 100万円ということが分かる。
4CPU / 16GB のサーバーを購入しようとすると 株式会社 HPC で 600万円、 メーカー製のマシンだと 1,000万円オーバー。 普段 IA-32 サーバーを買う感覚だとかなり割高感がある。 これでもずいぶん安くはなったのだけどね。。。


11/23 (日)

ftp サーバーのディスクを増強するも…

ftp サーバーのディスク容量を増強するために、 Maxtor の DiamondMax Plus9 (6Y160P0) を購入。 160G、7,200rpm、ATA-133 対応、Cache 8MB で税込みで 14,595 円なり。

この HDD を Vine Linux 2.6 のサーバー(kernel 2.4.20-0vl29) に繋げるのだが、 Maxtor 6Y120P0 や Western Digitail の WDC800AB-00BTA0 と同様に スタンバイモードから復帰しようとするとハングアップしてしまう (1/6 の日記参照)。 カーネルのアップデート等もやってみたが駄目。 余分なパーツを外して最小構成でやっても駄目なので 電源の電力不足という線も考え辛い。

ディスクの性能は不要なサーバーなので極力熱が発生しない構成をとりたいのだが、 さてどうしたものかしら。

追記:11/26
電源の電力不足という可能性がやっぱりある。
もともと /dev/hdb には Western Digitail の WDC800AB-00BTA0 (80GB) が /dev/hda には Maxtor の Diamond Max D540 [4G160J8] (160GB) が付いていて、 下の設定で安定して動作していた。

/sbin/hdparm -d0 -S 240 /dev/hda # これは滅多に spin off しない。
/sbin/hdparm -d0 -S   0 /dev/hdb # 置換前の HDD は spin-off するとやばい。
/sbin/hdparm -d0 -S 240 /dev/hdc # これは spin-off しても大丈夫

それが /dev/hdb を Maxtor の DiamondMax Plus9 (6Y160P0) に替えてから、 夜の 0 時と 4 時を中心に毎日のようにクラッシュ & リブートが掛かるようになってしまった。 動作を考えるに /dev/hdc が spin on してくるタイミングで クラッシュするようになった可能性が高い。 今まで無事 spin off / spin on できていたが、 他の HDD が原因で spin on できなくなったとしたら やはり電源を疑うべきだろう。

追記:12/2
問題解決。
やはり電力不足だった。

覚書

竹林明秀氏が交通事故でなくなる。 午前9時38分。


11/21 (金)

Amazon.co.jp に注文していたものが到着

軍艦島 - 眠りのなかの覚醒 は、 かつて炭坑の島として知られた長崎県 端島の写真集。 4月頃 に Amazon.co.jp に注文を出したものの 在庫切れとなって手に入らず悔しい思いをしていた。 その後、 重版されたのか Amazon.co.jp が在庫をかき集めて来たのか 再度注文可能になったので早速注文 (奥付には初版とあるが、第何刷なのかは記述がない。 初版の初刷ということかしら?)。

手に届いた本は全体で100ページ前後の白黒写真集。 全体の半分を軍艦島とその建造物の写真、 残りの半分を建物内に放棄された道具類の写真が占めている。 写真のページを眺めていると まるでその場所で暮らしていたかのような懐かしさを感じる。 もっとも軍艦島は管理人が産まれる前に閉山したんだが (^_^;

あと 予約していたテリー・ギリアム監督作品 未来世紀ブラジル (Brasil) も到着。
暇になったら鑑賞する予定。

追記:11/29
軍艦島を使った公共広告機構の CM の覚書。

島は宝島だった。
石炭が見つかって人々がやって来た。
人々が働いた。
周囲 1.2km の島が 町になった。
4000人もの暮らしがあった。
子供達が生まれた。
大きく育った。
1年、10年、30年。
石炭を掘り尽くした時人々がいなくなった。
暮らしがなくなった。
資源と共に島は死んだ。
ちょうど84年目だった。
私たちも今、資源のない島、日本に住んでいる。

いつも考えていたい。私たちの資源。
公共広告機構

11/20 (木)

必ずバックアップは取りましょう

間一髪だった。
よかったよ、 今日の午後一番にバックアップを取っておいて。
Linux サーバーにある自分のホームディレクトリを 間違って全削除してしまって、 バックアップがなければ今頃は半泣き状態だったよ。ふぅ〜〜。

www.nminoru.jp で動かしていた公開 WWW サーバーとは別に、 作業用の非公開 WWW サーバーを立てた。 個人のホームページは 公開用は $HOME/public_html/ に、 作業用は $HOME/private_html/ で管理用しようとしたのだが、 public_html から private_html にコピーしよと、 rsync を下のように使ってしまったからさあ大変。

rsync -avzu --delete --cvs-exclude /home/nminoru/public_html/  /home/nminoru

ホームディレクトリが ディレクトリ構造と末尾に ~ の付いたファイルを残して消滅してしまった (/home/nmionru/public_html/ も含めて)。

幸い別の HDD にディレクトリのバックアップが あったからそこから再生できて事無を得た。 やはりバックアップを軽んじてはいかんなり。。。


11/19 (水)

デジカメで撮った写真を日記に張り付ける

デジカメで撮った写真を Web 用に加工する手順が確立できたの、 今年の1月に DiMAGE Xi を買って以来 撮り貯めた写真を張りけることにした。
使っているソフトは以下の通り。

フォトレタッチ Microsoft Photo Editor 画像の加工のために使う。
リサイズ LNSoft BatchGOO! DiMAGE Xi の画像は Web で公開するには大きすぎるため、 1024 × 768 にリサイズしている。 普段は画質 4 を設定。
サムネイル すなねぃる!! サムネイルを作るために利用している。 100 × 75 の jpg ファイルを作って、 後は手作業で張り込んでいる。

過去の日記を大量に更新。

あとは写真を撮る腕をどうにかすること。。。

修正:11/23
タイトルが「デジカメで撮った『映像』」になっていたので修正。


11/18 (火)

[Patent] ソフトウェア特許

特許調査の結果報告資料を読むことに。
調査は電子メール関連のソフトウェア特許に関するもの。 キーワード検索にヒットした 日米の特許の要約が山となっている。

特許権は、 発明を「出願」した時点から 20 年(ものによっては25年) である。 出願した特許の内容は 9ヶ月立つと特許庁から公報される。
ただし特許権を手に入れるには 「審査」 を受ける必要がある。 審査を受けれる期間は決まっており、 特許の広報日から 公開日から 3 年以内に審査を受けないと出願は無効になる。 そのため特許調査では、 すでに特許として成立したものと 公開後 3 年分の特許出願を見ることになる。

実際には審査を受けるには結構な金が掛かる。 そのため、 分野によっては出願された特許のほとんどが 審査を受けずに時間切れまで寝かせられる場合ある。 (言うまでもないが) その分野といのが ソフトウェア特許 の世界である。 とにかく 審査前のソフトウェア特許に アイデアの閃きや技術的な高度さを感じるのは 10 件に 1 件もない。 どうしてこんなアイデアを特許にしようと考えたのか不明な、 腐った特許がザクザクだ。 ほとんどが既存技術から誰でも考えつくだろう!? というインパクトのない特許。 出願年月を考えても公知例がぱっと思いつく特許もある。

その上、 そういう出願に限って発明者欄に並んだ人の数が多い。 おそらくノルマで特許を取らなければならなかった人が だれかの特許に便乗して名前を書かせてもらったのだろうなぁ。。。


11/17 (月)

[Java] Java の assertion

Java 関係の話題を探しているうちに、 Java の assert 機能について触れられた はてなダイアリーの unibon 氏の 11/6の日記 を読む。 管理人も assert は全然使わないので、 そういえばそう言う機能もあったと再発見する。
ついでに J2SE 1.4 の新機能について別の場所で紹介した時の 文章があることを思い出す。 引っ張り出して加筆してみる。

Java2 SE の 1.4 から使えるようになった assert 構文は、 C 標準ライブラリの assert のように プログラム中に「制約」を埋め込むことで それが成立するかしないかのチェックをすることができる機能である。 「制約」が破られた場合には実行を中断しようとする。

assert は J2SE 1.4 から Java の言語仕様に付け加えられた新しい構文であって、 単なるライブラリの拡張ではない。

assert expression1;
assert expression1 : expression2;

上記のような構文で、 expression1 が偽(false) の場合には java.lang.AssertionError エラーを送出する。 Error なので ユーザープログラムでは捕捉はしない (捕捉できるが、すべきではない)。

assert 構文を用いてプログラムの節目節目に制約を埋め込むとデバッグのために非常に便利である。 しかし、 プログラムのテストが進みバグがある程度取れれば assert には引っかからなくなる。 そうなると assert はムダなチェックをしているだけなので (速度を優先して) assert を取り除くことになる。
C 言語の assert 関数の除去のためには、 NDEBUG マクロを付けてリコンパイルが必要だったが、 Java のassert 構文の除去は、 JavaVM に -ea-da オプションを付けることで 実行時にオン、オフすることができる。 これは以下のようなカラクリによって実現されている。
javac -source 1.4 でコンパイルされると、 javac の内部では (A) のプログラムが (B) のように翻訳される。 (A) にはない 緑字 の部分を勝手に付け加え、 (A) で 赤字 で示した部分を 青字 のように書き換えてしまう。

(A) 元の Java ソースコード
public class Test {

  public static void main(String[] args){
    assert ( args.length >= 1 );
    
    // the following code ...
  }
}
(B) javac の翻訳
public class Test {
  static final boolean $assertionsDisabled;
  static java.lang.Class class$Test;
  
  static {
    if ( class$Test == null ){
      class$Test = class$("Dirs");
    }
    $assertionDisabled = class$Test.desiredAssertionStatus();
  }

  public static void main(String[] args){

    if ( $assertionsDisabled ) {  // ... (1)
      if ( args.length >= 1 ) {     // ... (2)
        throw new java.lang.AssertionError();
      }
    }

    // the following code ...
  }
}

desiredAssertionStatus メソッドは Class クラスの特殊なメソッドで、 JavaVM に渡されたオプション(-ea、-da) に基づいて このクラスの assertion が有効なのか無効なのかを判定するメソッドである。 このメソッドがクラスコンストラクタの中で使用され、 その結果が boolean 型の隠し static フィールド $assertionsDisabled に与えられる。 この $assertionsDisabled フィールドが false になった場合には、 (B) コード中の (1) の条件分岐が不成立となり 青字 のブロック部分のコードが実行されなくなる。

$assertionsDisabled フィールドが final と指定されていることは重要である。
javac が勝手に挿入した 緑字 のクラスコンストラクタ部分が完了すると、 $assertionsDisabled フィールドは true か false のどちらかに固定される。 そのため (1) の条件分岐の成立・不成立は、実行コンテキストによらず決定可能である。 つまり $assertionsDisabled が false の場合は、 青字 のブロック部分はデッドコード(dead code) となる。 これは JIT コンパイラにとって格好の最適化ポイントなので、 根こそぎ除去してしまうはずである。 というわけで、 JavaVM の実装が正しく行われていれば assert disable はソースコード中から assert を取ったのと同じ効果が期待できる。

あと Java の文法に assert 構文をわざわざ追加したのは、 assert をライブラリで実現すると速度的にかなり不利だからだと思われる。 assert を構文で実現すると、 条件式は (1) の内側の (2) の部分にくるため assert 無効の場合には条件式の「評価」は行われないことになる。 一方、assert をライブラリのメソッドとすると まず条件式が「評価」されてから assert メソッドが呼び出されるので 条件式が (1) の外側にでてしまい「評価」が必ず実行されてしまう。 これは JavaVM が内部で assert メソッド呼び出しを NOP に置き換える処理をしても救われない。

// assert が無効な場合は、checkConsistency は呼び出さない。
assert checkConsistency() : "broken the consistency.";

// assert が無効な場合でも、checkConsistency は呼び出されてしまう。
java.lang.Assert.assert ( checkConsistency(), "broken the consistency." ) ;

実際のところ C 標準ライブラリの assert も、 本当は関数ではなくてプリプロセッサマクロだ。 Lisp のようなプログラム言語でなければ、 ロスレスの assert 関数を作成することはできない。

P.S.
管理人としては、 今の assert 構文では機能不足のため使いづらい。 assert 毎にレベルやカテゴリーを指定できて、 アサーションの有効・無効を それらで選択できないと嬉しくない。 あとログ出力機能と assert との連係がないのは不便。
個人的には 条件コンパイル機能をつけて欲しい。。。

カレー屋のデリー

銀座のカレー屋 DELHI からお歳暮の案内がくる。
管理人は常連に数えられているようだ (^_^;


11/16 (日)

[Trivia] どうでもいい話

お休みだけど JavaVM の GC のアルゴリズムの改良をして一日が過ぎる。
とくに日記に書くようなこともなかったのだが、 普段気になったどうでも いい話を備忘しておく。

ペンギンのどうでもいい話

雑誌の柱だかの雑学ネタに 「シロクマは北極のペンギンは南極のシンボルだが、 シロクマは南半球には棲息せず、ペンギンは北半球には棲息していない」 というのを見た。 内心で独りツッコミ。

ペンギン(penguin) の名前を冠した生き物は、 南半球に住む ペンギン目ペンギン科 の生き物と、 北大西洋上に住む チドリ目ウミスズメ科 の生き物の2種類がいる。 両方とも燕尾服を着たような鳥で、泳ぐのに特化して翼が退化している。
前者が Linux のシンボルにもなっているいわゆる「ペンギン」で、 後者は オオウミガラス(GREAT AUK) とも呼ばれる生き物。 元もと「ペンギン」 は、オオウミガラスを指す名前だったが、 南極で発見された Linux のシンボルが 旧大陸の「ペンギン」に良く似ていたために 「ペンギン」と呼ばれるようになったそうな。

問題はオリジナルペンギンの方は すでに 絶滅 していること。
なんとなく UNIX と Linux の関係を思わせなくもない。

P.S.
オオウミガラスに着いているペンギンの名前の由来は、 ケルト語の pen-gwyn (白い頭)と ラテン語の pinguis (太っている) のどちらというのが一般的だが、 pinion-winged (pinion は羽先を切って飛べなくする) という 説もあるよという、 さらにどうでもいい追伸。

漢字の 「重」の読みのどうでもいい話

「重」 には じゅうちょう という読みがある。 一般に「重」を heavy の意味で使うときには じゅう 、 repeat の意味で使うときには ちょう と読むものだと信じていた。

しかし昨今の新聞を読むと

「先日の衆議院議員選挙で落選した山崎 拓氏に 小泉首相から『捲土重来(けんどじゅうらい)を期すべきだ』と促ながした。」
とある。 捲土重来なら けんどちょうらい と読むものだと思っていたので、 新聞にこう書かれると違和感がある。 談話の内容をそのまま活字にしたために、 このような表現になったのかも知れない。

とりえあず どちらが人口に膾炙した読みなのかが気になるので Google Fight!。

"じゅうらい" を含まない "けんどちょうらい"161件
"ちょうらい" を含まない "けんどじゅうらい"55件
Google Fight

けんどちょうらい の方が一般的のようだ。。。

P.S.
とりあえず GC アルゴリズムの改良に区切りが付いたので、 トボトボと家に帰るなり。

11/15 (土)

七五三

昼過ぎに起き出して見ると Google のバーナーが変わっている。
バタくさい顔の男の子と女の子がアルカイックスマイルを浮かべている絵だ。
七五三の絵だと気づくまでにずいぶん時間を要する。

七五三なんて日本語ローカルな祭なのに なんで Google の表ページに載っているのかと不思議に思うが、 どうも Preferences の Language を日本語に設定している場合にのみ出てくるようだ。 Google もいろいろがんばってローカライズをしてるようだ。
もっとも Google は検索キーワードに応じた広告の掲載を行っているのだから、 Google の広告は www.google.co.jp のように各国サーバー単位で出稿するようになっているはずだが、 Language の設定も見ているようで 言語によっては広告が出たり出なかったりする。

P.S.
昼飯を食べに商店街をぶらぶらしていると、 着物を来たお子様方を多数発見。
尊くていらっしゃる。


11/13 (木)

ThinkPad T40 の雑記

ThinkPad T40 ノートパソコン関連の雑記。

スタンバイ・サスペンドが効かない
10/11 の日記 にも書いたが、 うちの ThinkPad T40 はスタンバイモード・サスペンドモードに移行できない。 キーボードのスリープボタンを押すかパネルを閉めた場合でも 以下のようなダイアログが表示されて移行に失敗する。
「コンピュータは 101/102英語キーボードまたは Microsoft Natural PS/2 キーボードデバイスの デバイスドライバのためにスタンバイ状態に入ることができません。 アプリケーションをすべて終了して、やり直してください。 問題が解決されない場合は、このドライバの更新が必要になる場合があります。」
問題解決のために 「ThinkPad ソフトウェア導入支援」を使って ThinkPad T40 のすべてのドライバーを更新してみたのだが、 状況はかえって悪化。 スタンバイモードに移行しようとすると Bluescreen of Death を表示してハングアップしてしまう (なぜかサスペンドモードへの移行はダイアログを出して失敗するだけ)。

最近はノートパソコンを持ち運ぶ機会も増えてきたし、 なんとかサスペンドモードがだけでも使えるようにしたいのだが。。。

Netscape / Mozilla のプロキシを適応的に変更する
ThinkPad には IBM Access Connections プログラムが提供されていて、 ネットワーク周りの設定を一発で変更できる。 最近は ThinkPad を持ち歩いて いろいろなネットワークに繋げることが多くなったので Access Connections は大変重宝する。 しかし、 管理人のデフォルトのブラウザである Netscape / Mozilla は Access Connections の設定範囲外なので、 毎回プロキシ設定を変更しないと使用できない。

ユーザープロファイルを複数設定しても対処可能だが、 9/26 の日記 に書いた プロキシ構成スクリプトで対応することにした。
今、2 つのネットワーク(10.0.0.0/8、172.16.0.0/16) を 切り替えながら接続する場合のプロキシ構成スクリプトは以下の例のようになる。
2 つのネットワークは それぞれ hoge.jp(10.0.0.0/8)、moge.jp(172.16.0.0/16) というドメイン名を持っている。 ローカルネットワークまたは ローカルドメインに接続する場合は直接接続。 それ以外は所定のプロキシに接続することを想定している。

function FindProxyForURL(url, host){
  // ブラウザが動いているマシンの IP を取得
  myIP = myIpAddress();
  
  // 接続するネットワーク1
  if( isInNet(myIP, "10.0.0.0","255.0.0.0" )) {
    if( isInNet(host, "10.0.0.0", "255.0.0.0" ) || dnsDomainIs(host, "hoge.jp") ){
      return "DIRECT";
    } else {
      return "PROXY 10.0.0.1:8080; DIRECT";
    }
  }
  
  // 接続するネットワーク2
  else if( isInNet(myIP, "172.16.0.0","255.255.0.0" )) {
    if( isInNet(host, "172.16.0.0", "255.255.0.0" ) || dnsDomainIs(host, "moge.jp") ){
      return "DIRECT";
    } else {
      return "PROXY 172.16.0.1:8080; DIRECT";
    }
  } 
  
  // その他のネットワーク
  else {
    return "DIRECT";
  }
}
赤字 の部分は ネットワーク設定毎に変更する。

11/11 (火)

[Movie] 残った三部作もあと三つ

Matrix Revolution を反芻しながら Matrix (無印)Matrix Reloaded の DVD を再視聴する。 通してみると無印 → Reloaded の間の流れには納得出るのだが、Reloaded → Revolution の間にはいろいろ説明伏線不足しているところがあるように思える。 ネタバレが入るので伏せて書いてみる。

ザイオン、マシーン、スミスが どういう利得を賭けて戦っているのかが分かりづらい。
スミスは元もとエージェントとしてマトリックス(マシーン)側の存在だったが、 Reloaded ではビールス化してマシーン側から離れた存在として書かれている。 ビールス・スミスはネオに対して敵愾心を持っているのは分かるが、 それ以外の部分では メロビジアンのように ザイオン v.s. マシーンの戦いには中立な存在に見るのだ(映像をみる限り)。
しかし、 Revolution では、 ネオはビールス・スミスを倒すこと条件に現ザイオンを滅ぼさないことを Deus ex machina と取り引きする。 とするとマシーン側にとって、 ビールス・スミスはザイオン以上の脅威になったわけだ。 いったいどこで転換が行われたのか。
一応、 ビールス・スミスはマトリックス内の人間ばかりか オラクルのような重要プログラムも取り込んでしまったので、 マトリックスばかりかマシーンシティーにも脅威になるというのは 理屈の上では分かるが (おそらくトレインマンも取り込まれたので、 マシーンシティー側に自由に出入りできると思われる)、 スミス v.s. エージェント、スミス v.s. マシーンというシーンを 入れるなりして映像で見せてくれないと説得力がない。

あと、 マシーン側にとってザイオンを滅ぼす 意図ってなんなのかしら?
過去にマシーンがザイオンを滅ぼしてきたのは 「マトリックスがリニューアルしたし、 ついでにザイオンを新しくしよう」 というあいまいな理由だとしたらちょっと萎える。
一方、 マシーンにとってザイオンを滅ぼすのが重要なら、 スミスを倒すことを条件にそれを放棄してしまってもいいのかしら?

P.S.

広義の三部作の三部目が公開待ちの映画が多い。 The Lord of the Rings (三部作)、Harry Potter (映画は三作目までらしい)、Star Wars (アナキンが主人公なのは ep3 まで) といろいろキューに載っている。 近日中公開の予定も含めると SW ep2 → Harry Potter2 → LoTR 2(TTT) → Matrix2 → Matrix3 → LoTR3 (RoTK) の順なので、Harry Potter3 → SW ep3 とくると第二部の公開が早かったものほど早く片付くことになる。

P.P.S.

J.R.R. トールキンの未翻訳原稿を息子のクリストファー・トールキンがまとめた Unfinished Tales は永らく邦訳が待たれていたが、12月12日に河出書房新社から 終わらざりし物語 というタイトルで発売される予定。 上巻下巻 の各 2,200円なり。

追記:11/22

Amazon.co.jp で予約可能になっている。 早速、予約。


11/10 (月)

[Java] (続) On-the-fly runtime method tracing for Java applications

6/9に紹介した Michael McPhail 氏の on-the-fly method tracer のソースコードを真面目に読む。 このプログラムは、Java プログラムのメソッドが呼び出される状況をリアルタイムにログに吐き出してくれるメソッドトレーサー。 BCEL を用いて JavaVM に読み込まれるクラスファイルを動的に書き換えることで機能を実現している。

元のメソッド
public Object method(String s, int i) {
  <method body>
}
変換後のメソッド
public Object method(String s, int i) {
  <入力パラメータのログ出力>
  
  Throwable exception = null;
  Object result = null;
  try {
    <method body>
    (リターン値は result、例外は exception に
     値が保存されるように書換)

  } finally {
    <戻り値・例外のログ出力>
  }
}

JDK 1.4.X 系では -Xverify:none を付けないと 正しく変換されないのだがその理由も分かった。 On-the-fly method tracer のコンストラクタの変換方法に問題があるようだ。
Java のコンストラクタは基本的に 最初の処理で 継承元(super)のコンストラクタを呼び出すか、 自分自身(this) の別のコンストラクタを呼び出す規約がある。 メソッドの先頭にログ出力機能が付くことによって、 この制約に引っかかってしまうようだ。

class Derived extends Base {
  public Derived() {
    // このコンストラクタは一番最初にある必要がある。
    super();
  }
}

On-the-fly method tracer では Thread.getContextClassLoader メソッドや ClassLoader.getSystemClassLoader メソッドを 使ったプログラムがうまく動作しない問題がある。 これは on-the-fly method tracer が、 通常の boostup class loader の上に バイトコードの書き換えを行う org.jmonde.debug.TraceClassLoader という 独自のクラスローダーを走らせるのだが、 Thread.getContextClassLoader メソッドが TraceClassLoader をちゃんと返さないことに原因がある。
とりあえず、on-the-fly method tracer 側にパッチをあてるとバグを回避可能。

org/jmonde/debug/Trace.java
package org.jmonde.debug;

public class Trace {
  public static void main(String[] args) {

  if (mainClassName == null) {
    usage();
    System.exit(1);
  } else {
    if (classpath == null) classpath = ".";
    URL[] urls = urlifyClasspath(classpath);
    TraceClassLoader traceLoader = new TraceClassLoader(urls);
    
    // この1行を追加
    Thread.currentThread().setContextClassLoader(traceLoader);
    
    Selector readerSelector = traceLoader.getReader().getSelector();
    Selector filterSelector = traceLoader.getFilter().getSelector();
    readerSelector.setDefault(defaultInclusion);
    filterSelector.setDefault(defaultOnOff);
  
    // ...
  }
}

11/9 (日)

[Movie] マトリックス・レボリューションを観に行った (観ることができた)

昨日のリベンジを行うため選挙に行った後に 再度 映画を観に行く。
今度の標的は 川崎チネチッタ。 チネチッタも一度も行ったことのない映画館だが 噂はいろいろ聞いていた。

  • ワーナー・マイカルなどと同じシネマコンプレックス型の映画館。
  • ハイカラな場所らしい。
  • 経営がやばいらしい。

川崎駅についた後、 Yokohama Walker のいい加減な地図を便りにチネチッタを探す。 が、見つからない。 地図の場所には、 イタリアの街並みを模したような一種異様な商店街があるだけ。 DVD ショップ、ゲームセンター、野外コンサート場なんがある。 商店街にはシネグランデ(CINE GRANDE) という Yokohama Walker にも載っていない映画館があるようだが、 マトリックス・レボリューションは上映していないもよう。
その後 てくてく歩いて山崎拓の選挙事務所などにぶつかる。 どうも変だと川崎駅まで戻ってアザゼルの受け付けの人に道を訪ねてみると、 どうもイタリアの街並みを模した商店街というのがチネチッタだった。

改めてよく見ると 街並みの真中にある大きな建物の中にチケットカウンターがある。 しかし 美術館か博物館といったかんじの 映画館というフォーマットからはかなり外れた建造物だ。 この異様感は活字にし難い(デジカメを忘れたのが悔やまれる)。

結局、16:30 のマトリクス・レボリューションを見る。 映画の感想はネタばれになるので止めておこう。


11/8 (土)

[Movie] マトリクス・レボリューションを観に行った (行っただけ)

午後4時半頃、 突発的にマトリクス・レボリューションを観に行きたくなり、 独り映画館に出掛ける。
これまで映画を見るときは新百合岡のワーナー・マイカルに行っていたのだが、 たまには変わった場所で見ようと(余計な気を出して) 今まで一度も行ったことのなかった 桜木町のワーナー・マイカル (W・M・C みなとみらい) を選択。

5時半頃、東急東横線に揺られて終点 桜木町に付く。
駅の人にワーナー・マイカルの位置を聞くと 横浜ワールドポーターズ という ショッピングモール内にあるそう。 この時点で気づけば良かったのだが ワールドポーターズは桜木町から 結構遠い。 万国橋を通ってワールドポーターズに到着した時にはすでに 6 時になっていた。

マイカルのチケットセンターに並んだところ 本日満員御礼、 夜の 9:20 以降しか空席がない。 しょうがなく 9:20 をチョイス。
その後、 ワールドポーターズ内を見て回ったが、 土曜の夜なので終電が早いことに思い至る。 i モードでチェックしたところ、 桜木町 00:30 発がラスト。 映画は 11:55 分に終了予定。 しばし沈思黙考。 「う〜〜ん困ったぞ。 映画が終わってから駅まで移動できるという保証がない。 そうだ、 まだ時間はあるしもう一度桜木町駅まで戻って時間を測ればいい。 20 分以内に戻れれば OK ね」という結論を得る。

6:38 に思索を行動に移しワールドポーターズを後にする。
しかし、管理人は夜目が効かない人間なので 夜に出歩くと道に迷いやすい。 火曜日 も夜遅くまで開いている本屋を探した結果、菊名駅から大倉山駅までさまよい歩くことになった。
橋を渡ってパシフィコ横浜方面にずんずん ずんずん行くと早速自分がどこに居るのか分からなくなる。 横浜美術館行きの看板を見つけて、どうもおかしな方向に来てしまったことに気づく。 結局、地図を見つけて方向転換。 ランドマークタワー前を通って桜木町駅に到着。

時計を見ると 7:20。。。。
もうワールドポーターズに戻る気力もなく映画は見ないでそのまま家に帰った。

P.S.

n

今、地図 を良く見ると汽車道というのを通れば 桜木町駅 〜 ワールドポーターズは 10分で行き来できるようだ。


11/7 (金)

山下 章のチャレンジ!!パソコンアドベンチャーゲームが再刊

本屋で懐かしい本を見つけて手に取る。 電波新聞社の月刊マイコンBASICマガジン(後にベーマガに改名)の別冊 山下 章の「チャレンジ!!パソコンアドベンチャーゲーム SUPER soft BOOKS」シリーズだ。

最近、ファミコン誕生 20 周年記念とかに便乗していろいろ企画ものが出ているがそれに便乗しての再刊っぽい。 記憶が正しければ「アドベンチャーゲーム & ロールプレイング」が 5 巻目まで出ていたはずだが、今回は特に古い以下の 4 冊が再刊されたっぽい。

最初の「アドベンチャー」なんて 1985 年の発刊だ。
HUDSON SOFT の「デゼニランド」やスクウェアの「WILL (THE DEATH TRAP II)」の攻略が載っている。 デゼニランドにミツキ・マ・ウス(三月磨臼)を探すなんてストーリーが作れるなんて、今思えばおおらかな時代だったのね…

そう言えばベーマガの影さんってどこに行ってしまったのだろう? 月刊マイコンのタベタ君は今も元気にやっているようだが…

P.S.

そういえば東京都立美術館で 12/4 から開催予定の「テレビゲームの展覧会 レベルX」では、ファミコンで発売された約 1,200 タイトルプレイできるそうな。 そのためにはゲームソフトの著作権者の許可が必要なのだが、行方不明のゲームソフトメーカーなんてものもあって大変らしい。


11/4 (火)

新横浜「揚州商人」

新横浜の「揚州商人」で晩飯を食べる。
いついっても店の外まで人が並んでいる不思議なお店だ。 基本的には変わったラーメンがあるラーメン屋なのだが、小籠包のような中華料理の一品料理が出てくる。
とりあえず 740円の黒酢ラーメンを食べる。 まるで墨汁を垂らしたように黒い。

    黒酢ラーメン

黒酢の匂いがツンとくるラーメンだが、食べてみると黒酢の味はあまり強烈ではない。 全体として、すごく美味しいとはわけではなく、可もなく不可もなくといったところ。
今度 食べる時は別のラーメンにしてみる。

P.S.

東急東横線の菊名駅から見えるスーパーには、でっかい本屋の看板と夜一時まで営業という看板が立っている。
これは深夜までやっているブックストアがあるに相違ないと、菊名駅で降車して探索してみた。 駅から結構 離れた所にあったのは夜一時まで生鮮食料品を扱うミューズ。 しかし、本屋のあるフロアは夜の10時で閉まってしまう模様。
くたびれもうけ。


11/3 (月)

[Prog] Google Web API へ接続してみる。

WSDL / SOAP / JAX-RPC & JAX-M の勉強は続くが、 実験がてらに世の中にある Web サービスに接続して遊んでみる。 ターゲットは世界で一番利用されている Google Web API。 この Web サービスの WSDL は ここ にある。 WSDL を読んでみるとサービス名は GoogleSearchService で エンドポイントは http://api.google.com/search/beta2 に設定。

  • doGetCachedPage ... 指定した URL のキャッシュを返す。
  • doSpellingSuggestion ... 指定したフレーズに予想される検索キーワードを探す。
  • doGoogleSearch ... 普通のサーチ。

3 つのオペレーションが存在することが確認できる。 全部、encoded な RPC 方式だ。

Apache の Axis 1.1 の WSDL2Java と、 Microsoft の Web Services Enhancements (WSE) 2.0 の WseWSDL.exe を使って Google Web API への接続クライアントプログラムを作成してみる。 Axis の WSDL2Java は WSDL ファイルからを渡すとJava のラッパークラスが作成され、 へろっとコードを書くとあっさりと接続に成功。
WseWSDL.exe の方は WSDL から C# のラッパーをうまく作成してくれず、 途中でエラー停止してしまう模様。 なんでだろう???

P.S.
Web サービスって、 知名度に比べて実際に公開されているサイトってわずかだよな。。。

閑話休題

UHF 局はテレビ神奈川しか入らないので、 最初に放映されるテレビ埼玉とは2日のタイムラグがある。
その間に海の向こうに輸出されて メリケンさんのレビューが付くのだから インターネットは偉大だ。。。


11/2 (日)

Optical Mouse は結構いい感じ

遅れ馳せながら Microsoft の Optical Mouse Basic を導入。
ノートパソコン(バルクの) Microsoft インテリジェントマウスを繋げて使っていたのだが、 机が汚いためか全然転がらずイライラしていたで購入。 Optical Mouse にしてからは動きが感動的なまでスムーズに。

しかし技術の進化は恐ろしいものだ。
昔 SUN の SPARC Station で世話になった光学式マウスは 専用マウスパッドを使うタイプでパッドの網の目を律義に数えていたが、 今のマウスは 2,000回/秒程度で床を撮影して差分を計算して移動量を計算している。
管理人が最初に買ったマウスは PC-9821EX2 (i286) に繋げるための PC-98 用バスマウスだった。 だが、今やそこら辺にある光学式マウスの DSP は PC-9821EX2 よりも速そう。。。

P.S.
10/26 に書いたMPEG-VCR を結局 購入。


先月の日記(2003年10月) 今月の日記(2003年11月)
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
ホームページ | 最新のコメント50
インデックス: 食べ歩き | Java | プログラム | UNIX | 画像
最新の日記へのリンク | この日記ページをはてなアンテナに追加 この日記ページをはてなブックマークに追加
はてな ダイアリー アンテナ ブックマーク ブログ
Twitter | mixi | Facebook | slideshare | github | Qiita


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