nDiki : Perl 5.6.2

2004年2月3日 (火)

[WiKicker] WiKicker の文字化け対応

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 という呼び名はないのかな?

スポンサード リンク
[ 2月3日全て ]

2005年3月13日 (日)

テスト。More。

WiKicker のテストスクリプトの作成には Perl 5.005_03 でも標準バンドルされている Test モジュールを使用している。 テストのためだけに追加のモジュールを要求するのも悪いかなと思って。

しかし Perl 5.6.2 以降にはすでに標準バンドルされている Test::More にそろそろ移行したい。

5.005_03 で WiKicker を使っている人も少ないようだし WiKicker 0.25 からは Test::More を PREREQ_PM に追加することにしよう。 Test モジュールと Test::More モジュールは互換性がないので、順次テストスクリプトを修正していく予定。

[ 3月13日全て ]

2005年6月6日 (月)

[ WiKicker ] Storable 永続化データの互換性

fkimura 氏から WiKicker の障害レポートをいただいた。 Perl 5.8.6 へ移行した環境で WiKicker 0.26 を試してみたところエラーになってしまうとのこと。

 "Error
 action: do_read: Byte order is not compatible at blib/lib/Storable.pm
 (autosplit into blib/lib/auto/Storable/thaw.al) line 366,
 at /usr/local/lib/perl5/site_perl/5.8.6/WiKicker/DB/File.pm line 161
 at /usr/local/lib/perl5/site_perl/5.8.6/WiKicker/CGI/AbstractController.pm line 93"

(FreeBSD 4.11-RELEASE-p9)

Storableエラーを吐いている。 Storable データ形式に互換性のない環境 (Perl and/or Storable) 変化があったようだ。

例えば Storableマニュアルによれば 64bit integer をサポートするように構築された Perl 5.6.0 や 5.6.1 で Storable 2.02 以前を使って書き出したデータを他の環境で読み出すと 'Byte order is not compatible' エラーが出るとある。

確認したところ前のバージョンは Perl 5.6.2 だそうなので、もしかしたら上記の非互換性にあたってしまったのかもしれない (FreeBSDPerl って 64bit integer サポートでビルドされるようになっている?)。

WiKicker での対応方法

WiKicker で使用している Perlアップグレードで上記問題にあたった場合、一番簡単な方法は Storable で書き出しているページ情報ファイルを一旦全部消してしまうという方法。

WiKickerデータベースディレクトリ (wikicker.database.directory プロパティで指定しているディレクトリ)の下の、info/basic/* を全て消してしまう(一応バックアップとしてコピーした方が良い)。

この場合、各ページの「最終更新時刻、最終更新者名、要約文」が消えてしまうが、これらの消えてしまった情報は次にページを更新した時に最新の情報で上書きされる。

WikiPage そのものおよび古いリビジョンは影響がなく全て残っているので、通常の運用ではまあ許容できる範囲の対処方法か。

情報ファイルを消したくない場合は、コンバートする必要があるけれど古い Storable データを読み出せる環境で export して、新しい形式で書き直す必要があるので作業する人にとってもちょっと面倒かもしれない。いや、新しい Storable ならば $Storable::interwork_56_64bit あたりを使えば両方をきりかえて読めそうであるので、新しい環境だけあればいいのかな。

[ 6月6日全て ]

2006年9月14日 (木)

WiKicker 0.38 リリース - 認証承認用コードの実装

朝一で WiKicker 0.38 をリリース。 昨晩コードを完成させておいたものを Perl 5.005_03 上でテストしたら、ExtUtils::MM が 5.005_03 にはないことに気が付いた。 調べると標準で入っているのは Perl 5.6.2 / Perl 5.8.0 から。

ということで急拠 ExtUtils::MM を使っているツールは今回のリリースから除外してパッケージング。

今回のリリースでは認証・承認フレームワーク実装が含まれるようになったのが中心で、基本的な機能には特に変更なし。

[ 9月14日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィで SNS 事業の部長をしています。

nDiki1999年1月に始めたコンピュータ日誌を前身とする NaneyWeb 日記(兼パーソナルナレッジベース)です。ちょっとしたノートは nNote にあります。

※内容は個人的見解であり所属組織とは関係ありません。

follow us in feedly

月別インデックス
Process Time: 0.055438s / load averages: 0.35, 0.45, 0.45
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker