Page Index
日付 題名 記事の要約
2003.3.10 文字列からファイルを開く秀丸マクロ 秀丸マクロ苦戦記
2003.3.13 ECMAScript 次世代JavaScriptに思い立った記
2003.3.16 プログラムっつのはだなぁ、 プログラムを騙る
2003.3.17 500mの驚異 ADSLスピードテスト
2003.3.19 IEにもHTML検証サービスを HTML検証機能実装記
2003.3.20 .htaccess .htaccess奮闘記
2003.3.22 ときめき驚きOpera7 Opera7導入感想記
2003.3.30 いまいち不快適ーボード 新キーボード購入記

 気が向いた時にこつこつ作り続け、ようやく初めての「まっとうな秀丸用マクロ」が完成。かれこれ2ヵ月くらいかかったような。なにせ始めたてゆえ、リファレンスと睨めっこしてる時間の方が長かったような。構造自体は JavaScript での経験を活かしてすぐに組めたものの、文字列を配列へ分割する split や配列の総数を知る命令がなくて、同等の処理を自作するのにめちゃんこ苦労してしまった。
 モノとしては引用符で囲まれた部分のパスを取得してファイルを開くというので、別にマクロなんか使わなくても標準の秀丸で装備している機能だったりする。

 しかし、この標準機能は「ファイル名と思わしき場所のカラー表示」をチェックしている時のみ有効だ。これが有効の時、文字をダブルクリックするだけでファイルを開け、Ctrl を押しながらだと関連付けを無視して秀丸で開ける(下図参照)。特にHTMLの編集では、リンクの href="" に書いたパスを使ってそのファイルを開けるから、非常に重宝するんだけど。

 さて、ここで問題がある。JavaScript をやってないとわからんのだけど、この言語はその構文上、ピリオドを非常に多く使う。document.write() とか window.open() とか。つまり、このピリオドを拡張子と認識してしまい、命令文を片っ端からファイル名と勘違いする。

[ 軒並み勘違いされている図 / 16KB ]

 まぁ勘違いする分にはいいのだけど、問題はこの部分を専用の色分け表示にしてしまうことにある。ファイル名の色分けは優先順位がかなり高いので、自分で設定した細かい色分け設定がすべて無視されてしまうのだ。自分用の色分け設定で表示するには、この機能をオフにしないといけないのだけど、そうするとダブルクリックで開けなくなってしまう。
 「文字列からファイルを開く」こと自体はタグジャンプを使うことでも代用できるものの、この機能は行頭からしかパスを認識しないので、イマイチ使い勝手が悪い。つまり、これは href="" の中にあるファイル等は開けないことを意味。

 で、出てくるのがこのマクロ。これを使えば、機能をオフにしていても問題がなくなる、画期的なマクロだ。(存在しないのが不思議なくらいだが、存在しなかったから自分で作るしかなかったんですな)

  1. 引用符(二重引用符でも単引用符でも可)の中にカーソルを置いてマクロ実行。あるいはパス部分を選択して実行。
  2. 引用符の中身(または選択範囲)がパスとして取得される。
  3. パスが http:// で始まってたらIEに渡して開く。IEのパスはレジストリから取るので、システムドライブがどこだろうが無関係。
  4. 拡張子を調べ、ファイルが画像だったら関連付けに従わせる。
  5. HTMLファイルの時は、秀丸かIEかを選ぶメニューが出る。
  6. それ以外のファイルでは秀丸で開く。
  7. もちろん ../ や、/ から始まるルートパスも認識。

 …と、絶対に便利な代物である。しかし、よく読んでいた人ならわかる通り、JavaScript ユーザー以外にはまったく無意味でもある。(Java も構文は似てるので使えると思うけど)

 まだ確認が充分でないのでバグはあるだろうけど、発展はまだまだこれから。(拡張子ごとに選択メニューを変えたり、自分でメニューを追加できるようにしたり、とか)

 マクロのソース

