## $Id: function.tdf,v 1.17 2000/12/25 05:46:47 tom Exp $

TITLE 機能の詳細

HD 2 動作モード
ANCHOR mode
TDSでは、静的モード、動的モードを選択することができます。

HD 3 静的モード
あらかじめ日記HTML をファイルとして出力する方法です。
サーバーで CGI が使用出来ない場合は、こちらを指定します。

ITALIC web_diary_dir
 で、
CODE
% perl static.pl
    or
% make static
/CODE

とすると、

*.tdf などの日記ファイルから、最新版、月・旬別版の HTML ファイル、
一覧、URLリスト、辞書を生成します。

options:
UL
LI -r 最新版のみ更新
LI -t 最新版と今月のみ更新
LI -f 強制的に更新
LI -s 一覧のみ更新
LI -d 辞書のみ更新
LI -u URL のみ更新
/UL

HD 3 動的モード
CGIを利用し、リクエストを受け付けるごとに HTML を生成し出力する方法です。
月毎のHTML ファイルを出力する必要がないため、
手間とディスクスペースを節約することができますが、
サーバへの負荷はかかります。

次に述べるキャッシュ機能をつかえば、
負荷の軽減、高速化が可能になります。

HD 2 キャッシュ機能
HTML作成に一番時間がかかっているのは、
日記ファイルを読み込み、解析し、自動変換をする部分です。
そこで、
一日毎の HTML をキャッシュとして溜めておき、
日記ファイルが更新されてない場合、
それを利用することで、
大幅な時間短縮がはかれます。
これをキャッシュ機能と呼び、
動的静的に関わらず有効です。

HD 3 キャッシュディレクトリ
キャッシュファイルは、
動的の場合
ITALIC web_diary_dir
/cache/ ディレクトリに、
静的の場合
cache_static/ ディレクトリに生成されます。

HD 3 キャッシュファイル命名規則
CCYY年MM月DD日のキャッシュは
cCCYYMMDD.html というファイル名になります。
逆順表示分は、rCCYYMMDD.html です。
COMMENT
もし任意の日記が secret 部を含みかつ
非著者のアクセスがあった場合、
nCCYYMMDD.html に保存されます。
著者アクセスではキャッシュは利用されません。
/COMMENT

HD 3 キャッシュ稼動条件
UL
LI $TDS::Cache::EnableCache が真
LI 非著者アクセス
LI (動的の場合)refresh, keyword がパラメータに渡されていない
LI (動的の場合)cat が渡されていないか、あるいは cat=ALL の時
/UL

動的でキャッシュを使う場合は、
安全上の問題が生じます。
詳しくは、
LINK attention.html#security セキュリティについて
をご覧ください。

HD 3 消去
tdf の更新が検知された場合、
すべてのキャッシュは自動的に消去されます。

更新の検知は、以下のような手順で行います。

・キャッシュファイルを生成と同時にタイムスタンプファイル(update.stamp)を生成
・あるアクセスの際、update.stamp より tdf の方が新しければ更新されたと見做す

HD 2 PIM 機能
Private Information Management 機能です。
予定表と TODOリストを管理できます。

HD 3 予定表
ANCHOR schedule
ITALIC diary_dir
/dat/schedule.dat または
ITALIC diary_dir
/CCYY/schedule.dat に、
CODE
日付（タブ）内容
/CODE
の書式で記述すると、
SCHEDULEマクロの部分に展開されます。

日付の項目に使用できる記述方法は以下のとおりです。
TABLE
TR
TD CCYY/MM/DD
TD 1日のみ
TR
TD CCYY/MM/*
TD 指定年月全部
TR
TD CCYY/*/DD
TD 指定年の月毎指定
TR
TD CCYY/*/*
TD 年中
TR
TD */MM/DD
TD 年毎指定
TR
TD */MM/*
TD 指定月全部
TR
TD */*/DD
TD 月毎指定
TR
TD CCYY/MM/DD-CCYY/MM/DD
TD 範囲指定
TR
TD 曜日
TD 曜日毎指定。mon,monday,月 などの形式で指定可能
/TABLE

