[日記/2004]

rNote 0.9.7 / 2004-10-01 (金)

 えー、rNote 0.9.7 をアップしました。

 実は、今回予定してた機能をまだ全て入れ終わってはいないのですが、そろそろまた仕事が忙しくなりそうで、しばらくこっちをいじってる暇が無くなりそうなので、ここらで一回切りを付ける事にしました。
 まぁ、先週「来週には公開出来ると思います」とか書いちゃったしー(^^;

 それはそれとして、あと3つで1.0.0か…ヤバいなぁ(^^;
 こんな事なら 0.0.1 から始めれば良かったと思う今日この頃~

 さて、今回の変更点ですが、以下のような感じです。

ページのキャッシュを生成

 今回の一番大きな変更点。

 初期の頃は結構軽かったので、これなら動的生成でも問題無いや…って思っていたのですが、バージョンを重ねる毎に、機能が増えた分、微妙に重くなってしまって。特に複雑なマクロ処理を行うと、結構処理時間を食っちゃってたので、これは何とかせねばと。

 で、抜本的対策として、生成したページの内容を、キャッシュとしてサーバーに保存するようにしました。これにより、誰かが一度表示した内容は、次回からは一瞬で帰って来ます。

 以前より実装されている If-Modified-Since 応答機能と合わせ、動的生成でありながら、静的生成とほぼ変わらない速度及びサーバー負荷となります。

 キャッシュは専用のフォルダに記録するようにしました。標準では cache と言うフォルダ名になります。
 ついでなので、従来 entries 以下に作成していたファイル情報等のキャッシュも、ここに生成するように場所を変更しました。  例によって rnoteconfig.php 内に、キャッシュの生成場所の指定として DIR_CACHE という項目が追加になっています。

 上に「生成したページを保存」と書きましたが、正確に言うと、保存してるのは最終出力一歩手前の状態です。というのは、カウンター等の一部のプラグインでは、アクセスされる毎に毎回処理を行う必要があるので。
 <%=$plugin%> 命令に cache="off" オプションを追加しました。これが付加されている場合、そのプラグインの出力はキャッシュには含まれず、毎回呼ばれるようになります。
 又、eval を有効にして、スキン中に php の構文で何か処理を行ってる場合も、その結果はキャッシュには含まれず、毎回処理が行われます。

 ひとつだけ弊害として、何か別のCGI等で作成したテキストを <%include%> 命令で挿入し、毎回表示を変更するというテクニックを使用している場合、挿入するテキストが変更されても、それは反映されなくなりました。
 evalを有効にして <?php print(file_get_contents('うんちゃら.txt'));?> とかで対処願います。

 キャッシュの内容は再構築でリセットされます。
 スキンの内容などを変更した場合でも、再構築を忘れると、延々とキャッシュの内容が表示され、更新が反映されません。
 従来から言ってますが、「何か変更を行ったら再構築」というのを忘れないようにしましょう。

携帯電話に対応

 携帯電話に対応しました(^^)/
 とりあえず今回の目玉機能。

 html_body_i.skin、html_item_i.skin、error_i.skin の3ファイルが携帯用のスキンになります。

 携帯用のスキンは、通常の rNote のスキンのように、ディレクトリの中に置いて…という形を取る事が出来ず、どのカテゴリであっても、常に entries 直下のこれらのスキンが使用されます。
 まぁ、ソースが少々見辛くはなりますが、<if category="うんちゃら"> で大抵の事は処理出来るので。

 あと、携帯専用のカテゴリ移動用ツールとして、i_category.php プラグインを新規に作成しました。

 えー、実を言いますと、テストが少々不十分です。私と友人の端末でテストしただけなので。
 もし機種によって、表示が崩れる、ツッコミやBBSの書き込み等で問題が出るなど、何かありましたら報告を宜しくお願いします。

 なお、もし「ウチのサイトはあまり携帯からは見て欲しくないんだけどー」という場合は、html_body_i.skin を以下のようにでも書き換えてください。

<html><body>
<h1><%=$site_title%></h1>
<center>(c)<%=$site_author%></center>
<hr>
当サイトは携帯からの閲覧には対応してません。パソコンでご覧になってください。
</body></html>

BBS関係

 以前のBBSは、POSTで送られてきたデータを全て、クエリ名をそのままタグ名として記事ファイルに記録するという仕様だったのですが、これだと後々問題が出そうでしたので、今回からは、クエリ名が "tag_" で開始してるものだけを、記事ファイルに記録するという形に仕様を変更しました。

 もし、BBS用のスキンをカスタマイズされてる方は、

<input type="text" name="AuthorName" ...

 のような行を全て、

<input type="text" name="tag_AuthorName" ...

 といった感じに修正願います。
 送信部分だけでなく、下の方の削除キーの所の name="tag_Password" も対象です。うっかり忘れそうに思えたので、一応念のため。

 なお、BBSの仕様に関しては、bbs/html_body.skin 内に詳しく書いておきました。アイコンを選択出来るようにしたい…という方は、スキンの中をご覧になって下さいませ。

 もう一点、BBS関係の変更点として、外部からのエントリ作成を許可するカテゴリの指定として $dir_access_enable という項目を、初期設定に追加しました。
 とりあえず安全策と言う事で。
 今回は見送りになってしまいましたが、将来 XML-RPC を実装する際も、これによって許可されたカテゴリ以外へのエントリの投稿等は禁止されます。

管理者ツール同梱

 今回から、管理者ツール(rnoteadmin.php)を同梱するようにしました。
 まだ、オンライン書きは出来ませんが、今回より一部の設定を rnote_config.php から外し、adminツールからオンラインで設定可能にしました。

 基本的な設定はやはり rnote_config.php で行うつもりなので、全てをオンラインで設定というわけには行かないと思いますが、追加の設定事項などはadminツールから行うようにし、今後はなるべく rnote_config.php の書き換えが発生しないようにし、バージョンアップの苦労を軽減出来るようにしていきたいと思ってます。

 本当はバージョンアップは、rnote.php 本体だけを差し替えればオッケー、…という状態になれば理想なんですが、そうなるにはもうしばらくかかりそうです。申し訳ないm(_ _)m

命令の追加変更など

<%=$plugin%> 命令に cache="off" オプションを追加

 キャッシュの所で説明した通りです。

targetblank オプションを追加

 <%=$Text targetblank="true"%> 等と記述すると、記事内の外部リンクに target="_blank" を自動で追加します。
 本当はリンクをどう開くかというのは、ページ製作者ではなくユーザーのオペレーションで決定されるべきであり(タブブラウザ使ってるのに勝手に新規ウィンドウ作られると迷惑だよね~)、xhtml 1.1 から target 属性は廃止になっていますが、実際問題として InternetExplorer を使ってる人がほとんどという状況下で、外部リンクは別ウィンドウで開いてくれた方が便利だという人が多勢を占めますので。

ITEM用スキンとツッコミ用スキンの区別を無くした

 従来、ITEM用スキンとツッコミ用スキンが分かれてましたが、ITEM用スキン中でリンク元件数等を表示したいという要望があるようでしたので、区別を無くし、従来ツッコミ用スキンでしか使用出来なかった命令全てを、ITEM用スキン中でも使用出来るようにしました。
 実際、今回作成した携帯用のスキンでは、<%=$WriteBack%> 命令を使用せず、ツッコミ等の表示も全て html_item_i.skin で行っています。

リンク元の総数を追加

 <%=$NumRF%> を追加しました。

BBSでコメントが付いたら上に表示する機能を追加

 実験的に、BBSでコメントが付いたら上に表示される機能を付けてみました。
 <%=$site_items%> 命令のソート種別に cr と cf というのが追加されています。cf がコメント込みのタイムスタンプ正順、crが逆順ソートになります。
 もっとも、cf(コメントが付いたら下がる)って、多分絶対使わないとは思うけどー(^^;

<%=$navi_forthback%>命令にオプション追加

 前後移動ナビに compact, prev_str, next_str の3つを追加しました。
 compact は表示がコンパクトになります。携帯用に追加しました。
 prev_str,next_str が指定されている時は、単一ファイル表示時、前後移動が記事名ではなく、指定の文字列になります。

<%=$navi_forthback prev_str="←前の記事" next_str="次の記事→" %>

のように記述します。

トップページの判断

 マクロで <if flag="bHome"> というのを追加しました。トップページで true になります。

モード名を指定して動作を分ける事を可能にした

 例として、まず、以下のようにリンクを張ります。

<a href="<%=$site_link url="bbs/" mode="bbs_write" %>">[掲示板に投稿]</a>

 <if mode="bbs_write"> で、これを判断する事が出来ます。
 要するに、同じページ(この場合は bbs/ )であっても、モード(この場合は bbs_write )の有無でページの内容を変更する事が出来ます。モード名は自由に指定が可能です。

 携帯用のスキン作成時に「こんな機能が要るなぁ」って思って付けたのですが、他にも結構便利に使える機能ではないかと思います。

<%=$site_items%> に start, end オプションを追加

 例えば、日記ページが以下のようになっていたとします。

9日の日記
8日の日記……絵あり
7日の日記
6日の日記……絵あり
5日の日記……絵あり
4日の日記
3日の日記……絵あり
2日の日記……絵あり
1日の日記

 サイドバーに「Recent Images」を追加しようとした時、(この例では絵は毎日ある訳では無いので)従来は「Recent Images は必ず4つ表示」というのは不可能でした。これを可能にしよう、という訳です。

 実際の方法ですが、以下のようなスキンを用意し、html_recentimg.skin としてセーブします。絵の無いエントリは、全く表示が行われない、というのがミソになります。

<if def_tag="Thumbnail">
<a href="<%=$Url%>"><img src="<%=$Thumbnail%>"></a>
</if>

<%=$site_items%> 命令の方の記述は、以下のような感じになります。

<%=$site_items start="2" end="4" skin="entries/html_recentimg.skin" url="diary/"%>

 start と end は、マクロ処理の結果、表示すべきものが無かった場合はカウント対象になりません。結果、この例では 6日、5日、3日の Thumbnail が表示される事になります。

私信:やっと標準機能として付いたですよ>かろかろ様

プラグイン関係

  • navitools.php のカレンダーのスタイル説明の所に
    table.calendar tr.caption th … キャプション(年と月)
    …と書いてあるにも関わらず、実際はtdのままだったのを修正しました。
  • no-count(記事数の数字を表示しない)、no-home(カテゴリでHomeを表示しない)を opt で指定可能にしました。
    詳しい使い方は navitools.php 内に記述してあります。
  • 携帯用のカテゴリ選択ツールとして i_category.php プラグインを新規に作成しました。

0.9.6からの移行方法

  1.  まず、rnote_config.php の内容の修正をお願いします。
     DIR_CACHE と $dir_access_enable の2つが追加、RETURN_IF_MODIFIED と FNAME_SKIN_ERROR404 が削除になっています。
  2.  次に、BBSの仕様が変更になってますので、bbs/html_body.skin の修正をお願いします。
  3.  cache という空フォルダを作成し、パーミッションを(777)にして下さい
  4.  追加変更になったファイル、及び rnote.php 本体の差し替えを行います。

 以上の手順で移行出来ると思います。

 なお、従来 entries フォルダに作成していた .cache ファイル(3つあると思います)は、消してしまって構いません。

次回以降の作業

認証画面

 要するに「ここから先にはアダルト画像があります。あなたは18歳以上ですか?」という類の画面~。やっぱ必要だよね?ね?(^^;

XML-RPCの実装

 こうさぎ~

シンボリックファイル

 「重要な記事の一覧」のようなカテゴリを作りたい…という事で頂いている要望です。
ちょい時間がかかりそうなので、今回は断念しました。申し訳ない。

カテゴリ名置換ルーチンの修正

 今、例えば掲示板を2つ設置して、それぞれ bbs/01/、bbs/02/ というディレクトリ名にした場合、掲示板/January/ とかになっちゃうんですよね。これは早急になんとかせねばと前から常々。
 ただ、かと言って「正規表現で設定してください」にしてしまうと、ほとんどの人が設定出来なくなってしまうので、何か良い方法は無いものかと思案中~

ヨコ型ナビツール集

 tDiary標準のカレンダーのようなヨコ型カレンダーをはじめとする、上部に設置するタイプのツール一式。要するにサイドバー無しのデザインにも対応したい、と。
 流石にあれもこれもやってる時間は無いので、この類のは、誰か作ってくれると嬉しいのですが~

BBSにファイルアップロード機能

 あと、出来れば、お絵描きBBS化も出来るようにしたいですなー

BBSのツッコミにもアイコン

 要望は判るんですが、これは実現するのは結構難しそうだよなぁ…

 ただ、ツッコミは、他所のblog見て「まぁこんなもんだろう」って感じで固定フォーマットでガチガチで作っちゃったんだけど、今となっては、エントリ作成はこれだけ自由度が高いのに、ツッコミの方は全く拡張性が無いと言うのは、流石にどうよと思うので、いつかは何とかしたい所~。

 …あと、あとなんだっけ?まぁともかく、まだまだ実装せねばならない機能は多数あって困ったもんだ状態。しかも後から後からどんどん沸いて出るし。あと3つで本当に落ち着くのか?

 今大体、月イチペースでバージョンアップしてますので、そうすると、1.0.0 はクリスマス頃か?なのか?むぅ。

[ ツッコミの受付は終了しています ]
1: おおき (10/02 02:48) yosiho(あっとまーく)palette.plala.or.jp
今回のバージョンアップとは関係ないかもしれませんが、しばらく前からRSSの解析エラーが
出てしまっています。
ビューアはFirefox上のSageというExtensionです。Firefoxは1.0PRでSageは1.2.2です。

エラーメッセージを貼ろうかと思ったんですが横に長くて邪魔そうなのでメールしておきますね。
2: もりたば (10/02 04:12)
はじめまして。rNote使わせてもらってます。
こちらのページのRSSファイル、トップページがそのまま出力されてるみたいです。
3: 冬星 (10/02 15:55)
rss.rdfの中身がトップページのxmlになってしまう件ですが、今回実装のキャッシュ生成をoffにすると解消します。
CreateHTML()の修正が関係しているのかも?
4: ヘンゼルの記憶 (10/02 21:35)
バージョンアップおめでとうございます♪
さっそく移行作業開始しています。

それで、えと、勘違いだったらごめんなさい。
もしかして plugin の cache は 'on' も 'off' も同じ結果になっているのではないでしょうか?
5: 亜樹良 (10/03 01:35)
ここのツッコミぜんぜん見てなくて、掲示板の方に書いてしまいました・・・
RSSのこともですが、もうひとつバグというか危ないのがあって、
クッキー使って生成しているページは(BBSとか)キャッシュに残ります。
名前やらパスワードが生でキャッシュファイルに残っていました。
心配な人はクッキー系のタグをはずすかキャッシュをOFFにした方がいいと思います。
この記事のリンク元