追記:2003.3.15
予想通り、このバージョンはパスを誤認識することが結構多いです。(いつか直そう)
追記:2005.1.16
2004.10.26に最初から組み直されて、いっぱしのマクロになりました。

ECMAScript

2003.3.13.Thu

 突然ですが、これからは ECMAScript(エクマスクリプト)の時代なのでございます。もう JavaScript の時代は終わりなのでございます。どちらも同じでは?などと突っこむなかれ。違うものではないですが、同じものでもないです。XHTML1.1 を採用するなら、これは避けて通れぬ道なのであります。
 ていうか、それ言うならXMLの方が先では…。

 というわけで、突然ですがDOMを勉強してきました。おかげさまで作りかけの Valid Edition、全部作り直し。俺はまだまだわかっちゃいなかったのでありました、と。こんな嘘HTMLなんか丸めてポイだ!

 (最初から完璧を求めてるといつまでも完成しないよ?)

 そして「ノード」の概念がいまいち飲みこめてない致命的な弱点を抱えたまま、俺は突っ走るのであった。向かうところ敵なしing。いや、XMLを学ぶべきなのは重々わかっておるのだけど。


 ある程度複雑なプログラムというのは、最初に骨格の部分を作り、それに肉付けしていくような感じで組んでいく。だから、プログラムの質においてもっとも重要なのは、基本設計、つまり骨だ。機能とか使い勝手とかは応用的動作であり、基本設計に張りついた肉であり皮なんである。
 これはアプリケーションのC言語でもWebページのJavaScriptでも、規模が違うだけで、構造は同じ。

 骨格である基本設計が歪んでいると、あとから生まれるものは全部歪んでしまうから、一番気を遣うべき段階だ。
 骨格はプログラムの根幹であり、肉の一部を修正すると他の肉に影響するため、修正はかなり困難だ。歪んだ骨格の上に立ったプログラムは、不具合が出ても対症療法的に直すしかなくなる。それが新たな不具合を呼び、どんどん間違いを積み重ねていくしかなる。
 こうしてできたプログラムは、表面上はおかしいように見えなくても、中身は悲惨なものだ。複雑に絡み合う不具合に、永遠に悩まされる。今のWindowsが、ちょうどそんな感じと言えよう。
 こうなったら、もう初めから組み直す以外に解決方法はない。

 で、siteCTSの旧バージョンであるPublic Editionがちょうどこんな輪廻に陥ってたので、基本設計を最初から組み直しているのだけど、これがなかなか煮詰まらない。肉付けしても、骨格の部分がころころ仕様変更されるので、その度に全部の肉を修正しないといけないのだ。
 この辺はもう俺の経験不足と言う他なく、どうしようもない。今の俺は知らないことが多すぎる。
 そんなわけで、Valid Editionの登場はまだまだ遠そうな感じだ。

 現時点でのsiteCTSのコアスクリプト(骨格部分)
 コアスクリプト 汎用フォームコントロールクラス

 その他のスクリプト(肉付け部分)
 掲示板 隔日日記 環境設定 サイトマップ パチョ奮闘記 ScrawlNotes 俺紹介++ FunnyHTML PrettyJavaScript ScribbleGarden Chains

追記:2003.4.25
このリンク群は、今の素人丸出し状態を記録に残しておこう、という意図によるものです。ちなみにこれの1ヵ月後の時点で、すでに跡形もありません。(結果的に「DOM化前のスクリプト」を残しておくことができたわけですが)

500mの驚異

2003.3.17.Mon

 久しぶりにADSLのスピードテストをやってみた。

