随感録 (1999年3月)

 駄文。

1999.03.31(水)

 昼間,猛烈に眠たくなったので,夙川沿いを歩く。桜が一番の見時じゃない? 実に春めいて,華やぐねぇ。

1999.03.30(火)

 この日記の日付欄がInternet Explorer, Netscape Navigatorのいずれでも右に食み出して表示される。この辺りは次のように書いている。

<div class="text">
<table width="100%"><tr><td>1999.03.30</table>
</div>

 DIV要素のmargin-left分だけ出てるんだが,TABLE要素のcontaining blockの大きさはDIV要素のcontent edge(なんかpadding edgeまでとか書いてるが,そんなことないだろう)までで,その100%なんだから,画面から食み出ないと思うんだが,違うんだろうか。

 ちょっとDIVでborder-widthを1にしてみると,Internet ExplorerではDIV自体が右に食み出してるのが分かる。DIVのwidthを100%にすると食み出る。いや,DIVでwidthを指定すると,DIVのcontent widthをDIVのcontaining blockの幅の100%にする,という意味だから,マージン分だけ出ていいのか。

 そうするとDIVの親でwidthを100%にするか。えーっと,この場合,DIVの親になるのはどの要素だ? BODYのはずなんだが,効かないな。仕方ない,DIVを二重にしてみる。

 あちゃー,Internet Explorer,外側のDIVでwidthを指定すると,内側のDIVのcontent widthが変わるよ。うーん,なかなか意図した通りにならないなぁ。ダイナミックHTMLとか,そういう使えないところばっかり拡張せずに,HTMLとかスタイルシートとか安定した仕様をきちんとサポートしてほしい。

 ちなみにNetscape Navigatorは全く話にならない。Mozilla 5.0はどうなんだろう。

1999.03.29(月)

 Webの模様替えしてみた。ちょっちNetscape Navigatorでは荷が重いかも。

 書籍に紹介したいが,どうか,というメールが来てたが,あのー,メールで当日中に返事くれって,どうかしてるとしか思えない。

1999.03.26(金)

 彼氏彼女の事情,TV版最終回おめでとうー。うーん,でも,これってちゃんとオチちてるの?

1999.03.25(木)

 Webページを書くための補助ツールとしてQ's SP Wrapperをすでに公開しているが,これはHTMLの文法を検査するもので,リンクが生きているかは調べない。

 サイトの規模が大きくなってくると,死んだリンクが生じやすいので,これを検査するツールが欲しくなってきた。Vectorを漁ってみたが,ざっと見たところ,3本しかない。一通りダウンロードしてきた。しかし,HTMLエディタ,腐るほどあるな。

 調べる項目はだいたい次の通り:

  1. HTML 4.0の要素,属性を一通りサポートしているか
  2. URIのfragmentをサポートしているか(ファイルが存在するだけでなく,a/nameが存在するかも調べるか。また,a/name属性値の重複もチェックすべき)
  3. base/hrefを考慮して,リンク先を判断できるか
  4. ファイル名の大文字,小文字を区別するか。
  5. 属性値は<">だけでなく,<'>でも括られる。
  6. 内部リンクを絶対URIで指定していても判断できるか
  7. SSIをサポートしているか
  8. 内部リンクだけでなく,外部リンクも調べるか(ただし優先順位は高くない)
で,結果。といいたいが,いちいち全項目を調べるのはたいがい面倒。で,感想だけ。
  • 孤島発見器 2.511

     FRAME/srcを調べるのにIFRAME/srcを落とすのがちょっと謎だが,なかなか良好。絶対パスは自動的に外部リンクして扱う。

  • WebLink 1.70

     fragmentどころか,a/hrefを取りこぼしてる。漢字コードの変換を行っていないため,エンコーディングがISO-2022-JPだと(EUC-JP以外だと?)まともに検査できない。ちょっとこれでは,役に立たない。

  • HTML Link Checker 1.04

    ちょっち遅いか。cgiの解析に失敗してる。孤立してないのに孤立ファイルと判定したファイルがある。その条件は不明。



