2009年2月18日水曜日

ソースを見せない

ajaxという技術(簡単に言うとJavaScriptをうまく活用して,動的なページを作るって技術,だと思っている)を使うと,web siteのソースコードが見えなくなる,ということに気づいた。というか,他の人が作ったサイトでソースが見えないことがあったから気づいただけだけど。普通の人にソースを見せないようにしようと思えば,< div id="xxxx"> < /div>という空のdivisionを用意しておいて,< body onload="OpenPage()">のように読込みと同時にJavaScriptでidがxxxxというdivisionにページを読ませればいい。OpenPage()には当然メインの部分を読み込ませる命令を書かないといけないけど,prototype.jsなどを使うと簡単に読み込ませることができる。だから知らない人には中身を見せなくてすむ。ただし,ツールを使えば簡単に見ることはできる。だってブラウザで実行してるんだもん,ソースは原理的に見えるはず。具体的には,例えば,JavaScriptistってサイトがあるが,そこでJavaScript入門みたいなページで,firefox用のツールがいろいろ載ってる。その中のWeb Developer Toolbarというやつなら,実行結果を反映したソースを表示する,ってのがあって,簡単にソースを読めてしまう。でも知らない人にはわからないから,お遊びで中身を見せないようにしておいて,隠しページを置くと楽しめるかもしれない。ただし,隠しページは検索エンジンにはスパムサイトと判断されることがあるらしいので,あまりまじめなサイトでは遊ばない方がいいかもねぇ。
ちなみにFreeBSD 7.0で,perl 5.8.8が動いている環境だと,JISコードで書いたページでも読み込ませるファイルはUTF-8で保存してないと文字化けしてしまった。内部でutf-8を使っているというのはどうやらほんとらしい。でもなんでそれでいいんだろう?

2009年2月9日月曜日

FreeBSD:Unicodeにはまる

今回もFreeBSDネタ。以前もちょっと書いたが,今回も文字コードの話。最近のPerl (Perl 5.8.8や5.8.9) では,内部処理ではutf8を使っているらしい。でもunix上では未だにeucが使われていたり,windowsやmacintoshではshift_jisを使っている。そこで必要なのが文字コードの変換。apacheで表示させる時に,どの文字コードを使うのかは,アプリケーション次第。新しく作ったサイトはいきがってutf8にしてみたが,net上に落ちてるスクリプトはshift_jisだったりする。以前,アクセスログを取り,解析,表示してくれるスクリプトを拾ってきた。windowsを念頭においているのか,文字コードはshift_jisで書かれていた。別にそれはよいのだが,このアクセスログ解析スクリプトが表示する検索文字列がよく文字化けする。おかしいなぁ,と思ってブラウザの文字コードをutf8にしたら文字化けしてたところだけちゃんと見えて,今までちゃんと見えていた検索語が化ける。しばらくそのまま使っていたが,どうも気になって仕方ない。そこで,ちょちょいと調べてみた。
 拾ってきたスクリプトでは文字コード変換にはjcode.plを使っていた。ところが,jcode.plはutf8に対応していない。だからutf8があると表示が文字化けしていたのか。ところで,4つ前の投稿にも書いたが,最近のperlではモジュール,Jcode.pmEncode.pmを使うみたい。投稿を書いた時にはEncodeモジュールを使ったのだが,その使い方は、
---------------------------------------------------
cgiのトップに
use Encode;
use Encode::Guess qw/ shiftjis euc-jp utf8 7bit-jis /;
と書いておき、
$in_name = encode('utf8', decode('Guess', $in_name));
とすると、もとの文字コードを推定して、utf-8に変換してくれる。
---------------------------------------------------
ってな感じだった。今回もutf8に対応していないjcode.plのconvertルーチンを使っているところを探して,encodeとdecodeを使って,
$in_name = encode('shiftjis', decode('Guess', $in_name));
としてShift_JISに変換してやればいけるはず,だった。
 ところが,これがうまくいかない。解析ルーチンのcgiが途中で止まってしまう。どこで止まっているかと言うと,utf8の文字列が出てきたところ。そこで止まって,それ以上表示してくれない。困った。apacheのエラーログ,/var/log/httpd-error.logを見ると
shiftjis or utf8 at /usr/local/lib/perl5/5.8.8/mach/Encode.pm line 166, 
     referer: http://xxxxxxxxxxx/yyy.cgi
とでる。おや?これはもしや推定時に困ってるのか?と思い,ネットで検索。「perl Encode」などで検索していると,http://www.bugbearr.jp/?Perl%2FUnicodeというページにたどり着いた。そこには「自動判定したい場合は、Jcode.pm を使う。(Encode::Guess は望ましい動作をしないようだ…)」と書いてある。下の方の「文字コードを自動判別させるには」という所を見ると,どうやらEncodeモジュールの推定はちょっと甘くて,shift_jisかutf8かを決めてくれないみたい。Jcodeモジュールはどっちかわからない時にも,ある程度推定して,文字コードを特定するみたい。そこで,上記サイトにあるように,トップの方で
use Jcode;
と宣言しておいて,
my $sjis = jcode($str)->sjis;
としてみた。そしたらうまくいった。うーん,やっぱりperlは奥が深いですねぇ。
======================================================================
(追記)
後日、自分で記事を参考にしたのだが、Jcode.pmをどうやってインストールしたのか忘れてしまっていた。どうしたかというと、FreeBSDなので、
/usr/ports/japanese/p5-Jcode/
からインストールした。/usr/ports/japanese/p5-jcode.pl/はjcode.plをインストールしてしまうので、間違えないようにしましょう。

2009年2月2日月曜日

FreeBSD:portupgradeにはまる

今日も前回と似たようなネタ。FreeBSDでサーバーを立ち上げようとしてる。マシンが遅いから,なかなかソフトウェアのインストールが終わらない...ぶつぶつ。
 ところで,今日の話題はportupgrade。私にFreeBSDを教えてくれたやつは,基本はdefaultと言って,option設定もあまり追加しないし,portupgradeもあまりしない。何故って,下手にportupgradeするとアプリケーションがよく動かなくなることがあるから。でも私はセキュリティのこともあるし,と思って毎回upgradeしてしまう。で,よくトラブルに巻き込まれる。今回は今までの経験をメモしておこう。

2009年2月1日日曜日

FreeBSDで無線LAN

FreeBSDのrelease 7.1をインストールしてみた。理由はあまったノートをwebサーバーにしようと思っているから。FreeBSDのインストールは,インストールCDのイメージを取ってきて,CDからインストール。でもそれは起動だけに使って,インストールするファイルはネット上からHTTP-proxyを通して取ってくる作戦にしてみた。いろいろなアプリケーションはcvsupでportsを最新にしてからインストールした。インストールはこれまでデスクトップで数台行ってきたので,大きな問題なく完了。設定ファイルも他のFreeBSDマシンからコピーすればよいので,さっさと作業できた。