ITALIC diary_dir
/CCYY/schedule.dat では CCYY を省略することが出来ます。

内容の項目に %month, %next_month, %next2_month と記述すると，
それぞれ 該当月, 該当月+1, 該当月+2 に展開されます。
 %自体は %% と指定してください。

（例）
CODE
% cat ~/diary/dat/schedule.dat
*/04/15 誕生日(プレゼントは前後半年まで受付中)
*/*/18 月刊ほげほげ %next_month月号 発売
*/*/25 毎月給料日
/CODE
CODE
% cat ~/diary/2000/schedule.dat
2000/02/24 発表会
2000/04/* %month からの新生活に慣れる
2000/03/05-2000/03/11 春休み
tue 週刊ふにゃふにゃ 発売
/CODE

とすると、skelton.html で <!--#macro cmd="SCHEDULE" --> と指定したところに、

CITE
UL
LI 2000/01/25(Fri) 毎月給料日
LI 2000/02/15(Tue) 週刊ふにゃふにゃ 発売
LI 2000/02/18(Fri) 月刊ほげほげ 3月号 発売
LI 2000/02/24(Thu) 発表会
LI 2000/03/05(
COLOR red Sun
)-2000/03/11(Sat) 春休み
LI 2000/04 4 月からの新生活に慣れる
LI 2000/04/15(Sat) 誕生日(プレゼントは前後半年まで受付中)
/UL
/CITE

と展開されます。

HD 3 TODO
ANCHOR todo
ITALIC diary_dir
/dat/todo.dat に、
CODE
優先度（タブ）内容
/CODE
の書式で記述すると、
TODOマクロの部分に展開されます。

優先度は 0 から 99 までの整数値を取ります。

（例）
CODE
% cat ~/diary/dat/todo.dat
80 試験勉強
50 体を鍛える
99 日記を続ける
/CODE

とすると、skelton.html で <!--#macro cmd="TODO" --> と指定したところに、

CITE
UL
LI 
COLOR red 99 日記を続ける
LI 
COLOR orange 80 試験勉強
LI 50 体を鍛える
/UL
/CITE

と展開されます。

HD 2 自動置換機能
日記文中の任意の語句を，自動的に，別の語句と置き換えたり，
リンクを張ったりする機能です．
URL変換，用語変換，辞書の3つが使えます．

HD 3 URL 変換
ANCHOR replace_url
日記文中の特定の単語を，対応するURLへのリンクに置換します．
語句とそれに対応するURLは
ITALIC diary_dir
/dat/url.dat で指定します．
書式は
CODE
対象語 (タブ) URL
/CODE
と記述します．
たとえば，
ITALIC diary_dir
/dat/url.dat に
CODE
TDS     http://www.morito.mgmt.waseda.ac.jp/~tom/TomSoft/TsDiary/
/CODE
と記述すると，日記文中にある「TDS」という語が，
自動的に
http://www.morito.mgmt.waseda.ac.jp/~tom/TomSoft/TsDiary/
へリンクが張られた状態で出力されます．

また，対象語には正規表現が使用できます．
たとえば，
CODE
[Nn]amazu       http://saturn.aichi-u.ac.jp/%7Eccsatoru/Namazu/
/CODE
と記述すると，日記文中の「Namazu」および「namazu」がURL 変換の対象となります．

サンプルが用意されているので，それを参考にしてください．

HD 4 拡張変換機能
CODE
RFC *(\d{4})	ftp://ftp.waseda.ac.jp/pub/doc/RFC/rfc%1.txt
/CODE

のように %1 などでマッチング文字列を取得できます。

HD 3 用語変換
ANCHOR replace_term
日記文中の任意の語句を，別の語句に置換します．
対応する語句のセットは，
ITALIC diary_dir
/dat/term.dat で
CODE
置換したい語句 (タブ) 置換された語句
/CODE
のように指定します．

たとえば，
CODE
見れ    見られ
/CODE
のように記述しておくと，文中の「見れ」という語が，
出力されるHTMLファイルでは，全て「見られ」に変換されます．
#わかりにくい例でごめんなさいm(_ _)m

うまく利用すれば，プライバシー保護に有効です．
不特定多数に公開されるWEB日記では，自分の周囲にいる人の本名を，
無断で公開するのは避けることが望ましいと言われます．
しかし，日記には自分の記録のために，「○○さんと食事をした」などのように，
本名で書いておきたい場合があります．
この場合，*.tdfファイルにはすべて本名で書き，
term.datで「○○さん」を「某先輩」に変換するよう記述しておくと，
公開される日記では匿名性が保持でき，
かつ，本名を記録しておくことができます．


HD 3 辞書機能
ANCHOR dictionary
日記文中の任意の語句に，対応する説明文
(説明文は dictionary.html として出力されます)
へのリンクを張ります．

リンクを張りたい語句とその説明のセットは，
ITALIC diary_dir
/dat/dictionary.dat に記述します。

HD 4 書式
tdf コマンドを使用した書式にて記述します。

例)
CODE
WORD 404
PRONOUNCE よんまるよん
探し物が見つからないこと。HTTP の エラーコード 404 File Not Found が由来。
/CODE

WORDコマンドで用語を指定し、
PRONOUNCEコマンドで読みを指定し、
その後に説明文を記述します。

また、
ANCHORNAME コマンドで、
アンカーを指定することができます。

CODE
WORD たわごと日記
PRONOUNCE たわごとにっき
ANCHORNAME tawagoto_diary
今あんたが読んでいたもの
/CODE

とすると、
本文中の「たわごと日記」への辞書リンクは、
<a href="dictionary.html#tawagoto">たわごと日記</a>
となります（静的のとき）。
これを指定しない場合は、
WORDで指定された言葉を url encode したものになります。

説明文には通常の tdf コマンドがすべて使えます。

################################################################
HD 2 一言機能
日記閲覧者が気軽に著者にメッセージを送ることができる、
簡易掲示板的な機能です。

フォームに名前とコメントを入力し、サブミットすると、
それが指定場所に表示され、
著者とコミュニケーションを取る事が可能になります。

skelton.html に、

CODE
<!--#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" -->
/CODE

などと置くことにより、
入力フォーム、コメント出力などが行えます。

HD 2 検索
日記内検索を実現します。
CGIが使えなければなりません。

検索対象として、
指定月、最近3ヶ月、1年、すべて、
が選べます。

「すべて」は高負荷がかかるため、著者にのみ制限しています。

HD 3 シグネチャ法による高速化
デフォルトではベタgrep なのでかなり遅いですが、
シグネチャ法による高速化が可能です。

HD 4 設定
customize.pl で、
5.extend feature -> 6.use signature search method を yes,
7.signature directory を /home/foo/diary/sig
など適切に設定します。

HD 4 シグネチャ更新
web_diary_dir にある update_sig.pl を毎日実行し、
シグネチャファイルを更新します。

HD 3 カテゴリ分類
指定したカテゴリの日記を表示することができます。

HD 2 対アンテナ処理
ANCHOR hina 
HD 3 hina.di の出力
動的モードの場合、
その日記の最終更新時刻（以下 L-M）を
アンテナと呼ばれるエージェントが取得するには、
TsDiary.cgi という CGI を起動せざるをえず、
定期的なアクセスによる負荷の増大の原因となります。

そこで、TDS では、
日記の Document Information(以下 DI)を hina.di に出力することができます。
ただし、
CGIが所有者権限で動いているか、
hina.di があらかじめ cgi の権限(nobody など)で作成されていなければなりません。
もしそうでない場合は、log/hina.di に吐かれますので、
適宜 web_diary_dir にコピーしてください。

HD 2 絵日記システム
HD 3 設定
template.ph に

CODE
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;
/CODE

のように、

・$WithImage = 1 とする
・$Template との適切な場所に %daily_image を挿入する

また、

CODE
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";
/CODE

$SrcTemplate で画像ファイル名形式、
$ImageSuffix で画像の拡張子を指定。
$DefaultSrcTemplate で、
その日の画像が無い時表示する画像を指定。
undef だと表示しない。
$ConstantImageSize = 1 とすると、
画像サイズを固定。
$Width, $Height でそれを指定。
0 にすると自動取得。
