ハングアップの日々

2006年 1月分

2006/01/31

SeaMonkey

 SeaMonkey 1.0 が出たので早速研究室のマシンに入れてみた。タブ周りの機能がそこそこ揃っていて、不安定な TbE を入れなくてもよくなったのは良いことだ。

 SeaMonkey で使えるタブ関連の機能としては次のようなものがある。新しいウィンドウで開くリンクを新しいタブで開く、外部アプリからのリンクを新しいタブで開く、タブの Drag & Drop による並べ替え、など。
 一方、ソースを新しいタブで表示したり、選択した文字の Web 検索を新しいタブで表示することはできない。vstab を SeaMonkey に対応させる必要が出てきた。

 ホイールクリックでオートスクロールモード(?)も良い。ホイールクリックのできないノート PC では意味がないが・・・。

SeaMonkey Mail

 SeaMokey のメーラーも試してみた。mailkey は、そのまま使えた。

 Junk メール判別機能のほかに、Scam メールの判別機能が加わっていた。

 添付ファイルの Detach や、削除ができるようになっていた。Detach してから、メールのソースを表示してみると、

X-Mozilla-External-Attachment-URL: file:///C:/〜

というようになっていた。メールの中身からは添付ファイルを削除して、代わりに添付ファイルの保存先がメールに書き込まれるというわけである。

 .eml を開くことができるようになっていた。しかし、.eml のインポートができないようである。片手落ちだ。

TeX

 久しぶりに TeX をバージョンアップしてみた。TeXインストーラ3 というものもあるが今回は使わなかった。

 hyperref 関係でちょっとトラブル発生。

2006/01/30

SpringM

 SpringM で .rar, .cab, .7z, パスワード付き .zip などが解凍できるようになった。また、SpringM は axzip.spi を使っているために、Java で作成した .zip ファイルが解凍できないという問題もあったが、それも解消された。ただし、lview ではまだ対応できていない。
 SpringM は、U を入力したときのファイルの解凍処理をファイルの拡張子に応じて切り替えている。.lzh は unlha32.dll、.zip は axzip.spi、.tar, .taz, .tgz, .gz は tar32.dll を呼び出すようになっており、それ以外の拡張子の場合には、全て ish32.dll を呼び出すようになっている。zip ファイルをまともに扱えない axzip.spi と、今時必要のない ish32.dll の呼び出し部分をばっさり切り捨てて、自作の DLL を呼び出すように書き換えた。自作の DLL では、拡張子に応じて統合アーカイバ DLL を呼び出すようにしてある。zip の解凍にはもちろん、7-zip32.dll を使う。
 また Delphi の文字列の扱いでちょっとはまった。アセンブリレベルで見ると、何をやっているのか、未だによく分からない。とりあえず関数の入口と出口はいじらずにそのまま残しておいた方がトラブルが起きにくそうだ。

2006/01/29

URL memo

 碧落 - Windows の関連づけ設定の仕組み - WinXP での関連付け。
 PKWARE - Application Note - .ZIP File Format Specification - .zip ファイルの仕様

SpringM

 axzip.spi の代替物を作って、.zip だけではなく、.rar などの他のファイルも扱えるようにしてしまうのもおもしろいかもしれない。SpringM が使っている GetArchiveInfo() と GetFile() だけを実装して、本家の Susie では使えない spi・・・。
 GetFile() は、ファイル名ではなく、スキップするバイト数を渡すことで、どのファイルを解凍するかを指定している。やっかいな仕様だ。

2006/01/28

ifepsgs.spi

 ifepsgs.spi をさらに改造。Ghostscript の DLL を指定していないときは、レジストリを読んで DLL を探すようにしてみた。これで Ghostscript のバージョンアップのたびに DLL の位置を指定し直す必要がなくなった。ifepsgs.diff

 せっかくなので、「Windows 用 Ghostscript と GSview のインストール」を見て、Ghostscript を 8.53 にバージョンアップしておいた。

Susie, axzip.spi

 SpringM のパッチのドキュメントに、zip ファイルを扱うには axzip.spi + 偽unzip32.dll + 7-zip32.dll が必要だと書いたが、大きな勘違いだったようだ。axzip.spi は、単体で zip ファイルを扱える。一体どこで、unzip32.dll あるいは 偽unzip32.dll + 7-zip32.dll が必要だと思ったのだろう。

Susie, amzip.spi

 amzip.spi をコンパイルしてみた。Delphi で zlib を使うやり方は、「DelphiでZlib その2」を参考にした。amzip.spi では、zlibpas.pas を使っているので、contrib\pascal\zlibpas.pas もコンパイルしておく必要がある。asm ルーチンを C++BuilderX 付属の tasm32.exe でアセンブルしてみようとしたが、アセンブル中に tasm32.exe が落ちてしまう。Delphi や BCC を使う場合は、残念ながら asm ルーチンは使えないようだ。

URL memo

 外部DLLをつかわずにZIPを解凍する(VC++でzlibを使用する)
 Susieプラグイン関係ソフト - プラグインのデバッグ支援ツールなど。

2006/01/27

URL memo

 Signature Editor - Thunderbird に署名エディタを追加する拡張機能 - 署名エディタ、ルーラー、日付フォーマット変更機能
 Firefox/Thunderbird 用拡張機能のパッケージ方法 - chrome.manifest の説明等。

URL memo, 逆リンク

 【小人閑居シテ駄文記ス】 - 「妙にココロをくすぐるFirefox拡張機能を配布しておられます。」だそうだ。妙にココロをくすぐられる紹介文だ。

susie, ifepsgs.spi

 EPS を読めるようにする susie プラグインはないかと探してみた。ifepsgs.spi というものがあるらしい。どこにあるのかなかなか見つからなかったが、ようやく、ftp://ftp.ascii.co.jp/pub/TeX/ascii-ptex/ptex217/windll/gs/ の gs510j1.zip の中に入っていることが分かった。

 早速試してみたが、プレビュー付きの EPS が読めない。さらに致命的なことに、SpringM では画像サイズは取得できているが、画像そのものが表示されない。ソースも付いているので、SpringM でも使えるようにいじってみることにした。
 メモリー上のファイルイメージを渡したときの処理にバグがあったので、直したところ、SpringM でも表示されるようになったが、どういうわけか3回画像を表示すると、エラーが発生してそれ以降画像が表示されなくなってしまう。変なアドレスにアクセスしに行っているようだ。
 設定画面の「Ghostscript を画像毎に初期化・終了する」が保存されないというバグも発見。よく見ると、この設定を保存するためのコードが全く書かれていなかった。仕方がないのでコードを追加。相変わらず落ちるのは直らない。
 メモリを2回 delete しているところを発見。コピーコンストラクタをきちんと定義していなかった点が問題だろうか。どう直すのが美しいのか分からなかったので、とりあえず場当たり的な修正をしておいた。ようやく SpringM で使っても落ちなくなった。

 プレビュー付きが読めないのは簡単に直せそうな気もする。バイナリエディタでプレビュー付き EPS を見ると、簡単なヘッダが付いていた。ヘッダを読み飛ばしてしまえば良さそうだが、厳密なファイルフォーマットが分からないので、ちょっと心配。

 EPS のプレビューを読んで表示するプラグインがあった。ifepspv.spi である。これを参考にしながら、これとは逆にプレビューを飛ばして、EPS を表示するように、ifepsgs.spi を改造してみた。ヘッダの構造は自分が調べたものでほぼ合っていたようである。無事にプレビュー付きの EPS が SpringM からも見えるようになった。

 ifepsgs.spi に対するパッチを公開しておく。ifepsgs.diff
 ifepsgs.spi のライセンスがよく分からないが、修正版のバイナリを公開しても良いのだろうか。