1999.03.24(水)

 このWebサイトを一部模様替えした。

 Windowsにおける1バイト文字集合は本当にJIS X 0201か?

 例えば「MS明朝」では,シフトJISの5/12は「¥」に作られている。だからシフトJISの1バイト文字集合はJIS X 0201ラテン文字集合に見える。Windows用の日本語フォントは皆,そのように作っているし。

 が,Windows 95に内蔵されたUnicodeとの変換表では,この字はU+005Cに変換される。JIS X 0201でOVERLINEとなる7/14もU+007Eに変換する。

 どうもマイクロソフトは,この字はそれぞれREVERSE SOLIDUSとTILDEと考えているようだ。すなわち,字形が円記号でも,それはフォントの誤りであり,字としてはREVERSE SOLIDUSだと。

 ふーむ,その方が話もスッキリする。例えばC言語で改行を表すのに「\n」を使うが,「\n」と「¥n」は違うから,同じように動くことの方が実はおかしい。フォントの字形デザインが変で,字自体はREVERSE SOLIDUSと見れば,同じ動作で正しい。

 ちょっと奇妙なのは,各フォントが7/14の字形をチルダに作っていること。フォントの制作者は,どの文字集合のつもりでデザインしてるんだろう?

1999.08.09追記
 WindowsのエンコーディングはシフトJISではないから,変換表が違って当然。「932」,「MS932」あるいは「cp932」という名前で,ISO/IEC 646 IRVとJIS X 0208,あとIBM拡張文字などいくらかのベンダー規定文字をエンコードしている。

 C言語の「\n」話は,規格で「\」についてコードではなく文字で規定していることによる。まぁ,実装は同じコードならエンコーディングが異なっていても問題は生じないが。



1999.03.23(火)

 生まれて初めて献血する。ちょっと自分の血を見て気分が悪くなった(笑)

 今日の取得物

  • 会計法規集第12版(中央経済社)
  • パタリロ!第67巻(魔夜峰央,白泉社)
  • X 第12巻(CLAMP, 角川書店)
 ついこないだ11版を買ったばかりなのに,もう次が出てやんの。パスしようかと思ったが,金融商品のは企業会計原則そのものをリプレースするから,やむなし。

 私のWeb,だいぶ混乱してきてるなぁ。構成を見直さないといけないんだが,どうしたものか。環境別に分けるのがいいか。

1999.03.21(日)

(2005.4.2) この日の内容は、加筆、修正の上、シフトJIS / EUC-JPとUnicodeとの妥当な変換表 に移動しました。

--
 生越昌己<mailto:ogochan@linux.or.jp>,<news:japan.comp.linux>でcoreメンバー以外を「下々」か。ふーん,そういうこと言うか,普通? 一体何様のつもり? プログラムを書く人間がそうでない人より偉いとでも思ってるのかしら。

 それに,www.linux.or.jpの運営に関わってるんだから,あんたのやることで,Linuxユーザー一般の程度と誤解される恐れがあるのよ。そういう人間がそんないい加減な態度でどうすんの? FrinBSD.ORGとか下品な,人の神経逆撫でするようなことしないで。っていうか,わざとやってるとしか思えない,敵を増やすのはやめて。

 同様に,最近気になったのはVine Linux Documents。Project Vineの構成員が全員Project JEの出,というのを売りにしてるが,じゃあ,PJEは破棄されたのか? 破棄するにしても,ほったらかしにするなよ。

 大きな子供,なんだろうか。

 プログラムを書ける人間が偉い,プログラムさえ書いていたらいい,みたいな考え方の人間ばっかりだと,日本におけるLinuxのいっそうの普及は遠そう。