speed.rbbtoday.com
Date: 2003/03/17(Mon) 22:31:59
Download: 5.75Mbps
Upload: 746.18kbps

 むぅ。6Mbpsまであとちょっとか。8Mサービスで6M出るっつぅのは、まさに路線長500mの成せる所業であろう。これは1秒間に750KBダウンロードできる速度であり、20MBを27秒でダウンロードできる速度であり、ダイヤルアップの187倍の速度だ。
 ここまで速いと、さすがにこれ以上の速度を望む気にならない。だって、1Mbpsで充分満足できる奴だから。(通信速度がいくら速くても、サーバーがついてこないと意味がない)

 1Mbpsといえば、実家時代である。YahooBBの8Mで実測1Mbps前後とだいぶ遅かったのだけど、路線長3790mという接続さえ危うい距離では、むしろよく頑張っていたと言える。

 YahooBBといえば、この頃は強引な顧客獲得作戦がかなりの不評を買っているご様子。なんでも、勝手に回線工事して契約を迫ってくるそうで。そ、それはすごいなぁ。
 まぁ実家の時は申しこんですぐ開通したし、トラブルは出たけど自分で解決できたし、速度も充分出たし、サポートなぞハナからあてにしてなかったから、そんな悪い印象を持ってなかったりする。(ちなみに今はeAccessである)
 とはいえ、YahooBBの良い話なんかMicrosoft並みに聞いたことないので、単に運が良かっただけなのだろう。

 Microsoftといえば、相変わらず元気である。WinMeに超特大のセキュリティ穴が見つかったり、WindowsUpdateで余計な情報も収集してたり、WinXPでパスワードを設定してもWin2000の起動ディスクがあると簡単に無効化できたり、タブレットPCにCtrl+Alt+Delボタンを付けられてしまったり、なにを血迷ったかパッチ適用のコツを説き始めたり、裁判所にJavaを実装するように強制されたり、ランダムで勝手に電話をかけたりフリーズしたりする愉快な携帯電話を発売したり、我々を楽しませることに余念がない。これほどエンターテイメントに優れた企業は、そうそうないであろう。

 エンターテイメントといえば、マルチメディアである。CD、DVD、MO、MD、すっかり影の薄くなったZIP、存在を忘れ去られたORBの他、フラッシュメモリを用いたストレージデバイスも普及してきた。まさに「マルチメディア」のご時世である。念のため断っておくと、この解釈は間違いである。
 せっかくCD-RWとEasy CD Creator 5 Platinumを持っているので、エロゲのデモムービーを集めて1枚焼いてみた。名付けて煩悩ディスク。これさえあればいつでも幸せな気分に浸れること間違いなし。

 エロゲのデモムービーといえば、よくできたものから駄作まで、観察してみるとなかなか面白い。基本的に外注に出したものは凝ってるようだ。(あたり前といえばあたり前か)
 作る側も大変だろう。なにせ素材は曲と数枚の絵のみである。おまけにプレステのゲームとは違って予算もない。「動き」はすべてエフェクトでまかなうか、かわいらしいポリゴンくらいしかない。
 当然、演出の腕前が如実に問われるので、ゲームやソフトハウスによってレベルの差が激しくなる。この辺を観察するのが面白いのだ。
 それらを踏まえた上で、WindBaldrForceのデモは良くできていると思う。(Windのデモは配布終了の模様だが)
 しかし、カラフルキッスの主題歌を「モーニング娘の新曲だよ」と教えていたら、俺は信じたに違いない。
 なお、これらデモムービーは平気で20MBとか言いやがるので、収集にはとにかくADSLが必要不可欠である。

 ADSLといえば、(最初に戻る)