Susie, URL memo

 Susie Plug-in Programming Guide - とぅいんくる☆は〜つ - 以前メモってたサイトがリンク切れしていたので、移転先のページをメモ。
 Susieプラグインのこと - ifepsgs.spi はここで知った。
 ソフトウェア工房α - ifjpegx.spi, ifpng.spi, ifpnm.spi など。bmp2png などもある。
 GIF 用 Susie32 plug-in の性能比較 - 高速な gif 用プラグイン。
 amzip - Yet another ZIP extract plug-in for Susie32 - 本家の axzip.spi では解凍できない zip ファイルも解凍できるらしい。また、本家のよりも速いらしい。ファイルへの出力に対応していないために SpringM では動かなかった。Delphi ソース付き。
 AmLzh.spi - lh7 に対応。速いらしいが、あまり新しくない。本家のとどっちがいいのだろう?

2006/01/26

URL memo

 オブジェクト指向プログラム言語としてのJavaScript - Mozilla では、JavaScript のオブジェクト指向な面を多用しているが、それの参考に。
 usercontent.css/広告カット - Firefox まとめサイト - userContent.css を使って広告を見えなくしてしまう方法。

Firefox

 なぜか、Firefox の履歴が吹っ飛んだ。

 Firefox の見た目をカスタマイズ。userChrome.css を次のように書いてみた。

#urlbar {
    font-family: monospace !important;
    font-size: 12px !important;
}

#searchbar {
    width: 180px !important;
}

URL バーを等幅フォントを使うように変更して、URL 内の記号類を見やすくしてみた。検索バーの横幅も広げてみた。

2006/01/25

Firefox, EHM

 EHM をさらに改造。ちゃんとアイコンに切り替えられるようになった。メニューの Settings → Always Show Advanced Toolbar の挙動がおかしかったのも修正。(ehm.diff)

 実は Mac だと menubar の挙動が違うらしい。この改造だと、Mac ではちゃんと動かないのだろうか。作者にパッチを送ることも考えていたのだが、こういうことなら止めておくか。

Firefox, text/plain

 text/plain という拡張を知ったので入れてみた。リンクされていない URL へ、コンテキストメニューからジャンプできるようになる。よく似た拡張で、ダブルクリックで開けるようになる Text Link というものもあるが、両方入れておくと便利だ。

Firefox, keyconfig

 Page Info を Ctrl+I で開けるようにするための設定で、以前のよりも簡単な方法があった。

/* CODE */
BrowserPageInfo();

window.openDialog() を使って長々と引数を指定する必要はなかったのである。

転送メール

 anet.ne.jp (infoseek.jp) の転送メールサービスが6月で終了するそうだ。さて、次はどこのを使おう。
 csc.jp で登録してみた。

2006/01/24

ifpnm.spi

 dviout で EPS を含んだ(?) dvi ファイルを開くと、Ghostscript が起動して .pbm が出力されるが、ファイルの共有の関係で、出力されたばかりの .pbm が ifpnm.spi で開けない。CreateFile() に FILE_SHARE_READ フラグを追加してみた。(ifpnm.diff) 結局変わらなかった。でも、他のところで役に立つことがあるかも。

 別の ifpnm.spi を発見した。(Susie32 PbmPlus Plug-in) 試してみたところ、こっちの方が良い。画像の幅と高さが別の行に格納されている pbm でもちゃんと表示してくれる。

