妙に少ない俺用の日付アンカー
日付 題名 記事の要約
2001.10.2 揺るがざる猫信者 猫まねきバージョンアップ
2001.10.4 嘘JavaScript講座 短縮系条件分岐
2001.10.6 来たれVGA! フレームリンクを実現する秘密の魔法
2001.10.7 かわいそな ShellIconCashe Let's 魔女狩り
2001.10.8 DVD-ROMの初舞台 贅沢な「ながら鑑賞」
2001.10.10 無駄な進化のパチョ奮闘記 パチョ奮闘記の微ニューアル
2001.10.12 初めてのCG? 新トップ絵作成記
2001.10.15 アプリケーションサイト 見た目系新スクリプト5種
2001.10.16 平らの浪漫(意味深) ディスプレイの秘密機能
2001.10.18 Bakaスクリプト第二弾 馬鹿フォントビューア開発記
2001.10.27 Bakaスクリプト第三弾 BakaExp作成記
2001.10.28 BakaExp オリジナルHTT開発記
2001.10.29 紆余曲折の果てに JScript体験記

揺るがざる猫信者

2001.10.2.Tue

 僕がこよなく愛する猫まねきが、うきうきわくわくのバージョンアップです。少し前から実装試験をやってた「いまどっちサービス」なる機能が、やっと正式に搭載されました。

[ いまどっちサービスの動作模様 / 1.4KB ]

 この機能は、こんな感じで「カーソル位置にIMEと CapsLock の状態を表示」してくれるもの。邪魔と言えばまぁ邪魔なんだけど、便利と言えばまぁ便利です。俺っちはHTML(辞書で変換する)とスクリプト(直入力)でIMEを切ったり入れたりするので、なんとなく便利な気分です。
 贅沢を言えば、もうちょっと右の方へ寄ってくれると助かるんだけど…。

 それより喜ばしいのは、ウィンドウ関係の機能が大幅に強化されたことであります。ついに「常時最前面に設定」「最前面を解除」が猫ちゃんだけで可能になってくれました。もうプラグイン代わりに使ってた Max Min Keyborad もいらないし、4.20みたいなバカコマンドを使う必要もないのです。

[ 最前面になってる秀丸 ]

 最前面設定にできない秀丸も、お好きなキー一発でこの通り。「なにかを参照しながら」って時に非常に便利です。
 あと、「横方向にだけ最大化」が俺的にMax便利かな。俺のエクスプローラは987×351と、ずいぶん横長なんで。(縦にふたつ並べる時に都合がいい)

 ますます便利になる猫ちゃん。さぁみんなも入れてトラブルまで一緒に招こうよ!

追記:2004.5.10
いまどっちサービスはWindows側の原因でIEが落ちる不具合が多発したため、この後のバージョンアップで使えなくなってしまいました。視線を移動させることなくIMEの状態を確認できて便利だったのに…。
追記:2005.5.30
WinXP SP2を入れればちゃんと動作するのを確認。

嘘JavaScript講座

2001.10.4.Thu

 もっと使える JavaScript のリファレンスはないものかと、本屋で物色したんです。俺好みのものは見つかんなかったのですが、代わりに立ち読みで新しい知識を増やしてきました。
 それは if 構文に関する情報。

基本形
if (a == 0) {
  処理A;
} else if (b != 0) {
  処理B;
} else {
  処理C;
}

短縮形
if (!a) {
  処理A;
} else if (b) {
  処理B;
} else {
  処理C;
}

 上の書き方と下の書き方、どちらも結果は同じですね。
 短縮形の存在自体は経験で感覚的にわかってたんだけど、正しい知識をやっと得られました。手持ちの本には基本形しか書いてないのよねぇ。