[ Opera7で右クリックした時の画面写真 / 9KB ]

 Opera には、右クリックから「HTMLソースの検証」を選ぶと、W3C MarkUp Validation Service でダイレクトにチェックしてもらえる機能がある。いかなる達人であろうとも記述ミスは回避できないので、この機能は革新的と言ってもまだ足りない素晴らしいものだ。なぜなら、HTMLというのはちょっと間違えたくらいではエラーが起きず、普通に表示されてしまうため、ミスの発見が非常に難しいからである。

 かなりメジャーなので大抵の人は知ってると思うけど、日本にも Another HTML lint という、素晴らしいHTML検証サービスがある(ちなみに個人運営である)。W3Cのよりもチェックが細かく、素人が陥りがちな「それがなぜ不適切なのか」についての疑問も、親切な解説で解消してくれる。なにより、日本語である。

 また、HTML lint は、CGIセットをダウンロードしてローカル化することができる。皆が集中して利用するので、スキルのある者はローカル化して負荷分散に協力しているようだ。もちろん俺も ActivePerlAnHTTPd を組みこんでローカル化しているのだけど、いちいちダイアログからファイルを選んで検証するのは、やはり面倒くさい。なんとかして、IEでも Opera みたいな「右クリックから直接検証」ができないものだろうか?

 答えはyesである。IEは右クリックメニューに自分で項目を追加できるのだ。

 というわけで、新しいコンテキストメニューを作成。右クリックから「HTML-lintでチェック」を選ぶと、今見ているページを Another HTML lint へ送り、チェック結果を出してくれる素晴らしい機能だ。ダイアログからいちいちファイルを選ぶことなく、いつでも即座にチェックできる。もちろんローカル化したものだから、いくら使ってもWeb版に負荷をかけることはない。

 以下、その素晴らしいスクリプト。