Delphi

 なんとなく、Borland - Delphi 6 Personal Download から Delphi の無料版を DL して入れてみた。特に Delphi で何かを作ってみたいというわけではない。(参考:Delphiパーソナル版のダウンロード

Firefox, 拡張作成 URL memo

 拡張機能のバージョン管理、アップデート、互換性
 アプリケーション拡張機能

2006/01/23

Firefox

 ついに Let's note (事実上のメインマシン)の、デフォルトブラウザを Mozilla から Firefox に変えてしまった。メーラーは Thunderbird ではなく、まだ Mozilla Mailer をそのまま使っている。今まで Firefox と Thunderbird を使うのは、GRE を2つも起動することになり Mozilla Suite を使うのに比べてメモリの無駄だと思っていたが、実際に使ってみると意外と悪くないような感じである。

Firefox, 検索プラグイン

 Firefox では検索プラグインを使って、検索ツールバーから検索サイトを簡単に切り替えて検索できるのは便利だ。(Mozilla でもサイドバー内で検索プラグインを使うことができたが、サイドバーは使わない主義なので全く使っていなかった。)
 Firefox の Google-jp 用検索プラグインを使って検索すると、日本語のみのページを検索するようになっているがそれが嫌だったのでカスタマイズしてみた。
 firefox のインストール先ディレクトリの searchplugins\google-jp.src を開くと、

<input name="lr" value="lang_ja">

という行があるので、行頭に # を付けてコメントアウトしておいた。これで全言語のページから検索してくれるようになる。

 他にも Firefox の検索プラグインをいくつか入れてみた。

 Linux JM のみの検索プラグインも欲しかったのだが、見あたらなかったので、「DebianなPowerbookでDarwinと遊ぶ - Firefox 検索エンジンで遊ぼう」などを参考に自分で作ってみた。(jm.lzh) 解凍して出てくるファイルを searchplugins ディレクトリに放り込んでおけばよい。

Firefox, Tab Mix Plus

 TMP (Tab Mix Plus) のセッション保存機能の動作がよく分からない。1つのウィンドウだけではなく、複数のウィンドウをまとめて保存できるようになっているせいで非常にややこしくなっている。特に、セッションの復元する際、現在のウィンドウに上書きする設定したときの挙動が怪しい。操作を行ったウィンドウを上書きするだけでなく、他に開いているウィンドウも勝手に閉じられてしまう。バグなのか、仕様なのか・・・。

URL memo

 note - [C++] ini ファイルの読み書き, Mozilla 関連の 各アプリケーションの GUID など

SeaMonkey

 SeaMonkey 1.0 Beta は、タブブラウズ関連の機能が意外と充実していることに気付いた。Firefox と同じように、target="_blank" なリンクを新しいタブで開いたり、外部アプリからリンクを開くときに新しいタブで開いたりできるだけでなく、タブグループをまとめてブックマークすることも可能になっている。他のタブブラウズ拡張で言うところのタブセッション保存機能が、ブックマークの一部として実装されているというわけである。意外と侮れない。

vstab

 vstab - Firefox更新情報 Wiki* - 公開したばかりで Google には引っかかっていないというのに、めざとい人もいたもんだ。

2006/01/22

Firefox

 Firefox に Tab Mix Plus を入れてみた。タブ関連で自分に必要な機能はほとんど揃っていた。ソースを新しいタブで開く設定が見あたらなかったが、これは、昨日作った vstab が問題なく動いた。Ctrl+Shift+Z で最後に閉じたタブを開き直すことができないのが不満であるが、それ以外はほとんど問題ない。
 Mozilla で使えるタブ関連の拡張は TbE くらいしかないので、Mozilla では仕方なく TbE を使っていたが、Firefox なら、不安定な TbE を使う必要はない。

 Mozilla から Firefox に移行するとすれば、残る不満は Enhanced History Manager から、リンクを新しいタブで開けない点ぐらいだろうか。もっとも、Mozilla Mailer との連携をどうするかも悩ましいところではある。

Firefox, Enhanced History Manager

 EHM (Enhanced History Manager) をいじってみた。EHM のメニューは少し挙動が変である。メニューを開いてからマウスを移動させると、普通はメニューの開いている項目がマウスに合わせて移動するはずだが、EHM はなぜかそうならない。content/hcpm/historyComm.xul を見ると、メニューがツールバーボタンとして実装されていた。普通のメニューに直したところ、挙動も普通になった。ここで、メニューの Settings → Always Show Icons on Toolbar という項目の存在に気付いた。これにチェックを入れるとメニューがアイコンに変わるのだが、改造後だとこれにチェックを入れてもアイコンに変わらない。どうせアイコン表示にはしないからいいか。
 EHM から Enter やダブルクリックでリンクを開くと、必ず現在のタブに開くのも気になっていた。せめて Ctrl を押しながら開くと新しいタブで開くようになっているとよかったのだが、そうはなっていない。content/hcpm/history/history.js をいじって必ず新しいタブで開くようにしてしまった。
 結局、パッチはこんな感じになった。(ehm.diff)

 EHM を改造した際の手順をメモしておく。Firefox のプロファイルディレクトリの extensions\{36EC55C0-D27E-11d8-9418-444553540001}\ が EHM のインストール先ディレクトリである。この中に chrome\hcpm.jar というファイルがあるので、これを chrome\ に解凍する。さらに、chrome.manifest に

content hcpm    jar:chrome/hcpm.jar!/content/hcpm/

という行があるので、これを

content hcpm    chrome/content/hcpm/

に書き換えると、圧縮されたファイルではなく、解凍されたファイルが読み込まれるようになる。あとは、chrome ディレクトリ以下のファイルを書き換えることで、好きなように EHM を改造できる。

2006/01/21

Firefox, keyconfig

 Firefox + keyconfig でさらにいじってみた。まずは、Ctrl+I でブックマークサイドバーではなく、ページ情報を表示するようにするための設定。

Key Name: Page Info

/* CODE */
window.openDialog("chrome://browser/content/pageInfo.xul", "_blank", "chrome,dialog=no");

次は、BackSpace で上にスクロールできるようにするための設定。

Key Name: scrollPageUp

/* CODE */
goDoCommand("cmd_scrollPageUp");

これで、pageinfobsscroll も必要なくなってしまった。何かむなしい。以前は、keyconfig では BackSpace は扱えなかったような気がするがいつの間にできるようになったのだろう。なお、scrollPageUp キーは、f4kc を入れていれば、f4kc_ScrollPageUp がそのまま使えそうである。

 keyconfig の設定をまとめると次のようになった。

user_pref("keyconfig.main.key_gotoHistory", "!][][");
user_pref("keyconfig.main.viewBookmarksSidebarKb", "!][][");
user_pref("keyconfig.main.viewBookmarksSidebarWinKb", "!][][");
user_pref("keyconfig.main.xxx_key19_cmd_handleBackspace", "!][][");
user_pref("keyconfig.main.xxx_key__Bookmarks Manager", "control][B][][toOpenWindowByType('bookmarks:manager', 'chrome://browser/content/bookmarks/bookmarksManager.xul');][chrome://browser/content/browser.xul");
user_pref("keyconfig.main.xxx_key__Enhanced History Manager Window", "control][H][][toOpenWindowByType('history:manager', 'chrome://hcpm/content/historyComm.xul');][chrome://browser/content/browser.xul");
user_pref("keyconfig.main.xxx_key__Page Info", "control][I][][window.openDialog('chrome://browser/content/pageInfo.xul', '_blank', 'chrome,dialog=no');][chrome://browser/content/browser.xul");
user_pref("keyconfig.main.xxx_key__scrollPageUp", "][][VK_BACK][goDoCommand('cmd_scrollPageUp');][chrome://browser/content/browser.xul");

user.js に書き込んでおけば一発で設定できるようになる。

Firefox, 自作拡張

 Firefox でソース表示を新しいタブで開くようにするだけのために、拡張を1つ作ってみた。(vstab) TbE の chrome://global/content/viewSource.xul を使った表示よりは明らかに速い。

2006/01/20

Firefox 1.5, 各種拡張

 Firefox 1.5 をインストールしてみた。Firefox は履歴がしょぼいのが気に入らないのだが、Mozilla 並の多機能な履歴が使えるようになる拡張があることを知り、試してみた。Enhanced History Manager というのがそれである。しかし、Enhanced History Manager 単体だと、多機能な履歴画面が狭いサイドバーの中に表示されることになって逆に使いづらい。Mozilla のように履歴を別ウィンドウに分離させたいのだが、そのためには、Ez Sidebar を使えば良いらしい。試してみたが Mozilla との操作性の違いに微妙な違和感を感じる。

 キー操作をカスタマイズする拡張として、keyconfig があるが、ちょっとした動作なら、自分で JavaScript のコードを書くことで、より高度なカスタマイズもできるようだ。Firefox Extension: functions for keyconfig (f4kc) と組み合わせればより便利になるようだ。keyconfig は以前から使っていたが、JavaScript のコードを記述することができるのははじめて知った。

 Firefox の、サイドバーに表示されるブックマークも嫌いで、別ウィンドウでブックマークマネージャが表示されるようにするために、わざわざ bkman という拡張を作ったりしたが、どうやら keyconfig だけで同じことができそうだ。
 keyconfig の画面を開き、「キーを追加」ボタンを押し、キーの名前を Bookmarks Manager にして、コードの記述欄に、

/* CODE */
toOpenWindowByType('bookmarks:manager', 'chrome://browser/content/bookmarks/bookmarksManager.xul');

と書いてから、Bookmarks Manager のショートカットとして Ctrl+B を割り当てたところ、bkman と同じことができるようになった。

 Enhanced History Manager も keyconfig を使って別ウィンドウで開くように設定してみた。キーの名前を Enhanced History Manager Window にして、コードの記述欄に、

/* CODE */
toOpenWindowByType('history:manager', 'chrome://hcpm/content/historyComm.xul');

と書いてから、Enhanced History Manager Window のショートカットとして、Ctrl+H を割り当てたところ、Mozilla と同じような感覚で多機能な履歴画面が使えるようになった。Ez Sidebar を併用したときの微妙な違和感もなくて良い。Ez Sidebar は必要なくなったのでアンインストールした。

 よく使うような拡張はだいたい入れ終わったので、あとは、細かいカスタマイズ。
 ソース表示で長い行を折り返し表示するように設定した。今回は、prefs.js を直接いじるのではなく、about:config を開いて、view_source.wrap_long_lines を true に設定した。
 ソース表示は別ウィンドウではなく、別タブで表示するように設定したいのだが、これだけのために、重い Tabbrowser Extensions を入れるのは気が引けるのでとりあえず保留。

Mozilla URL memo

 コンピュータ系blog: Mozillaの設定変更方法
 Firefox まとめサイト - 拡張の作成 - Firefox まとめサイト などの開発者向けの情報あり。

2006/01/19

SeaMonkey

 今さらながら、SeaMonkey 1.0 Beta を試してみた。Mozilla 1.7 のプロファイルがそのまま使われた。ユーザー毎にインストールした拡張もそのまま使われた。SeaMonkey では動かない拡張が入っているとちょっと困ったことになる。システムにインストールした拡張は別々に使われる。bsscroll は Ver.0.02b がそのまま使えた。dmclose は必要なくなっていた。mailkey はまだチェックしていない。
 基本的には、現在の Mozilla 1.7 と内部構造はほとんど変わっていないようである。Firefox のエクステンション管理機能は SeaMonkey では使えるようにならないのだろうか。Mozilla 1.7 だと一度インストールしたエクステンションのアンインストールが面倒なのが嫌だ。

MASM

 KMDF 1.0 に含まれているアセンブラのバージョンをチェックしてみた。

EXEVer.備考
masm.exe5.10A16bit 版
ml.exe7.10.403532bit 版
ml64.exe8.00.40310.39AMD64 用
ias.exe8.0.4299.0IA-64 用

ちなみに、VS2003 に付属の ml.exe は、7.10.3077 である。(以前の調査結果
 ml64.exe が普通の 32bit 版 WinXP で起動したのは意外だった。ias.exe は 32bit WinXP では実行できなかった。ついでに、ias.exe は ijexp32 で実行ファイルの詳細を見ることができなかった。暇ができたら対応させてみるかな。

2006/01/18

cm_rss.pl

 cm_rss.pl をまたちょっと改造。文字化けは根本的に解消できたようだ。しかし、Shift_JIS な RSS を読もうとすると Perl が落ちるのは、実は解消されていなかったようだ。

 「とおるのウェブロ。: RDF を UTF-8 化するプロキシ。」というものを見つけた。これを使えば、cm_rss.pl でも Perl が落ちなくなるかもしれない。しかし、こういうものは使うのがちょっと気が引ける。

 rdf_utf8 を参考に、cm_rss.pl で RDF を UTF-8 に変換してから XML::RSS に渡すように変更してみたところ、Perl が異常終了しなくなった。わざわざ、shift_jis.enc や euc-jp.enc を用意する必要もなくなり、使い勝手も向上した。文字化けもなくなり、これでようやく INCM で RSS をまともに読むことができるようになった。

URL memo

 hail2u.net - Weblog - ちょっとだけ問題のあるRSS
 hail2u.net - RSS

2006/01/17

RSS

 ハングアップの日々に、RSS を付けてみた。「RSS -- サイト情報の要約と公開」などを参考にして、XML::RSS を使って RSS を生成させることにした。

cm_rss.pl

 久しぶりに、cm_rss.pl を使ってみた。以前、cm_rss.pl を Perl 5.8.x で使ったときは、Jcode の文字コード判別がうまくいかず、派手に文字化けを起こしていたため、わざわざ改造して使っていた。 今回 Perl 5.8.x + Jcode 2.03 で試してみたところ、改造部分を元に戻しても、文字化けしなくなっていた。さらに、文字化けとは別に、Shift_JIS の RSS を読み込ませると動作が不安定で Perl が落ちてしまうことがあったので非常に気になっていた。ローカルに保存される rss.xml の改行コードが \r\r\n になっているのも気になったので、改行コードが正しく保存されるように修正してみたところ、Perl が落ちるのも解消された。
 なお、エンコードが Shift_JIS や euc-jp になっている RSS を読む場合には、「Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う」にあるスクリプトを使って shift_jis.enc や euc-jp.enc を生成しておく必要がある。
 ついでに、HTTP ヘッダの If-Modified-Since フィールドを使って、前回取得時から RSS が更新されていないときには再取得しないように改造してみた。(cm_rss.pl)

Perl, .ini

 Perl で .ini ファイルを扱うライブラリはないかと探してみた。Config-IniHash-2.8 というものが見つかったが、CPAN で正式に登録されたライブラリではないようだ。
 他には、「Perl データマンジング」に Parse::RecDescent を使ったサンプルコードがあった。

Perl memo

 システムにインストールされていないモジュールを使う方法。

push @INC, './lib';
require Module;
import Module;

あるいは、

use lib qw(./lib);
use Module;

2006/01/15

玄箱/HG, loader.o

 loader.o を玄箱/HG 用にコンパイルしてみた。Makefile の INCLUDE の行を、

INCLUDE = -isystem ../linux-2.4.17_mvl21-sandpoint/include

というように変更して、Linux カーネルソースの include ディレクトリを指定してから、make を実行したところ、一応 loader.o ができあがった。gcc は 2.95.4 でも 3.3.5 でもどちらでもコンパイルできた。動作は未確認である。
 最初は、INCLUDE 行の末尾の /include を付け忘れていたせいで、おかしなバイナリができあがって悩んだ。コンパイルエラーにはならないのだが、できたバイナリには、カーネルのバージョンが書き込まれていなかったのである。apt-get で libc6-dev をインストールすると、linux-kernel-headers も合わせてインストールされて、このヘッダーは 2.6.x のものだったのが原因だった。

2006/01/12

玄箱/HG

 perl を使って、HDD の回転状態を監視しつつ、ファンのスピードをコントロールするデーモンを書いてみた。(kurofand.pl) top コマンドでメモリ使用量を見てみると、3MB 以上使っていて、各種デーモンの中で最も多い。やはり perl スクリプトをデーモンにするのはあまりよろしくない。(そういえば、うちの研究室で使っている FAX サーバーも perl デーモンを使っていたような気がするが、あれは何というソフトだったかな?)

 どういうわけか HDD の回転停止状態が1分以上続かない。/var/log/syslog を見ると、

Jan 12 15:38:06 KURO-BOX kuroevtd[406]: unknown msg 33
Jan 12 15:38:37 KURO-BOX last message repeated 72609 times
Jan 12 15:39:38 KURO-BOX last message repeated 144940 times

という状態になっていた。再起動してみたところ直ったようだが何だったのだろうか。
 室温 20℃で、玄箱のファンを常時高速回転させていると、HDD の温度は 25〜27℃くらいになったが、ファンを低速回転にすると 30℃を超えてしまう。意外とファンの効果はあるようだ。

URL memo

 書き方や環境によってバラバラ… 表のセンタリング方法の謎 - スタイルシートで表をセンタリングさせる方法。(ctable よりましなクラス名はないだろうか。)

2006/01/11

ハングアップの日々

 ハングアップの日々を少々改造。前月と翌月へのリンクを追加して、ついでに 2004年以前のものにも、タイトルに年月を追加した。リンクは、いちいち年月を手で書くのは面倒なので、JavaScript で自動生成させることにした。これにより、現時点では無効化してある来月分へのリンクが、2月になれば自動的に有効化される。実に素晴らしい。
 JavaScript を別ファイルにしたせいで、ページの読み込みが若干遅くなるかも知れないが大した問題ではないだろう。

 変更後の HTML ファイルを htmllint でチェックしてみたら、「<SCRIPT> を使うときは <HEAD>〜</HEAD> 内に <META HTTP-EQUIV="CONTENT-SCRIPT-TYPE" CONTENT="〜"> を指定するようにしましょう。」と指摘された。この指定は、onClick などで、タグの中に直接スクリプトを書く場合に、そのスクリプト言語の種類を指定するためのものらしい。今回はそういう用途には使っていないので、この指定はなくても問題ない気がする。The W3C Markup Validation Service でのチェックを試したところ、Valid と言われたので、これで良いということにしておこう。(もっとも、Markup Validator の方は、DTD に基づいて文法のみのチェックをしていて、こういう細かい点はチェックしていないようだが。)
 ついでに、W3C CSS Validator で CSS のチェックをしたところ、スペルミスが見つかったので直しておいた。(white-space と書いたつもりが、while-space になっていた。) せっかくなので、それ以外の部分も見直してみた。以前から気になっていた class="center" は、あまりにもアレなので、class="imgcontainer" などに変更しておいた。
 Markup Validator や CSS Validator で Valid と評価されたら、そのことを示すバナーを貼ってよいそうだ。

2006/01/10

玄箱/HG, HDD 監視デーモン

 昨日の、syslog.conf を見直したところ、設定に抜けているところがあった。syslog.conf.diff のように変更したところ、perl から Sys::Syslog を使ってログを出力しても、HDD が回転を始めることはなくなった。

玄箱/HG, devpts

 昨日の devpts に関してだが、/etc/rcS.d/S02mountvirtfs, S36mountvirtfs 辺りでマウント処理を行うようになっているようだ。S02 と S36 の兼ね合いはよく分からない。/etc/fstab との兼ね合いも分からない。どこで指定したものが最終的に有効になるのだろうか。

レーザーマウス

 RaFeel を分解してみた。ホイールが少し右側に寄っていて、スクロールがスムーズにできないことがあったので、以前から気になっていたのだが、それを修理してみることにした。マウス上端の爪は結構深く噛んでいて外すのにちょっと苦労した。マウスの中身はこんな感じ。

RaFeel 基板(表) RaFeel 基板(裏)

 RaFeel の光学センサー部を見ると、発光部はあたかも普通のφ5 の LED のように見える。基板のシルクにも LED2 と書かれている。

RaFeel センサー(表) RaFeel センサー(裏)

果たしてこれは本当に赤外線レーザーダイオードなのだろうか。発光しているところを撮った写真を見ると、きれいな干渉縞が発生しているようなので、波長は良く揃っているのだろうが・・・。光がかなり広がるのは、LED と同一形状のレンズのせいだろうか。発光部のチップをよく見ると、普通の LED とは形状が少し違うような気もする。普通の LED だとチップは円錐状のくぼみに入っていることが多いが、これはくぼみがないようにも見える。チップも普通の LED より分厚いように思える。

 さて、ホイールの動きが悪い件だが、どうも、ホイールの軸が右側に少し下がっているような気がする。ホイールの軸は左側がロータリーエンコーダーで固定されているだけで、右側はタクトスイッチの上に浮いているだけの構造になっている。ホイールをクリックする際には、軸の右側が下がって、このタクトスイッチが押されるというわけである。タクトスイッチの足に付いている半田を溶かして、タクトスイッチを基板から 0.5mm ほど上に浮かせて、ホイールの軸とタクトスイッチが軽く触れるようにしてみたところ、軸の傾きがなくなって、ホイールがスムーズに回転するようになった。
 しかし、こんなことをしないとまともに使えないマウスなんてやっぱりダメだ。

URL memo

 アドバンスト・ファイルシステム・インプリメンター・ガイド: 第3回 仮想記憶(VM)ファイルシステムとバインド・マウントの使い方 - tmpfs についての詳しい説明。バインド・マウントを使って、/tmp に RAM ディスクをマウントする方法。

2006/01/09

SpringM + Cygwin

 以前の書き方よりも、

  cd "$(cygpath -u "$(cygpath -alw .)")"

というように、$() を使った方がすっきりしていいかな。`` を入れ子にしていると紛らわしい。

URL memo

 7-3. setuid は慎重に

玄箱/HG

 /etc/rcS.d/S35devpts.sh のシンボリックリンクが切れているのが気になった。/etc/default/devpts を参照して、何やら設定するスクリプトらしいのだが。/etc/fstab を見ると、

none            /dev/pts        devpts  gid=5,mode=620                  0 0

と書いてあるが、これがあれば問題ないのだろうか。

玄箱/HG, HDD 監視デーモン

 /etc/syslog.conf をいじって、facility=local7 のログを RAM ディスクに保存するように設定して、HDD 監視スクリプトを Perl を使ったデーモンに変更してみた。(hddstatd.pl) 早速使ってみたところ、HDD の回転が止まったかと思うと、直後にすぐ回転が始まってしまう。syslog を使うと必ず HDD にアクセスしてしまうということなのだろうか。

2006/01/08

Perl

 Debian で、setuid ビットをセットした perl スクリプトを実行する際には、perl-suid パッケージをインストールしておく必要があるようだ。perl-suid をインストールして、少し試してみた。shebang に

#!/usr/bin/env perl

と書くやり方は使えないようだ。これが使えると、セキュリティーホールになりうるということだろうか。

URL memo

 Manpage of SYSLOG.CONF

玄箱/HG

 I/O 監視スクリプト を動かしていると、

/sbin/syslogd -m 0
/sbin/modprobe -s -k -- net-pf-10

というものが引っかかった。net-pf-10 を調べてみると、IPv6 関連のものらしい。/etc/module.conf や /etc/modutils/aliases に書かれているがよく分からない。aliases.dpkg-dist があったので、入れ替えておいた。

2006/01/07

玄箱/HG, RAM ディスク

 玄箱で RAM ディスクを使えるようにしてみようと思い、試してみた。「玄箱で遊ぼう!!」には ramfs でマウントすれば良く、容量は 10MB 弱だと書かれている。実際に ramfs でマウントしてみて、100MB 以上のファイル群をコピーしてみたところ、10MB 以上コピーしてもエラーも出ずにコピーされている。数十MB コピーしたところで、玄箱の動作が極端に遅くなってきた。どうも ramfs は容量が動的に変化する RAM ディスクで、メモリをほとんど使い切ってしまったために、動作が遅くなってしまったらしい。RAM ディスクの容量が制限できないのはかなり問題があるような気がする。また、df や du が使えないのも不便だ。
 /dev/ram を ext2 でフォーマットして使うやり方も試してみた。こちらの場合は、アンマウントしてからも、RAM ディスクの内容がそのまま残っているようだ。メモリを無駄に消費しているようで何か嫌だ。
 何か良い方法はないかと探してみたところ、「容量が動的に変化するRAMディスクを使うには」というのが見つかった。tmpfs というものを使えばよいらしい。しかもよく調べてみると、Debian 化していると、わざわざ設定しなくても自動的に /dev/shm に RAM ディスクがマウントされるようだ。RAM ディスクの最大容量は、/etc/default/tmpfs で設定すればよい。設定を省略すると、最大容量はメインメモリの半分の容量になる。
 tmpfs は ramfs とは違い、最大容量が指定できる上に、df や du も問題なく動く。また、メモリに収まりきらない場合には、スワップアウトされるらしい。つまり、絶対にスワップアウトしてほしくない場合には、tmpfs は使えないようだ。

DDK memo

 Windows Driver Foundation (WDF) からダウンロードできる KMDF 1.0 (WDFv10.iso) に Windows Server 2003 SP1 DDK が入っているらしい。とりあえず DL しておいた。

URL memo

 13Hz!: Perlでデーモンを書く - perl でデーモンを書く方法。

2006/01/05

玄箱/HG

 HDD が回転しているか、スタンバイしているかを監視するスクリプトを書いてみた。hdparm を使っているために、root で実行しないといけないのが難点。

#!/bin/bash
stat2=''
while true; do
  stat=`hdparm -C /dev/hda | grep 'drive state is:'`
  if [ "$stat" != "$stat2" ]; then
    echo "$(date '+%F %T %Z') $stat"
  fi
  stat2="$stat"
  sleep 1
done

玄箱 URL memo

 hisa's blog - 玄箱 - ramdisk を併用した HDD 静音化等。

URL memo

 Manpage of nohup

2006/01/04

玄箱/HG, MO をネットワーク共有(まとめ)

 昨日の時点でなんとか、玄箱/HG で DOS フォーマットの MO や USB メモリをネットワーク共有することができるようになった。ここあたりで手順をまとめておこうと思う。

 まず、必要なソフトとしては、USB のホットプラグの処理をするための murasaki、USB デバイスを挿した順や挿したポートに関係なく常に同じデバイスファイルでアクセスできるようにするための scsidev、リムーバブルメディアを自動的にマウント・アンマウントするための autofs、DOS フォーマットをするための dosfstools (mkdosfs)、ボリュームラベルを操作するための mtools (mlabel)、タイムスタンプが9時間ずれるのを解消するための自作ソフトなどがある。

 murasaki は現時点では unstable パッケージなので、unstable パッケージを借りてくるように設定してから、インストールする。このとき、libc6 などが testing パッケージになってしまうが、それが都合悪い場合は murasaki を自分でコンパイルする必要があるだろう。また、玄箱/HG で玄箱うぉううぉう♪の Debian 化キットを使っている場合は、玄箱/HG のオリジナルイメージからカーネルモジュールを復元する必要がある。

 apt-get で scsidev, autofs をインストールしてから、murasaki, scsidev, autofs の設定を行う。
 murasaki の設定は、ほぼ以前の通り。まず、/etc/init.d/murasaki の中に /etc/murasaki/bin/auto_setup と書かれている部分があるので、murasaki の現バージョンに合わせて /etc/murasaki/scripts/auto_setup に修正。次に、

# /etc/murasaki/scripts/auto_setup > /etc/murasaki/murasaki.preload

を実行する。玄箱/HG ならば /etc/murasaki/murasaki.preload は空になるはずである。/etc/murasaki/murasaki.conf は、init.usb: と usb: を on にする。残りは off でよい。/etc/murasaki/murasaki.call には、usb-storage: usbdisk と書いておく。これで USB ストレージの抜挿時に /etc/murasaki/scripts/usbdisk が実行されるようになる。/etc/murasaki/scripts/usbdisk は以前とは違い、scsidev を実行するように変更して、

#!/bin/sh
case $1 in
start)
        scsidev -p
        ;;
stop)
        sleep 10
        kill -USR1 `cat /var/run/autofs/_misc.pid`
        scsidev -p
        ;;