1999.03.20(土)
 Q's Calc 1.11公開。1,000桁にするとやっぱり遅いねぇ。多分割り算が遅いんだろう。あとは代入か。代入はcopy on writeにすれば改善できそう。

 メールでVisual C++ランタイムについて質問を受けたが,メールアドレスが違うのか,返事が戻ってきた。で,ここに書く。挨拶,署名は省く。

>教えて下さい。vc5sp3rt.lzhをダウンするとexeになってしまい解凍できませ
>ん。
>どうしてでしょうか?開始エラーが解消出来ないのですがご教示下さい。

 勝手に拡張子が.exeになるのは,Webブラウザのバグです。エクスプローラ
で拡張子を.lzhに変更してもらうのが確実です。

1999.03.19(金)
 ビデオに録画してた『アーマゲドン』を観る。小惑星が地球に接近して,穴を掘って内部から爆破して軌道を変える話。けっこうホラーな感じでまとまってて,いい感じ。

 ちょっと最初の10分ぐらい切れてて題名が不明だったが,TV TABLEが便利。

 Q's Calcで組み込み関数の精度が全然でてないやん(*1),とか突っ込みを受けたので,自分で書いてみる。遅い,遅すぎる! うーん,関数が遅いというより,四則演算が遅いんじゃないだろうか。100桁ぐらいなら1テンポ空くぐらいだが,1,000桁になると30秒ぐらい掛かりますな(笑)

*1: C++の組み込み関数を使ってるので,そら精度でんわ。15桁ぐらい?


1999.03.18(木)
 昨日の続き。今日はJDK 1.2 on Windows<Java(tm) Technology Home Page>とomniORB 2.7.1 on Windows<omniORB2>での相互接続実験。

 昨日はオブジェクトリファレンスを文字列化して渡してたが,今日はNameServiceを使ってみた。Javaの方は何の問題もなかったけど,omniORBの方が落ちてしまう。仕方ないから,NameServiceのオブジェクトリファレンス文字列をファイルに保存して,それを利用した。格好悪い。

counter-jdk12-19990318.lzh   counter-omni-19990318.lzh

 ポストペットアイコンをこのページに表示しようと思ったが,メールアドレスが著作権表示の中だから書きづらい。


1999.03.17(水)
 CORBAで遊んでみる。CORBAは本で読んだだけで,実際に触るのは初めてなんだが,どうだろ。

 まず,LinuxマシンでORBitっていうのを使ってみる。うー,Cだと結構めんどくさい,ていうか仮想関数の記述に相当無理があるような。まぁ,ごにょごょやって,一応Linuxマシン内で通信できるようになった。あ,CORBAはリモートオブジェクトをクライアント間で共有するのか。ていうか,永続オブジェクト?

 WindowsマシンはJDK 1.2が入ってるので,idlファイルをコピーしてきて,idltojavaで*.javaファイルを生成さした。で,こちらもWindowsマシン内でサーバー,クライアント間の通信をできるようになった。

 CORBAだと異なる言語,異なるマシンで通信できるはず。JDK 1.2ってPOAがないみたいだったから,オブジェクトリファレンスを文字列化して,共有ファイルにしてみた。あれ,接続できない。はて,マシンを跨げてないのかな? うん? サーバーのホスト名はどうやって指定するんだ? いや,サーバーのホスト名っていうのが違うのかもしれんが。

 マシンを跨ぐのはできなかったが,プロセスを跨ぐのは恐ろしいほど簡単。今週末にでもWebでサンプルでも探してみようっと。

Linux/ORBit版   JDK 1.2版