● かいせつ ●

 左右ともに「aが0なら処理Aを実行、aとbが0以外なら処理Bを実行、それ以外なら処理Cを実行」という条件式。実際には括弧の中が成立して true が入った時に処理A/処理Bが実行されます。ここが重要。
 なので、aに true が入ってるなら (a == true)(a) にできます。
 同様に、bに false が入ってるなら (b == false)(!b) にできます。
 (びっくりマークは「違う」というニュアンスで考えれば結構)

 また、aに truefalse が入ってなくても、以下のように判断されます。

  • 0が入ってたら false (数値)
  • なにも入ってなかったら false (文字列)
  • undefinednull が入ってた時は false
  • オブジェクトは全部 true

 今回お勉強したのは、この4項目。
 つまり、(a == 0) は「aが0だったら実行」、(!a) は「結果が false だったら実行(aに0が入ってれば false)」というわけで、どちらも同じ結果になるわけです。
 ただ、aに文字列が入ってたりすると (!a) では不完全なので、基本的には (a == 0) と書いた方が安全です。慣れないうちはバグの元です。(いつかやりそう)


来たれVGA!

2001.10.6.Sat

 VGA(640×480)対策をいよいよ本格的に始めました。VGAに対応するということは、ウィンドウを最大化しない人にも対応できるってことなので、あながち無意味でもねえンです。特にパチョ奮闘記(と Scrawl Notes)は、横に幅広フレームがある関係上、SVGA(800×600)でもだいぶ厳しいのです。
 一応9.12に仮対応はしたものの、フレームサイズを調整可能にした程度ではたいした解決になりません。抜本的な解決は「フレームなし」しかないのであります。

 でも、フレームをなくすとバックナンバーを選べないし、他のページへも行けない。かといって、ひと月ごとにリンクを張っていたらフレーム付きの時に見苦しいし、だいたい俺が面倒くさい。

 しかし! ひと昔前なら非常に悩ましき問題だったが! 今の俺は魔法使いなのダ!
 てなわけで魔法を組み始めます。キーポイントとなる詠唱は top.frames.length です。これはフレームの数を返すもので、なけりゃ0が返ります。
 つまり、if (top.frames.length) {......} とすれば、フレームがある時とない時で処理を分けられるって寸法ですネ。

 それで登場いたしました「フレームを消す」ボタン。フレームがない時は「フレームをつける」ボタンになります。
 なにより苦労したのは「フレームをつける」ボタンですか。
 消すのは単純に目的地のページへ target="_top" で飛ばすだけですが、つける時はそうはいきません。フレームのHTML(snpFrm.htm)に飛ばしても、常に「今月分」が表示されるんであります。あたり前ですね。

 なんとかして同じ月に飛びたい。押す人なんかいないのはわかっております。でも、それが「やらない理由」になるんなら、俺はこんな短期間でこんなに成長してないのです。
 でもまぁ、うまくいかなかったらこんなこと書かないわけです。

 そんな感じで、フレームをつける魔法の呪文を大公開。(関係ないとこは省略してるので、実際のスクリプトとは異なります)

ジャンプ元のボタン

<INPUT onClick="frmCng(top.frames.length,'0103')" type="button" value="フレームをつける">▲1

スクリプト本体

function frmCng(frmFlag,swapMth) {
  if (!frmFlag) { ▲2
    top.name = swapMth + "mainSwap"; ▲3
    top.location = "../snpFrm.htm"; ▲4
  }
}

今月分のファイル

if (top.frames.length && top.name.indexOf("mainSwap") != -1) { ▲5
  swapMth = top.name.substring(0,4); ▲6a
  swapURL = "../" +swapMth+ "/_" +swapMth+ ".htm"; ▲6b
  top.name = ""; ▲7
  location.replace(swapURL); ▲8
}

  1. ボタンを押す(今2001年3月にいると仮定)(▲1)
  2. フレームがなかったら(▲2)ウィンドウの名前に「0103mainSwap」とつける(▲3)
  3. フレームのHTMLファイル(snpFrm.htm)へ飛ばす(▲4)
  4. ワープ。フレーム内の今月分ファイルが読みこまれる。
  5. フレームがあって、かつウィンドウ名に「mainSwap」が含まれてるか確かめる(▲5)
  6. ジャンプ先のURLを生成する(../0103/_0103.htm が生成される)(▲6a と ▲6b)
  7. ウィンドウの名前を消す(▲7)
  8. 記事のフレームウィンドウを生成したURLへすっ飛ばす(▲8)

 ウィンドウ名を変数として扱い、他のページへ引数を渡すこの手法。すでに昔話と化した Scribble Garden スクリプトで考えついた手法。
 他の人はどうやって違うページへ引数を渡してんのか気になるけど、そんなスクリプトはお目にかかったことがないです。(素直にCGIを使うから)

 あと、上のセレクトボックスからでもフレームを消せるようにしました。でも今のとこは実行するとページの頭に戻されちゃいます。
 それだとあまり意味ないものの、JavaScript には「現在のスクロール位置」を取得できる秘密の呪文があるので、今度これを使ってチャレンジしてみましょう。お楽しみに。(?)