esac

exit 0

と書いておく。kill -USR1 〜 の行は、USB 機器を抜いたら、(念のために)強制的にアンマウントさせるためのもの。抜いた USB 機器に関連するマウントポイントだけアンマウントできればよいのだが、そういうことはできないようなので、とりあえず全部アンマウントさせてしまう。

 scsidev の設定は次のような感じ。/etc/scsi.alias にデバイスとデバイスファイルの対応関係を書いておく。

manufacturer="FUJITSU", model="MCD3130SS", devtype=disk, alias=mo
manufacturer="I-O DATA", model="USB Flash Disk", devtype=disk, alias=usbdisk

これにより、MO は /dev/scsi/mo でアクセスできるようになり、I-O DATA の USB メモリの第1パーティションには /dev/scsi/usbdisk-p1 でアクセスできるようになる。

 autofs の設定は、次のような感じ。まず /etc/auto.master には、

/misc   /etc/auto.misc --timeout=60

と書いておき、/etc/auto.misc には、

mo              -fstype=vfat,umask=0    :/dev/scsi/mo
usbdisk         -fstype=vfat,umask=0    :/dev/scsi/usbdisk-p1

と書いておく。これで、/misc/mo にアクセスすると、MO が自動的にマウントされ、/misc/usbdisk にアクセスすると、USB メモリが自動的にマウントされる。どのユーザーでも読み書きできるようにするには、umask=0 を指定しておく必要がある。なお、samba で共有しているディレクトリは、/mnt 以下に置いておくことにしているので、それに合わせるために、

