swk's log 最新ページ

chalow - from swk's log

2006-10-28 Sat

* chalow に後づけカテゴリ [chalow] 1 user

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 メモとかに反映できる方が便利なのかも知れない けど,それはそれでやろうと思えばすぐできそうなので,必要になったらで よいかなと.

2006-10-22 Sun

* chalow の他記事参照文字列を生成する elisp [chalow][logging] 2 users

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 とは違うフォーマットで書いて いる場合にもある程度適用できるんではないかと思います.(というか私が そうしてます)

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [haepeaodqw] NEW DELHI: Investigators believe an e ma... (2007-11-26 08:47:57)

* [pyfxrshkmn] 1 quarterback before suffering a knee in... (2007-11-25 12:50:43)

* [mvxqgdifga] Dick\'s Sporting Goods said Tuesday that... (2007-11-24 12:01:07)

* [cebcioacfi] Citroen\'s Sebastien Loeb concluded the ... (2007-11-22 15:16:30)

* [fwikcolokt] "Combined with Chrysler\'s Multi di... (2007-11-19 13:44:56)

* ...

2006-10-09 Mon

* chalow のカテゴリ名解析へのパッチ [logging][chalow] 3 users

最近,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 する処理が 続いているコードでした.

[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [nhbgufaqyn] NEW DELHI: Investigators believe an e ma... (2007-11-26 08:47:56)

* [hzidmxivcg] 1 quarterback before suffering a knee in... (2007-11-25 12:50:42)

* [oqalpvtjdu] Dick\'s Sporting Goods said Tuesday that... (2007-11-24 12:00:46)

* [bvfpsgzbhc] Citroen\'s Sebastien Loeb concluded the ... (2007-11-22 15:16:42)

* [llabydbesb] "Combined with Chrysler\'s Multi di... (2007-11-19 13:44:50)

* ...

2006-07-16 Sun

* はてなブックマーク数を件数取得APIからまじめに取って来る [logging][chalow]

「画像で取得する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>

...

な感じにする.

関連記事:
[2006-07-15-3] はてなブックマーク数を画像で取得するAPI
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [uboeedmjnb] NEW DELHI: Investigators believe an e ma... (2007-11-26 08:48:20)

* [nwgtzxesqb] 1 quarterback before suffering a knee in... (2007-11-25 12:50:43)

* [fgoavlxizw] Dick\'s Sporting Goods said Tuesday that... (2007-11-24 12:01:02)

* [oyigsruuar] Citroen\'s Sebastien Loeb concluded the ... (2007-11-22 15:16:36)

* [trydkjdjud] "Combined with Chrysler\'s Multi di... (2007-11-19 13:44:55)

* ...

2006-07-15 Sat

* はてなブックマーク数を画像で取得するAPI [logging][chalow]

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]

関連記事:
[2006-07-16-1] はてなブックマーク数を件数取得APIからまじめに取って来る
[ コメントを全部見る / コメントを書く] [ TrackBack ( )] [固定リンク]

* [ozuiawbrwa] NEW DELHI: Investigators believe an e ma... (2007-11-26 08:48:14)

* [kbfxzafkcq] 1 quarterback before suffering a knee in... (2007-11-25 12:50:35)

* [pxdvfwxyhq] Dick\'s Sporting Goods said Tuesday that... (2007-11-24 12:00:56)

* [wprbloodhj] Citroen\'s Sebastien Loeb concluded the ... (2007-11-22 15:16:18)

* [afhromkaut] Camry drivers have led a total of 165 la... (2007-11-19 13:03:16)

* ...

2006-05-05 Fri

* chalow の Referrer (Inside) に記事タイトルをつける [logging][chalow] 11 users

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 ();
}

というわけでこんな感じ↓の表示になるはず.これは自己参照だけど.

関連記事:
[2006-10-22-1] chalow の他記事参照文字列を生成する elisp
[2006-05-05-1] chalow の Referrer (Inside) に記事タイトルをつける

2005-11-29 Tue

* ChangeLog Memo のマーク [logging][chalow]

はんげ …って何だろう?

とナチュラルに思いました.私だけですかそうですか.

2005-11-03 Thu

* clsearch.cgi の詳細モード [logging][chalow]

