nDiki : 5.005_03

Perl 5.005_03

2003年12月23日 (火)

Time::Local::gmtime の範囲チェック

Perl v5.8.x だと、Time::Local::gmtime できちんと範囲チェックが動作している(範囲外だと croak される)のだが、Perl 5.005_03 では必ずしもそうではないようだ。 WiKickerデバッグ中に発見。

でソースを読んでみると、古い Time::Local では cheat サブルーチンで

  • 範囲チェック
  • 指定した年月の開始 gmtime を計算し、%cheat にキャッシュ

している。同一年月での2度目以降 timegm 呼び出しでは %cheat キャッシュを使用して cheat サブルーチンを呼びにいかないので、範囲チェックが実行されないという塩梅。 つまり 2003年1月1日… で一度 timegm を呼び出すと2003年1月に関しては以降 cheat サブルーチンは呼ばれないため、次に 2003年1月33日…で読んでもエラーにしてくれないというわけ(最初に2003年1月33日…で呼んだ場合はちゃんとエラーになるので逆に厄介)。

Perl v5.8.0 以降に標準ではいっている Time::Local ではきちんと毎回チェックする。 うるう年・大の月/小の月も考慮してチェックされる(v5.8.0 より前のでは 31 より大きいかのチェックのみ)。

であり、CPAN では 5.005_03 でも動作する Time::Local パッケージ (1.05~)が公開されている。

Time::Local 1.04 以降を PREREQ_PM にしてもいいのだが、5.005_03 な利用者にとってはインストールするのも面倒か。 最低限のエラーチェックを自前で用意して、互換になるようにした方がいいかな。

スポンサード リンク
[ 12月23日全て ]

2004年1月12日 (月)

[ Perl ] Memcached を使ってみる

WiKicker の高速化に Memcached が使えないかいろいろいじってみる。 評価は今のところ「微妙」。 Memcachedメモキャッシュを提供するデーモンプログラムで、キーと値の配列を記憶しておいてくれる。 Slashdot でも使っているらしい。

ホスティングサービスのサーバ(FreeBSD 4.4-RELEASE)に入れてみる。

Memcached 1.1.10

依存している libevent と一緒にビルドしてインストール

 cd /tmp
 wget http://www.monkey.org/~provos/libevent-0.7c.tar.gz
 tar zxvf libevent-0.7c.tar.gz
 cd libevent-0.7c
 ./configure
 make
 cd ..
 wget http://www.danga.com/memcached/dist/memcached-1.1.10.tar.gz
 tar zxvf memcached-1.1.10.tar.gz
 cd memcached-1.1.10
 CFLAGS='-L../libevent-0.7c -I../libevent-0.7c' ./configure --prefix=$HOME/local/memcached-1.1.10
 make
 make install

'-l' オプションがうまく動かない。

 bind(): Can't assign requested address
 failed to listen
 /PRE

指定しなくても動くのでとりあえず、よしとする。

ちなみに、EVENT_SHOW_METHOD=1 の結果は以下の通り。

 $ EVENT_SHOW_METHOD=1 ./memcached
 libevent using: kqueue

Cache::Memcached 1.0.11

Perl 用の API モジュールを入れておく。 make test でこける。

 Your vendor has not defined Socket macro MSG_NOSIGNAL

use Socket qw(MSG_NOSIGNAL PF_INET SOCK_STREAM); のところ。 Solaris/*BSD だと駄目らしい。 CVS版だと解決されいるようなので、こちらを。

Cache::Memcached CVS

 cvs -d :pserver:anonymous@danga.com:/home/cvspub checkout wcmtools/memcached/api/perl

でとってくる。 こちらは Perl 5.005_03 という古いバージョンでいくつか問題。

 our $SOCK_TIMEOUT = 2.6;

のところの our は Perl 5.005_03 には無いので、use vars に置き換え。 use bytes も 5.005_03 に無いのでコメントアウト。

IO::Handle::blocking() も無い。

 sub my_blocking {
   my ($sock, $bool) = @_;

   my $old_flags = fcntl($sock, F_GETFL, 0)
       or die "Can't get flags for the socket: $!\n";

   if ($bool) {
       my $flags = fcntl($sock, F_SETFL, $old_flags | O_NONBLOCK)
           or die "Can't set flags for the socket: $!\n";
   }
   else {
       my $new_flag = $old_flags & ~O_NONBLOCK;
       my $flags = fcntl($sock, F_SETFL, $new_flag)
           or die "Can't set flags for the socket: $!\n";
   }
   return $old_flags & O_NONBLOCK;
 }

...でいいのかな? ささっと書いたんで一部バグっているかもしれないが、とりあえず代替しておく。

ちなみに Cache::Memecached の古い版、MemCachedClient-1.0.7 も試してみたけれどこちらも IO::Socket::INET が必要だったり面倒(なので、1.0.11 のパッチ当ての方をがんばった)。

スピード

うーん。思ったほど速くないな。 いや手元のLinuxだとかなり速いんだけれど、FreeBSD だとそうでもない。 Client側の問題が大きいようだ。 下手するとLinux BOX からADSL経由でキャッシュを読み込む方が、FreeBSD のローカルホストから読むより速かったりする。

どうも Socket の接続/切断まわりでもたついている感じである。 (無駄なはずなのだが)毎回 disconnect_all してしまった方が、Benchmark の値が良かったりするし。 接続 -> キャッシュ取得 -> 切断 で 0.6秒というのはちょっと遅すぎる。 もうちょっといじってみれば実用的な速度になるのだろうか?

[ 1月12日全て ]

2004年7月31日 (土)

Cache::Memcached 1.14 の Perl 5.005_03 対応

1.14 が 7月27日にリリースされていたのでパッチ作成。 1.13 用のパッチがあたったのでそのままいけるかなと思ったが、テストしたところまたいくつかの非互換コードが増えていたのでそれらの修正を行う。

 tar zxvf Cache-Memcached-1.14.tar.gz
 cp -a Cache-Memcached-1.14 Cache-Memcached-1.14.orig
 patch -d Cache-Memcached-1.14 -p1 \
   < Cache-Memcached-1.13-5.005_03-20040605.diff
 find Cache-Memcached-1.14 -name '*.orig' -exec rm {} ';'
 emacs Cache-Memcached-1.14/Memcached.pm
 LC_ALL=C TZ=UTC0 diff -Naur \
   Cache-Memcached-1.14.orig Cache-Memcached-1.14 \
   > Cache-Memcached-1.14-5.005_03-20040731.diff

新規修正点は

  • Socket モジュールでのインポートで IPPROTO_TCP が追加になったところが実験環境でエラー。コードの中では利用していないので削除。
  • ChangeLog 中の下記のため @+ を使うようになったようだが、5.005_03 では定義されていないのでエラー(perl.*delta のどこにものっていないのでチェックに苦労。perlretut に言及があって Perl v5.6.0 から提供されるようになった事を確認)。Cache::Memcached 1.13 で行っている pos を使った処理に戻す。
 2004-07-19
         * don't use pos() because it doesn't seem to work in
           taint mode.  use $+[0] instead.  (Dave Evans <..@djce.org.uk>)

それからパッチの作り方を変更。patch の man の通り LC_ALL=C TZ=UTC0 にするのとオプションを -Naur を使うように。

また 1.14 から String::CRC32 が必要になった。

[ 7月31日全て ]

2004年11月10日 (水)

Perl 5.005_03 + Template Toolkit 2.14

www.naney.org の静的(+SSI)ページを、Template Toolkit で動的処理するように改良しようかなと思い立つ。 Apache だと、

 Action tt2 /cgi-bin/t2h
 AddHandler tt2 .html

で .html へのリクエストを全てCGI プログラムに渡す(でそのスクリプトがテンプレート処理をして返す)ようにできる(はず)。

で久しぶりに Template Toolkit をサーバにインストール。 … Makefile.PL が通らない。ちょっと修正して通るようにしても今度は make test が通らない。最新の Template Toolkit だと 5.005_03 じゃ駄目か。ドキュメントには 5.005 で OK と書いてあるんだけどな。 前のバージョンは動いたのに。

ということでいきなり頓挫。 あきらめ。

[ 11月10日全て ]

2005年3月13日 (日)

テスト。More。

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

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

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

[ 3月13日全て ]

2006年4月29日 (土)

最新の Module::InstallPerl 5.005_03 ステ?

ゴールデンウィークに突入。 9連休を利用して、一気に WiKicker コーディングを企んでいる。

さっそくちょこちょこ修正してパッケージングし、www.naney.orgインストール。 …… Perl Makefile.PL でコケる。

どうも use inc::Module::Install; でエラーを起してしまっているようだ。 Makefile.PL は変更していないので、そうすると Module::Install の問題っぽい。

tarball をパッケージングするホスト側の Module::Install を 0.57 まで落としたところ、Perl 5.005_03 でも通るようになった。

Module::Install is a package for writing installers for CPAN (or CPAN-like) distributions that are clean, simple, minimalist, act in a strictly correct manner with both the ExtUtils::MakeMaker and Module::Build build systems, and will run on any Perl installation version 5.004 or newer. (Module::Install 0.61 より)

とあるように古い Perl もサポートにも気を払っているのが気にいって ExtUtils::MakeMaker から移行しただけにちょっと残念。

今後また 5.005_03 でも動くようになるのか、それとも捨てられるのか要チェック。

[ 4月29日全て ]

2006年9月14日 (木)

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

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

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

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

[ 9月14日全て ]

2009年10月23日 (金)

さくらのレンタルサーバ プレミアム申し込んだ

www.naney.org で使っているホスティングサービスは

  • SSH が使える。
  • daemon プログラムを起動しておいても怒られない。
  • cron が使える。

という点でいろいろ遊べるのだが、

  • 今の相場的にはかなり高めなのにホームが容量 100MB (メールは別に 100MB)。
  • Perl が10年以上前の Perl 5.005_03。自分で新しい Perl を入れようにも容量 100MB だと厳しい。5.005_03 だと Perl v5.6 系以降の文法が使えないし、使える Perl モジュールも限定されているので悲しい。
  • 夜中になると analog が動いてサーバが重くなる。
  • メールの送受信が遅延することがある。

などから使いづらくなってきた。 なにより容量を気にして記事を書き控えようという心理が働くのがよろしくない。 そろそろ今後を考えて他社に乗り換えようかと。

選んだのはやはり人気があって SSH も使える「さくらのレンタルサーバ」。

選んだプランは容量 10GB のプレミアム。 スタンダードでも容量 3GB でまずまずだし cron も使えるから機能的にも十分なんだけれど、1ホストあたりの収容ユーザ数により余裕があるであろう1つ上のプランにしておいた。

Web から申し込んで、風呂に入っている間に DNS 設定が反映されて SSH ログインできるように。 順次ソフトウェアインストール・コンテンツの移行とメールの設定をしてから、naney.org をこちらに切り替える予定。

[ 10月23日全て ]

2010年10月15日 (金)

今日のさえずり: 「We はーと blog」シールをさっそく貼っといた

2010年10月15日

naney:5085927367

[ 10月15日全て ]

2016年10月26日 (水)

ようやく日記システム DiKicker のメンテナンス開始

この日記(nDiki)で使っている自作日記システム DiKicker開発し始めたのが2003年12月末なのでもう13年物だったりします。ここ最近大きなメンテナンスはしていなかったのですが、まだこの先10年以上使えるように手を入れることにしました。一昨日から着手。

やりたいこと

  • もともと WiKicker (WikiEngine) からの派生で作ったのでが WiKiEngine の方は使わなくなったので、不要なコードを削除したい。共通部分をスーパークラス化してあるけれどもここもまとめたい。
  • WikiName の特別扱いをやめたい。
  • Perl 5.005_03 でも動くように Perl v5.8.0 未満かどうかで処理を変えているけれども、もう 5.005_03 用のコードは消したい。
  • データを Berkeley DB にトリッキーな形で入れているので SQLite あたりに変えて簡単にしたい。
  • 最終的には Go で書き換えたりして。
[ 10月26日全て ]

About Me

Naney Naney (なにい)です。株式会社ミクシィの SNS の企画開発を行うグループでマネージャー・プロダクトオーナーをしています。CS 向上・ユーザーサポート・健全化などにも取り組んでいます。

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

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

月別インデックス
Process Time: 0.051893s / load averages: 0.58, 0.71, 0.54
nDiki by WATANABE Yoshimasa (Naney, Google profile)
Powered by DiKicker