追記:2004.5.10
location.search は?」と思った貴方は賢い人です。しかし、この当時の俺はまだまだ素人だったので、その存在さえ知りませんでした。
発覚は12月14日です。

 ちなみにIE5.5以上とネスケ6以上では、右上にある「GTS」を押すとNCF版表示(IE4やネスケ4用)にできますが、これも同じ手法を用いております。
 具体的には

  1. ウィンドウ名に change と入れてリロード
  2. 実は読みこむ時に毎回ウィンドウ名をチェックしてる
  3. ウィンドウ名に change と入ってたら、ブラウザのマーキングをNCFにする
  4. 表示する時の条件分岐でNCF版に流れる
  5. 戻す時も同じ方法でGTSに戻す

 …という感じ。
 今はGTSもNCFもタイトルのとこがちょっと違うだけですが、今度のフルリニューアルでだいぶ差別化されるかと思います。


 アイコンが正しく表示されなくなっちゃいました。不思議なことに、BMPとJPG、GIFの3種類だけが未定義ファイルのアイコンになる。そう、関連付けされてないやつのアイコン。
 もちろんそんなヘマはしませんよ。関連付けはちゃんと動くし、DefaultIcon キーにも正しい値を入れてますって。
 なのに、この3種類のアイコンだけが表示されないのだ。

 とりあえず考えられる原因として ShellIconCashe がありますね。アイコンを少しでも速く表示するために作られるキャッシュファイル。これが壊れちゃってるのかもしれない。
 で、セーフモードで起動してこやつを消すわけです。グッバイ諸悪の根源。

 …直んねえし。
 困りました。原因不明です。そもそも「3種類だけ」ってのが謎すぎます。それじゃ諸悪の根源は一体どこにあるというのでしょう。

 とりあえずレジストリエディタを開き、この3種類と他のやつをじっくり比較してみます。
 比較してみますと、GIFのキーに ShellEx …。あれ、GIFに拡張シェルなんかあったっけ…。もっとよく見てみますと、JPGとBMPにもあります。アイコンが正しく表示されるPNGには、これがありません。
 さて…。

 ShellEx キーに記されたクラスIDを追うと、そこには驚くべき事実が待ってました。ファイルコンパクトにつながってるじゃありませんか。それはAI Soft社の圧縮解凍ソフトです。使い勝手が良いので入れてるんです。
 な…なんでアーカイバにつながってるのでしょうか。不思議です。謎です。考えます。ちょっと笑えます。笑ってる場合じゃありません。

 …あ、ちょっと待てよ。そういえば…なんか、こないだバージョンアップした時に、変な追加モジュール入れたな、俺…。そう、たしか…エクスプローラがなんとかってやつと、アイコンがなんとかってやつだ…。
 ちょっと待てこら。

 急いでファイルコンパクトの環境設定を起動(単体のexeになってる)してみますと、あります。見慣れぬ「アイコン」タブ。BMPとJPGとGIFを色々できるみたいですね。入れたのも憶えてないくらいですから、設定を施してるわけもありませんね。
 試しにこの追加モジュールをアンインストすると、アイコンは綺麗さっぱり元通り。
 諸悪の根源はなんと俺なのでした!これはびっくりだ!

 濡れ衣の果ての魔女狩りで召された ShellIconCashe に幸あれ。


DVD-ROMの初舞台

