TDSでは、静的モード、動的モードを選択することができます。
あらかじめ日記HTML をファイルとして出力する方法です。 サーバーで CGI が使用出来ない場合は、こちらを指定します。
web_diary_dir* で、
% perl static.pl or % make static
とすると、
*.tdf などの日記ファイルから、最新版、月・旬別版の HTML ファイル、 一覧、URLリスト、辞書を生成します。
options:
CGIを利用し、リクエストを受け付けるごとに HTML を生成し出力する方法です。 月毎のHTML ファイルを出力する必要がないため、 手間とディスクスペースを節約することができますが、 サーバへの負荷はかかります。
次に述べるキャッシュ機能をつかえば、 負荷の軽減、高速化が可能になります。
HTML作成に一番時間がかかっているのは、 日記ファイルを読み込み、解析し、自動変換をする部分です。 そこで、 一日毎の HTML をキャッシュとして溜めておき、 日記ファイルが更新されてない場合、 それを利用することで、 大幅な時間短縮がはかれます。 これをキャッシュ機能と呼び、 動的静的に関わらず有効です。
キャッシュファイルは、 動的の場合 web_diary_dir*/cache/ ディレクトリに、 静的の場合 cache_static/ ディレクトリに生成されます。
CCYY年MM月DD日のキャッシュは cCCYYMMDD.html というファイル名になります。 逆順表示分は、rCCYYMMDD.html です。
動的でキャッシュを使う場合は、 安全上の問題が生じます。 詳しくは、 セキュリティについてをご覧ください。
tdf の更新が検知された場合、 すべてのキャッシュは自動的に消去されます。
更新の検知は、以下のような手順で行います。
・キャッシュファイルを生成と同時にタイムスタンプファイル(update.stamp)を生成 ・あるアクセスの際、update.stamp より tdf の方が新しければ更新されたと見做す
Private Information Management 機能です。 予定表と TODOリストを管理できます。
diary_dir*/dat/schedule.dat または diary_dir*/CCYY/schedule.dat に、
日付(タブ)内容
の書式で記述すると、 SCHEDULEマクロの部分に展開されます。
日付の項目に使用できる記述方法は以下のとおりです。
CCYY/MM/DD | 1日のみ |
CCYY/MM/* | 指定年月全部 |
CCYY/*/DD | 指定年の月毎指定 |
CCYY/*/* | 年中 |
*/MM/DD | 年毎指定 |
*/MM/* | 指定月全部 |
*/*/DD | 月毎指定 |
CCYY/MM/DD-CCYY/MM/DD | 範囲指定 |
曜日 | 曜日毎指定。mon,monday,月 などの形式で指定可能 |
diary_dir*/CCYY/schedule.dat では CCYY を省略することが出来ます。
内容の項目に %month, %next_month, %next2_month と記述すると, それぞれ 該当月, 該当月+1, 該当月+2 に展開されます。 %自体は %% と指定してください。
(例)
% cat ~/diary/dat/schedule.dat */04/15 誕生日(プレゼントは前後半年まで受付中) */*/18 月刊ほげほげ %next_month月号 発売 */*/25 毎月給料日
% cat ~/diary/2000/schedule.dat 2000/02/24 発表会 2000/04/* %month からの新生活に慣れる 2000/03/05-2000/03/11 春休み tue 週刊ふにゃふにゃ 発売
とすると、skelton.html で <!--#macro cmd="SCHEDULE" --> と指定したところに、
- 2000/01/25(Fri) 毎月給料日
- 2000/02/15(Tue) 週刊ふにゃふにゃ 発売
- 2000/02/18(Fri) 月刊ほげほげ 3月号 発売
- 2000/02/24(Thu) 発表会
- 2000/03/05(Sun)-2000/03/11(Sat) 春休み
- 2000/04 4 月からの新生活に慣れる
- 2000/04/15(Sat) 誕生日(プレゼントは前後半年まで受付中)
と展開されます。
diary_dir*/dat/todo.dat に、
優先度(タブ)内容
の書式で記述すると、 TODOマクロの部分に展開されます。
優先度は 0 から 99 までの整数値を取ります。
(例)
% cat ~/diary/dat/todo.dat 80 試験勉強 50 体を鍛える 99 日記を続ける
とすると、skelton.html で <!--#macro cmd="TODO" --> と指定したところに、
- 99 日記を続ける
- 80 試験勉強
- 50 体を鍛える
と展開されます。
日記文中の任意の語句を,自動的に,別の語句と置き換えたり, リンクを張ったりする機能です. URL変換,用語変換,辞書の3つが使えます.
日記文中の特定の単語を,対応するURLへのリンクに置換します. 語句とそれに対応するURLは diary_dir*/dat/url.dat で指定します. 書式は
対象語 (タブ) URL
と記述します. たとえば, diary_dir*/dat/url.dat に
TDS http://www.morito.mgmt.waseda.ac.jp/~tom/TomSoft/TsDiary/
と記述すると,日記文中にある「TDS」という語が, 自動的に http://www.morito.mgmt.waseda.ac.jp/~tom/TomSoft/TsDiary/ へリンクが張られた状態で出力されます.
また,対象語には正規表現が使用できます. たとえば,
[Nn]amazu http://saturn.aichi-u.ac.jp/%7Eccsatoru/Namazu/
と記述すると,日記文中の「Namazu」および「namazu」がURL 変換の対象となります.
サンプルが用意されているので,それを参考にしてください.
RFC *(\d{4}) ftp://ftp.waseda.ac.jp/pub/doc/RFC/rfc%1.txt
のように %1 などでマッチング文字列を取得できます。
日記文中の任意の語句を,別の語句に置換します. 対応する語句のセットは, diary_dir*/dat/term.dat で
置換したい語句 (タブ) 置換された語句
のように指定します.
たとえば,
見れ 見られ
のように記述しておくと,文中の「見れ」という語が, 出力されるHTMLファイルでは,全て「見られ」に変換されます.
うまく利用すれば,プライバシー保護に有効です. 不特定多数に公開されるWEB日記では,自分の周囲にいる人の本名を, 無断で公開するのは避けることが望ましいと言われます. しかし,日記には自分の記録のために,「○○さんと食事をした」などのように, 本名で書いておきたい場合があります. この場合,*.tdfファイルにはすべて本名で書き, term.datで「○○さん」を「某先輩」に変換するよう記述しておくと, 公開される日記では匿名性が保持でき, かつ,本名を記録しておくことができます.
日記文中の任意の語句に,対応する説明文 (説明文は dictionary.html として出力されます) へのリンクを張ります.
リンクを張りたい語句とその説明のセットは, diary_dir*/dat/dictionary.dat に記述します。
tdf コマンド*を使用した書式にて記述します。
例)
WORD 404 PRONOUNCE よんまるよん 探し物が見つからないこと。HTTP の エラーコード 404 File Not Found が由来。
WORDコマンドで用語を指定し、 PRONOUNCEコマンドで読みを指定し、 その後に説明文を記述します。
また、
アンカーを指定することができます。
WORD たわごと日記 PRONOUNCE たわごとにっき ANCHORNAME tawagoto_diary 今あんたが読んでいたもの
とすると、 本文中の「たわごと日記」への辞書リンクは、 <a href="dictionary.html#tawagoto">たわごと日記</a> となります(静的のとき)。 これを指定しない場合は、 WORDで指定された言葉を url encode したものになります。
説明文には通常の tdf コマンド*がすべて使えます。
日記閲覧者が気軽に著者にメッセージを送ることができる、 簡易掲示板的な機能です。
フォームに名前とコメントを入力し、サブミットすると、 それが指定場所に表示され、 著者とコミュニケーションを取る事が可能になります。
skelton.html に、
<!--#begin cmd="COMMENT" --> お名前:<!--#macro cmd=COMMENT_INPUT_NAME var="size=10"--> 一言:<!--#macro cmd=COMMENT_INPUT_CONTENT var="size=20"--> <!--#macro cmd=COMMENT_SUBMIT --> <br> <p> 最近の一言:<!--#macro cmd="COMMENT_SHOW_ALL_SUBMIT" --> </p> <!--#macro cmd="COMMENT_SHOW" var=5--> <!--#end cmd="COMMENT" -->
などと置くことにより、 入力フォーム、コメント出力などが行えます。
日記内検索を実現します。 CGIが使えなければなりません。
検索対象として、 指定月、最近3ヶ月、1年、すべて、 が選べます。
「すべて」は高負荷がかかるため、著者にのみ制限しています。
デフォルトではベタgrep なのでかなり遅いですが、 シグネチャ法による高速化が可能です。
customize.pl で、 5.extend feature -> 6.use signature search method を yes, 7.signature directory を /home/foo/diary/sig など適切に設定します。
web_diary_dir* にある update_sig.pl を毎日実行し、 シグネチャファイルを更新します。
指定したカテゴリの日記を表示することができます。
動的モードの場合、 その日記の最終更新時刻(以下 L-M)を アンテナと呼ばれるエージェントが取得するには、 TsDiary.cgi という CGI を起動せざるをえず、 定期的なアクセスによる負荷の増大の原因となります。
そこで、TDS では、 日記の Document Information(以下 DI)を hina.di に出力することができます。 ただし、 CGIが所有者権限で動いているか、 hina.di があらかじめ cgi の権限(nobody など)で作成されていなければなりません。 もしそうでない場合は、log/hina.di に吐かれますので、 適宜 web_diary_dir* にコピーしてください。
template.ph に
package TDS::Tdf::Command::DIARY; $Template = qq(<h2 class="tds-date"><a href="%href" name="%0d"> %week, %day %month_abbr %year</a></h2> <p class="diarypic">%daily_image</p>\n); $EndTemplate = qq(<hr>); $HrefTemplateDynamic = qq(./?%year%0m%part\#%anchor); $WithImage = 1;
のように、
・$WithImage = 1 とする ・$Template との適切な場所に %daily_image を挿入する
また、
package TDS::Tdf::Command::DAILYIMAGE; $SrcTemplate = qq(image/%year/%0m/%0d.%image_suffix); #$DefaultSrcTemplate = qq(image/default.%image_suffix); $DefaultSrcTemplate = undef; $Width = 240; $Height = 160; $ConstantImageSize = 1; $ImageSuffix = "jpg";
$SrcTemplate で画像ファイル名形式、 $ImageSuffix で画像の拡張子を指定。 $DefaultSrcTemplate で、 その日の画像が無い時表示する画像を指定。 undef だと表示しない。 $ConstantImageSize = 1 とすると、 画像サイズを固定。 $Width, $Height でそれを指定。 0 にすると自動取得。