# ln -s /misc/mo /mnt/
# ln -s /misc/usbdisk /mnt/

としてシンボリックリンクを作ってから、/etc/samba/smb.conf をいじるなり SWAT を使うなりして、/mnt/mo, /mnt/usbdisk を共有するようにしておく。

 玄箱で DOS フォーマットのディスクをマウントすると、タイムスタンプが9時間ずれるという問題があるので、簡単な自作プログラムを使って対処する。(kuroclk)

 以上でとりあえず、MO と USB メモリがネットワーク共有できる。

 MO を FAT16 でフォーマットするには、apt-get で dosfstools をインストールして、

# mkdosfs -Iv -S2048 -F16 /dev/scsi/mo (1.3GB, 640MB の場合)
# mkdosfs -Iv -F16 /dev/scsi/mo (540MB の場合)

とすればよい。
 MO にボリュームラベルを付けるには、apt-get で mtools をインストールし、/etc/mtools.conf でドライブ名の設定をして、さらに MTOOLS_SKIP_CHECK=1 という行を書き加えてから、mlabel コマンドを使えばよい。ラベルを表示するだけなら、

# mlabel -s m:

などと -s を指定する。オプションを指定せずに mlabel を実行すると、ラベル書き込みモードになってしまい、Ctrl+C では中止できないので注意が必要である。

 コマンドラインから安全に MO をイジェクトするためには、apt-get で eject をインストールし、