2001.10.8.Mon

 雪子ちゃんには DVD-ROM が入っております。7.5に入れました。もらいものなのでスペックもメーカーも値段もよくわからない謎ドライブですが、一応動くのでCDを再生するのに使ってます。(データ読み出し用としては信用してない)
 で、考えてみるとコイツ、DVDを再生できるんですよね。再生ソフトも(プリインストのが)あるし。ふざけてるとお思いでしょうが、わりとマジメに言ってたりします。

 なんてわけで作りました。レンタルビデオの会員証。何年ぶりだろう。10年ぶりくらい。
 借りてきたのは今や懐かしきアルマゲドン。やっぱパソコンで観るからにはCGな映画を…てな選び方です。(だったらマトリックチュでも借りなさいよ)

 いやぁ、DVDって便利ですねぇ。綺麗ですねぇ。ちっちゃいわりに頑張る雪子スピーカーと併せて、17インチでも結構なお手前でした。ホームシアターとか揃える人の気持ちがなんとなくわかっちゃったなぁ。(でも基本的には「映画は映画館で派」です)

[ DVDを観ながら秀丸の図 / 19KB ]

 しかし、なんというか、こうして書いてるかたわらで映画が流れてるのって、奇想天外に贅沢よねーって思いませんか。(でも Shift 問題が起きるので使えないんだけど)


 用語集とリンク集の挙動をかなり変えました。今まですべて新しいウィンドウで開いてたのを、記事からのリンクのみメインウィンドウ内で飛びます。リンクをすべてHTMLに戻したので、「右クリック→新しいウィンドウ」も使えます。

 また、リンク集で使える関連記事への遠隔操作もこれまで通りです。これまで通りにするために、倒れるほど苦労したんです。フレームのあるなしでスクリプトが全然違うんです。
 左フレームのボタン、メインウィンドウ側のボタン(フレーム有/無)、記事から開くリンク(フレーム有/無)と、いくつもの状況でボタンを非表示にしたり動作を変えたり…。

 他のページへ引数を渡せない JavaScript、こんな阿呆な手法を用いて渡してるサイトはやっぱ見たことないです。実はすごいことやってるのかもしれないネ。
 CGIを使えるようになったら、きっとURLの尻に ?mth=200110,frm=1,...... とかいっぱいくっついてくるんだろうね。


初めてのCG?

