Tech エントリー[アプリケーション・フレームワーク / プログラミング]

flatmemo の wiki 書式に Trac 書式を追加

あとで読む コメント (0) トラックバック (1) Atom/RSS

何かの新着情報経由で知ったサイトで使われていた flatmemo というツール。
wiki + blog / 2 な感じですが、結構良さそうだったので使ってみる事に。

wiki の書式が「はてな記法」と「Markdown」だったので日頃から使い慣れている Trac を利用したくてカスタマイズを試みた。

さてさて、どうなることやら。

多分、内部的には cpan モジュールを利用して wiki の書式は処理しているという憶測から、まずは Trac のモジュールがないか cpan で検索してみた。

Gosuke Miyashita / Text-Trac-0.08 - search.cpan.org

あった。開発者さん、素晴らしい。

mizzy さんって shibuya perl monger で見かける人ですよね ? 知り合いではないけど ... まずは取っ掛かりができた。良かった。

感謝。

後は flatmemo のソースを覗いてチョコチョコ編集すればいいだろう。

ライブラリの階層見てみると何やら色々ある。関連しそうなディレクトリだけでも 3つもある。

  • autolib
  • extlib2
  • lib

ごった煮っぽい感じがしてきましたが、それはそれ、勉強にもなるので気にしない。それに readme にも以下のように但し書きがあるし。

このソフトは今から4,5年程前に作成した(そして今ではほとんど使われなくなった)Perlのライブラリを棄ててしまう前に何かの形にして残しておこうと形にしたものです。

ですので内部のコードは(見て頂ければ分かると思いますが)レガシーなコードを含みますし、フレームワークすら導入していません。

本プログラムとそれに含まれるライブラリは自由に配布していただいて結構ですがeconosys systemでは現在全く使用していないものも含み動作保証はいたしません。

さておき、ディレクトリ構造見て安心したのはモジュール (ライブラリ) は切り離してプログラムされているようなのでそのあたりは安心かも。

っで、cpan から拾ってきた Text::Trac を Text::Hatena や Text::Markdown のある lib/ に配置。

cgi の実行ファイル (という呼び方でいいのかな ?) である以下のあたりを覗いてみた。

  • memo_admin.pl
  • memo_config.cgi
  • memo.cgi

詳細は diff 見てもらうとして、memo_admin.pl では以下のあたりを編集。

  • line no. 160
  • line no. 492
  • line no. 606
  • line no. 631

memo_config.cgi はコメント部分を編集。Trac記法の指定方法を追記。

  • line no. 28

memo.cgi これが一番多そう。

  • line no. 240
  • line no. 258
  • line no. 491
  • line no. 505
  • line no. 900 前後

line no. 491 あたりの編集がちょい厄介だ。入力されたテキストを実際に変換処理する部分なので Text::Trac の使い方が分かってないと駄目 ...

Trac.pm を読んでみると Text::Hatena を参考にしたっぽいことが書かれていた。

要は "OOP" ってこと、オブジェクト指向スタイルの書き方ですからねってことだと思うので、以下のように記述 ( hatena_flag の処理部分とほぼ同じ new するときの引数が若干違うだけ)

elsif ( $READ{trac_flag} eq 'on' ) {
    eval"use Text::Trac";
    my $parser = Text::Trac->new(
        trac_url      =>  $USR{flatmemo_root_url},
    );
    $parser->parse( $READ{text_name} );
    $READ{text_name} = $parser->html;
}

っで、これに伴い $USR{flatmemo_root_url} という変数を memo_config.cgi に追加した。

memo.cgi の最後の一カ所 line no. 900 前後のところで rss を出力する部分があるんだけど、これに気づいたことで他にも編集対象になるファイルがるんじゃないかと不安になり、全ファイルを念のためチェックすることにした。

トップのディレクトリにある実行ファイル cgi 以外に、2つほど編集対象になるファイルがあった。

  • autolib/exrss.pm
  • template/default/temp_entry_input.html

exrss.pm は結構な修正。細かく書くの面倒なので diff で割愛。

temp_entry_input.html は入力時の記法の選択肢を増やすために html を編集するだけなので割と簡単だと思う。

diff 取る前に動作確認しようと思い、実行してみたら ...
投稿がうまくいかない ...

Can't locate object method "new" via package "Text::Trac" at /path/to/memo.cgi line 493,  line 5.

diff とったり、確実に動くようにするにはもう少し時間がかかりそう。
なので暫定版でこのエントリー、取り敢えずアップしちゃう。

追記

原因究明

動かなかった原因が分かったーっ。Text::Trac が曲者でした。

もとい、Text::Trac を perl Makefile.pl, make install とかでインストールしていないから中のモジュールが必要としてたライブラリが不足していた。

「Text::Trac が曲者」なんて書いたら作者に怒られちゃいますね。

Text::Trac の META.yaml を覗くといかのモジュールが必要だと書かれています。

  • Class::Accessor::Fast
  • Class::Data::Inheritable
  • HTML::Entities
  • List::MoreUtils
  • Test::Base
  • Tie::IxHash
  • UNIVERSAL::require

外部モジュールはローカルなディレクトリに配置して use lib する仕様だから cpan でインストールせよとかは「なし」なところがつらい。

HTML::Entities が入っている HTML::Parser のインストールが、単に解凍したパッケージに入っている lib 以下のファイルを置いてもだめだった。lib ディレクトリ内に Parser.pm が含まれていない。

こういうモジュールを使いたいときに cpan とか perl Makefile.pl を実行できない環境では皆さんどうしているんでしょう ?

結局、HTML::Parser のインストールを perl Makefile.pl でインストールして解決。

前半の編集で、今のところは正常に動作しています。

0.961 のソースとの diff は「いずれ、その内、また今度」ということで。

あ、あと、今回勉強になったのが、上手く動作しない、画面が白くなるだけで何が原因か分からないような時のデバッグ方法を覚えた事。

コマンドラインで確認しないといけないので、ちょっと面倒 (FTP しか知らない人には無理かもしれないけど)

perl -d test.cgi

perl の引数に -d つけるとデバッグモードで動いてくれます。

これによりブラウザ越しに実行した時は画面が白くなるだけで原因が分からなくても、ターミナルで上記のように実行するとモジュールをロードできないよ、とかエラーが特定できるので対処しやすかった。

Perlのデバッガ(コマンドのまとめ)

あとで読む コメント (0) トラックバック (1) Atom/RSS
投稿: 2008年02月07日 21:30 / 最終更新: 2008年02月09日 01:12

» Movable Type 4 でプラグイン開発する際に必要な知識
« Flash で動きのある TagCloud

タグ (関連キーワード)

トラックバック


サイト構築のための情報収集を一時的にメモするツール
Design2008年2月12日 23:54
Wiki とか Trac とか使うことがあるが、今回はプライベートなサイト構築な...

コメント (投稿する)

コメント投稿





エントリー検索



最近のエントリー




テクノラティプロフィール

フィードメーター - Jamz Update (all blogs)

スカウター : Jamz

awasete.oshira.se

あわせて読みたい

track feed
SEO対策 | ブログパーツ


イベント情報

LL魂
08月04日(土)開催 参加予定


クリエイティブ・コモンズ・ライセンス
このブログは、次のライセンスで保護されています。 クリエイティブ・コモンズ・ライセンス.

テクノラティプロフィール