1999.03.16(火)
 臓器移植に関して,落ち着いてきたので,ちょっと感想など。私はワイドショーはポンキッキーズの終わる8:22amからはなまるマーケットの始まる8:30amまでしか見ないので,単なる錯誤かもしれんが。

 今回の出来事で興味深かったのは,プライバシーどころか人道的に洒落にならん,とか言われてるのに,プライバシーに関する配慮が足りないと受け取られかねなかったかもしれない,とかいってたワイドショーの方々。すなわち,我々は完璧だったが,そっちが勝手に配慮が足りないと感じた,といっているわけで,さすが虫けら。まさに外道の中の外道。

 ただ,このような虫けら(あるいは「人に似た何か」か)の集合たるワイドショーが強大な力を持ってることに戦慄を感じる。人でないが故に,何を考えているのか,何に興味があるのか予想できないのが厳しい。番組を見てると殺戮に興味があるのは知れるが,それのみでなく,人の血に興味があるのかなぁ。

 あとは,臓器移植する場合に限って脳死も人の死と認めるのは,果たして一貫性があるのか,ということ。特定の目的の場合のみ死の範囲を広げるのは格好悪いなぁ,という気がする。ていうか,臓器を提供する人と提供しない人がいて,同じ状態でも一人は死んでいて,もう一人は生きている,というのは相当変。

 何を人の死とするかは,刑法とかの絡みもあるから,法によって規定するのはやむを得ないか。ちょっと血が出ただけで死として,とか言われても困るし。ただ,最終的に死をどのように捉えるかは判断能力のある各個人に帰すると見たい。命や心,人の死は個人的なもので,それは哲学や宗教の地平に通じるものでしょう,たぶん。法で心臓死,脳死とか,支障ない限り広く,選択肢を用意してもらう,あぁ,一応デフォルトも。で,デフォルト以外の状態で死亡としてほしかったら,適当に表明できるようにしてくれたらいい。それと臓器移植は本来的に無関係。

 ええ,私は脳死は私の死と思います。でも,臓器を人にあげるのは嫌です。脳死によって私の心は死ぬでしょうが,部品たる命だけ人の体で生きるのは想像できません。

1999.03.15(月)

(2005.4.2) この日の内容は、加筆の上、異なる文字コードのテキストを混在させるにはに移動しました。

 Q's Nicolatter for Linux Version 0.62(95,099バイト)

  • notepad: ポップアップメニューの中身を実装した。でもメニューバーとポップアップメニューでハンドラの引数が違うって,gtk+変。
  • roma: 文節戻しは美味くなさそうだったので,全戻しを実装した。
  • ライブラリ: 相対URIの解決がバグバグだったのを修正した。
 とりあえずダウンロード件数は2桁行くらしいが,Windows用と1桁違うよなぁ。いや,未完成なのに2桁って逆にすごいのかもしれないが。

1999.03.14(日)
 Q's Nicolatter,QILM,Q's Calcの新版を公開。

 今日の入手物:

  • カードキャプターさくら第8巻(CLAMP,講談社)
  • 税効果会計入門(中田信正,坂本道美編著,中央経済社)

1999.03.13(土)
 PostPet側の設定:

  • サーバーにあるメールを:残す
  • 未読メールのみダウンロード:する
 Datula側の設定:
  • メッセージを[ 7 ]日間サーバーに残す

 PPP接続してないときにPostPetで送信すると,またもやロスト。かなり難しいなぁ。


1999.03.12(金)
 さらに追記。いきなりペットをロスト(泣) Datulaで自動で読んできてる。PostPet側でインポートする手段がないから,復活まで待たないといけない。

 というわけで,DatulaとPostPetの両方ともサーバーに残すようにしてと。今度は大丈夫かな? あ,本当に「未読メールのみダウンロード」をチェックしないと二重読みするのね。

--
 追記。ペットはペンギン,名前は「データ」,飼い主は「Q」に。ペンギンで少佐はないかなぁ,っていうかちょっと古い?

 うーん,でもメーラーとしては弱いのね。CCをペットで遅れないのが苦しい。DatulaはPOPサーバーから削除する設定にしてるから,ポストペットで先に郵便受けを覗く必要がある。が,1日100通ぐらい流れるので大変そう。