# eject /dev/scsi/mo

とすればよい。ネットワーク共有が生きたままになっており、eject できない場合は、

# smbcontrol smbd close-share <sharename>

として、共有を切ってから eject を実行すればよい。

 ネットワーク共有を経由すると、Windows からはボリュームラベルが見えなかったり、イジェクトやフォーマットができないという不便もあるが、複数のマシンからアクセスできるのは、やはり便利だ。

TClock Light

 久しぶりに TClock Light を改造してみた。Distantland 氏による、TClock Light 時刻合わせ精度向上版(リンク切れ)と、TClock@2ch uploader の tclocklight-050716.zip の一部を、自分の改造版 TClock Light に取り込んでみた。
 tclocklight-050716.zip(以下 050716)には、既に前述の時計合わせ精度向上版が取り込まれており、さらに、自分の改造版の機能のうち、いくつかの機能は取り込まれている。しかし、レジューム時のアラーム実行や、メニューのアクセラレータなど、自分にとって重要な機能が取り込まれていないのでそのままでは使う気になれない。また、TClock2ch の機能はあまり必要としていないので、tclock.exe, tcprop.exe は、以前のものをそのまま使うことにして、tcsntp.exe をいじってみることにした。

 tcsntp.exe に関して、Distantland 版はインラインアセンブラを使っており、VC++ でしかコンパイルできないようになっているが、050716 の方は、Borland C++ でもコンパイルできるようになっている。これだけの違いならどちらを使っても良いのだが、050716 はそれ以外の部分もかなり改変が加えられており、その改変が何のためのものかがよく分からない。自分の書いたログ表示部分は、ダイアログを開いたときにログの最後の行を表示するように改良され、さらに、余計なゴミが表示されないように改良が加えられていたが、それに加えて、_lopen() 系の旧式の API を使っていたものが CreateFile() 系の API を使うように改変されていた。TClock Light の流儀に合わせるために、また、使う API の種類を減らすために、わざわざ旧式の API を使っていたのに、その意図は伝わらなかったようだ。使う API の種類を減らすことはインポートテーブルを小さくすることになり、ファイルサイズの削減につながる。
 050716 では、ログのバッファサイズが 2KB から 1KB に減らされていたが、自分としては1日分以上のログは見れるようにしておきたかったので、やはり 2KB 程度は必要である。

 結局、自分の改造版を元に、Distantland 版の sntp\sntp.c をそのまま組み込み、050716 を参考にログ表示機能を改善してみた。できあがった tcsntp.exe の改造版は以下の通り。

 050716 のソースを見直してみると、_lopen() 系の API を全て、CreateFile() 系に書き換えてあった。TClock Light のソースを見たときには、今時 _lopen() 系を使うとはどうかとは思ったが、正直そこまでして書き直す必要があるのだろうか。050716 と、元の 040702-3 との差分を取ってみたら、374kB にもなった。
 SetWindowLong() を SetWindowLongPtr() に書き換えてあるのは、64bit 版のための変更だろうか。ただ、これをされてしまうと、新しい Platform SDK をインストールしていない VC6 ではコンパイルできなくなってしまうのが困りどころ。

