nDiki : Template Toolkit

2004年6月28日 (月)

過去の今ごろ

過去の6月28日より。

[ 6月28日全て ]

2004年9月8日 (水)

Template Toolkit

プロジェクトのWebビューのコードがごちゃごちゃしてきているので導入しようかどうか。 daemon 形式のプログラムなのでモジュールのローディング時間も問題にならないし。

AppConfig に依存しているのでWindowsActivePerl 用に 1.56 を入れようとしたら make test でこける。AppConfig::Sys の getpwuid あたり。$^O で win32 の時は場合分けしているようなのだが、うまくいっていない様子。

結局ビルド済みのPPMを取ってきていれることにする。

Template Toolkit には process の出力を逐次処理する方法はないのだろうか。 長いページの際にはできあがったところから順次クライアントに送りたいのだが。

[ 9月8日全て ]

2004年9月13日 (月)

Template Toolkit + PAR

今回のプロジェクトに Template Toolkit を本格的に適用しようかと。 問題となるのは PAR にした時に、どのようにテンプレートを取得するか。 (PARでない場合は)テンプレートはモジュールと同じ位置にインストールしておき @INC から探すようにするつもり。

ということで泥臭いが「起動時に一時ディレクトリに展開してしまう」という方法を選択。 %PAR::LibCache を舐めて拡張子が 'tt2' であるものを、File::Temp で作ったディレクトリに放り込んで、Template の INCLUDE_PATH に指定する (実際には上記の処理を行うオブジェクトを作って INCLUDE_PATH で指定)。 Daemon 系ならこれで十分。

で、順次 Perl モジュールに散財していたHTML出力をテンプレートベースに変更。 コードがかなりすっきりしてきて気持ちいい。

今回の作業で @INC にサブルーチンリファレンスやら、オブジェクトやらを渡せることを初めてしった。実際 PAR で利用している。 CODE の混ざった @INC をそのまま Template の INCLUDE_PATH に渡すとエラーが起きるので除外したものを渡すように。

[ 9月13日全て ]

2004年10月16日 (土)

Template Toolkit のテンプレート上で対話的入力

ちょっとしたプログラムパッケージや LaTeX ドキュメントを作成する時に、Makefile やその他ファイルのスケルトンをまとめて生成する算段を検討中。 例えば Perlh2xs のような感じ。

基本的には Template Toolkit ベースでいってみたい。 ttree あたりを使えばだいたいできそうだ。 ここで --define var=value で全て間違えずに指定するのは大変になってくるだろう。 ということでテンプレート変数定義をまとめたテンプレートファイルを作成し、各テンプレート処理をする際にプリプロセスするようにする。

でこのテンプレート変数定義のテンプレートファイルは対話的に作成できるようにしたい。 テンプレートファイルのテンプレートファイルを処理して。

で対話的入力の方法なのだが、探してもそのようなディレクティブもプラグインもみつからない。ありそうなもんだけどなぁ。

しょうがないので、PERL ディレクィブ内で Term::ReadLineを使って入力。 こんな感じ。

 [% TAGS [- -] -%]
 [- PERL -]
 use Term::ReadLine;
 my $term = new Term::ReadLine('template');
 $stash->set('readline' => sub {
   my $prompt = shift || 'input:';
   my $text = $term->readline($prompt);
   if (defined $text) {
     $term->addhistory($text);
   }
   return $text;
 });
 [- END --]
 [% project.name = '[- readline('project name:') -]' -%]
 [% project.author = '[- readline('author:') -]' -%]

tpage でこのテンプレートファイルを処理すると、対話的に値を入力しながらテンプレートファイルを生成できる。 実際は文字列のエスケープなどもうちょっと工夫が必要。

ちなみに Debian GNU/Linux sid の libtemplate-perl は 2.10-1 で、このバージョンの Template Toolkittpage だと EVAL_PERL が有効になっておらずうまく動かない。 手元にコピーして Template オブジェクトの初期化部分に EVAL_PERL => 1 を追加する必要あり (2.14 の tpage は --eval_perl オプションで有効にできる)。

[ 10月16日全て ]

2004年10月17日 (日)

ExtUtils::ModuleMaker::TT

ExtUtils::ModuleMakerをベースに、Template Toolkit によるテンプレートからのPerl モジュールを生成するようにしたモジュール。

希望のものにかなり近い。

 # Sample_Corp::MyModule モジュールディストリビューションを作成
 makeperlmod --newdist Sample_Corp::MyModule

作成したモジュールパッケージのソースツリーに新しいモジュールを追加する機能もある。

 # Sample_Corp::MyModule::SubModule を追加
 # 以下の2つを生成
 #   lib/Sample_Corp/MyModule/SubModule.pm
 #   t/Samle_Corp_MyModule_SubModule.t
 cd Sample_Corp/MyModule
 makeperlmod --module Sample_Corp::MyModule::SubModule