--
 会合でポストペット2001のCD-ROMをもらう。何を悩むってペットの名前,どうしよう。

 日曜日に時間が空けば,Q's Calc, QILM, Q's Nicolatterの新版を公開するはず。現物はもうできてるんだが,書庫に纏めたりする残務がめんどくさい。

  • Q's Calc: ウィンドウのデザイン変更
  • QILM: ゴミ箱を実装した。
  • Q's Nicolatter: 「ゅう」で「ち」が入るバグを修正した。

 [Backspace]で文節戻しを実装しようと思ったが,はたして自然なインターフェイスになるんだろうか?

(1) <converted>入れたての<target>お茶</target></converted>
(2) <converted>入れたての</converted>おちゃ<caret>
(3) <converted>入れたての</converted><caret>
(4) <converted>長い</converted><caret>ながい<converted>話</converted>

(1) 適当に入力して変換するとキャレットが消える。

(2) [Backspace]を打って文節戻ししたところ。キャレットがあって,一部だけ変換された状態。

(3) [Backspace]を2(3ではない)回打ったところ。

 さて,問題はこの状態で[Backspace]を打ったとき,文節戻しするか無視するか,ということ。この場合は文節戻しにした方が自然か。

(4) む,ここで文節戻しにすると不自然? そうすると文節修正は修正する文字がなくなった時点で他のモードに遷移するのがいいか。例えば全変換。

 いや,自動変換で句読点で変換するようにすると,未変換(入力中)文字がない状態かつキャレットがある状態になるな。全変換に遷移すると,次の文字を打ったところで全確定か。うーん,それはそれでいいのかなぁ。

 単に文節戻しではなく,全戻しにすればいい,という話もあるか。はて。


1999.03.11(木)
 Q's Nicolatter for Linux Version 0.61(92,461バイト)

  • notepad: 検索ダイアログを書いた。(検索はできない)
  • notepad: マウスのメニューボタンでポップアップメニューを出すようにした。
  • notepad: 日付と時刻を挿入できるようにした。
  • roma: [Space]で変換,[→]で文節伸ばし,[←]で文節縮め,[↑],[↓]で文節移動,[Enter]で全確定を実装した。
  • palette: 記号表で罫線素片が表示されないバグを修正した。漢字コード表でフォーカスを得る方法が分からない。

1999.03.10(水)

(2005.4.2) この日の内容は、加筆の上、主要な日本文字の文字コードとMIME名に移動しました。

 何でも批判をするのは結構だけど,原文を読んでからにしたら? あぁ,私も気を付けないとな。


1999.03.08(月)
 ダイエーに買い物に行くと,ホワイトデーのセールをやってる。そういえばお返しを買わないといけないんだが,全然お金がない(泣)

 Q's Nicolatter(Windows版)の新版を公開。今度こそIE 4.0でスタートメニューをキーボードから操作できるはず。

 Q's Nicolatter for Linux Version 0.60(88,681バイト)

  • にこらった:[Backspace]キーでキャレット左削除,[Delete]キーでキャレット右削除できるようにした。
  • にこらった:左右カーソルキーでキャレットを移動できるようにした。
  • ライブラリ:メモリー・リーク・チェッカーを追加した。

 先週のローマ字仮名変換ロジックが,キャレット位置を考慮すると,いきなり破綻。例えば未変換文字列が

    jk<caret>jk
のとき,'a'を入れると
    jか<caret>jk
になり,ローマ字部分が分断される。この状態でローマ字部の両方についてさらに変換できるようにしないといけないから,バッファを一つしか持たない方法では全くダメ。

 そこで,ローマ字専用バッファを持つのをやめて,未変換文字列の各文字についてローマ字変換前,変換後の属性を持たせることにした。

 そうすると,'k' + 'a' = 'か'だから,バッファ内の文字数がローマ字変換によって変わる。で,各文字のバイト数の計算やらキャレット位置の計算をローマ字変換部がしないといけないので,結局,仮名漢字変換部と不可分ということが分かった。