2006/01/02

玄箱/HG

 昨日の、1分ごとに /var/log/daemon.log に automount からエラーが出る問題は、やはり FDclone が関係していたようだ。/etc/fdclone/fd2rc に、

SJISPATH="/mnt/share:/mnt/mo:/mnt/usbdisk"

と書いていたのを

SJISPATH="/mnt"

に直したところ、エラーは出なくなった。FDclone は、SJISPATH で指定したディレクトリに、定期的にバックグラウンドでアクセスしているということなのだろうか。かなり謎である。

 /etc/init.d/adjtimex を、同じディレクトリにあった adjtimex.dpkg-dist に合わせて少し修正。(adjtimex) *.dpkg-dist は woody から sarge にアップグレードした際に作られたファイルのようだ。

玄箱/HG, HDD 回転制御

 5分ごとに MO ドライブへのアクセスが発生しているのはやはり noflushd が関係していたようである。noflushd を切ってみると、ログにエラーは出なくなった。noflushd をやめて hdparm にしてみようと思い、/etc/hdparm.conf に、

/dev/hda {
        spindown_time = 60
}

と書いてみた。これで 5sec * 60 = 5min で HDD が自動停止するはずだが・・・、なんだかあまり効果が出ていないような気がする。結局 noflushd に戻した。
 /etc/defaults/noflushd に、

PARAMS="-n 5 /dev/hda -r /dev/sda -r /dev/sdb"

として、-r オプションを指定したところ、MO ドライブへの余計なアクセスはなくなった。しかし、本来 -r は読み込み専用ドライブに対して付けるオプションなので、それを MO ドライブに指定して大丈夫なのかが気になる。なお、ドキュメントには、-t 0 と指定すればドライブの回転停止をしなくなると書かれていたのだが、これを指定してもどういうわけか MO へのアクセスはなくならなかった。

 ここで改めて、noflushd の効果を確認してみた。hdparm を使うよりは少し効果があるような気もするが、それでも回転停止後数分で HDD が動き出していることが多い。HDD の回転制御について少し検索してみた。
 Linuxメモ セカンドシーズン 第08話 を見ると、bdflush なるもので キャッシュの制御ができるようだが、あまりうまくいっていないようだ。自分でも試してみたが、確かにあまりうまくいかない。玄箱/VINE化2/HDD関連 - Mashiki (Google cache) や Link Station/玄箱 Hack BBS - 【No.1633】のスレッド に、I/O を監視スクリプトがあったので試してみたところ、[kupdated] や [kjournald] が引っかかったが、対策が分からない。玄箱/VINE化2/HDD関連/意図せぬディスクアクセスの原因 - Mashiki が見れないのが非常に残念。
 I/O 監視スクリプトは、日時が常に出続けるのが嫌だったので、次のように少し書き換えてみた。

