2001-12-21(金) 7391歩 [長年日記]
■ Funny Video Clips of Cats and Kittens
猫好きでブロードバンドな人は要Bookmark。たまりません。元ネタはお笑いパソコン日誌。
そういえば、うち(の隣)の茶々は最近、食って出ていくだけになってしまった。寒いんだから、ホットカーペットの上で寝ていけばいいのに。
■ tDiary
いろいろ。
■ 左のナビゲーション、読み上げブラウザに対して親切ではない、というのは知っていたけど忘れてた(笑)。というわけで、見た目は左に置きつつも、実はそうじゃないというレイアウトにしてみた。CSS参照。これならCSS非対応のブラウザでも邪魔じゃない。もっとも、禁断の「position: absolute
」を使っちゃってるのがアレなんだけど。
■ zoeさんのプラグイン3個。ツッコミランキン、真月記長、日記長。なるほど、日記長はパラメタ渡しにしたわけだ。まぁ、これくらいしか策はないでしょうなぁ。
それにしても、tDiary Themesの次はtDiary Pluginsを作らないとダメかも?(笑)
■ tDiaryプラグインTips(3) - 先月分のtitle_list
先月分のtitle_listはどうすればというリクエスト。ソースに手を入れない姑息な方法として、こんなのはどうでしょ(もちろん@secure
はfalse
)。先月分だけしか出してないけど、元の@diaries
とマージすれば2ヶ月分出るかと。
eval( <<MODIFY_CLASS, TOPLEVEL_BINDING ) class TDiaryMonth attr_reader :diaries # ぉぃ... end MODIFY_CLASS def title_list cgi = CGI::new now = @date ? @date.dup : Time::now if now.month == 1 then cgi.params['date'] = [format( '%04d12', now.year - 1 )] else cgi.params['date'] = [format( '%04d%02d', now.year, now.month - 1 )] end month = TDiaryMonth::new( cgi, '' ) result = '' month.diaries.keys.sort.each do |date| result << %Q[<p class="titlelist"><a href="#{@index}?date=#{date}">#{month.diaries[date].date.strftime( @date_format )}</a><br>] month.diaries[date].each_paragraph do |paragraph| result << %Q[#{paragraph.subtitle}<br>] if paragraph.subtitle end result << '</p>' end result end
2001-12-20(木) 8600歩 [長年日記]
■ 本日のハンティング
Hysteric Programmer 日記を捕獲しました(133)。爆発しますかねぇ。あんまり増えるとアンテナの負荷が……(笑)。
■ マウスがトロい(4)
$!なんて……また新事実だ。shやbashのmanには載ってないんだけど、どこ見ればいいんだろう……。いずれにしても、ちゃんと動いてるみたいっす。ありがとうございました。
ツッコミの件は、空のaction
をカレントディレクトリと認識するブラウザなら動くようですね。
■ おお、Special Parameter。見つかりました。なるほど、深いな。$?
なんかは(よく知らずに)使ってたこともあるんだけどな。その仲間だったのか。
■ 弁当屋受難
いつも会社の前に群がっている弁当屋の集団が、今日、いっせいに摘発(?)されたらしい。まぁ、道路占有許可をとらずに歩道で商売していたのはたしかに違法だ。
しかし、だ。なにも、昼休みの直前にやるこたぁないんじゃないの、警察さんよ。庶民の昼食を奪って嬉しいか。あんたら、誰のために働いてんのか、きっちり考えてから動けよな。公務員だって顧客志向だろ、これからは。
というわけで、今日はちゃんと許可をとって営業しているぐっでぃのカレー。明日からは戻ってきてくれないと毎日カレーになってしまう。困る。困るぞ。
■ tDiary
スナップショットを1.3.1.20011220に。夕べと休み時間の成果。詳しくはChangeLogを参照してもらうとして(ちなみにCHANGES→ChengeLogにファイル名変更)、プラグインまわりの整備がメイン。まだ仕様が固まってないのでスナップショットで。なんだか、どんどん重いシステムになっているような気がする(きっと気のせい)。
■ まず、プラグイン内で@diaries
が見えるようになった。zoeさんトコでツッコミランク・プラグインがうまくいっていなかったのは、プラグインの初期化のタイミングを(おれが)間違えていたため。最後のeRuby解釈の直前で初期化するようになったので、こんどは大丈夫。でも、@comment_limit
は見えないから、「100」とでもしてしまった方がよいですよ。
■ 次に、複数の日記を同一マシンで動かしている人の負担を軽減。シンボリックリンクするファイルを、index.rbとupdate.rbだけにして、残りはリンクを遡って元のインストールディレクトリから探すようにした。あとはtdiary.confを個々の日記別に作ればいいので、メンテがだいぶ楽になったかと。
ところが、唯一テーマだけが対応できない。なぜなら、CSSファイル名を埋め込む時に、元ファイルからの相対パスになってしまうため。header.rhtml内に実際のURLを渡せれば解決するのだが……あ、プラグインで実現できるじゃん!! ということで、theme_url
というプラグインを実装。ここでテーマの入ったURLを指定すれば良い。
■ この考え方を拡張すると、現在rhtmlファイルに埋め込んであるメッセージは、すべてプラグインで変更可能にできるってことになる。つーわけで、「本日のリンク元」とか「本日のツッコミ」などの文字列をすべてプラグインに追い出す。これを推し進めれば、国際化も可能である。もっとも、rhtmlファイルの可読性はさらに低下した模様。
■ さらにプラグインを追加。title_list
は、現在表示している月のタイトル一覧を生成するもの。これはトライアルなので、今後仕様が変わる可能性大。試しにここにいれてみたけど。重いかもね。レイアウトもかなり制限されるし。
■ tDiaryその他
Content-Length、そうか、XREAは自動的に広告挿入するんだもんね。あれ、じゃあGETの場合はちゃんと再計算してくれてるの?
あと更新ページからのリンクは、自分の日記本文中のリンクを更新完了時にたどってしまった、という話だと思われ。タグを無効にでもしない限りこれは防げないのではないかな。つーか、そういうミスがあるからこそ捕獲できた日記も少なくないので、おれ的にはOK(笑)。
■ ビッグニュース
新横浜のSuica対応改札が4台になりました!!
◆ なかだ [kill $!では。 ツッコミ自体は別になんともなくできましたが。]
◆ skamio [$!は man bashの "Special Parameters"(jmanなら 特殊パラメータ)の項ですな。 !..]
◆ zoe [あれ??いつのまにやらあっぷしてる。。]
◆ きた [Pluginの中で先月の@diariesにアクセスできないものでしょうか? そうすれば先月分にさかのぼってtitle..]
◆ はんばあぐ [Hysteric Programmer日記管理人です。捕獲してくださりありがとうございます。 きっと爆発しますよ。こ..]
◆ でんすけ [ぬぬ、たださんって横浜方面の方なのねん。]
2001-12-19(水) 10404歩 [長年日記]
- ツッコミサマリ表示を60→120文字に拡大
- ツッコミサマリがあふれた場合、古い方から非表示にして「Before...」とした
- 本日のリンク元を、ツッコミのフォームの下に
- セクションを囲む<div class="section">...</div>を新設
- デフォルト提供のプラグインを00default.rbに統合
- プラグインのnaviをnavi_userとnavi_adminに内部分割
- 存在しないプラグインを呼び出しても落ちないように対策
- Varyヘッダを出すようにした
- 他、ちょこちょこ
■ ツッコミサマリの文字数は可変にしてもいいんだけど、これくらいがちょうどいいんじゃないかと思うので、とりあえず固定のまま拡張。
■ 「More...」の代わりに「Before...」にしたのには賛否両論あるかも知れない。「Before」という表記も含めて。「これ以前のツッコミ」の方がわかりやすいか。
■ ツッコミフォームの位置を変えたのが一番影響がありそう。困るのはNebulaのようなテーマのレイアウトが崩れること。でも、インタフェース的にはぜったいこの位置が良いと思うのだが、どうだろうか。
■ 古いプラグイン(calendar、navi、insert)は削除してくらはい。naviの内部分割によって、けんのぼやきにあった指摘をフォローできる。この話はあとでTIPSにでも。
■ マウスがトロい(3)
昨日のスクリプト、今朝、電源を入れたらjob制御が効かずにエラー。そこで以下のように修正。わざわざRubyを使っているのは、Cygwinのcutコマンドの挙動がなんか変だったのと、代わりに使おうと思ったawkの文法をすっかり忘れたため(←ダメダメ)。job制御って、対話状態じゃないと使えないのかにゃ?
/Program\ Files/Logicool/MouseWare/system/EM_EXEC.EXE & sleep 5 kill `ps | grep EM_EXEC | ruby -ne 'puts $_.split[0]'`
■ tDiaryプラグインTips(2) - ナビゲーションボタンの配置
今日のスナップショットから、ページ最上部にあるナビゲーションボタンを実現するnavi
プラグインをちょっといじりやすくしてある。「トップ」「最新」「前日」「翌日」からなる読者向けプラグインnavi_user
と、「更新」「設定」からなる管理用プラグインnavi_admin
。個々のボタン別に分けてもよかったんだけど、使いやすさのバランスをとって2分割。
これで、読者用のボタンはページトップに置きたいけど、管理用のは下の方にしたいなんて要求に応えられる。例えば@header
に
<p class="adminmenu"><%=navi_user%></p>
@footer
に
<p class="adminmenu"><%=navi_admin%></p>
なんてやるわけだ。ただし、更新や設定用の画面ではnavi
をページトップに埋め込んであるので、この位置は変更できない。まぁ、読者に見えるわけじゃないからいいでしょ。
さらに、自分で新しい.rbファイルを起こしてその中にnavi_user
やnavi_admin
を再定義してしまえば、ボタンのラベルや表示順序も自由にできる。
ちなみにnavi
系プラグインで使っている@mode
という変数には、現在動作しているモードが入っている。これはtdiary.rb
内で定義されているTDiaryHogehoge
系クラスの「hogehoge
」の部分(小文字化されている)。これで現在どんなページを処理しているかがわかる。でもこの仕様はどっかで変わるかも知れない。手抜きが見え見えだし。
◆ きた [うぉっ! そうかー,CGI.newしてTDiaryMonthに喰わすのか. それは気がつかなかった. TOPLEV..]
◆ slim [電柱から飛ぶ猫、すごいですねー。]
◆ みずほちゃん [http://www.spc.gr.jp/tdiary/ からドキュメントを探してました。どうもすいませんでした。]