Home日記コラム書評HintsLinks自己紹介
 

フィンローダのあっぱれご意見番 第99回「Windows 2000 問題」

← 前のをみる | 「フィンローダのあっぱれご意見番」一覧 | 次のをみる →

最近、新しいデジカメを買った。 今までの経験では、どうもデジカメ買ってもなかなか使い切れないというか、 撮るものがなくて飽きてしまう。 本当に撮りたいものはちょっとリスキーだったりして、 一体何を撮るつもりなんだというのはともかく、 今度は割と気に入っていて、WWWに置く画像以外に、 スナップ写真の感じで使ってみたりもしている。

 

※ リスキーといっても、雑踏とか、そういうものだ。 肖像権とか絡んでしまうのがリスキーだというのである。

買ったのはSONYのF55Vという機種だ。 以前使っていたデジタルマビカもそれなりに便利だったが、 結果的には大きさ、重さがネックになってしまった。 最近はかなりコンパクトで300万画素クラスのデジカメが多種あるので助かる。

 

※ コンパクトといっても、 2006年現在のモデルに比べると数倍のサイズだ。

ただ、300万画素となると、サイズが半端ではないわけで、 jpegで保存しても、一つの画像のサイズが約1MB程度になる。 こんなのを個人ページに置いたら、流石に50MBフリーとかいうプロバイダでもすぐに破綻する。 というわけで、画像データは自宅のに配置して、 外からも一応アクセスできるようにこっそり設定してある。 もっとも、所詮64kの速度だから、表示するのにそれなりの時間がかかる。

 

※ これを Web に転載している2006年現在使っているものは、 800万画素クラスのデジカメである。 撮影した画像は、 ほとんどの場合、そのままのサイズでブログに掲載している。

前回も書いた、 自宅にhttpサーバ置いてインターネットで見ることができるという話、 少し使ってみて、 絶対必要という程ではないが、 あると結構便利、という程度のものだというのが正直なところである。

その他、何か面白い使い方はないかと思っていたのだか、 画像を置くということで思いついたのが、ライブカメラの設置である。 自宅にライブカメラを設置して、WWW経由で見えるようにすれば、 どこからでも自宅の様子がわかる。 ということは、これは一種のホームセキュリティになるのではないか。

  

リビングにカメラを設置しておけば、万一の時、 世界中に空き巣の実況中継ができるかもしれないし、 玄関のドアの所に設置しておけば、 誰か来客があった時に分かる。 分かるといっても、そのためにはしょっちゅうモニターしていないといけないのだが、 これが例えば、チャイムと連動して撮影するようなシステムになっていたら、 結構面白いと思う。 留守番電話には設置されている部屋の音をモニターする機能があるが、 あまり使った記憶はない。 電話をかけるのが面倒なのだ。 今後、家庭とインターネットが常時接続というスタイルが浸透すれば、 インターネットを使ったホームセキュリティというニーズは激増するかもしれない。

 

※ ライブカメラの先駆けは、 ケンブリッジ大学のコーヒーサーバー前のカメラである。 コーヒーが入っているかどうか、 インターネットで確認できるようにしたのだ。 コーヒーが切れたら「切れてるぞ」というメールが世界中からやってきた、 という伝説がある。 このライブカメラは、2001-08-22 にサービスを終えた。 参考: Trojan Room Coffee Pot Biography

もう一つやりたいのは、 電話でビデオの録画予約とか、 風呂を沸かすとか、 その種のホームオートメーションのシステムがあるようだが、 これをWWWでモニターできないかというアイデアだ。 コントロールは赤外線のコントローラがあれば何とかなりそうだが、 現状をモニターするというのは難しいかもしれない。

§

今まで使っていたVAIO 505RXの調子が悪くて、 最近はVAIOノートSR9/Kを使っている。 SR1/BPというモデルもあるが、こちらは800x600の画面なので、 いまさらそこに戻るのもイヤだったので、1024x768の画面のSR9/Kにしたのだ。

  

SR9/Kの本体にはメモリスティックを入れるスロットがある。 デジカメからpcにデータを転送するのはUSB接続が楽かと思っていたのだが、 実際に使ってみたらメモリスティックを直接使ってコピーするのは極めて楽だった。 ケーブル持ち歩かなくてもいいというのがメリットになる。 VisualFlowという添付ソフトを使えば、表示が意外と面白い。 もっとも、 実際はメモリスティックを入れた状態でS:ドライブが対応したドライブになるので、 そこからcopyして使っている。

 

※ 今使っている VAIO BX には、SD スロットが内蔵されている。

以前のモデルでもVAIOノートは店頭在庫がないことが結構あったので、 売れているのか製造数が少ないのかよく分からないが、 SRシリーズを使っている人はまだあまり見たことがない。 特にSR9/Kの売れ行きはよく分からない。 このマシンは某店で客らしき人の会話を聞いてみると、 「Windows 2000でなければ買いなんだけど…」とのこと。 そう、SR9/KはWindows 2000プリインストールモデルなのだ。 同意見の人を他にも知っているので、 もしかしてWindows 98モデルがあれば、 さらにターゲットが広がったかもしれない。

  

実は私自身もそこが気になっていたのだ。 とにかく今まで使っていたソフトが動かなかったりすると辛い。 市販ソフトならWindows 2000対応版を買いなおすという手もあるが、 問題は自作ソフトである。 特に、通信ソフトとキー配置変更が、最初の2週間程度、 まったくお手上げ状態で厳しい環境になってしまった。 キー配置は、その後なんとかカスタマイズする作業に成功したが、 この間、慣れないローマ字入力のせいで、文章作成時間は3倍以上かかってしまったのである。 これではCPUクロックが233MHzから600MHzに上がった意味があまりない。

 