設定ファイル、自前のテンプレートをベースにする場合は --newdist する前に以下の作業をしておく。

 #設定ファイルを作成
 makeperlmod --defaults ~/.makeperlmod.config
 # <AUTHOR> の各フィールドを設定しておくとスケルトン生成時に利用される。

 # テンプレートの生成
 makeperlmod -templates ~/.makeperlmod.templates
 # 設定ファイルの OCMPACT を 1 に変更
 # TEMPLATE_DIR を指定
 perl -pi -e 's/(COMPACT\s+)0/${1}1/' ~/.makeperlmod.config
 echo TEMPLATE_DIR $HOME/.makeperlmod.templates >> ~/.makeperlmod.config
[ 10月17日全て ]

2004年10月18日 (月)

AppConfig

PerlのConfiguration関連のモジュールの再チェック。 Template Toolkit で使っている AppConfig が良さそげ。 設定ファイルからの設定と、コマンドラインからのオプション指定を同じ設定オブジェクトに書き込むようになっているのが便利。Getopt::Long で取得したオプションの格納先として使うだけでも便利そうだ。

設定ファイルからの再帰的設定ファイルインクルードや、コマンドラインオプションで指定した設定ファイル中の設定を「その位置」で行う機能が標準であれば嬉しいのだがさすがに無いか。 action あたりを書けば実現は可能そう。

[ 10月18日全て ]

2004年10月29日 (金)

Template ToolkitUTF-8 なファイルを INCLUDE すると文字化け

"UTF8" flag に起因する既知の問題のようだ。

Perl 5.8.4 において Template Toolkit 2.14 だと化けるが、2.13 以前 (2.13 と 2.10 で確認)だと大丈夫。

Template::Providerを継承して UTF8 フラグまわりの処理をする自前の Provider を作ってそれを使うという手もあるようだが、今回は 2.13 を使う事で対処。

[ 10月29日全て ]

2004年11月3日 (水)

Template Toolkit 2.14 の UNICODE パラメータ

Template ToolkitUTF-8 なファイルを INCLUDE すると文字化けする問題だが、ソースを読んでみると Template::Provider に UNICODE という undocumented な初期化パラメータを発見。

Template (か Template::Provider) を new するときに UNICODE => 0 すれば化けなくなった。 "UTF8" flag を立てないで文字列を扱っているスクリプトはこれでOKか?

[ 11月3日全て ]

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 と書いてあるんだけどな。 前のバージョンは動いたのに。

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

ttree での HTMLページ生成

www.naney.org だとTemplate Toolkit が動かない事がわかってしまったので、やっぱり手元で静的するセンにする。

今までは「XMLによるページ記述 + 自作ツールによる DOM ベースの変換 + XSLT」で生成していたのだが、あまりメンテしていないのでライブラリのバージョンが上がるたびに動かなくなったりいろいろ不便になってきた。 今後は現在いろいろいじっている Template Toolkit ベースにしたい。 まずは付属の ttree を使ったサイト生成にしてみる。

で、いくつかのページをこちらで生成してみることにした。 今までより出力を簡単に修正できるようになった。 ただし以前のXMLベースの時よりは崩れたHTMLを生成する可能性が高くなるので要注意。 GNU m4 でサイトを生成していた時の感じに少し戻った気分。

[ 11月10日全て ]

2004年11月14日 (日)

JAlbumWebフォトアルバム

最初は zphoto でいこうと思っていたのだが、

  • 画像にコメントが直接つけられない (Template Toolkit の組み合わせでHTML書き換えるのがよいか)
  • 画像の横幅しか指定できない (長辺でサイズを指定したい)

といった点から違うソフトを探してみた。

JAlbum というのを見つける。Java で書かれているので、Linux でも動く。 スキンがいろいろ選べるのが良い。スキンリポジトリには Flash コンテンツベースの格好良いアルバムを生成するのもある。

スキンは自作できるのだが、プログラムが書ける分マスターするのは結構大変そうだ。

JPEG だとコメントは、画像ファイルのコメント領域に格納するというのがちょっと不満。オリジナルを改変したくないので別にコピーを用意しておく必要がある。

それからGUIアプリケーションなので zphoto のようにコマンドラインからバッチ処理できないのが残念。

それ以外はなかなか良い。

BananAlbum スキン

Flash コンテンツベース。スキンリポジトリで一番人気。 日本語のコメントがうまくでなかった。

SimpleViewer スキン

Flash コンテンツベース。BananAlbum よりすっきりまとまっている。 JAlbum画像サムネイルと設定XMLファイルなどの生成をするのだが SimpleViewerSWF自体は単体で使えるで手作業でもアルバムを作れる。

コメントは後からXMLを直接編集して書き込んでもいいな。

日本語のコメント表示問題無し (LinuxFlash Player 7.0.25 では駄目)。

[ 11月14日全て ]

About Me

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

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

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

月別インデックス
Process Time: 0.061719s / load averages: 0.44, 0.40, 0.34
nDiki by WATANABE Yoshimasa (Naney)
Powered by DiKicker