2001.10.12.Fri

 もう半月ばかりも更新してません。いいかげん尻を叩かねばなりません。最大の難関である「トップページの飾り絵」を描くのです。
 なんというか、初めて描いたCGが「ただ塗るだけで」丸々一週間もかかったんで、どうもイヤ〜な印象がついちゃってます。えっ…いいよ俺は手塗りで…なんて逃げ腰。
 しかしまぁホトソの使い方もよく知らず、1600倍に拡大して1ドットずつ範囲選択とかしてれば、ただ塗るだけでもそりゃ一週間とかかかるでございましょう。そんな丁寧に塗ってもWebじゃ意味ないのにね。

 とりあえず下絵を1枚ぺろっと描きます。身体は憶えてるもんです。前回の教訓もあって、「塗りやすい線画」にいたします。俺はどうも線のはじっこを閉じない癖があるので、いつもの調子で描けずに苦労します。
 また、透過色を使うのが決まっているため、セル塗りに合うような感じの絵にします。グラデーションを使うとPNGやGIFにできなくなってしまうのです。
 そして、初めての「CG用線画」が誕生。今までみたいな、すでにあるやつを取りこんだのじゃなくて、ちゃんと「コンピウタで色を塗るために描かれた」線画であります。ここまでパソコンを使いこんでいながら、意外な事実です。

 ところでわたくし、画像の加工自体はパ奮に貼る画面写真などで経験を積んでおりまして、2枚しか色塗りしてないわりにはホトソの使い方を憶えております。(もう1枚は Scrawl Notes に貼ってあるやつ)
 でも未だに「パス」というものはさっぱりでして、今回はこれを重点的に勉強することにしたんです。もちろんマニュアルもなんもないというか、あってもどうせ見ないので、すべて勘に頼ります。お約束です。

 …なんか勝手にぐにゅぐにゅ曲がって、全然思い通りにいきません。苛々しますね。
 しかし、あれこれやってるうちにアンカーポイントから線を引っ張るコントロールポイント、これを引き出した後にいったん離すと、片側の線だけ曲げられるようになるのを発見しました。
 ていうか、なんで引き出した直後は反対側まで曲がっちゃうんでしょう。
 ともあれ、そんな感じでなんとかパスの基本も憶えられました。「siteCTS!」とあるフキダシがこれの成果です。

 肝心の色塗りに関しては、特に書くこともございません。範囲選択して Ctrl+Delete、んでから色調補正。これの繰り返しです。なんてらくちんなのでしょう。これを基本スタイルにしたくなるほどらくちんです。

 かくして、新しい飾り絵が完成。もののついでで、壁紙仕様とかフォルダカスタマイズ用とか、色々作ります。これまたお約束ですね。壁紙仕様をご所望の方はアップしとくのでどーぞ。
 JPEGでも130KBあるけど。(BMPにしようとしたら2.4MBとか言われたのでやめた)
 作り方間違えて1024×748になっちゃったけど。(タスクバーの分を切り抜いちゃった)
 右クリックから「対象をファイルに保存」

 さて、あとはレイアウトとかをちょこっと修正すればアップできるかな…。


 かれこれ1ヵ月くらい前からちょろちょろ作ってる新生トップページ。
 長らくピンクの子ウィンドウのままになってるサイトマップ。
 このふたつが、ようやく完成の兆しを見せてきております。
 そして、更新停滞半月経過のsiteCTS

 サイトマップはだいぶすごいことになってるので、(IE5.5以上なら)わりと楽しめるかと思います。楽しむのが目的のページか?なんてぇのはどうでもいいことです。
 なんだかもうサイト全体がひとつのアプリケーションみたいになってきました。

 たまには見た目系のスクリプトも作ってみようかと思い、フローティングテーブル(2種) / フェードエフェクト(2種) / タカタカメッセージと、気前よく5つも作ってます。見た目系スクリプトは大体うざったく感じるものですが、もちろんご多分に漏れません。

新スクリプト5種

フローティングテーブル(サイトマップ)
プロトタイプ。scrollLeftpixelLeft という新呪文を憶えてきた日に速攻で作った。「スクロールに置いていかれたらホームポジションへ移動」という簡単なもの。※現時点の不完全版では実装されておりません。
フローティングテーブル(トップページ)
プロトタイプを改良して滑らかに動くようにしたやつ。「置いていかれたらホームポジションまでの距離×0.3ずつ移動」にしただけ。なので、ポジションに近づくほど遅くなる。ネスケ対応を施したものの、4.78では動くのに6.1で動かない…。
フェードエフェクト(トップページ)
メッセージが全部表示されたら黒→透明へフェードアウトして、文字だけ浮かび上がってくるやつ。CSSのフィルターを使っております。もうちょっと頭の良い組み方があるかも。
フェードエフェクト(サイトマップ)
現在位置がぼわぼわと点滅するスクリプト。トップページのやつと違ってページの表示中はずっと作動してるため、CPU負荷がちょっと高い。
タカタカメッセージ(トップページ)
メッセージがタカタカと表示されていくやつ。スクリプトのコアは、よくある「ステータスバーにメッセージをスクロールさせる」とかと同じ手法。先頭を走るアンダーバーに思いのほか苦労した。

 いやぁ、とにかくネスケ6.1ですよ。バグなのか仕様なのか俺が悪いのか知らんけど、まっとうに動きゃしません。なに考えてんのかさっぱりわかりません。あんまり苛々するので、4.xもろとも切り捨てる気満々みたいです。(もちろん閲覧自体はできるようにするけど)
 ていうか6.1はバグ多すぎ。6.01より多いのはどういうことだろう。

 まったく。ほとんどのタグをDHTMLにできるインプローラと、限られたタグでしか認識しないネスケ。たしかに <LAYER> タグは画期的機能ではあるものの、(日本での)ユーザー比8:2とあっては、「インプローラで認識されないタグは無用の長物」なのです。
 そして、ろくな参考書がなくても実践で憶えられちゃうインプローラのDHTMLと、4.78で動くのに6.1で動かないネスケのDHTML。
 本当、なにからなにまで圧倒的で困る。

 まぁ「WWWブラウザ」って本来そういうもんじゃないけど、これだけの機能を実現するために多くのプロフェッショナルが徹夜で苦労してるんです。使ってあげたいじゃあないですか。
 いやいや、素人を騙すならインプローラに限ります。
 かくしてsiteCTS、ネスケだけではなくCPUにまで厳しいWebサイトになっていくのでありました。嫌だね、こういうとこ。(トップページやサイトマップは長居するページじゃないから許せ)