※ クロックの話はもちろん単なる jokeだ。

実はこの原稿を書いている時点では、 キー配置の問題は暫定的に解決しているので、 そこそこ実用的に入力できる環境が整った。 私の入力環境というのはかなり特殊なので、 英数の論理配列とカナの論理配列、 いずれも再配置したいのだが、これが結構難しかったのだ。 フリーソフトもいくつか試してみたが、 ControlとCapsを入れ替えるという程度のものが多くて、 探し方が悪いのかもしれないが、 アルファベットやカナを総入れ替えできるようなものは残念ながら見つからなかった。

 

※ カナの配列は TRON である。

Windows 2000は、キーのスキャンコードを入れ替えるのは意外と簡単である。 レジストリの特定の個所に、 スキャンコードの入れ替え表を登録するだけでよい。 つまり、左コントロールとCaps Lockの位置を入れ替えたい場合は、 左コントロールのスキャンコードとCaps Lockのスキャンコードを入れ替えるような指示を書けばよい。 もっとも、実はWindows 98だともっと簡単なのだが…。

さて、この方法で対応できるのは、 あるキーを他のキーと完全に入れ替えるという場合のみである。 私は英数の配列をdvorakと呼ばれているものにして使っている。 この配列だと、キートップに「F」と書いてある位置のキーは、「U」に対応させることになる。 つまり、スキャンコードが「F」のキーを押した時に、 「U」を押した時に出るスキャンコードが発生するように、マップを指定すればよい。 これは簡単である。

ところが、こうすることによって、 Windows 2000は、物理的に「F」の位置に「U」のキーを置いたという解釈の処理を行うのである。 カナモードかどうかというのは感知しない。 ということは、JISのカナ配列は、「F」に「は」を、 「U」に「な」を割り当てているので、 カナ入力モードで「は」を入れるつもりで「F」を押したとしても、 そのキーは「U」に割り当てられているので、 「U」に対応する「な」を押したという解釈になってしまうのである。 要するに、英数のキー配置を変更したら、それと同時にカナの配置も変化してしまうのだ。 この問題をどうすれば解決できるだろうか?

なお、単純なキーの入れ替えだけで解決できない問題は他にもある。 たとえばシフトを押しながら「2」のキーを押した時に「@」が出るようにしたいと思っても、 スキャンコードの入れ替えだけではちょっと難しい。

もしかすると、 何かコードの書き方に裏技があって、 このような場合にでも対応できるような仕組みになっているのかもしれないが、 なにしろWindows 2000どころかWindows ファミリーの情報にはとんと疎いので、 どうすればいいのかさっぱり分からなかった。 結局、この問題は@niftyのプログラマーズフォーラムのQ&A会議室でいただいたヒントを使って、 暫定的に解決した。 あるDLLファイルの中にあるカナの配列情報を、 バイナリエディタで強引に書き換えてしまうという解決方法である。

実際は、バイナリエディタを使わずに、 ある形式のデータファイルを用意しておいて、 その情報に基づいてオリジナルのDLLファイルの一部を置き換えた新しいバイナリファイルを作成する、 という方法を用いた。 形式というのは単純なもので、Fig.1 のように、 最初にアドレスがあって、 その後に置き換えるデータが1バイト単位で現れるという16進数値を羅列したテキストだ。

---- Fig. 1 ----

007D0  30 08 30 00 00 F0 9C FF 66 FF 31 08 31 00 21 00

---- Fig. 1 end ----

このようなデータを使ってパッチを当てる perl スクリプトが List 1 である。 実は、 今までこの種の処理をするためには C を使っていたのだが、 今回は perl をまず真っ先にVAIOにインストールしたので、このような選択になったのである。

---- List 1 ----

# newdat.txt と kbd106.dll から kbd106.new を生成する。
$orig = "kbd106n.dll";
$new = "kbd106n.new";
$data = "newdatnkd.txt";

open(IN, $orig) or die "can't read $orig $_\n";
binmode(IN);
read IN, $buf, 7440; # このサイズはウソ
close(IN);

open(IN, $data) or die "can't read data $data $_\n";
while (<IN>) {
  if (/^([0-9A-F]+)\s/) {
    eval "\$addr = 0x$1";
    print "address: $addr\n";
    @tmp = split(/\s+/, $_);
    for ($i = 0; $i < 16; $i++) {
      eval "\$val = 0x$tmp[$i + 1]";
      printf("%02x ", $val);
      $out = pack "c", $val;
      substr($buf, $addr + $i, 1) = $out;
    }
   print "\n";
  }
}

close(IN);

open(OUT, ">$new") or die "can't create $new $_\n";
binmode(OUT);
print OUT $buf;
close(OUT);

exit 0;

---- List 1 end ----
  

我ながら結構いいかげんだとは思うのだが、 これでとりあえず動いてしまったので目的は達成できて、使い捨てのソフトになっている。 システムのプログラムに勝手にパッチを当てるのだから、かなりリスキーな作業なのだが、 最後はWindows 2000を初期インストールする覚悟でやってみたら、何とかうまく行ったようである。 しかしOSが変更になる度にこんな作業が必要になるといのも大変な話なわけで、 ユーザ補助の機能があるのだから、キーの配置位は簡単に自由に変更できるようになっていて欲しいものだ。

 

※ Windows XP も同様の方法でカナの配置をカスタマイズできる。

(C MAGAZINE 2000年9月号掲載)
内容は雑誌に掲載されたものと異なることがあります。

修正情報:
2006-03-12 裏ページに転載。

(C) Phinloda 2000-2006, All rights reserved.