1月1日に作り始めた WWW::Search 用 Namazu2 モジュールと、それを使ったメタサーチCGIがある程度できたので、本サイトに設置しようかと考えた。
で WWW::Search モジュールをサーバ上にインストールしなければならない。 WWW::Search が別のモジュールに依存していて、さらにそのモジュールが別のモジュールに依存していて……ということでイモヅル式に必要なモジュールが結構ある。 最初は一つづつ make していこうかと思ったのだが、やはり面倒なのとサーバーから CPAN ミラーまでかなり近かったので、CPAN モジュールを使ってインストールする事に(CPAN モジュールはネットワークが細いとちょいと厳しい気がする)。
>setenv PERL5LIB $HOME/local/lib/site_perl >perl -MCPAN -e shell Parameters for the 'perl Makefile.PL' command? のところで PREFIX=$HOME/local INSTALLSITELIB=$HOME/local/lib/site_perl INSTALLMAN3DIR=$HOME/local/man/man3 と入力 install WWW::Search install Jcode
$HOME は実際にはホームディレクトリを指定。Jcode.pm もいれておく。 これでごそっとインストール終了。 途中 Perl 5.6 までいれようとするのでこれは Ctrl-C で飛ばす(他にいい方法があるかな?)。
2個所問題。
Perl 5.6 以上用だった。www.naney.org は Perl 5.005_03。 しょうがないので、同等のコードを書いて Tie::Array::Sorted を使わないように修正。
SDBM_File で EXISTS が使えるようになったのは実は Perl 5.6 から。 しょうがないので代わりに defined でキーの存在チェックをするように修正(幸い undef を値に持つ事はない hash なので)。
WiKicker の文字化けであるが Perl 5.6.x という環境が怪しそう。 ということで、ローカルに Perl 5.6.2 を入れてテスト。
tar zxvf perl-5.6.2.tar.gz cd perl-5.6.2 rm -f config.sh Policy.sh sh Configure -de -Dprefix=/usr/local/perl-5.6.2 make make test make install
で /usr/local/perl-5.6.2/bin/perl -MCPAN -e shell でもりもり必要なモジュールをインストール。
で WiKicker のテスト。化けた。 追いかけてみると、Locale::Maketext モジュールが use utf-8 をしているため、l10n した文字列は UTF-8 として mark されてしまっているようだ*1。 で、mark されていない他の部分の(バイト列としてのUTF-8)文字列と結合したりしたところで化けたと。
ということで、Perl 5.6.x では maketext で帰ってきた文字列の UTF-8 mark を外すようにする。
if (5.006 <= $] && $] < 5.7) { return eval "no utf8; my \$tmp = \$language_handle->maketext(\@param); \$tmp =~ /^(.*)\$/; \$1"; }
という緊急処置コード。 Perl 5.005_03 では utf8 プラグマ自体が無いので、eval の中に入れておく。 v5.6.x での UTF-8 mark の外し方が良くわからないので、とりあえず正規表現に全マッチさせるというダサいコード(v5.8 だと utf8::* にそこら辺の関数があるのだが)。
*1Perl 5.6.x では Perl 5.8.x のように "UTF8" flag という呼び名はないのかな?
F.KIMURAさんによると 文字化けするらしい。
あちゃ。たしかに fkimura Wikiで化けちゃってるな。 うーん。何だろ。 Perl 5.6 系だからかなぁ(開発では Perl 5.005_03 と 5.8.x でしかテストできていないので)。
は実験中のコードが要求するだけなので、WiKicker の実行には必要ないです。 やっぱり紛らわしいのでチェックコード外したほうがいいかな。
データファイルをYAMLで扱おうと思い、YAML Perl モジュール (0.35)でちょこちょこと実験。
ある UTF-8 で書かれたファイルを読み込んで YAMLで Dump したら、日本語の部分がことごとく quote される。 これはいただけない。
my $ESCAPE_CHAR = '[\\x00-\\x08\\x0b-\\x0d\\x0e-\\x1f]';
で判別している。手抜きではないか。 さてどうしたものか。
と考えていたら、よく考えたら Perl 5.8.x だとバイト単位ではなく文字単位で正規表現マッチングさせられるんだったことを思い出した。 手抜きだなんて思って失礼しました。
データファイルを読んで utf8::decode してから YAML で Dump するようにしたらクオートされなくなった。Good.
Perl 5.6 系だとどうすればいいんだろ。 YAML.pm を直接書き換えて
use utf8;
を追加すれば期待通りにはなるのだが、ちょっと嫌だな。
短い sequence は
- a - b - c
ではなく
[a, b, c]
の形式で出して欲しい。YAML.pm のチェックしたところ
my $y = YAML->new; $y->InlineSeries(5); print $y->dump($data);
のようにインラインにしてよい上限の個数を指定すればよいことを知る。
[ UTF8 フラグ ]
'use constant' を使った Perl プログラムを Perl 5.005_03 下で動かしたらエラー。 調べてみると、
use constant { SEC => 0, MIN => 1, HOUR => 2, MDAY => 3, MON => 4, YEAR => 5, WDAY => 6, YDAY => 7, ISDST => 8, }; (constant 1.04 Pod より)
という形で複数の定数をまとめて定義できるのは constant 1.04 からだ。
Perl 5.005_03 は 1.00、Perl 5.6 系は 1.02 で、1.04 になったのは Perl 5.8.0*1 なので、この形を使えるのは Perl 5.8 以降ということになる。
www.naney.org で使っているホスティングサービスは
という点でいろいろ遊べるのだが、
などから使いづらくなってきた。 なにより容量を気にして記事を書き控えようという心理が働くのがよろしくない。 そろそろ今後を考えて他社に乗り換えようかと。
選んだのはやはり人気があって SSH も使える「さくらのレンタルサーバ」。
選んだプランは容量 10GB のプレミアム。 スタンダードでも容量 3GB でまずまずだし cron も使えるから機能的にも十分なんだけれど、1ホストあたりの収容ユーザ数により余裕があるであろう1つ上のプランにしておいた。
Web から申し込んで、風呂に入っている間に DNS 設定が反映されて SSH ログインできるように。 順次ソフトウェアのインストール・コンテンツの移行とメールの設定をしてから、naney.org をこちらに切り替える予定。
2002年10月19日から開発を始めてしばらく公開・運用をしていた WikiEngine だけれど最近は WikiEngine そのものは使っていなくて、今はそのコードをベースに作った日記システム の DiKicker 部分しか使っていない。DiKicker の方は自分自身で今後も使っていくんだけれど、さすがにいろいろ古いのでそろそろ大改修しようかなと。基盤部分的には
などをして今後も使っていけるようにしたい。既に使っていないアプリケーションとしての WikiEngine 部分は移行させていく手間をかける必要はないと思うので、コードを削除していくことにした。WikiForum 立てるなら既にいろいろ他の選択肢があるしね。
CVS での管理もやめて Git 管理に変更。最後の公開 tarball を展開して git init して最初のコミットとし、その後に変更した作業ディレクトリを Git 側の作業ツリーに上乗せしていったんコミット。あらためて最後の公開コードの上に差分を積んでいくつもり。
Naney (なにい) です。株式会社MIXIで SNS 事業の部長をしています。
※本サイトの内容は個人的見解であり所属組織とは関係ありません。