chalow に付属する検索 CGI の clsearch.cgi が,いつの頃からか詳細モー ド ($mode == 1) だと記事タイトルや日付を表示してくれなくなってて, あれ? とか思いつつ放置していた.

で,ふと思い立って中身を読んでみたところ,ページの最小単位が日ごとか らアイテムごとに変わったときの副作用だと理解した.

詳細モードの動作は,

  • cl.itemlist から文字列を検索して,ファイル名と記事 ID を得る
  • 該当するファイルから,<!-- start:$id --> と <!-- end:$id --> の間を抜き出して (get_item) 表示

となっている.日ごとページから抜き出していたときは記事タイトルが 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 をいじってたんだけど,結局元に戻して以上の ような対処に落ち着いた)

2005-10-22 Sat

* chalow の all_entries をキャッシュ [logging][chalow]

chalow で %all_entries をキャッシュするようにしたら高速化できないか な,とふと思って,とりあえずやってみたけど 40 秒 → 30 秒程度だった. 残りの内訳は HTML 生成ループと write_*_page 群がそれぞれ 10 秒強って 感じ (← コード書く前に計れと小1時間).やはりそっちもキャッシュしな いとダメか.それはめんどくさそう.

カレンダーとか月別リストとか inside refer とか same day とかは, JavaScript のくっつきなり SSI なりとしてファイル分離するのが正しいの かなあとか漠然と思った.

--stop-date でいいじゃんと言われるとそれまでなんですけどね.なんとな く,あの敗北感がいや.

2005-10-22 Sat

* アクセスの多い記事一覧 [logging][chalow]

ブログデザインの間違いトップ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-21 Fri

* ネタバレ反転と RSS [logging][chalow]

