2002年09月08日 tDiary.Net 利用開始

[misc] 便利便利〜

本当は自分の所で運用したいんですが、いろいろサーバを移動したりなんだりの最中なのでこちらを利用することにしました。

最近勉強中の C# のことなども含め、気軽にいろいろ書き散らかしていく予定です。

[misc] 使い方?

ここの日記の書き方は Wiki の structured text のようなものなのでしょうか?

マニュアルを探さねば〜。

[CGI] HTML

どうも、最近 xhtml1.0 でものを書くことが多いので、反射的に <br /> と書いてしまいます……。

それはそれとして、plugin の calendar2 がどうもこのテーマでは上手く表示できません。div で囲って text-align を指定しようが、margin-left: auto; margin-right: 2em とかやってみようが効果なし。なんだろう……。

margin の auto は width を指定しないと意味がありませんでした。でも、最終的には float:right で回り込ませて解決。

[CGI] HTML Template

tDiary の plugin の指定方法を見ていて思い出しました。

個人的に趣味やらバイトやらで使うための Perl の CGI ライブラリを保守しているのですが、その中のテンプレートライブラリでの関数の指定法がかなりアドホックでした。&{func,arg1var,"constant",arg3var} ←こんな感じ。

で、昨日から一念発起して、普通に func(arg1var, arg2func(arg2_1var), "constant") という形で書けるように parser を書き直してみました。

最初は正規表現でほげほげ〜。と気楽に考えていたのですが、よくよく考えると関数のネストが出来る時点で正規表現のクラスを越えています(汗)。……LL(1)文法に収まっていて良かったぁ。LALRの解析プログラムを手で書く気は全く起こりませんです。lexer は @tokens = ($stmt =~ /([^\s(),"]+|""|[(),"]|\s+)/g) とかでお手軽にすませて、あとは適当に(^^;

でも、こんなことして意味があったのだろうか……。利便性と重さの天秤が、どちらに傾く事やら。

sub parse_expr {
    my $tokens = shift;
    my ($type, $expr, @args);
    # LL(1) なのでなんとか頑張れます
    my $token = $tokens->[0];
    if ( !defined $token ) {
        return;
    }
    elsif ( $token eq '"' ) {
        shift @$tokens;
        $type = 'const';
        $expr = '';
        while ( defined($token = shift @$tokens) ) {
            if ( $token eq '""' ) {
                $expr .= '"';
            }
            elsif ( $token eq '"' ) {
                last;
            } else {
                $expr .= $token;
            }
        }
        shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
    }
    else {
        $expr = $token;
        shift @$tokens;
        shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
        if ( $tokens->[0] eq '(' ) {
            $type = 'func';
            @args = ();
            do {
                shift @$tokens;
                shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
                push @args, parse_expr($tokens);
            } while ( (defined $tokens->[0]) and ($tokens->[0] eq ',') );
            if ( $tokens->[0] ne ')' ) {
                warn "a template function does not terminated with ')' : $expr";
            }
            shift @$tokens;
            shift @$tokens while ( (defined $tokens->[0]) and ($tokens->[0] =~ m/^\s+$/ ) ); #++//));
        }
        else {
            $type = 'var';
        }
    }
    my $self = {
        Type=>$type,
        Expr=>$expr,
        Args=>\@args,
    };
    return $self;
}

[CGI] cperl-mode

そうそう、上のソースを見てみると、謎の#++//));というコメントがあるわけですが。

うちの研究室に入っている Emacs 20.7.1 の cperl-mode って正規表現周りでとてもお馬鹿さんなんですよね〜。ちょっと特殊な正規表現を書くと、正規表現の終わりを検出できずに色づけやらインデントやらでどはまる訳です。何とかならないものか……

って、あれれ?今確認したら、ちゃんと認識できている……。\s+を正常に認識できていなかった昨日はなんだったのだろう。

[misc] メールという通信手段

バイトがらみで今日打ち合わせがある予定だったのですが、先方がこちらのメールを読んでいなかったらしく、また日を改めて、ということになりました。

う〜ん。3回も日程を問い合わせるメールを送ったんだけどなぁ……。まぁ、お忙しい方ですし、そういうこともあるのでしょう。

そんなわけで、今日は tDiary.Net にページを開く余裕が出来たのでした。

本日のツッコミ(全3件) [ツッコミを入れる]
Mass (2002年09月08日 16:54)

自分でつっこんでみます。書き方は<a href="http://www.tdiary.net/howto.rhtml">ここ</a>ですね〜。

Mass (2002年09月08日 16:55)

つっこみ内ではタグは書けないらしい……
改行はどうなるのでしょう。

mu (2004年10月05日 16:35)

http://www.alloha.info InsuRancE http://www.devonanal.com RIsk mAnAgemenT! http://www.amateur-thumbs.net InSURancE QuoTEs http://www.usbitches.com cAr inSuRaNce http://www.galsonbed.com HeaLTh iNsurAnce http://www.milf-hardcore.net LiFe INsurANce