ソースの表示を TeraPad で!

ホームページを作るのに欠かせないのが HTML ファイルの ソース ですね。最近では、某IBM社から出ているホームページ何とかというソフトがよく使われていて、ホームページは作るけどソースのことはよく分からない、なんていう人もいるようですが。(^^;)

普通 Windows だとどの機種でも HTML ファイルの [表示(V)] をクリックし、垂れ下がったメニューの中から [ソース(C)] をクリックしますと、メモ帳でソースが表示されますが、メモ帳はテキストエディターとして最低限の機能しか持っていないので、もの足りません。間違えた時に、ひとつ前までしか戻れない。文字を選択(反転)し、ドラッグでの移動、コピーができない。日本語文字コードが Shift_JIS にしか対応していない。それに初心者に、ソース編集によるホームページ作りを教えていて一番困ることは、ソースをクリックする度に、同じ HTML ファイルのソースが表示され、同じ HTML ファイルのソースが複数出てしまうことです。タスクバーが同じ HTML ファイルのソースであふれてしまいます。(^^;)

そこで初心者に限らず、ホームページをテキストエディターで作るという方々に、お勧めしたいテキストエディターがあります。といっても、既にホームページをテキストエディターで作っておられる方々は、ご存知の方がほとんどだと思いますが TeraPad というフリーソフトです。何でこれがフリーソフトなの?。と疑問を持つほどの高機能満載のテキストエディターです。

TeraPad のインストール手順と、クリックするだけで [ 表示(V) ] → [ ソース(C) ] や HTML ファイルの表示画面上で右クリックして出てくるメニューの [ ソースの表示(V) ] をクリックすると TeraPad でソースが出てくるようにレジストリを設定してくれる terapad.reg ファイル作って公開中です。ぜひご利用ください。(^^;)
http://kuma-pan.net/kaisetu05.htm
http://kuma-pan.net/kaisetu06.htm

リファラーの文字化け対策

だんだん寒くなって来ましたね。先日インフルエンザの予防接種を受けて来ました。「今年は鳥インフルエンザが変化して、人にうつるようになったものが流行るかもしれないとか色々騒がれているので、受けておきます。」 とお医者さまに言ったら、「今回のインフルエンザの予防接種は、鳥インフルエンザには全く効きません。」 と言われてしまいました。(^^;)
それで、「あ?、バソコンのウィルスのワクチンと同じですね。」 と言ったら、先生は笑って 「その通りです。」 と仰っていました。何でもパソコンに例えると分かりやすくなっている自分が怖いです。(^^;)

自宅に設置しているサーバーで、色々なCGIプログラムを日本中の人にレンタルしています。今のところ掲示板から始めまして、画像スペース、webアルバム、メール送信CGI と種類を増やしましたが、今度アクセス解析CGI をレンタルしようとレンタル用のアクセス解析CGI を製作中です。製作といってもわたしのはいつも Kent さんの作られたものを元に、色々と改造をしているだけなのですが...。

アクセス解析CGI で一番苦労するところは、リファラーの処理です。普通のサイトからのリファラーでしたら、アルファベットとハイフォン、アンダーバーくらいなので問題ないのですが、検索サイトからのリファラーですと、リファラーの中に日本語、カナ・カタカナ・漢字が含まれます。それを読める日本語に処理したとしても、今度はそれでリファラーへのリンクを張ると、文字化けして上手く飛んでくれなくなります。それでアクセス解析CGI のページに表示するためのリファラーと、<a href="?">? の値とを別々な形でログファイルに記録することにしました。

■ プログラム自体の文字コードを euc-jp にして作る
今回、プログラム自体の文字コードを euc-jp にして作ってみました。ページに表示する方のリファラーは、Perl が 5.8 になって Encode.pm が使えるようになったので、下記のスクリプトを使って euc-jp に変換してログファイルに記録。<a href="?"> の値としてのリファラーは、アクセス解析対象ページに書かれた JavaScript によって、アクセス解析プログラムに $ENV{'QUERY_STRING'} の値として届けられたものをそのままログファイルに記録しました。