1999.03.06(土)
 秀丸のバグに苦しむ。文字コードをEUCにしてるのに勝手にシフトJISで保存して,再び開くと指定していたEUCと誤判定して(気づかずに保存して)コメントが全滅。あぅ。

 文字コードはファイルの属性なのに,同時に異なる文字コードのファイルを編集しない,というおかしな仮定を持ち込んで,共用してるからか。

 まぁ,なぜLinux用のソフトを書くのにWindowsのエディタを使ってるのか,という話は置いといて。

 Q's Nicolatter for Linux Version 0.51(87,150バイト)

 ローマ字仮名変換部を全面的に書き直したり,いろいろ。

 制御機能(変換,削除,文節伸ばしとか)は,2段構えで定義するのが良さそうと思い,そのように定義ファイルを書き直した。次のような感じ。

begin-function
    # 機能名    未入力      入力中      全変換      候補一覧
    左削除      through     left-erase  revert      revert

begin-key
    # キー名    機能名
    BackSpace   左削除

 例えば同じ[Backspace]でも,IMEの状態によって機能が異なるから,その辺も指定できたらいいだろうと。'left-erase'とか(以下「機能片」と名付ける)は『にこらった』側で用意したものから選ぶことにした。機能名はユーザーが自由に名付ければいい。

 kinput2で用意してるのは機能名の部分で,機能名に対応する機能片はソースに直接書かれている。

/* cconv function dispatch table */
static void (*functable[][3])() = {
/* Function Name    Normal-mode selection-mode  symbol-mode */
/* convert */       convert,    sel_forward,    beep,
/* convert-or-fix1 */   convert_f1, sel_forward,    beep,
/* convert-or-sendback*/convert_sb, sel_forward,    beep,
/* convert-or-space */  convert_sp, sel_forward,    beep,
/* convert-s */     convert_s,  sel_forward,    beep,

 これだと,似てるが欲しい挙動と微妙に違う([変換]キーの挙動でよく見られるか)ときにソースを直接触る必要がありそうで,簡単で肌理細かなカスタマイズが困難とみられた。

 最近パソコン雑誌でLinuxが採り上げられることが多いが,何かの罠か? 現在のLinuxはデスクトップ分野だとWindowsより全く劣るが,今のうちに知らない人間に使わせて,悪い印象を植え付けようと。本当にそこまで考えているなら(マイクロソフトへの魂の売り方が一貫してて)逆に素晴らしいが,いや,何も考えてないんだろうなぁ。

 とりあえず「まともな」Webブラウザ,そこそこグラフィカルなメーラーがないと話にならない。


1999.03.05(金)
 gnome 1.0がリリースされてる。相当大きいのでCD-ROMに収録されるのを待つが,出来映えが気になる。画面を見る限り結構かっこいいが,日本語が通るんだろうか?


1999.03.03(水)
 gtk+ tipsを更新。


1999.03.02(火)
 Q's Calcの新版を公開。3桁ごとに','を入れるようにした。

 『空想非科学大全』が人型ロボットの操縦法について書いているが,果たしてそんなに難しいものだろうか? バランスの問題とか,すべて人間が操縦しようとするから困難なんであって,操縦者は移動の方向,向き,攻撃目標とタイミングだけ指定して,後は全部機械がするようにすればいいんでないかなぁ。いや,人型である必要があるか,という話は置いといて。

 ガンダムなんか,宇宙空間を相当縦横無尽に飛び回っていたから,だいたい次のような操作が独立してできないといけない,と思う。

  • 上下左右前後への移動
  • 上下左右前後への回転
  • 自身の移動,回転とは別に照準を合わせて,レーザー,ミサイル等を発射。

 照準は視点入力にすればいいから,手足で6軸操作できれば大丈夫。一番簡単なのはジョイスティック型にして,前後左右に捻る操作を加えれば片手で3軸操作可能。あぁ,足を使わなくても足りるやん。捻りながらボタンを押すのが大変なら,片手は2軸にして,足に回しても構わないかな。