chalow にはカテゴリ機能がある.というか複数つけられるのでタグと呼んだ方がいいのかもしれないけどそれはともかくとして.
で,私は不精なのでほとんど misc とか tech とかになっててあまり活用していないのだけど,後から複数の記事にまとめてカテゴリをつけたくなることがある.たとえば自分が錯視にこんなに興味があるとは思ってもみなかったのだが,気づくと何だかシリーズみたいなことになっていて,カテゴリをつけたくなったりした.
というわけで可能な限り最小労力で,複数記事に「後づけカテゴリ」をつけられるようにしてみた.しばらく動かしてみたけど特に問題なさげなので,晒しておきます.
まずこんなファイルを用意:
%illusion% [2006-10-21-2] 同じ色に見えない錯視[misc] [2006-07-19-1] 回る人影 - 錯視[misc] [2006-07-12-1] ジャストロー錯視[misc] %mhc% [2006-10-15-1] mhc-cvs[badinerie][tech] [2006-09-09-1] MHC の小ネタ[tech] [2005-07-18-4] MHC の conflict 検出機能[tech]
カテゴリ名を % と % で囲んだ行に続いて,角括弧で囲まれた記事 ID [YYYY-MM-DD-I] が先頭にあるような行を並べる.行の後ろの方は何か書いてあっても書いてなくても構わない.実はこれ,clsearch.cgi で mode=2 のときの表示をコピーペーストしたものになっている.
このファイル (仮に postcat.dat とする) を,chalow が %all_entries を作った後,%category_count を作る前の辺りで読み込んでおく:
} store_entry(\%all_entries, \@entlines) if (@entlines > 0); close F; } ## ここにつっこむ use postcat; if (-e "./postcat.dat") { &postcat::read_postcat(\%all_entries, "./postcat.dat"); } ## ここまで #debug_print(\%all_entries); foreach my $ymd (keys %all_entries) { my $ent = $all_entries{$ymd}; for (my $i = $ent->{curid}; $i >= 1; $i--) { if (defined $ent->{$i}->{cat}) {
postcat.pm はこんな感じで:
package postcat; use strict; sub read_postcat { my ($aep, $file) = @_; my $cur_cat = ''; open(POSTCAT, $file) or die; while (<POSTCAT>) { if (/^\s*%([^%]+)%/) { $cur_cat = $1; } elsif (/^\s*\[(\d{4}-\d{2}-\d{2})-(\d+)\]/) { &append_cat($aep, $1, $2, $cur_cat); } } close(POSTCAT); } sub append_cat { my ($aep, $ymd, $i, $cat) = @_; return unless $cat; my @orig_cat = @{$aep->{$ymd}{$i}{cat}}; foreach my $c (@orig_cat) { return if $c eq $cat; } push(@{$aep->{$ymd}{$i}{cat}}, $cat); } 1;
本当はもとの ChangeLog メモとかに反映できる方が便利なのかも知れないけど,それはそれでやろうと思えばすぐできそうなので,必要になったらでよいかなと.
chalow の「Referrer (Inside)」機能を常用している話は以前書いた [2006-05-05-1].
でもこの [YYYY-MM-DD-I] みたいな文字列を書くのって面倒くさくないすか? エディタ上で作業するなら該当記事を探して,日付を確認して,何番目の記事かを確認して…になるわけだけど面倒くさすぎる.そんなわけで,ブラウザで自分のページを開いて clsearch.cgi で検索してコピーペースト…ってのが最近の自分的主流なのですが,やっぱり作業は emacs の中で閉じている方が楽だ.
とここまで書いて,w3m.el でも使えばいいんじゃね? とか思ったがそれは気づかなかったことにして,
この [YYYY-MM-DD-I] な文字列を kill-ring につっこむ elisp を書いてみました.勢いだけで書いたので処理が汚いのは勘弁して頂くとして,というかあまりテストしてないのですが,一応動いている模様なので貼っておく.
(defvar chalow-date-regexp "^[01-9]+-[01-9][01-9]-[01-9][01-9]") (defvar chalow-itembullet-regexp "^\t\\*") (defun chalow-date-to-datestr (str) str) (defun chalow-kill-datestr () (interactive) (save-excursion (let ((curpos (point))) (if (re-search-backward chalow-date-regexp nil t) (let ((itemnum 1) (dstr (buffer-substring (match-beginning 0) (match-end 0)))) (goto-char curpos) (if (not (re-search-forward chalow-date-regexp nil t)) (goto-char (point-max))) (while (re-search-backward chalow-itembullet-regexp (1+ curpos) t) (setq itemnum (1+ itemnum))) (kill-new (format "[%s-%d]" (chalow-date-to-datestr dstr) itemnum)) (message (car kill-ring))) (message "date not found")))))
Ctrl-S とかで (別に他の何でもいいですが) 該当記事を探して,その記事の途中のどこかで M-x chalow-kill-datestr すると kill-ring に [YYYY-MM-DD-I] が追加されるので,Ctrl-Y で貼りつけます.
先頭の方の変数とかをいじれば,ChangeLog とは違うフォーマットで書いている場合にもある程度適用できるんではないかと思います.(というか私がそうしてます)
最近,copyurl+ とかでページタイトルをコピーしたり,bloglines のアイテム名をコピーしたりして,そのまま ChangeLog メモに貼りつけている場合が多い (いったん俺フォーマットを経由してですが).
コピーしたページによっては,タイトルの先頭にカテゴリ名がついている場合とか (tDiary なんかが典型),ちょっと前に流行った一文字 blog 略号 (?) がついている場合がある.それを ChangeLog メモ記法にそのままコピーして,末尾にカテゴリ名をつけるとこうなる.
* [を] chalow でアスキーアートを表示するためのプラグイン [tech][aa]:
- http://nais.to/~yto/clog/2006-09-23-3.html
これを chalow の ChangeLogReader.pm でそのまま読み込むと [を]〜 [tech][aa] 全体がカテゴリリストと認識されて,ちょっこすおかしなことになることに気づいた.
というわけで修正してみる.ややこしいな.合ってますかこれ?
- if ($ih =~ s/\s*\[(.+)\]$//) { # category + if ($ih =~ s/\s*\[(([^\[\]]+\]\s*\[)*[^\[\]]+)\]$//) { # category @cat = split(/\s*\]\s*\[\s*/, $1); }
ここしばらく,外部に公開する記事しか chalow を通していなくて,外部に公開する記事の場合タイトルとかは自分で整理し直すので気づいていなかった.ふと久しぶりに全記事を chalow に通したら「File name too long」なエラーが出て気づいた.
(追記) 例が適切でなくて誤解を招いてしまったのでちょっと修正.カテゴリは複数つく場合があるんです.まとめて切り出した後,split する処理が続いているコードでした.
* [かがみ] ああなるほど.空白に対してロバストにするなら s/(?>[^\\s\\]]... (2006-10-13 06:33:05)
* [otsune] それでsplitするのなら s/(?>\\s\\[)(.+)\\]$//で... (2006-10-12 05:05:59)
* [かがみ] すみません.わかりにくかったので本文修正しました.私の元の書き方では伝わるはずが... (2006-10-12 03:34:37)
* [otsune] ああ、勘違いしてました。s/(?<=\\s\\[)([^\\]]+)\\]... (2006-10-11 23:08:01)
* [かがみ] 試してみましたが,うまくいかないようです.% perl -e \'$ih = &... (2006-10-11 04:00:17)
* ...
「画像で取得するAPI」ではてなブックマーク件数をお手軽に表示してみた矢先なのだが [2006-07-15-3],やっぱりやめた.
はてなが重いときとか反応しないときに,自分のページの表示が影響を受けるのが嫌だってのがまずあるけど,そのときに,あー,俺いまはてなサーバに無駄に負担かけてるーという罪悪感があって精神衛生上よろしくない. (いや,もちろんトラフィック全体からみると,うちから発生する分なんて誤差に過ぎないわけですが,単に気持ちの問題なので)
つうわけで真面目にはてなブックマーク件数取得APIを叩いてみることにしたですよ.
やり方はいろいろあると思いますが,定期的に件数を取りに行っておいて, HTML から SSI で include することにしてみた.こんなのを cron で定期的に走らせます:
#!/usr/bin/perl use strict; use XMLRPC::Lite; my $html_clog_url = 'http://www.kagami.org/diary'; # don't add trailing slash my $html_clog_dir = '/home/swk/www/diary'; my $hatebu_count_dir = '/home/swk/www/hatebu_count'; my $EndPoint = 'http://b.hatena.ne.jp/xmlrpc'; my @urls = (); while (<$html_clog_dir/*.html>) { next unless /\/(\d{4}-\d{2}-\d{2}-\d+)\.html$/; my $ymdi = $1; push(@urls, "$html_clog_url/$ymdi.html"); if (@urls == 50) { &writecount(\@urls); @urls = (); sleep(3); } } if (@urls > 0) { &writecount(\@urls); @urls = (); } sub writecount { my ($uref) = @_; my $map = XMLRPC::Lite->proxy($EndPoint) ->call('bookmark.getCount', @{$uref})->result; foreach (@{$uref}) { my $url = $_; my $count = $map->{$_}; my ($ymdi) = ($url =~ /\/(\d{4}-\d{2}-\d{2}-\d+)\.html$/); if ($count > 0) { my $str_count = $count . " user" . (($count > 1)? 's': ''); my $str = << "HTML"; <span class="hatebu_count"> <a href="http://b.hatena.ne.jp/entry/$html_clog_url/$ymdi.html"> $str_count</a></span> HTML ; &save_file("$hatebu_count_dir/$ymdi.htmlin", \$str); } elsif (-e "$hatebu_count_dir/$ymdi.htmlin") { unlink("$hatebu_count_dir/$ymdi.htmlin"); } } } sub save_file { # from kuttukibbs-1.0rc3 my ($fn, $strp) = @_; open(F, "> $fn") or die "can't open $fn : $!\n"; flock(F, 2); print F $$strp; close F; }
chalow のテンプレートは,
... <h3 class="subtitle"><TMPL_VAR name=header> <TMPL_VAR name=cat> <!--#include virtual="../hatebu_count/<TMPL_VAR name=ymdi>.htmlin" --> </h3> ...
な感じにする.
* [Jace] This is just the perfect aswner for all ... (2013-01-01 17:56:57)
chalow のテンプレートの <h3> の辺りに入れてみた ($item_page_template と $item_template の両方).ちっともブックマークされていないのが火を見るより明らかになった.
... <h3 class="subtitle"><TMPL_VAR name=header> <TMPL_VAR name=cat> <span class="hatebu"> <a href="http://b.hatena.ne.jp/entry/$clog_url<TMPL_VAR name=ymdi>.html"> <img src="http://b.hatena.ne.jp/entry/image/large/$clog_url<TMPL_VAR name=ymdi>.html" alt="See Hatena bookmark comments"></a></span> </h3> ...
1 件ずつリクエストが発生するのがちょっと微妙かも.はてなサーバ側の負担も結構馬鹿にならないだろうなあ,などと余計なことを心配してしまうけど,こういう API を公開する時点で,その辺の目処は立ってるのだろう.
cf. はてなブックマーク件数取得API: http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%C3%A5%AF%A5%DE%A1%BC%A5%AF%B7%EF%BF%F4%BC%E8%C6%C0API
(追記) やっぱやめた → [2006-07-16-1]
* [Matias] I never thought I would find such an evr... (2012-12-30 15:20:09)
* [かがみ] ついに来たですね.そちらではいかがでしょう? (2007-06-28 04:15:46)
* [ドタドン] ついにスパマーが! (2007-06-23 11:34:29)
chalow では,[2006-05-05-1] のように書くと他の記事が参照できて,逆に参照された側の記事の一番下には参照元一覧が表示される (デフォルトのテンプレートだと「Referrer (Inside)」).後で読むときにとても便利なので使いまくり.
参照記事に飛ぶ場合は,文脈から飛ぶ先の内容がある程度予測できるのだけど,Referrer (Inside) 一覧の方は,クリックしてみるまで内容が分からない.ここに記事タイトルでも表示されてると便利かな,などとふと思ったので試してみた.
まず parse_entry() の for ループの中,「ハッシュに格納」と「日付リンク情報の格納」の位置を入れ換えて,後者を次のように変更.入れ換えるのは,$ent->{$i}{h} を使いたいから.($ent->{$i}{ho} でもいいのかも知れないけど,念のため)
# ハッシュに格納 $ent->{$i}{h} = okikae($ent->{$i}{ho}); $ent->{$i}{c} = okikae($c); # 日付リンク情報の格納 while ($c =~ /\[((\d\d\d\d-\d\d)-\d\d(-\d+)?)\]/g) { $inside_ref{$1}{"$ymd-$i"} = $ent->{$i}{h}; }
で,get_inside_ref() を以下のように変更.(変わってるのは return map ... の行だけ)
sub get_inside_ref { my ($id) = @_; if (defined $inside_ref{"$id"}) { return map { "<br> " . datestr2anchor("[".$_."]") . " " . $inside_ref{"$id"}{"$_"} } (sort {$b cmp $a} keys %{$inside_ref{"$id"}}); } return (); }
というわけでこんな感じ↓の表示になるはず.これは自己参照だけど.
はんげ …って何だろう?
とナチュラルに思いました.私だけですかそうですか.
chalow に付属する検索 CGI の clsearch.cgi が,いつの頃からか詳細モード ($mode == 1) だと記事タイトルや日付を表示してくれなくなってて,あれ? とか思いつつ放置していた.
で,ふと思い立って中身を読んでみたところ,ページの最小単位が日ごとからアイテムごとに変わったときの副作用だと理解した.
詳細モードの動作は,
となっている.日ごとページから抜き出していたときは記事タイトルが start: 〜 end: 間に含まれていたけど,アイテムごとページの場合,デフォルトのテンプレートだと記事タイトルは <h1>〜</h1> の方にあるので,結果として記事タイトル無しのまま抽出されて並ぶことになる.
というわけでアイテムページのテンプレートでも,start: 〜 end: 間に記事タイトルとかを書いてやるようにすれば,clsearch.cgi はちゃんと表示してくれる.<h1>〜</h1>の方はどうしましょうかね,と思ったけど,両方に書いておくことにした.ちょっと変かな.まあいいよな.
さて日付はどうしよう.というか仕組みを考えると,アイテムごとページが導入される前から日付は表示されていなかったってことになるな.よく覚えてないけど.一番簡単なのは,start: 〜 end: 間に日付も入れてしまうって方法かな.
<!-- start:<TMPL_VAR name=ymdi> --> <div class="day"> <h2><span class="date"><a href="<TMPL_VAR name=ymd>.html"> <TMPL_VAR name=ymd></a></span></h2> <div class="body"> <div class="section"> <h3 class="subtitle"><TMPL_VAR name=header> <TMPL_VAR name=cat></h3> <TMPL_VAR name=content> (中略) </div><!-- section --> </div><!-- body --> </div><!-- day --> <!-- end:<TMPL_VAR name=ymdi> -->
start: 〜 end: の意味を変えちゃうのでちょっと危険な香りもする.日ごとページの方の start: 〜 end: と構造が変わっちゃうし.これが嫌な場合は clsearch.cgi をいじるしかないかなあ.
(実は最初は clsearch.cgi をいじってたんだけど,結局元に戻して以上のような対処に落ち着いた)
chalow で %all_entries をキャッシュするようにしたら高速化できないかな,とふと思って,とりあえずやってみたけど 40 秒 → 30 秒程度だった.残りの内訳は HTML 生成ループと write_*_page 群がそれぞれ 10 秒強って感じ (← コード書く前に計れと小1時間).やはりそっちもキャッシュしないとダメか.それはめんどくさそう.
カレンダーとか月別リストとか inside refer とか same day とかは, JavaScript のくっつきなり SSI なりとしてファイル分離するのが正しいのかなあとか漠然と思った.
--stop-date でいいじゃんと言われるとそれまでなんですけどね.なんとなく,あの敗北感がいや.
ブログデザインの間違いトップ10.
ふーん,そんなもんなのかな.よく分からんけど.
とりあえず,
5. Classic Hits are Buried
これは趣旨が理解できた.よく考えると,そもそも自分が書いた記事ごとのアクセス数の分布ってちゃんと見たことなかったな.
というわけで手抜きワンライナーを書く.
% ( cd /path/to/chalow_output/; awk '{print $7}' /path/to/apache_log_archive/*.combined_log | egrep '^/diary/....-..-..-[01-9]+\.html"' | sort | uniq -c | sort -rn | sed 's#/diary/##' | sed 's/"//' | awk '{print $2}' | xargs grep '<title>' | sed 's/:<title>/ /' | sed "s# - swk's log</title>##" ) | less
まあこんなもんかな.タイトル表示とアクセス数の表示が一緒にできるといいけど,ワンライナーだと難しいかな.
というわけで,この手抜き状態のまま加工して,サイドバーに「アクセスの多い記事」一覧として埋め込むことにしてみました.1 週間ごとに更新されます (サーバのログが 1 週間ごとにしか手に入らないので).
ネタバレ記事を書くのをどうしようかと悩んでいたわけなのだが [2005-10-20-2],まあいいやということで,ごく普通にテキストと背景の色を同じにして書いてみた[2005-10-21-2].しばらくして
RSS リーダならそのまま読めてしまう
ことに気づいた.のわー.読みたくないのに読んじゃった人ごめんなさい.
応急措置ということで,chalow の write_rss_file() の中に
$coen =~ s!<img src="([^h].+?)"!<img src="$clog_url_pref$1"!g; +$coen =~ s!<div class="hidden">.*?</div><\!--hidden-->!<div>\(hidden\)</div>!gsm; my $cont = $all_entries{$ymd}{$i}{c}; +$cont =~ s!<div class="hidden">.*?</div><\!--hidden-->!<div>\(hidden\)</div>!gsm; $cont = html2xmlstr($cont);
な処理をつっこんで,ネタバレ部分を
[esc]<div class="hidden">[/esc] はうン [esc]</div><!--hidden-->[/esc]
な感じで囲んでおくことにする.うーん,アドホック.
まあ,そもそもビジュアルでないブラウザの人や CSS 切ってる人は読めちゃうわけですが.前回も書いたけどどうしたものか.
chalow の作者,たつをさんが Yahoo! JAPAN へ.あー,やっぱり.
これ読んだときに,ひょっとして,とか思ってました.
* [Marden] This article is a home run, pure and sip... (2013-07-03 10:32:57)
えーと,vi の話の件ですが [2005-08-28-1],ここのアクセスログは 1 週間ごとにしか見れないので全然気づいてなかったんだけど,blogmap に載ってるよとか yendot に載ってるよとか教えられて,ようやく状況に気づきました.
つうかどっちのサイトも初めて知りました,すんません.何かトラックバックが妙に多いなとは思ってたのですが.
リンク元をいろいろ見て回ると,引用ばかりで読みにくいという指摘なども頂いていたりして,実際おっしゃる通りなわけです.もう少し読み手のことを考えて書くべきなのかなあとも思うのですが,あまりそんな文才も余力もないので,まあ当面は今まで通りマイペースで,自分用メモの延長ってことで書いていきます.
関連しつつちょっと脱線しますが,「引用だけ」てのは「そもそも引用とは認められない」かも [2005-06-13-1] って話もあるので,ちょっと考えねばならんのは確かなんですよね.
でも,「ささっと取ったメモ」を「as is で公開する」ことによる情報の流通ってのも,いわゆる blog の重要な側面な気はするんです.誰かの権利を侵害しているのでない限り,あまり杓子定規に著作権法とか考えてても生産的じゃないと思うので.んー,もしかして自分で気づいてないだけで何か侵害してます?
あと,見ずらい一因は,blockquote な部分と,そのネタ元の URL を書いてる部分が分離している点にもあると思うので,そこは何とかしようと思ってます.これは,プレインテキストで書き続けて来たメモを chalow で公開するようになる以前からの書き方を,そのまま踏襲していることによります. [category: logging]
だいぶ前にいじった気がするけど,書き忘れてたので思い出しながらメモしておく.
月ごとの日付一覧をカレンダ風に表示するときに,ちまたの blog ツールだと,前月や翌月へのリンクが表示されていたりする.無きゃ困るわけでも,あるとすごく便利なわけでもないけど,何となく欲しくなったのでつけてみた.もうちょっときれいに作れたかもしれないけど,とりあえずこんな感じ. chalow-1.0rc4 がベース.
まず
### HTML ファイルの出力 write_index_page();
の直前に
my @month_array = sort keys %month_page; my %month_array_rev = (); for (my $i = 0; $i < @month_array; $i++) { $month_array_rev{$month_array[$i]} = $i; }
を入れる.同じようなものを write_month_page でも作っているので実は二度手間.ここで作ったものを write_month_page でも使うようにすればいいんだけど,面倒なので放っとく.
次に make_calendar_table 内の
my @wn = ("Su", "Mo", "Tu", "We", "Th", "Fr", "Sa");
の直前に,
my $idx = $month_array_rev{$ym}; my ($link_before, $link_after) = ('<<', '>>'); if ($idx > 0) { $link_before = '<a href="' . $month_array[$idx - 1] . '.html"><<</a>'; } if ($idx < @month_array - 1) { $link_after = '<a href="' . $month_array[$idx + 1] . '.html">>></a>'; }
を入れる.
同関数のヒアドキュメント内で
<caption><a href="$ym.html">$ym</a></caption>
の代わりに
<tr> <td align="center" colspan=2>$link_before</td> <td align="center" colspan=3><a href="$ym.html">$ym</a></td> <td align="center" colspan=2>$link_after</td> </tr>
とする.以上.
しかしアレだ.自分仕様パッチが複数の改造目的から成り立っていると,そのうち一部の目的のものだけ切り出して配布するってのが面倒だな.各要素ごとにオリジナルからのパッチの形でまとめて,かつそれらを順不同で適用できるように直交化しておく…とかできると理想だけど,そういうの自動化できたりしませんか.つうかできたら cvs の手動マージ機能とか要らないって話ですかそうですか.
今まで使い続けていた 1.0rc2 から更新.自前の改造パッチもだいたい当て終えたはず.
カテゴリリストや最近の記事などは,JavaScript feed ではなく静的に挿入されるように変わっている.実は rc3 で既に変更されていて私が知らなかっただけのようだ.じゃあ自前の改造 [2004-11-14-1] は捨ててもいいかな,と一瞬思ったけど,カテゴリ順序の制御とか,<ul> や <dl> によるリストへの変更とかをどうやって本家ロジックに組み込むかを考える気力がなかったので,自前改造をしばらくは生かし続けることにした.本当はできるだけ本家に追従した方が,後々楽なんだけど….
今回の目玉はアイテムごとページを出せるようになったことだと勝手に思ってるんだけど,その実装のしかたにちょっととまどった.あれー, $item_template が適用されないのはどうして?
で,よくよく考えてみたのだが,$item_template は アイテムのタイトルとかを含んだ "section" div まるごとになっているため,それと互換性を保ったままアイテムごとページに使うことはできない (例えば,$item_template では h3 になっているものを,アイテムページで h1 にするのは困難) ということなのだと理解した.継続してソフトウェアをメンテナンスすることの大変さを改めて思い知った(つもり).
chalow アンテナに捕捉して頂きました(ありがとうございました).
それはよいのだが,見てみると何やらだーーーーっと数字の羅列が….あー,カレンダー (day_list) が表示されているのか.しかも SMTWTFS という謎な文字列から始まって,1 から 31 まで各 1 行ずつ….どうやったら表示されなくなるのか他の人の書き方を見比べてみたけど,何だかよくわからない….
と思ってたら,どうやら「更新チェック範囲」というのを,アンテナ編集作業の一環として指定できるというからくりらしい.ということは捕捉される側としては特に何も気にしなくてよいってことですかね.
でもあまりにも見苦しくて申し訳ないので,カレンダーはサイドバーにでも入れておくことにしてみた.さてどうなるかな.
どうも今まで,このログを MSIE でスクロールをぐりぐりするともたつくなあと思っていた.ちなみにもたつくのは 2 段組になっているトップページだけで,月ごとのページやカテゴリページは問題ない.chalow を使っている人のページをいくつか見て回ったけど,もたつくページとそうでないページがある.で,それぞれの css 見比べてみて気づいた.
#content に position: relative が指定されていると遅い.
chalow-1.0rc2 に付属してくるデフォルトの diary.css ではこれが指定されている.これを外すと MSIE での表示が格段に軽くなる.見ためも特に変化ないような気がする.(そもそも #content のところでは top とか left とかが指定されていないので仕様上は auto になって,MSIE だとこれが position: static と変わらないような実装になっている,という理解でよいかな? てことは他の UA の挙動も調べといた方がいいかも)
* [Christian] Holy Toledo, so glad I cilcekd on this s... (2012-12-30 23:22:19)
chalow に -u をつけるとサイズが変わったときだけファイルを書き出すようになるんだけど,当然これは変更の検出としては完全ではなくて,たまにこける.これが気に食わないんだけど,じゃあ -u をつけないとどうなるかというと,すべてのファイルが書き出されて,かつそれらの「最終更新時間: 20YY-MM-DD HH:MM」の部分が書き変わっちゃうので,sitecopy で差分アップロードするときに全部対象になっちゃって嫌.
というわけで,真面目に内容を比較するようにした.output_to_file の中で,古いファイルの内容と新しいファイルの内容のそれぞれについて,更新時刻の部分を除いて比較.一致してたら return とする.
今のこのログの分量で,処理時間の増加は 1 秒以内だから,まあこれでいいかな.ついでに念のため直接比較ではなくて MD5 の比較を試してみたけど,ほとんど変化なしというかむしろ悪いかも.
実はここにログを持って来る前に,blog サイトの利用をちょっとだけ検討していた.
最初にちょっと試してみたのが goo blog.少し試行錯誤したが,自動改行がオフにできなかったのが致命的で,結局やめた.
次に試したのが昨今話題の livedoor の blog.ここはまず,登録した瞬間にメールでパスワードを送って来て,それでだいぶ引いたんだけど,やっぱりしばらく試行錯誤してみる.フォーマットは割と自由に制御できるのだが,どうにもインタフェースが使いにくい.
で,さすがに 2 つくらい試すと自分の指向性が分かって来る.押し着せのインタフェースで,しかもブラウザからアップロードなんていうのは,性に合うはずがないのだ.というわけで,自分の手元ですべて制御できて,かつ改造が楽そうな chalow に落ち着いた.
というわけでこの環境もだいぶ収束してきたので,残したままだった goo とか livedoor のコンテンツを全消去した.アカウントはどうしようかな.削除してもいいんだけど.
* [Alexavia] Thanky Thanky for all this good ifnormta... (2013-07-04 08:18:30)
chalow のカテゴリ一覧は JavaScript による client side include で実装されているのだが,これがどうにも気に食わない.何が気に食わないって,私は lynx とか w3m とかのテキストブラウザが大好きなのだ.
というわけで改造する.まず write_index_page の実行を最後に持って来て,その直前あたりでカテゴリ一覧の HTML コードを生成するようにする. index page の template を呼び出すときにこの HTML コードを渡してやって,中に挿入する.
ついでなので,自分の好きな順番に並べたり,エイリアス(partita → SONY VAIO C1VJ/BP,とか)をつけたりできるようにしてみた.
なんかだいぶいじってみることにした.ていうか昨日の分に既にその作業途中のが含まれているのだが.
まず,自動改行ってあまり好きじゃない.もちろん,できるだけテキスト文書そのままで行けて,特殊な記法をできるだけ導入せず,かつ個人の好みにあまり依存せず,って条件で考えると自動改行がたぶん最適解なのはよくわかるんだけど,うーん,こればっかりは趣味の問題と言わざるを得ない.
というわけで,とりあえずテンプレートの contents をはさんでる <p>〜 </p> を消して,chalow から <br> 変換をコメントアウトして外す.
それだけだと,文章が全部 1 個の段落(いや正確には p 要素でもないのだが)みたいになってしまうのだが,もともと自分の日記形式から変換しているわけなので,空行で区切られた段落ごとに [esc]<p>[/esc]〜 [esc]</p>[/esc] とかで囲むとかいう手のこんだことをしてみる.p と ul くらいは自動的に入れるんだけど,コード片とかコマンド入力例とかは区別つかないので,>>code>> 〜 <<code<< とかで明示的に囲むことにした.まあ許容範囲か.
(↑つーかこの段落書くのすげー大変)
自分の日記形式を ChangeLog に変換して,chalow に通せないかなあとかいう試みを試してみる.item bullet が「*」なのを web 公開用ということにしてみよう.
こんな感じ?
% perl pickup.pl -c '*' 2004.txt | chalow-1.0rc2/clweek.pl > clog2004.pl
pickup.pl が,* な item だけ抜き出すスクリプト.各 item にタイトルをつけないといけないのが,自分のスタイルとは合わないかも….慣れの問題かなあ.
hauN hoge.
改行のテスト.
行末に置かないと反応しない.-n-
backslash はなんかうまく動かないのでやめた.
はうー.
最終更新時間: 2009-01-04 15:31