どうもみずほです。
At Tue, 4 Jun 2002 00:24:48 +0900,
TADA Tadashi <sho@...> wrote:
>
> ただただしです。
>
> いや、できればツッコミとrefererの保存はモジュール化したいと考えてい
> ます。もちろん独自に保存してもかまいませんが。
独自で保存するのはまずいでしょう。
Aというreaderで書いていて、Bというreaderに変えた時に
Aで書いていたツッコミとreferが使えなくなる可能性があります。
(すくなくとも変換用のコマンドなどを使わない限り
Aというreaderで書いていた時のツッコミなどが表示できなくなります。)
私はツッコミとreferの保存はtDiary側で完結する方が望ましいと思います。
> みずほさんがhnfを、どうのような特徴を持ったフォーマットととらえてい
> るのかわからないのですが、ある程度ルールを決めれば(例えばセクション
> 単位のみ認めるとか)追加だって問題ないと私はに思えるのですが。
セクション単位で追加というのは私も考えています。
> 追加が可能という特徴は、貧弱な環境(携帯やPDA)からの更新ができるよう
> になるという点で、(tDiary的に)とても価値があると考えています。できれ
> ばサポートして欲しいですし、できないならなぜできないのかを明確にして
> 欲しいと思います。
hnfの場合、セクションを明示的に指定しないといけないので、
セクションの指定を忘れるとヒドイことになります。
私が問題にしているのはその点ですね。
追加時に強制的にセクションのタグ(コマンド)を
入れることができるのならば、
追加のインターフェースも悪くないかもしれません。
# 対処療法でしか無いですけど。
> >3) visitorは携帯電話用のHTMLを出力できないと駄目か?
> >私はhnfの携帯電話用のvititorを書く気はないですし、書くことはできません。
> >(携帯電話を持っていないので、確認できない)
>
> これもtDiary的にとても価値のある機能だと考えているので、公式にはMUST
> としたいです。ただ、visitor作者が携帯電話で確認する必要はなくて、と
> りあえずCHTML風のものを出すようにしておけば、誰かがフォローしてくれ
> ると思います。
# 利用者がすくないと思うので、
# フォローしてくれる人はいない気がするのですが。
そうなると、CHTML用のvisitorも書かないといけないですね。
ところで、CHTMLの仕様書は下の文章であってますか?
http://www.w3.org/TR/1998/NOTE-compactHTML-19980209/
> ちなみに私は、w3mでUser-Agentに「DoCoMo」を指定して確認しています。
> 携帯で見ることは滅多にありません:-)
そういうものですか?
# いや、悪い意味ではなく。
> >4) 一ヶ月分の日記をすべてロードするという仕様
> この方式は、現状ではプラグインから活用されることが最大のメリットにな
> っています。少なくとも最近一ヶ月に関してはセキュアモードでも日記の内
> 容にアクセスできるわけです。代替案がない限り、この仕様は保持します。
分かりました。
> >1) もう一つキャッシュを導入して欲しい
> >現在、eRubyの出力をキャッシュしていますが、parseが終わった段階の構文木も
> >一ヶ月単位でPStore(もしくはそれに近い機構)でキャッシュできるようにして欲しいです。
>
> なるほど。これは、各IOが独自に実装するってことですよね。
いえ、tDiary本体で実装して欲しいです。それが駄目なら
tDiary本体でModuleとして提供して欲しいです。
> それとも実装に依存しない手法はありますか?
Marshalを「キャッシュ」として使うならば、
フォーマットや実装に依存することは無いと思います。
もちろん、
http://www.ruby-lang.org/ja/man-1.6/?cmd=view;name=Marshal
Marshalには上のような制限はありますが、
その制限に引っかかるような構文木を書くとは思えません。
キャシュとして使うならば、RubyのMarshalのバージョンが変わっても
キャッシュを消去するだけで良いので、問題は無いでしょう。
データを保存する方法はtDiary-1.4系で日記データを保存する時と
同じ方法で良いと思います。
> ちょっとみずほさんの抱いているイメージがよくわかりません。
tdiary-hnfのtdiary_bridge.rbのTDiary#transaction
の再定義の部分を読んでみてください。
# 手抜きの部分が多いですが。
> >2)parserとvisitorのrequire
> >すべてのキャッシュ( 1)のキャッシュも含みます )が効けば、上記2つのファイルを
> >requireしなくても良いのですが、そういう事は可能ですか?
>
> 重いファイルは別にして、キャッシュがヒットしなかった時だけ内部でrequire
> すればいいような。こんな感じ。
それは考えたんですが、どういう風に実装するか悩んでました。
> -- hogeio.rb
> class HogeIO
> def initialize( data_path )
> @data_path = data_path
> end
>
> def transaction(...)
> require 'hogeio_body' unless cache?
> ...
> end
> end
>
> -- hogeio_body.rb
> class HogeIO
> ...
> end
>
> -- tdiary.conf
> require 'hogeio'
> @io_class = HogeIO
変更すると、こんな感じでしょうか?
class HogeIO
def parse(str)
unless @parser
require 'hoge_parser'
@parser = HogeParser.new
end
@parser.parse(str)
end
def transaction(diary_objects, ...)
cache = get_cache(date)
(get_first_date..get_last_date).each do |date|
diary_obj = cache[date]
diary_src = get_diary_src(date)
if diary_obj
if (diary_src.last_modified >
diary_obj.last_modified) )
diary_obj = parse(diary_src.str)
end
else
diary_obj = parse(diary_src)
end
end
changed = yield diary_objects
...
end
end
上のような構成にすると、readerを指定した時点で
parser, visitor, writorが自動的に決まる
と思うのですが、その方向で問題無いですか?
***********************
NISHIO Mizuho
e-mail : gha@...
|