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]
カテゴリ名を %
このファイル (仮に postcat.
}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.
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)
でもこの [YYYY-
とここまで書いて,w3m.
この [YYYY-
(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-
先頭の方の変数とかをいじれば,ChangeLog とは違うフォーマットで書いている場合にもある程度適用できるんではないかと思います.(というか私がそうしてます)
最近,copyurl+
コピーしたページによっては,タイトルの先頭にカテゴリ名がついている場合とか (tDiary なんかが典型)
*
[を] chalow でアスキーアートを表示するためのプラグイン [tech] [aa] :
-http: / / nais. to/ ~ yto/ clog/ 2006- 09- 23- 3. html
これを chalow の ChangeLogReader.
というわけで修正してみる.ややこしいな.合ってますかこれ?
-if ($ ih = ~ s/ \ s* \ [(. + ) \ ] $ / / ) { # category + if ($ ih = ~ s/ \ s* \ [(([^ \ [\ ] ] + \ ] \ s* \ [) * [^ \ [\ ] ] + ) \ ] $ / / ) { # category @ cat = split(/ \ s* \ ] \ s* \ [\ s* / , $ 1) ; }
ここしばらく,外部に公開する記事しか chalow を通していなくて,外部に公開する記事の場合タイトルとかは自分で整理し直すので気づいていなかった.ふと久しぶりに全記事を chalow に通したら「File name too long」なエラーが出て気づいた.
(追記)
*
*
*
*
*
*
「画像で取得するAPI」ではてなブックマーク件数をお手軽に表示してみた矢先なのだが [2006-
はてなが重いときとか反応しないときに,自分のページの表示が影響を受けるのが嫌だってのがまずあるけど,そのときに,あー,俺いまはてなサーバに無駄に負担かけてるーという罪悪感があって精神衛生上よろしくない.
(いや,もちろんトラフィック全体からみると,うちから発生する分なんて誤差に過ぎないわけですが,単に気持ちの問題なので)
つうわけで真面目にはてなブックマーク件数取得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.