これでできたできたと、しばらくの間喜んでいたのですが、サーバーのエラーログをチェックしていましたところ、毎日何回かこのアクセス解析プログラムの インターネットサーバーエラー として記録されているものがあることに気がつきました。そのエラーログの内容は、ひとつでなく、いくつかありました。
  • Premature end of script headers
  • Can't locate object method "name" via package "shiftjis or utf8" (perhaps you forgot to load "shiftjis or utf8"?) at ...
  • Can't modify non-lvalue subroutine call at ...
  • Unknown encoding '0' at ...
それは検索サイトの決まった検索語句のページから来た時に、起こっていることが調査で分かりました。
  • http://search.yahoo.co.jp/search?p=HPの作り方&ei=UTF-8&fr=top&fl=0&vc=&x=wrt&meta=vc=
  • http://search.yahoo.co.jp/search?p=dion+cgi+カスタマイズ&ei=UTF-8&fr=top&fl=0&vc=&x=wrt&meta=vc=
また、 Google や MSN などからのリファラー時にもエラーになっているようでした。

これは悩みました。解決までにけっこうな時間を費やしました。結局、何の文字コードか分からない $stringeuc-jp に変換する下記のスクリプト中の
use Encode qw/ from_to /;
use Encode::Guess qw/ euc-jp shiftjis /;
$enc = guess_encoding( $string );
from_to( $string, $enc->name, "euc-jp" );


guess_encoding( $string ) で文字コードが判らなかったものに対して変換処理が行われず、下記の URL デコードの処理が行われた。
$string = s/%([a-fA-F0-9<][a-fA-F0-9])/pack("H2", $1)/eg;br> $string = s/&/&amp;/g;
$string = s/"/&quot;/g;
$string = s/</&lt;/g;
$string = s/>/&gt;/g;
$string = s/\r|\n|\0//g;

で、その中に、ログファイルに記録すると問題が起こるものがあり、その分がインターネットサーバーエラーとなっていたのか、あるいは、$enc の値が判らないのに、無理に
from_to( $string, $enc->name, "euc-jp" );
をしようとしてエラーが出ていたのか...?。だとしたら、
if( ref $enc ){
from_to( $string, $enc->name, "euc-jp" );}

としてあげればエラーにはならないのかも知れません。
あるいはこの Encode のスクリプト自体が機能しておらず、euc-jp 以外のリファラーは皆エラーになっていたのか...。追々検証してみたいと思います。(^^;)

その後、主な検索エンジンの文字コードを調べ、
主な検索エンジンの文字コード
 UTF-8
  ・ MSN
  ・ Google
  ・ Yahoo UTF-8

 euc-jp
  ・ OCN
  ・ goo
  ・ Yahoo
  ・ infoseek
  ・ Google euc-jp

 shiftjis
  ・ nifty
  ・ biglobe
  ・ exite
  ・ flrshEYE

リファラーの文字の中からキーワードを拾い出し、それが含まれていたら UTF-8 といった感じにリファラーの文字コードを分けて euc-jp に変換する形にして、
if ($string = /UTF-8/i || $string = /msn/i || ($string = /google/i && $string ! /euc-jp/i)) {
use Encode qw/ from_to /;
from_to( $string, 'utf8', 'euc-jp' );}
if ($string = /nifty/i || $string = /excite/i || $string = /SJIS/i || $string = /biglobe/i) {
use Encode qw/ from_to /;
from_to( $string, 'shiftjis', 'euc-jp' );}

ようやっとインターネットサーバーエラーが出なくなりました。注意する点としましては、上図にもありますように、同じ検索エンジンでも文字コードを複数使っているという点です。(^^;)

■ プログラム自体の文字コードを UTF-8 にして作る
プログラム自体の文字コードを UTF-8 にする方法は、何回か試し上手く行かなかったのですが、今回下記のスクリプトを使ってみたところ上手く行きました。

use Encode qw/ from_to /;
use Encode::Guess qw/ euc-jp shiftjis /;
$enc = guess_encoding( $string );
if( ref $enc ){
from_to( $string, $enc->name, "utf8" );}


shiftjisUTF-8 のリファラーもきれいに文字化けせずに表示されました。ただし、euc-jp のリファラーで、検索語句と語句の間を全角空白で分けている場合、そのリファラーを euc-jp と判別できないので、
elsif ($string = /\??/ && $string ! /UTF-8|google|msn/i){from_to( $string, "euc-jp", "utf8" );}
の部分を追加しました。この部分がないと、全角空白は %A1%A1 → ?? となってしまいます。

