/ 最近 .rdf 追記 編集 設定 本棚

log[20090816] セクションごとに最終更新日時を(セクション単位の編集機能とからんでカオ)



20090816() トゲ界隈で蔓延しているようだが一抹の抵抗を試みる課金をするのはサービスの提供者~を課すっていうじゃないあなたは支払い義務を課されてるんだよと書こうとしてあれ課する? 課(おお)す? なにそれ

最終更: 2009-08-28T23:41+0900

[tDiary] セクションごとに最終更新日時を(セクション単位の編集機能とからんでカオ)

表示方法はこう

# coding: utf-8
require 'date'
add_section_leave_proc{|date, index|
  diary = @diaries[date.strftime('%Y%m%d')]
  next unless diary # in case @mode == 'preview'
  section, sidx = nil, 0
  diary.each_section{|sec| sidx+=1
    if sidx == index
      section = sec
      break
    end
  }
  lm = section.last_modified rescue next
  next unless lm
  lm = DateTime.new(*(lm.utc.to_a.values_at(5,4,3,2,1,0))).new_offset(Rational(135,360)) # 日本時間
  lm.strftime %<<p class="lastmodified">最終更新: %Y-%m-%dT%H:%M%Z</p>> # 色分けテストとして、あえてタグと同じアングルブラケットで囲ってみた。
}

DateTimeのオフセトの単位がわからんかったブラウザのブックマークRubyリファレスマニュアル - 20051129だからなあるりまには載ってるかもとりあえfraction of a day(date.rb documented by William Webber)とのこと慣れない Rationalを使ったもんだから Rational(135,360)と書くべき所に Rational(135/360)と書いてしまいオフセ0の結果にしばし首をひねったRational()の呼び出しより引数の評価の方が先だからやむをえないことだけど分数を表現するのにはやっぱり / を使いたい(使ってしまった)FixnumBignumのシームスな移行のように Rationalへも融通無碍に切り替わって欲しい利用者には Numericだけを利用しているように思わせるということ必要なときに整数化(小数化)メソドを呼ぶし変数に整数(や分母を 1に約分できる分数)が入ってることを利用者が知っていればそのまま整数を前提としたメソドを呼んだりできるといい変わるのは整数型の演算結果が整数型であることを前提にした(旧来の言語の呪縛に過ぎない)切り捨て除算がなくなる以外にあるだろうそれも Pythonみたいに // を割り当てれば無駄な有理数化再整数化を避けられる実感に基づいて既に通った(んじゃなかったっけな?)議論を蒸し返してみました俺は整数と小数の垣根を取っ払った JavaScript最初は驚いたけど評価しているJavaScriptのシンプルさが好きだセミコロンインサーションもCより怠けることを許していながらRubyの改行をターミネータにするやり方よりフーマトが自由で最高にバラスがいい(はまるのは returnだけだ)require 'rational'; 10.to_r/2 とか不格好すぎるでしドウェアと型から離れて本質に戻りましょう算数で割り算と分数は同じものだったはずだ。<追記@2009-08-22>require 'mathn' がつまり FixnumBignumRational(と Complex)をより親密にするおまじないでした(いまさら何を)mathnって読めない(マスエヌ?)のと名前から中身が想像できないのとで意識せず無視してたけどRationalとセトで見かけることが多かった気がするそれはそうとRationalComplexの細々した議論に埋もれて全体の方向性が見えないRuby 2.0あたりでは require 'mathn' が不要になっているんだろうか……。</追記>

るりまにはスタドアロンサーバー版と chm版よりスタック HTML版を用意して欲しいなあchmだと閲覧が IEースになってしまって文字の大きさやスクロール量進む戻るが自由にならなくて使いにくいマニュアルサーバーを起動しておくのは嫌ですよview.cgiCGIしようとしたらリンクがルトからの絶対スなせいで Not FoundApacheは既に動いてるから名前ベースのバーチャルホトや待ち受けポトの追加でるりまに一つのホ(or)を与えることはできると思うけど……大仰なのでやらないbase_urlのオプションが用意されてるから view.cgiの設定を間違えてるだけの気もするけど……わからない

組み込みの TimeUTClocaltimeしか扱わないのがもったいない任意のオフセトに基づいた日時を出力したいだけだからDateTimeは牛刀な印象がある。<追記@2009-08-21>ーくかんがえよ(命令形)・・・・・・・・なんてことはないオフセト分だけ未来(過去)UTC時刻が即ちローカルタイムだよ当たり前すぎて俺が何を言いたいのかわからないでしょう先のスクリト片の最後は DateTimeを使わずにこう書けるということです。

  lm = section.last_modified rescue next
  next unless lm
  offset = 9 * 60 * 60 # 秒
  lm_local = (lm + offset).utc # UTCと見せかけて lmの地方時。
  %<<p class="lastmodified">最終更新: %d-%02d-%02dT%02d:%02d%s%+03d%02d</p>> %
    [lm_local.year, lm_local.month, lm_local.day, lm_local.hour, lm_local.min, offset/60/60, offset/60%60]
}

……てなことをmakerss.rbの中の TDiary::RDFSection#time_string

  g = @time.dup.gmtime
  l = Time::local( g.year, g.month, g.day, g.hour, g.min, g.sec )

gmtimeに基づく年月日時分秒からローカルタイムを作っている部分を見ていて(遅まきながら)気付いたgmtimelocaltimeも皮をむけば UNIX epochからの経過秒に過ぎないんだからどういう意味を持たせるかはこちらの自由だった。まあ比較はできなくなりますが……(lm.to_ilm_local.to_i はその意味(同じ瞬間の別表現であること)を考えると望ましくない結果)</追記>

脱線終了表示するまでの仕込みがこんな感じ

add_last_modified_to_every_section@defaultio.rb (2.4KiB)
日記の一日分のデータの一部としてその日のセクションの更新日時をまとめて記録しているWikiStyleのフーマトの一部として更新日時や著者名を埋め込む方法があればそちらの方が利用者の自由度は高い
新設したヘッダ(Sections-Last-Modified)と日記の本文とが連動しているので tDiary以外から *.td2をいじりにくくなっている
add_last_modified_to_every_section@wiki_style.rb (1.7KiB)
都合が良いように変更
add_last_modified_to_every_section@tdiary.rb (10.6KiB)
っちゃりもちろん*今の*自分にとってはそうではない
tdiary_style.rbを変更してないから TDiarySection#last_modifiedは未定義tDiaryスタイルでも日記を書いてみて見つかったエラーは rescueした

主に plugin/makerss.rbからの要請で更新日時を記録したいのでっとした修正では最終更新日時は更新されないとかいいながらこの日記には変更のあったセクションを見つける別の方法が入っている(20090705p01)ので makerss.rbが最終更新日時を利用するようにはしていない


最初にポトされた時刻も有用だろうか? 日記だから最初にポトされた日はほとんど確定してるし時刻まで知りたいとも思わないけど


WikiSectionlast_modifiedプロパをくっつけたけどWikiSection自体はこれを管理してなくて外部から操作されるだけだってのがいけてないっぱり to_src()initialize()DUMP & LOADを担う(last_modifiedauthorその他の情報をフーマトに含める)メソド群を整備してこちらの望む操作を WikiDiaryWikiSection自身にやってもらう(自分でやるから付帯情報のコピー漏れも発生しない道理)のがいい


 2009-08-22

「編集でセクションを追加したとき更新日時のコピー処理でのぬるぽを修正(if old_section and...を追加し)