追記:2004.5.10
このスクリプトはPublic Editionで見られます。
これより後に憶えたことを使って改良されているので、Netscape6でも問題なく動きます。

 雪子ちゃんはとっても綺麗なダイヤモンドトロンのフラットディスプレイなんだけど、「FPM」なんていうボタンがあるんですな。
 こいつを押すと嘘みたいなことになります。色がとっても鮮やかになって、肌色がとにかく綺麗。それだけでもう「あぁ、Fine Picture Mode の略ね」と簡単に読めます。
 スクリプトを組んでる時とかは意味ない(というか、普段のおとなしい発色の方が目に優しい)けど、お絵描きサイトを見てまわる時なんかは重宝してます。

 なんてこたぁいいとして、うっかりONにしたまま色塗りすると大変なのが厄介です。

 そうですね。うっかりしてました。知らないうちにONになってました。こないだのCGはONのまま塗ってしまいました。OFFにしたら色くすみの素晴らしいこと。危ないなぁもう。


 9.12に作った BakaViewExp に続いて、BakaFont2 というのを作りました。ページを作る時に書体や色で迷うことが多いんで、使い勝手のいいフォントビューア(?)が欲しいな、と思ったんです。
 JavaScript って「ブラウザでしか動かない」とよく言われますが、逆に言えば「ブラウザで動かせる」なんだよね。いちいちツールやソフトを起動しなくても、インプローラのままで実行できる。デメリットも時にはメリットシャンプー。

 ま、それはいいとして、なんか初めてのような気がします。「まっとうな返り値をもつ関数」を使ったの。正確に言うと「値を返す関数を作る必要ができた」ってところで。
 実はsiteCTSにあるスクリプト、ほとんど全部が返り値もなにもない「やるだけ関数」で、せいぜいリンクにブーリアンを返すのが関の山だったりします。
 これは俺のレベルの低さもあるけど、はっきり言ってネスケのせいです。いや冗談抜きで。インプローラ、ネスケ4.7、ネスケ6.1のどれもで動くスクリプトを作るのは、すごく難しいんです。

 BakaFont は自分で使うために作ったので、インプローラの5.5で動けばOKです。JavaScript だろうがCSSだろうが、なんでも使い放題です。
 日頃からネスケに阻まれてやりたいこともできず苛々してる俺にとって、それはどれだけ気持ちの良いことでありましょう。ネスケのことさえ考えなきゃ、サイトマップみたいなスクリプトは簡単に作れるのに。

 そうしてできた BakaFont、自分用だけあって自分用の使い勝手にこだわっております。

  1. プレビューしたい文字列をコピーしてリンクバーから起動
  2. テキストエリアにペースト
  3. 左上の「HTMLで作成ボタン」を横切る(オートフォーカスされる)
  4. Tab キーを使ってキーボードから入力

 という感じで使います。微調整はマウスの方が楽なので、マウスモードというのもございます。
 色の指定が16進数の時は#を省略できるようにしたため、「フォームに入ってる色の値は16進数か」を識別する関数が大変でありました。行程さえ決まれば楽なんだけど。
 てなわけで、16進数識別関数を掲載して本日の講義を終わりたいと思います。

col = フォームに入ってる文字列
noHash = noHashSel(col.toLowerCase());
if (!noHash)
  col = "#" + col;