年賀状のインクジェット葉書もおば~ちゃんの分と合わせて100枚買いました。お歳暮の手配もせねばなりません。何しろもう11月19日ですから...。焦ります。(^^;)

先月の14日に、東光寺緑地で撮ったハハコグサです。

FreeBSD で Namazu を使う

以前ホームページ作成の解説で有名な、とほほのWWW入門さんより、サイト内検索をしてくれる WwwSearch という CGI プログラムを頂いて設置していたのですが、Perl5.8 にしたせいか上手く検索してくれなくなっしまいました。
それで検索CGI で有名な、Namazu を導入してみることにしました。かねてからそうしようと思っていたのですが、何か難しそうで敬遠していました。普通の CGI プログラムと違って、コンピュータのアプリケーションとしてインストールする形のようです。で、うちのサーバのOSは FreeBSD4.11 なので、FreeBSD のケースでインストール・設定を解説されているサイト探しから始めました。

幸い 九州大学 大学院システム情報科学研究院 牧之内研究室 さんのサイトの WWWサーバで namazu による全文検索 のページに割りと分かりやすく書かれていましたので、今回参考にさせて頂きました。m(_ _)m

サーバ機は3台あるのですが、OS、アプリ、ユーザ設定など皆同じにし、定期的に稼動機よりデータのバックアップをとっています。3台の中の稼動していないものに、試験的にインストールしてみることにしました。

その手順を忘れないためにも、おさらいしておきます。
まず、namazu 本体のインストールの前に、namazu が動作する環境を作っておいてあげる必要があります。
■ textproc/xlhtml
  エクセル(xls)データをHTML形式に変換/コンバートすることができるツール
■ textproc/wv2
  MS Word ファイルを閲覧するためのアプリ
■ misc/lv
  強力な多言語ファイルビューア
■ japanese/xpdf
  xpdfPDFファイルを閲覧するためのアプリ
  検索対象にPDFファイルがある場合は、インストールしておくべき?、と思って
  インストールしたのですが、えらく時間がかかりました (^^;)
■ japanese/nkf
  ネットワークでメールやニュースの読み書きをするために作られた、漢字コードの変換フィルタ JIS, Shift-JIS, EUC に対応。MIME デコードもできる
■ devel/gettext
  一つの実行ファイルでメニューなどに使われる言語を切り替えることができるアプリ
  これは既にインストールされている方がほとんどだと思います
■ japanese/kakasi
  シンプルな漢字仮名変換装置. 日本語用言語フィルタ
■ japanese/namazu2
  肝心要のナマズです。

この内既にインストールされているものもあるかも知れませんので、pkg_info のコマンドで、既にインストールされているアプリの一覧を、テキストファイルにコピーしました。
既にインストールされていたアプリの一覧
調べてみると、gettext だけは既にインストールされていました。xhtml や wv2、xpdf などは、検索したいディレクトリに、これらのアプリに関連した形式のファイルが置いてなければ、インストールする必要はありません。

今回試しに皆インストールしてみたのですが、xpdf のインストール中に、xpdf-3.00.tar.gz がないのでダウンロードできないよ! どっかから見つけて来て、ports の distfiles ディレクトリに置いてくんろ! というエラーが出てしまいました。ネットで検索してみますと、各ダウンロード用のサーバには、xpdf-3.01.tar.gz しかありません。これはports の更新をしてからでないとまずいようです。しかし cvsup コマンドで全ての ports の更新をしたのでは、時間がかかりすぎるので、上の textproc、misc、japanese、devel だけ更新することにしました。
/etc/ports-supfile の ports-all をコメントアウトし、textproc、misc、japanese、devel のコメントアウトを解除してあげて、cvsup を実行しました。

これは正解だったようで、cvsup も短時間で終わり、アプリのインストールも全て滞りなく終わりました。(^^;)

後は設定です。設定ファイルは、mknmzrc-sample と namazurc-sample。
それぞれを .mknmzrc と. namazurc の名前でコピーした後、namazu.cgi を動作させるディレクトリに移動させます。解説サイトによっては、mknmzrc-sample と namazurc-sample を mknmzrc と namazurc とドットをつけないでリネームしているところもありましたが、今回のケースでは、ドットをつけないと認識してくれませんでした。

