# 機能の詳細

## 目次

1. 動作モード
   1. 静的モード
   2. 動的モード
2. キャッシュ機能
   1. キャッシュディレクトリ
   2. キャッシュファイル命名規則
   3. キャッシュ稼動条件
   4. 消去
3. PIM 機能
   1. 予定表
   2. TODO
4. 自動置換機能
   1. URL 変換
      1. 拡張変換機能
   2. 用語変換
   3. 辞書機能
      1. 書式
5. 一言機能
6. 検索
   1. シグネチャ法による高速化
      1. 設定
      2. シグネチャ更新
   2. カテゴリ分類
7. 対アンテナ処理
   1. hina.di の出力
8. 絵日記システム
   1. 設定

## 1.動作モード

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

### 1.1.静的モード

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

web_diary_dir* で、

>     % perl static.pl
>         or
>     % make static

とすると、

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

options:

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

### 1.2.動的モード

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

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

## 2.キャッシュ機能

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

### 2.1.キャッシュディレクトリ

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

### 2.2.キャッシュファイル命名規則

CCYY年MM月DD日のキャッシュは cCCYYMMDD.html というファイル名になります。 逆順表示分は、rCCYYMMDD.html です。

### 2.3.キャッシュ稼動条件

- $TDS::Cache::EnableCache が真
- 非著者アクセス**
- (動的の場合)refresh, keyword がパラメータに渡されていない
- (動的の場合)cat が渡されていないか、あるいは cat=ALL の時

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

### 2.4.消去

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

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

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

## 3.PIM 機能

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

### 3.1.予定表

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) 誕生日(プレゼントは前後半年まで受付中)

と展開されます。

### 3.2.TODO

diary_dir*/dat/todo.dat に、

>     優先度（タブ）内容

の書式で記述すると、 TODOマクロの部分に展開されます。

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

（例）

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

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

> - 99 日記を続ける
> - 80 試験勉強
> - 50 体を鍛える

と展開されます。

## 4.自動置換機能

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

### 4.1.URL 変換

日記文中の特定の単語を，対応する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 変換の対象となります．

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

#### 4.1.1.拡張変換機能

>     RFC *(\d{4})	ftp://ftp.waseda.ac.jp/pub/doc/RFC/rfc%1.txt

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

### 4.2.用語変換

日記文中の任意の語句を，別の語句に置換します． 対応する語句のセットは， diary_dir*/dat/term.dat で

>     置換したい語句 (タブ) 置換された語句

のように指定します．

たとえば，

>     見れ    見られ

のように記述しておくと，文中の「見れ」という語が， 出力されるHTMLファイルでは，全て「見られ」に変換されます．

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

### 4.3.辞書機能

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

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

#### 4.3.1.書式

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 コマンド*がすべて使えます。

## 5.一言機能

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

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

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" -->

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

## 6.検索

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

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

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

### 6.1.シグネチャ法による高速化

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

#### 6.1.1.設定

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

#### 6.1.2.シグネチャ更新

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

### 6.2.カテゴリ分類

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

## 7.対アンテナ処理

### 7.1.hina.di の出力

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

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

## 8.絵日記システム

### 8.1.設定

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 にすると自動取得。

[back]
Copyright(C) 2001