ネタバレ記事を書くのをどうしようかと悩んでいたわけなのだが [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 切ってる人は読めちゃ うわけですが.前回も書いたけどどうしたものか.

2005-09-01 Thu

* たつをさん転職 [misc][chalow]

chalow の作者,たつをさんが Yahoo! JAPAN へ.あー,やっぱり.

これ読んだときに,ひょっとして,とか思ってました.

2005-08-31 Wed

* アクセスが増えている (のかも?) [logging][chalow]

えーと,vi の話の件ですが [2005-08-28-1],ここのアクセスログは 1 週 間ごとにしか見れないので全然気づいてなかったんだけど,blogmap に載っ てるよとか yendot に載ってるよとか教えられて,ようやく状況に気づきま した.

つうかどっちのサイトも初めて知りました,すんません.何かトラックバッ クが妙に多いなとは思ってたのですが.

リンク元をいろいろ見て回ると,引用ばかりで読みにくいという指摘なども 頂いていたりして,実際おっしゃる通りなわけです.もう少し読み手のこと を考えて書くべきなのかなあとも思うのですが,あまりそんな文才も余力も ないので,まあ当面は今まで通りマイペースで,自分用メモの延長ってこと で書いていきます.


関連しつつちょっと脱線しますが,「引用だけ」てのは「そもそも引用とは 認められない」かも [2005-06-13-1] って話もあるので,ちょっと考えねば ならんのは確かなんですよね.

でも,「ささっと取ったメモ」を「as is で公開する」ことによる情報の流 通ってのも,いわゆる blog の重要な側面な気はするんです.誰かの権利を 侵害しているのでない限り,あまり杓子定規に著作権法とか考えてても生産 的じゃないと思うので.んー,もしかして自分で気づいてないだけで何か侵 害してます?

あと,見ずらい一因は,blockquote な部分と,そのネタ元の URL を書いて る部分が分離している点にもあると思うので,そこは何とかしようと思って ます.これは,プレインテキストで書き続けて来たメモを chalow で公開す るようになる以前からの書き方を,そのまま踏襲していることによります. [category: logging]

2005-06-17 Fri

* chalow の make_calendar_table に「前月」「次月」リンクをつける [logging][chalow]

だいぶ前にいじった気がするけど,書き忘れてたので思い出しながらメモし ておく.

月ごとの日付一覧をカレンダ風に表示するときに,ちまたの 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) = ('&lt;&lt;', '&gt;&gt;');
    if ($idx > 0) {
        $link_before =
            '<a href="' . $month_array[$idx - 1] . '.html">&lt;&lt;</a>';
    }
    if ($idx < @month_array - 1) {
        $link_after =
            '<a href="' . $month_array[$idx + 1] . '.html">&gt;&gt;</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 の手動マージ機能とか要らないっ て話ですかそうですか.

2005-03-22 Tue

* RTF な人と PMI な人 [tech][logging][firefox][chalow]

(ruby, tdiary, firefox) な人と (perl, movabletype, internet explorer) な人でいろいろと傾向が違うよ,な話.

私は PCF (perl, chalow, firefox) な人です.C が ChangeLog じゃなくて chalow なのは,私自身が書いているテキスト自体は ChangeLog 形式ではな くて俺形式だからです (ChangeLog っぽく整形してから chalow に通してい る).

2005-02-06 Sun

* chalow-1.0rc4 導入 [logging][chalow]

今まで使い続けていた 1.0rc2 から更新.自前の改造パッチもだいたい当て 終えたはず.

カテゴリリストや最近の記事などは,JavaScript feed ではなく静的に挿入 されるように変わっている.実は rc3 で既に変更されていて私が知らなかっ ただけのようだ.じゃあ自前の改造 [2004-11-14-1] は捨ててもいいかな, と一瞬思ったけど,カテゴリ順序の制御とか,<ul> や <dl> によるリスト への変更とかをどうやって本家ロジックに組み込むかを考える気力がなかっ たので,自前改造をしばらくは生かし続けることにした.本当はできるだけ 本家に追従した方が,後々楽なんだけど….

今回の目玉はアイテムごとページを出せるようになったことだと勝手に思っ てるんだけど,その実装のしかたにちょっととまどった.あれー, $item_template が適用されないのはどうして?

で,よくよく考えてみたのだが,$item_template は アイテムのタイトルと かを含んだ "section" div まるごとになっているため,それと互換性を保っ たままアイテムごとページに使うことはできない (例えば,$item_template では h3 になっているものを,アイテムページで h1 にするのは困難) とい うことなのだと理解した.継続してソフトウェアをメンテナンスすることの 大変さを改めて思い知った(つもり).

2004-12-19 Sun

* chalow アンテナ [logging][chalow]

chalow アンテナに捕捉して頂きました(ありがとうございました).

それはよいのだが,見てみると何やらだーーーーっと数字の羅列が….あー, カレンダー (day_list) が表示されているのか.しかも SMTWTFS という謎 な文字列から始まって,1 から 31 まで各 1 行ずつ….どうやったら表示 されなくなるのか他の人の書き方を見比べてみたけど,何だかよくわからな い….

と思ってたら,どうやら「更新チェック範囲」というのを,アンテナ編集作 業の一環として指定できるというからくりらしい.ということは捕捉される 側としては特に何も気にしなくてよいってことですかね.

でもあまりにも見苦しくて申し訳ないので,カレンダーはサイドバーにでも 入れておくことにしてみた.さてどうなるかな.

2004-12-12 Sun

* position = relative [logging][chalow]

どうも今まで,このログを MSIE でスクロールをぐりぐりするともたつくな あと思っていた.ちなみにもたつくのは 2 段組になっているトップページ だけで,月ごとのページやカテゴリページは問題ない.chalow を使ってい る人のページをいくつか見て回ったけど,もたつくページとそうでないペー ジがある.で,それぞれの css 見比べてみて気づいた.

#content に position: relative が指定されていると遅い.

chalow-1.0rc2 に付属してくるデフォルトの diary.css ではこれが指定さ れている.これを外すと MSIE での表示が格段に軽くなる.見ためも特に変 化ないような気がする.(そもそも #content のところでは top とか left とかが指定されていないので仕様上は auto になって,MSIE だとこれが position: static と変わらないような実装になっている,という理解でよ いかな? てことは他の UA の挙動も調べといた方がいいかも)

2004-11-21 Sun

* 変更検出 [logging][chalow]

chalow に -u をつけるとサイズが変わったときだけファイルを書き出すよ うになるんだけど,当然これは変更の検出としては完全ではなくて,たまに こける.これが気に食わないんだけど,じゃあ -u をつけないとどうなるか というと,すべてのファイルが書き出されて,かつそれらの「最終更新時間: 20YY-MM-DD HH:MM」の部分が書き変わっちゃうので,sitecopy で差分アッ プロードするときに全部対象になっちゃって嫌.

というわけで,真面目に内容を比較するようにした.output_to_file の中 で,古いファイルの内容と新しいファイルの内容のそれぞれについて,更新 時刻の部分を除いて比較.一致してたら return とする.

今のこのログの分量で,処理時間の増加は 1 秒以内だから,まあこれでい いかな.ついでに念のため直接比較ではなくて MD5 の比較を試してみたけ ど,ほとんど変化なしというかむしろ悪いかも.

2004-11-20 Sat

* blog サービス [logging][chalow]

実はここにログを持って来る前に,blog サイトの利用をちょっとだけ検討 していた.

最初にちょっと試してみたのが goo blog.少し試行錯誤したが,自動改行 がオフにできなかったのが致命的で,結局やめた.

次に試したのが昨今話題の livedoor の blog.ここはまず,登録した瞬間 にメールでパスワードを送って来て,それでだいぶ引いたんだけど,やっぱ りしばらく試行錯誤してみる.フォーマットは割と自由に制御できるのだが, どうにもインタフェースが使いにくい.

で,さすがに 2 つくらい試すと自分の指向性が分かって来る.押し着せの インタフェースで,しかもブラウザからアップロードなんていうのは,性に 合うはずがないのだ.というわけで,自分の手元ですべて制御できて,かつ 改造が楽そうな chalow に落ち着いた.

というわけでこの環境もだいぶ収束してきたので,残したままだった goo とか livedoor のコンテンツを全消去した.アカウントはどうしようかな. 削除してもいいんだけど.

2004-11-14 Sun

* カテゴリリスト [logging][chalow]

chalow のカテゴリ一覧は JavaScript による client side include で実装 されているのだが,これがどうにも気に食わない.何が気に食わないって, 私は lynx とか w3m とかのテキストブラウザが大好きなのだ.

というわけで改造する.まず write_index_page の実行を最後に持って来て, その直前あたりでカテゴリ一覧の HTML コードを生成するようにする. index page の template を呼び出すときにこの HTML コードを渡してやっ て,中に挿入する.

ついでなので,自分の好きな順番に並べたり,エイリアス(partita → SONY VAIO C1VJ/BP,とか)をつけたりできるようにしてみた.

関連記事:
[2005-02-06-2] chalow-1.0rc4 導入

2004-10-09 Sat

* 日記ファイルからの変換 [logging][chalow]

というわけで,このログは自分の日記フォーマットから ChangeLog フォー マットに変換して,chalow を通しているわけなのだが,その変換部分でだ いぶ試行錯誤を繰り返している.まず強制改行は気に食わない,と感じてい た部分だが,使っているうちに悪くないかなという気がして来た(ぉ.でも 強制改行がうれしくない場合もあるので,その辺は切り替えられるようにし てみた.さあだんだんルールがややこしくなってきたぞ.

2004-08-29 Sun

* chalow 改造 [logging][chalow]

なんかだいぶいじってみることにした.ていうか昨日の分に既にその作業途 中のが含まれているのだが.

まず,自動改行ってあまり好きじゃない.もちろん,できるだけテキスト文 書そのままで行けて,特殊な記法をできるだけ導入せず,かつ個人の好みに あまり依存せず,って条件で考えると自動改行がたぶん最適解なのはよくわ かるんだけど,うーん,こればっかりは趣味の問題と言わざるを得ない.

というわけで,とりあえずテンプレートの contents をはさんでる <p>〜 </p> を消して,chalow から <br> 変換をコメントアウトして外す.

それだけだと,文章が全部 1 個の段落(いや正確には p 要素でもないのだ が)みたいになってしまうのだが,もともと自分の日記形式から変換してい るわけなので,空行で区切られた段落ごとに [esc]<p>[/esc]〜 [esc]</p>[/esc] とかで囲むとかいう手のこ んだことをしてみる.p と ul くらいは自動的に入れるんだけど,コード片 とかコマンド入力例とかは区別つかないので,>>code>> 〜 <<code<< とかで明示的に囲むことにした.まあ許容 範囲か.

(↑つーかこの段落書くのすげー大変)

2004-08-28 Sat

* ChangeLog メモ作戦 [logging][chalow]

自分の日記形式を 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 はなんかうまく動かないのでやめた.
はうー.

最終更新時間: 2008-04-23 08:31


Shingo W. Kagami - swk(at)kagami.org