<script type="text/jscript">
  window.open("http://127.0.0.1/cmn/cgi/lint/htmllint.cgi?URL=" + (window.external.menuArguments.location.href.replace("file:///F:", "http://127.0.0.1/").match(/^[^#?]+/)[0]) + ";V;T=15;Pedantic=on;E=cant-get-url");
</script>
ご使用の際は強調した部分を自分の環境に修正しないといけません。

 …1行かよ。

 なお、この引数だとチェックオプションが全開になるので、「たいへんよくできました」はまず無理(すべてのリンクにアクセスキーを仕こまないといけない)。デフォルトに絞るなら Pedantic=on; を削除。


.htaccess

2003.3.20.Thu

 一歩進んだWebサイト管理を考えると、嫌でも出てくる .htaccess。Webサーバーソフトで圧倒的なシェアを誇る Apache のコンフィギュレーション(設定)ファイルであり、Windows 的に言うところの「エクスプローラにおける desktop.ini」。

 このスキルを憶えると、403 Forbidden404 NotFound メッセージをカスタマイズできたり、ディレクトリインデックスを使えるようにしたり、デフォルトインデックスに index.html 以外を指定したり、SSIやCGIを設定したり、アクセス許可/不許可を与えたり、パスワードを設定したり、IPアドレスでアクセスを弾いたり、他サーバーへリダイレクト(転送)したり、さらにこういったことをディレクトリごとに設定できる。

 まぁプログラムではないから(書式さえ憶えれば)簡単なのだけど、設定を間違えると嫌なことになるから、想像でやるのは危険。セキュリティも絡んでくるので、ほいほい見せていいものでもない。それをわかってる上で今のところの .htaccess
 ※注意:普通のHPスペースでは .htaccess はまず使わせてくれんです。やってみたいならレンタルサーバーを借りましょう。

 で、これに伴い新たな問題が出てしまった。ローカルサーバーで使ってる AnHTTPd は .htaccess を無視する(だって他のソフトの設定ファイルだから)ため、デフォルトインデックスを index.html 以外にしている時、ページを表示できないのだ。
 もちろんファイル名まで指定すれば可能なのだけど、コンテンツの入口ページはやはりデフォルトインデックスで表示したいじゃないか。そうすると、各リンクも href="../wdn/" のようにしないといかん。(ファイル名を書けない)
 いや、Webではそれで正常に動くので、ローカル限定の問題ではある。

 そこで、この問題が起きるディレクトリにはダミーの index.html を置き、JavaScript でデフォルトインデックスへ飛ばすようにしてみた。さらに、SSIを使ってスクリプトをインクルードすることで、管理も省力化。いいかも。

 また、IEからURLを取得してローカルのファイルを開く拡張コンテキスト、ソースの文字列からパスを取得してファイルを開く秀丸マクロ、そしてローカルではダブルクリックでもファイルを開けるようにしているため、これも併せて修正。(パスがデフォルトインデックスの時は "index.html" を補完する仕様だったため)
 まったく、複数の言語が使えると便利なものである。

追記:
AnHTTPdでのデフォルトインデックスの設定はマニュアルに載ってないんだけど、色々やってみたらできました。カンマ区切りで列挙するだけです。
追記:2
.htaccess による設定が複雑になってきて AnHTTPd では不都合が多くなってきたので、2004年3月にWin版の Apache を導入。

ときめき驚きOpera7

2003.3.22.Sat

 CGIで他ページへリダイレクト(転送)する実験をしていたら、どういうわけか Opera6 が言うことを聞かない。ローカルの AnHTTPd もWebの Apache もちゃんとヘッダを返しているし、IEや Netscape では問題なく動くので、どうも Opera6 が Location: ヘッダを解釈してないと思われる。
 これができないと、俺の多くの構想がポシャってしまうのだが。

 そこで、出たてほやほやの Opera7 をインストールしてみた。わくわく。
 が、ここから先、リダイレクトとは関係ない話に飛ぶので、結論を先に言っておく。Opera7 では解消されていた。よしよし。

追記:
単に「Webサイトによるオートリダイレクトを有効にする」の設定がOFFになってたってオチ。

 さて、Opera7 である。なんだかすごいことになっている。結構オシャレだと思っていた Opera6 がダサダサに見えるほどのフルモデルチェンジ。画面で見比べる限りはそう違わないけど、マウスが乗った時とかのちょっとした視覚効果がいかにも今風。(WinXP風と言った方が適切だろうか)

 まぁ見た目はいいとして、なんつっても大幅な機能強化が素晴らしい。特に ElementObject.innerHTMLElementObject.style.display への対応は待ち望んでいたことであり、やっとやってくれたか!と喜ぶことしきり。
 まったく、これが使えないせいでsiteCTSのスクリプトの多くは Opera を刎ねていたのだ。今から対応作業に気が遠い。

 ・クリックするたびに下の表示を切り替え、ついでに click! の文字も書き換えるサンプル:
 click! ←非対応ブラウザではエラーが起きるか、なにも起きません。

 こういう高度な命令が平気で使えるようになったのは、すごいことである。事実上、「IEと Netscape」でなく「IEと Netscape と Opera」になったといえよう。

 しかし、実はこんなの小さいことだったりする。いや、俺には大きいのだけど、やはり真の目玉は<link> 要素のサポートに尽きると思うのだ。iCab・Linx・Mosaic などはとうの昔から対応していたが、ここでまたひとつ増えてくれた。IEと Netscape はいつまで遅れをとっているのだろう。(Mozilla は途中まで対応してたのに、なんでやめちゃったのだろう)

 機能強化としては少々地味だけど、これがWWWブラウザにもたらす影響は計り知れないと思う。ずっと昔からある重要な要素なのに、IEと Netscape がサポートしなかったばかりに、マニアック扱いされていた <link>。馬鹿な解説書ではスタイルシートを呼び出すタグなどと大嘘ぶっこかれたりする、かわいそうな <link>。(正しくは「呼び出す時にも使う」であり、これは後から追加された機能である)
 IEさえサポートすれば、この要素は飛躍的に普及するのだ。そして、大躍進を続けている Opera に先を越されたとあっては、王者のプライドが許すまい。きっとIE7で証明してくれることであろう。証明できなかったら、俺は今以上に Microsoft を嫌うぞv

 こういう動きを見ていると、少しずつ、確実に「正当なHTML」が普及してきているのを感じる。数年前のような独自拡張戦争もすっかり熱が冷め、どのブラウザも標準化に向かっているのだと。やっと、本来あるべきWebの姿が見えてきたんだろう。
 ちゃんとしたHTMLを勉強しておいて良かったではないか。Webの新しい時代が幕開こうとしているところを、肌で感じられるから。

 そして、それを担うのがXHTMLの役目だ。

 そんなことを考えると、やっぱsiteCTSもXHTMLで書き直そうかなぁなどと考えるこの頃。うーん。

追記:
ちなみに、この翌日にXHTML1.1化を正式に採択。

 俺はこてこてのキーボード派。文章やプログラムを書くのが主であるパソコンの用途において、マウスはネットサーフィン用でしかない(アクセシビリティの低いWebサイトが多すぎる現状、キーボードは使いにくい)。
 ゆえに、キーボードへのこだわりは人一倍強い(それが見当違いのベクトルを持っていたとしても)。

 すっかり懐かしい話になってしまったけど、2001.9.29で言っていた Office キーボードを購入。今までためらっていたのは、ひとえにキーバインダ猫ちゃんで使えるか怪しかったからである。キーボード派+デフォルト嫌いの俺としては、猫ちゃんが使えないキーボードなぞ、いかなる性能を誇っても無価値に等しい。
 …が、PS/2で接続すればちゃんと動くことを確認、速攻で買ってきた次第。すっかり移ってしまった時代は、キーボードも Bluetooth へと変貌させていた。そのおかげか、当時1万円近くした Office キーボードも、4000円ちょっとで購入できた。お買い得v

[ シングルタッチパッドの写真(Microsoftから拝借) / 23KB ]
なにが欲しかったって、「アプリケーションの切り替え」が欲しかった。

 流行りの静音式の割に、キータッチは悪くない。右Windows がないが、使わないのでまぁいい。最下部の Space まわりが大きくて押しやすいのも良い。ファンクションキー切り替えは、予想通り使い物にならない。最上部のワンタッチキーは、カスタマイズすればそこそこ使える(Excel 起動ボタンなんて誰が使うんだ)。

 それより、Sleep を押すと問答無用でスタンバイに突入するのはどうしたものか。おまけに無効にできない。WinXPにはスタンバイに入るとHDをクラッシュさせるかもしれないバグがあるのだぞ?(しかもこのパッチは「クラッシュするのを確認してから入れることを推奨」ときた。さすがは我らが Microsoft である)
 まぁその辺は電源管理の設定でなんとかなるからいいんだけど。

 もっと現実的な問題として、この Office キーボードには大きな大きな欠点がある。Delete まわりのキー配列が標準と違うのだ。

標準のキーボード
InsertHomePageUp
DeleteEndPageDown
Officeキーボード
HomeEnd
DeletePageUp
PageDown

 普通のキーボードのこの部分は横3列×縦2列だが、Office キーボードでは横2列×縦3列になっているため、縦に長い。おそらくDelete はよく使うでしょう、でも Insert はあまり使わないでしょう」という発想だと思うのだが、そのような余計なお世話がどこから出てくるのか、不思議でならない。キーボード使いをナメてるのか?
 それでも、配列が違うだけなら猫ちゃんでどうとでもなる。キーを入れ替えるなんて朝飯前だから。しかし、キーが1個足りないのはどうにもならぬ。

  • Shiftで選択
  • Shiftテンキー0でコピー
  • ShiftDeleteで切り取り
  • ShiftInsertで貼付

 …というシステムが出来上がっている俺にとって、遠くテンキーの上へ追いやられてしまった Insert は致命的なのだ。
 で、仕方なく以下のようにキー割り当てを変更。

変更後
Insertなし
DeleteHome
End

 PageupPageDownAltHomeEnd を同時押しすることにした。キーボードにホイールが付いてるからこそできた妥協。余った End は、TaskList を起動する割り当てを施す。
 こんなところだろうか。

 …と色々あるわけだが、肝心の「アプリケーションの切り替え」が思ったより使えず、結局はデメリットの方が目立ってしまい、これなら前の方が良かったかも〜なのであった。(でも悔しいから使う)