#!/bin/bash
CMD2=''
while true; do
  CMD=`ps -eo stat,pid,user,command | egrep '^[^ ]*D'`
  if [ "$CMD" ]; then
    if [ -z "$CMD2" ]; then
      date '+%F %T %Z'
    fi
    echo "$CMD"
  fi
  CMD2="$CMD"
  sleep 1
done

2006/01/01

玄箱/HG, autofs + samba

 autofs を使ってみた。/etc/auto.master と /etc/auto.misc を適当にいじるだけで簡単に使えるようになった。MO を /misc/mo で、USB メモリを /misc/usbdisk でマウントできるように設定してみた。USB デバイスを挿す順序によって、デバイスファイル名(/dev/sda 等)の順序が変わってしまうという問題があるが、それはとりあえず後回しにする。

# ln -s /misc/mo /mnt/
# ln -s /misc/usbdisk /mnt/

としたうえで、samba で /mnt/mo と /mnt/usbdisk を共有するようにしてみた。これで、\\kuro-box\mo\ や \\kuro-box\usbdisk\ にアクセスすれば、自動的にマウントされて、MO や USB メモリにアクセスできるようになった。また、一定時間アクセスがなければ自動的にアンマウントされる・・・はずなのだが、samba での接続が有効になっている間はアンマウントされないようだ。ちょっと不便かもしれない。samba の接続が有効になっているかどうかは、smbstatus コマンドで確認できる。smbstatus -S とすればアクティブな共有が表示され、smbstatus -L とすれば、オープンされているファイルが確認できる。

# smbcontrol smbd close-share <sharename>

というコマンドを実行することで、すぐに接続を切断することができる。接続を切断すれば、/etc/auto.master などで指定した時間が経てば自動的にアンマウントされるし、umount コマンドを実行して手動でアンマウントしても良い。(アンマウントしないと MO は取り出せない。)

玄箱/HG, scsidev

 USB デバイスを挿す順序に関係なく、MO ドライブなどを常に同じデバイスファイル名で使えるようにするために、scsidev を使いたかったのだが、/proc/scsi/scsi の書式が違うために、うまく動いていなかった。ソースをいじって何とかできないものかと調べていたところ、-p という隠しオプションがあることに気付いた。

# scsidev -p

として、実行してみたところ、/dev/scsi/ 以下に、/etc/scsi.alias で指定したデバイスファイルが自動的に作成された。-p を指定すると、/proc/scsi/scsi を利用せずに、scsidev が自力で SCSI デバイスをスキャンするようになり、これにより、/proc/scsi/scsi の書式の違いの影響を受けなくなるのである。scsidev -h としても、man scsidev としても、-p オプションの説明は全くなかったため、なかなか気付かなかった。自分で SCSI Inquiry を発行するプログラムを書かなければならないかとも思い、Linux での SCSI プログラミングのやり方も調べていたのだが、その必要もなくなった。なお、/sbin/scsidev はバイナリエディタで書き換え済みであるが、-p オプションを指定して /proc/scsi/scsi を読まない場合には、書き換えてあってもなくても動作に関係はない。
 murasaki を使って、USB デバイスの接続に変化があったときに、scsidev -p を実行するようにしておいた。これで、DOS フォーマットの USB メモリと MO を、玄箱/HG を使って共有するための環境がようやく整った。

 /var/log/daemon.log を見ると、USB メモリを挿していないときに、

Jan  1 10:13:32 KURO-BOX automount[978]: >> mount: special device /dev/scsi/usbdisk-p1 does not exist
Jan  1 10:13:32 KURO-BOX automount[978]: mount(generic): failed to mount /dev/scsi/usbdisk-p1 (type vfat) on /misc/usbdisk
Jan  1 10:13:32 KURO-BOX automount[978]: failed to mount /misc/usbdisk

などというメッセージが1分に1回ぐらいの頻度で表示されているのがかなり気になる。どうも FDclone を動かしているとこのメッセージが出るように思われる。しかし、/misc/usbdisk にアクセスはしていないはずなのだが・・・。
 さらに /var/log/messages を見ると、MO ドライブにメディアを入れていないときに、

Jan  1 19:04:50 KURO-BOX kernel: Device not ready.  Make sure there is a disc in the drive.
Jan  1 19:04:50 KURO-BOX kernel: sda : READ CAPACITY failed.
Jan  1 19:04:50 KURO-BOX kernel: sda : status = 1, message = 00, host = 0, driver = 08
Jan  1 19:04:50 KURO-BOX kernel: Current sd00:00: sns = 70  2
Jan  1 19:04:50 KURO-BOX kernel: ASC=3a ASCQ= 0
Jan  1 19:04:50 KURO-BOX kernel: Raw sense data:0x70 0x00 0x02 0x00 0x00 0x00 0x00 0x18 0x00 0x00 0x00 0x00 0x3a 0x00 0x00 0x00 0xd9 0x10 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00
Jan  1 19:04:50 KURO-BOX kernel: sda : block size assumed to be 512 bytes, disk size 1GB.
Jan  1 19:04:50 KURO-BOX kernel:  sda: I/O error: dev 08:00, sector 0
Jan  1 19:04:50 KURO-BOX kernel:  I/O error: dev 08:00, sector 0
Jan  1 19:04:50 KURO-BOX kernel:  unable to read partition table

というメッセージが5分に一回の頻度で出ているのが気になる。何が原因だろう。noflushd あたりだろうか。

うるう秒

 玄箱では ntpd を動かしているが、うるう秒に関しては何の対策もしていなかった。どういう動作になるか見ていたが、9時数分すぎに ntp -q で状態を確認すると、参照先の ntp サーバーよりも玄箱の時刻が1秒進んでいた。この時点で poll=64 だったので、64秒に1回サーバーの時刻を参照しているわけだが、しばらく待っても1秒進んでいる状態は解消されず、20分ほど経ってからようやく解消された。ntp のプロトコルはうるう秒に対応しているのだから、特に設定等をしなくとも、9時直前に 8:59:60 を挿入してうまいことやってくれると期待していたのだが、期待はずれだ。
 秋月の電波時計キット (Ver.1) は、9時すぎに見たときにはちゃんと正しい時刻になっていた。

玄箱 URL memo

 Linkstation - n0nt!tl3 - Linkstation/JTAG - n0nt!tl3 など。

spam

 先月の spam メールの集計結果。着信拒否にならなかった spam が 2065通。そのうち、@nifty の迷惑メールフォルダーでも Spam Mail Killer でも spam として認識できなかったものが 3通(0.15%)。

メール受信状況 2005/12


Copyright (C) 2006 K.Takata