肝心の namazu.cgi は、最初ありかが分からなくて探してしまったのですが、
/usr/local/libexec にありました。namazu.cgi を最初 cgi-bin に置いたのですが、後々操作しやすいディレクトリの方がいいでしょうということで、home ディレクトリに namazu というディレクトリを作ってそこに置きました。元々 home ディレクトリは、CGI が動作する設定になっています。

.mknmzrc と. namazurc ファイルの書き換えは下記の通り。今でもどの設定が生きているのかよく分かりません。(^^;)
mknmzrc
namazurc

で、ここからがはまった部分です。検索データとなるインデックスファイルを作るのですが、最初パソコンおやじさんのページに書かれていたコマンドで実行してみたところ、全く上手く行かず参ってしまいました。.mknmzrc と. namazurc ファイルで設定した設定が、まるっきり生きてくれません。おやじさんのマシンは Linux なので、OSの違いからなのでしょう。結局牧之内研究室さんのページに戻り、書かれていた通りのコマンドで実行してみたところ、上手く行きました。コマンド自体に、日本語文字コードなどを書き込みます。

そのコマンドを書いたファイルを namazuupdate.sh として保存し、/usr/local/bin に置いて 、/usr/local/bin/namazuupdate.sh で簡単に実行できるようにして起きました。cron で定期的に実行させてもいいのですが、最近サイトの更新も頻繁ではないので、行った際に手動でインデックスファイルの更新をすることにしました。

さて、出来上がった Namazu によるサイト内検索のページ です。
テンプレートファイルは、/usr/local/var/namazu/index 以下にあり、NMZ.head.ja と NMZ.foot.ja を書き換えることによって変えられます。それと文字化けを防ぐために、このふたつのファイルに日本語文字コード指定のための meta タグをしっかりといれておいた方がよいかも知れません。

情報バーを出なくする設定

WindowsXP のパソコンを使われている方で、SP2 をインストールしてる方、また購入した時点で既に SP2 がインストールされていた方は、自分のパソコン内で html ファイルを編集している時に、そのソースの中に JavaScript などのプログラムが含まれていますと、下図のような 情報バー と呼ばれるバーが出て来ます。

ホームページ作成中に、一々このようなバーが出て来ては不愉快ですし、JavaScript などのプログラムの動作をブロックしてしまいますので、プログラム動作の確認もできません。設定によりこのバーを出なくし、プログラムも動作するようにしましょう。

※ ただし情報バーの機能は、メールの添付ファイルなどを開いた時に、悪意のあるプログラムが動作したりすることをブロックするための機能ですので、心配な方はそのままにしておいてください。万が一、この機能を解除したことによって何らかの被害を受けられたとしても、当サイトは一切の責任を負うことはできません。

インターネット・エクスプローラーのメニューバーの [ ツール(T) ] → [ インターネット オプション(O) ] の順にクリックし、インターネット・オプションのダイアログボックスが出て来ましたら、[ 詳細設定 ] のタブをクリックします。そしてその設定項目のセキュリティー中の、[ マイ コンピューターのファイルでアクティブ コンテンツの実行を許可する ] にチェックを入れて、[ 適用(A) ] → [ OK ] をクリックしてあげます。

これであの目障りな 情報バー は出なくなりますし、ページに書かれたプログラムも動作するようになります。(^^;)

Outlook のアドレス帳

最近老眼が進んだせいか、Outlook Express のアドレス帳からお目当てのアドレスを探すのが大変です。(^^;)
一般的に Outlook Express の最初の設定では、姓名を昇順で並べています。しかしアドレス帳を調べていく間に、えっと思うような並び方をしている時があります。実は、Outlook Express では姓名順の場合、メールアドレスのプロパティーのまずふり仮名部分を読み、次に表示名、姓の順に読み取ります。

例えば、こんなことはありませんが、説明しやすい例としてお読み下さい。アトレス帳の登録画面で、ふり仮名部分が「よしの」で、姓の部分が「田中」、表示名が「飯田」だとしますと、アドレス帳では、よしのが読まれて、やゆよのよのところに並びます。

もし、アドレス帳を見ていて、えっと思うような並び方がありましたら、登録画面 (各アドレスのプロパティーですね) のふりがな部分をチェックしてみてはいかがでしょうか。(^^;)