6 件 見つかりました。

CHALOW Search swk's log

2007-08-30

* 「質問を装った自己主張をする人が熱い!」 [misc]

この手の質問(を装った自己主張)を見つけるにはコツがあります。「私だけでしょうか」「時代遅れでしょうか」で検索すれば大漁なのです…今夜は眠れnight!!!

あうあう


ていうかこれが素晴らしい:

「 「〜と思うのは私だけでしょうか?」というような質問はしない方がいいですか?よくこのような質問を見かけますし、私自身もした事があります。」という質問をした事がありますが、しないほうがよいでしょうか?
という質問をして、回答を得ましたが、やっぱりしないほうがよいですか?

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1310442333

これを思い出した:

問題,次のようなことがあった場合普通ならどうするか答えよ: これは私の日記です.絶対に読まないで下さい,と書き添えられた三日分の日記がファックスされて来ました.どういうつもりなんでしょうか,というファックスが来ました.どうしたらいいんでしょうか,ていうファックスが来たの.どうしよう?

http://www.youtube.com/watch?v=6OStZxBq4Y8

2006-10-28

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

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

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

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

2006-07-12

* ジャストロー錯視 [misc][illusion]

これは単に遠近法…だよなあ.…釣りビデオ?

↓たぶんこっちの方が例としては妥当.

cf. これ [2006-06-27-1] も遠近法です (← だからどうした)

cf. 錯視シリーズ: http://www.kagami.org/diary/clsearch.cgi?key=%BA%F8%BB%EB&mode=1

関連記事:
[2006-10-28-1] chalow に後づけカテゴリ

2006-03-25

* Storable の互換性 [logging][homenet]

今まで使ってたメイルネットのサーバでは perl 5.005_03 (i386-freebsd) が使われていた.モジュール群はあまり揃っていなかったので,必要なものは ~/lib/perl に自分でインストールして使っていた.

さくらインターネットでは,/usr/bin/perl は v5.8.4 (i386-freebsd-64int).モジュールもそこそこ揃っている.これなら自前でモジュールをインストールする必要はないかなと思っていたけど,甘かった.

Storable に互換性がない.

tb.cgi では,トラックバックのデータの保存に Storable が使われている.そのデータが読めなくなってしまった.Storable::retrieve が「Byte order is not compatible」とおっしゃっている.うーむ.

幸い,さくらインターネットのサーバには perl 5.005_03 built for i386-freebsd も /usr/bin/perl5 としてインストールされているので,こっちを使うことにした.こっちのバージョンではモジュールがあまり揃っていないらしい.というわけでメイルネットのサーバで使っていた ~/lib/perl 以下をごっそりコピーして使うことにする.再コンパイルとかせずにそのままで動くのはありがたい.

他の CGI (clsearch, kuttukibbs, noascii) は perl v5.8.4 で問題なく動くようなのでそちらで動かす.ただし use lib で ~/lib/perl を指定しているとモジュールの互換性の問題で動かないので,指定を止める.

とりあえずはこれでいいけど,いつまでもこのままってわけにもいかないかな.過去データをまとめて新しいファイル構造に変換して,v5.8.4 に移行するようにした方がいいかも知れない.調べてみると,Data::Dump を使って一旦テキストとして吐き出させるという方法があるらしい.そのうち試してみるか.


おまけ.というかちょっとだけはまった落とし穴.

さくらインターネットのサーバには,以下の 2 種類の perl がインストールされている.

  • /usr/bin/perl5 ... 5.005_03 built for i386-freebsd
  • /usr/local/bin/perl ... v5.8.4 built for i386-freebsd-64int

そして以下のような symlink がある.

  • /usr/bin/perl -> /usr/local/bin/perl (つまり v5.8.4)
  • /usr/local/bin/perl5 -> /usr/local/bin/perl5.8.4 (/usr/local/bin/perl と同じ hard link)

/usr/local/bin/perl5 は 5.005_03 を指しているのが自然だよなあ.どうしてこんなことになっているんだか.

関連記事:
[2008-04-13-1] tb-standalone の perl 5.005 → 5.8 移行
[2006-03-25-2] サーバ移転

2005-11-03

* 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 をいじってたんだけど,結局元に戻して以上のような対処に落ち着いた)

ChangeLog INDEX
Powered by chalow