function noHashSel(vle) {
  var txts,hashFlag;
  txts = "ghijklmnopqrstuvwxyz";
  if (vle.charAt(0) == "#" || vle.length != 6)
    return true;
  else {
    for (i = 0; i < txts.length; i++) {
      if (vle.indexOf(txts.charAt(i)) != -1) {
        hashFlag = true;
        break;
      }
    }
  }
  return hashFlag;
}

 「頭に#がついてない」「6文字である」「g〜zが1文字もない」だったら、頭に#をつけるだけ。
 なので、A〜Fのみで構成される色名では誤認識されるのがポインツだね。俺は16進数しか使わないからいいんです。(存在しないようだし)

追記:2004.5.10
実物は Public Edition にあります。

 …やぁ。これまた空きましたねぇ。パ奮が始まって以来、中3日空いたのが1回あるだけだったのに、8日ですよ。新記録というより異常事態ですよ。
 いやもう、パ奮の画面を見るのも久しぶりです。未だに新しいトップページもサイトマップもお披露目してないです。俺はそろそろ見飽きてきたというのに、Web側のsiteCTSは旧バージョンのまま時間が止まっております。

 その間なにをやっておりましたかといいますと、表題の通り第三弾を作っておりましたのです。ひょんなことがきっかけで、BakaFont2を作った翌日にはすでに取りかかっておりました。
 最初は先輩二人のように「半分冗談」で作ってたんだけど、あれこれやってるうちに予想以上の出来になってしまいまして、本腰を入れることにしたんです。
 当然、siteCTSに充てる時間がなくなるわけです。しかも最後の調整を残したままだったんでアップするにできず、かといって一点集中型の俺はうまく分担もできず、どうせならコイツを完成させてからドドーンといってやろう!と目論んだ次第。

 明日に続きます。


BakaExp

2001.10.28.Sun

 「Hyper Text Template」って知ってますでしょうか。拡張子は .htt で、エクスプローラがフォルダをWeb表示する時に使うテンプレートなんですけど。
 ほら、ファイルを選択すると、左にデータとかサムネイルとか出るじゃないですか。右クリックから「フォルダのカスタマイズ」で色々選べるじゃないですか。あれですよ。

 このテンプレート、自分で作ればエクスプローラをお好みに仕立てることができたりします。Windows のオブジェクトを扱うので勝手は少々違いますが、基本はHTMLなので、Webページ作りに慣れてる人なら結構簡単にできます。
 でも、HTTファイルに手を出している人はほとんどいないようですね。カスタマイズ系サイトは今までちらほら見てきましたが、せいぜい左パネルの画像をすり替えるくらい。

 そりゃあ見た目だけなら画像の交換だけでも充分だし、高機能が欲しいならオンラインソフトに素晴らしいファイラがゴロゴロしてます。わざわざ危険を冒してまでHTTファイルを編集する人なんていないんでしょう。
 ところがいたんですよ。ここに。

 そもそも、パソコンのOSとは「ファイルを管理する」ことから生まれた(、と本で読んだ)んです。とすれば、エクスプローラを始めとする "ファイラ" という存在は、もっとも基本となるアプリケーションとなりましょう。
 すなわち、カスタマイズ大好きっ子を自負するのであれば、これはもっともこだわるべきファクターであり、オンラインソフトにばっか頼ってるわけにはイカンのです。

[ BakaExp画面写真 / 20KB ]

 というわけで、これがパ奮を異常事態に陥れてまで作った「BakaExp」です。デモ版を仮設ゆきこのおへやに用意したので、機能の方はそちらをご覧あれ。
 もちろん、俺独自の馬鹿機能も搭載しております。たとえば、アドレスバーを見るとここは「YN」というフォルダのはずですが、左では「ゆきなん」となってたりします。

 BakaExp の特長は、どこでもパネルとかフルパスリンクとか一発ボックスとか色々ありますが、一番大きいのは「エクスプローラの機能を拡張するスクリプト」ってとこでしょう。つまり、「いつもの使い慣れたやつがちょっと便利になる」てところ。
 エクスプローラがもともと持ってる機能を使ってるので、プラスはあってもマイナスはないのであります。

 明日に続きます。

