http://www.semblog.org/wiki/?rna
運用・改造メモ
XSLT重視戦略
まずはじめに、テンプレートエンジンによりhtmlを生成する機能を無力化(笑)した。テンプレートを編集して、ばっさり削除。
なぜか
巡回先が多くなってくると、htmlが巨大になりすぎるからです。100サイトほどの登録でrecent_site_entryが800KBを超える(1.4MBに達することも)とか。(SUPER RNAのRNAを1.9にアップグレードするときに試しにhtmlを出してみたら、300KBほどでした。)Clipが実装されてから顕著です。回避策としては、巡回先を減らす、表示件数を減らす、が考えられます。
私のとった方法は
XSLT。IE5.01SP4、IE5.5SP2、IE6SP1、Netscape7、MozillaにはXSLTエンジンが備わっています。RSS(最大100アイテム超/フィードの場合で、30KB〜180KB)のほかに、テンプレートの役目を果たすXSLT(10KB程度)と、トラフィックはかなり軽減できます。あとはクライアントのレンダリング速度次第です。
CPU | OS | Browser | Feel |
---|---|---|---|
Pentium3 1G | KNOPPIX | Mozilla1.4 | かなり速い |
PentiumM 1G | WinXP Pro | Firefox 0.8 | |
PentiumM 1G | WinXP Pro | IE6 | 十分に速い |
Pentium3 1G | Win2000pro | IE5.01SP4 | |
Celeron 433M | Win2000pro | IE5.5SP2 | やや待つが、実用的範囲内 |
欠点
この手法では、TrackBack/リンク抽出の結果を表示できません。将来的にはRSSのほうにもsemblogモジュールなどの語彙により、抽出情報が記載されるようになるでしょう。そうすればXSLTでも表示可能になると思われます。
Plugin
Pluginはどのタイミングで実行されるか
おおまかには次のような感じ。
- 何らかのトリガにより、更新処理が開始される。
- 手動で(Refreshボタンを押す、Bookmarkから、など)
- TrackBack Pingによる更新
- XML-PRCで更新Pingを受信して
- CRONから
- その他のローカルプロセスから
- 巡回してRSSをGET
- 内部的なリストの作成
- Trackbackとリンクの情報を結合
- Webページの作成
- 時間順のサイトのリストの作成
- 最新記事リストの作成
- サイトごとの記事リストの作成
- Pluginを見つける
- 各Pluginを実行
- 終わり
更新処理プロセスの最後のほうで行われる。
配置方法
rnaディレクトリの中に、pluginディレクトリがある。その中に、個別のプラグイン(実行の単位)毎にディレクトリを用意し、その中に配置する。実際に呼び出されるのは、たとえば「sample」という名前のプラグインだとすると、
rna/plugin/sample/sample.pl
が呼び出される。ディレクトリ名と、拡張子をのぞいたファイル名が一致していることに注意。
名前が重複しなければ、複数のプラグインを利用可能。それらは全て実行される。プラグイン同士の実行の順序に依存した処理をしないほうがいいかもしれない。
依存関係
rna.cgi → use lib/RNA.pm → use lib/RNA/Plugin.pm ↓eval plugin/sample/sample.pl
cat_aggregate.pl
サンプルのカテゴリ分類用プラグインがエラーでうまく動かなかったので差分。93行あたりの修正は意味があるのか分からないけど念のため。cat_aggregate.pl.diff
はてなアンテナ連携機能
広告を無視するTips
広告=【PR】のリンクはスルーしたい。→lib/RNA/Hatena.pm の80行目付近に、以下の1行を追加する
my $site_title = $4; next if $site_title =~ /^【PR】/; #この行を追加する(【PR】リンクをスルー)
はてなの広告はsemblog.orgで公式的に配布するものについてはそのまま残します.改造はご自由にどうぞ,ということで.
CRONで自動更新
HTTPD/CGIの実行ユーザーと同じユーザーのCRONジョブで実行するのが無難です。rna.cgiを実行し、標準出力は捨ててしまいます。間にシェルスクリプトをかますほうがいいと思われます。
/path_to_cgi/rna.cgi > /dev/null 2>1 &
テンプレートをカスタマイズ
テーマ(CSS)をカスタマイズ
2次アンテナ
管理しているRNA
(私的なRSSアグリゲータとして利用)
プライベートなLANにLinuxマシンを設置して、各種開発・実験をするときに利用しています。そこにRNAを設置しました。Nightly Build(開発版)を追いかけています。OPML example: knight20041222-opml.xml
SUPER RNA
このような名前を称していますが、実際にはただ少し運用を工夫しているだけの、普通のRNAです。安定性を重視し、正式版を採用しています。
自作プラグイン
RNA Chain
アンテナを更新された時に、別のRNAに向かって更新Pingを発信します。これにより、連鎖的に更新が伝播します。
開発中です。
2004-08-18 更新しました。
plugin/chain/chain.pl
※不完全です。取り扱い注意。
いまのところ単純にPingを発信する程度の機能しかありません。
スケジューリング
Ping発信する前に、粗末ですがチェック処理をするようにしました。あわせて1日に13回、以下の時間にのみPing発信します。混雑する時間帯を避ける、見てない時間は止める、という意図です。
- 2時, 3時, 10時, 13時から22時は1時間毎
念のため、更新Pingを発信する前にgetDateして、過去30分以内に更新をしているようだったらPingは中止します。
ToDo
- 自分に向かって発信しないこと(ループ回避)
- 更新するスケジュール(間隔)を調整可能にする
- 発信先の登録・管理(FOAFで?)
- など
いしだなおと it@isnot.jp