追記:2004.5.10
BakaExpは後に「ExpExp」という名前になり、WinXPの導入後、開発中止の惨劇に遭います。
なお、BakaExpのデモ版は Public Edition に保管されてます。

紆余曲折の果てに

2001.10.29.Mon

 BakaExp は非常に良い経験となりました。
 エクスプローラが持ってる機能を活かすために、Microsoft 様純正のスクリプトを解析する日々。プリントアウトして持ち歩き、昼飯を喰いながら解析する日々。それこそ見たことない命令のオンパレードで、「これ本当に JavaScript なの?」と漏らす日々。
 下手な解説サイトよりよっぽど勉強になります。

 そのほとんどは間違いなくインプローラ専用なんでしょうが、BakaExp はエクスプローラ(=IE)で走らせるスクリプトだから一向に構いません。しかも WinMe のイメージプレビュー機能を使ってるので、Win98 や Win2000 まで射程外。

 試行錯誤の結果にゲットできた命令の中で、革命的に役に立ったのが「クライアントプロパティ」でした。たとえば「オブジェクト.clientWidth」とした場合、そのオブジェクトの幅を取得できるんです。これがなかったら、左パネルの出し入れ機能はかなり難しかったでしょうな。

 実際のスクリプトから抜粋すると、

 leftPanel.style.height = document.body.clientHeight - topPanel.clientHeight;

 という感じで、

 左パネルの高さ = ウィンドウ(ドキュメント)の高さ - トップパネルの高さ

 という意味です。
 横幅も同じように、「左パネルの幅 = ウィンドウの幅 - 右パネルの幅」とします。

 client プロパティに入る数値はその時々によって変わりますから、こうすればどんなウィンドウサイズにも対応できるってわけです。

 あるいは、expression() という命令もナカナカ強烈。通常、CSS(スタイルシート)と JavaScript は別々に書かないといけませんが、この命令を使うと <STYLE> タグの中に直接 JavaScript を書けるんです。
 よって、こんなことが可能になります。

「もしフレーム付きだったらテーブルの幅を500に、なかったら800に設定」

<SCRIPT type="text/JavaScript">
var widthSelect;
if (top.frames.length)
  widthSelect = 500;
else
  widthSelect = 800;
</SCRIPT>

<STYLE>
  TABLE { width:expression(widthSelect);}
</STYLE>

 まぁこれはだいぶ特殊な命令のようで、そのまま素直に書いても動いてくれないですけど。

 また、フルパスリンクを生成するためには、そのフォルダのフルパスをゲットしなきゃなりません。これは %THISDIRPATH% という秘密の魔法を使うとゲットできるんですが、JavaScript では使えないんです。
 そこで、BakaExp では隠しフォームに %THISDIRPATH% を入れておき、JavaScript はそれを見て間接的にゲットする…という方法を採用してます。
 ところがどっこい、完成も見えてきた頃合い、解析の結果によって

ファイルリストオブジェクト.Folder.Self.Path

 で JavaScript から直接ゲットできることが発覚したりもしました。(面倒くさいのでそのままですけど)

 これら数々の「エクスプローラ用 JavaScript 命令」は、Ver.4で行われた "インプローラとエクスプローラの統合" で生まれたんでしょう。きっと。
 こんなことではゲイツさんに「ウチの JavaScript はホームページ専用のホビースクリプトじゃないのよ?」などと言われてしまいそうです。

 紆余曲折の果て、仕様変更による三度の作り直しにもめげずに生まれたBakaExp。
 今のところは公開する気満々だけど、色々なテスト(ちゃんと他のPCでも動くか、とか)が終わってないので、飽きないうちに完成させたいものであります。オンラインソフトっぽく言えば「これからアルファテスト」ってとこで、俺の近辺にいる3人の WinMe ユーザーは、かわいそうに、最初の犠牲者となります。
 ともあれ、自分で使う分には支障ないとこまで仕上がってるんで、早くしないと…飽きる。

追記:2004.5.10
「エクスプローラ用 JavaScript 命令」でなくて「JScript」です。