Home> 備忘録: 2007年1月アーカイブ

備忘録: 2007年1月アーカイブ

「カラフルカレンダー」 の改造・導入

  • 2007年1月21日 07:46
  • 備忘録

“Colorless” と謳ってはいるが最近は結構どうでも良かったりする.

曜日だけじゃなくて日も色付けしよう, どうせなら祝日の場合はその名前も出力しよう, と思い立って, メソッドsb::Content::_calendar の改造に取り掛かったけど, もしやと思って最近見つけたここのプラグイン一覧から探してみたら案の定そんなプラグインが既にあった. やろうとしてたことがほぼ全て実現されてたんで, これを使うことにした.

早速導入して 吐き出された HTML ソースを見てみると, class 属性の値がどうも冗長. 以下はそれを (見通しを良くするために) 一部改変したもの.


<table class="calendar" border="0" cellpadding="0" cellspacing="0">
<tr>
<td colspan="7" class="calendar_month">&lt;&lt; January 2007 &gt;&gt;</td>
</tr>
<tr>
<td class="sunday">Sun</td>
<td class="monday">Mon</td>
<td class="tuesday">Tue</td>
<td class="wednesday">Wed</td>
<td class="thursday">Thu</td>
<td class="friday">Fri</td>
<td class="saturday">Sat</td>
</tr>
<tr class="week_1">
<td class="cell_sun_empty">&nbsp;</td>
<td class="cell_mon holiday" title="元日">1</td>
<td class="cell_tue">2</td>
<td class="cell_wed">3</td>
<td class="cell_thu">4</td>
<td class="cell_fri">5</td>
<td class="cell_sat">6</td>
</tr>
<!-- 以下省略 -->
</table>

冗長と思う箇所などを幾つか下に列挙.

  • calendarクラスの子孫にあたるはずのクラスの名前がcalendar_month
  • 曜日名装飾のためのクラス名 (sunday など) と日装飾のためのクラス名 (cell_sun など) が不一致
  • cell_ なる接頭辞
  • 祝日の場合は cell_mon holiday とクラスを複数指定する一方, 空欄の場合は cell_sun_empty なるクラスをわざわざ用意して使っている点

そしてこれらに対する改善案を列挙.

  • month で十分. CSS の子孫セレクタ (例: table.calendar td.month { ... }) を使えば良い.
  • sun などで統一. あくまで曜日名装飾と日装飾を分けたいんなら, 曜日名を示す行を <tr class="weekdays"> にでもして, 上と同様に子孫セレクタを使えば良い.
  • empty クラスを作り, mon empty のように使う.

ということで, 上に示した以外の点についても 自分の好みに合うように改造した. その結果はこのページのソースを参照されたし.

  • Comments (Close): 1
  • TrackBack (Close): 0

Serene Bach と文書タイプ

  • 2007年1月19日 08:03
  • 備忘録

Serene Bach のモジュールファイル群とかプラグインファイル群を読めば読むほど, Serene Bach は 「valid な XHTML 文書を書き出す事を想定していない」 という仕様で実装されているとしか思えない. 管理ページだって DOCTYPE 宣言では XHTML 1.1 を謳っておきながら 未定義の target 属性を使ってるし, テンプレートの文書タイプが何であろうが 記事作成支援の一環として target 属性の値の入力を勧めるダイアログボックスが出たりするし.

モジュールとかに手を加えることなく 生成される記事が valid な文書であるようにしたいんなら, テンプレートを HTML 4.01 Strict/Transitional 準拠で作るのが最も手っ取り早いかもしれない. プラグイン (特に JavaScript を使うもの) の仕様によっては XHTML 1.0 Transitional 準拠も通じるかもしれない. 「いや 何が何でも valid な XHTML 文書を生成したいんだ」 っつーなら, Serene Bach を大改造するか 他の Weblog ツールに乗り換えることになるんだろう.

細部まで検証したわけじゃないんで, 以上の話はあくまでも推測ね 推測.

  • Comments (Close): 0
  • TrackBack (Close): 0

Serene Bach とコンテントネゴシエーション

  • 2007年1月18日 01:18
  • 備忘録

この Weblog のテンプレートは XHTML 1.1 で作ってるんだけど, メディアタイプは text/html として Web サーバから送出されている. これをブラウザの要求に応じて application/xhtml+xml として送出できんかいな, あわよくばそういうプラグインを作れんかいな, と これもまた前々から思っているところ.

ということで, 昨日に引き続き Serene Bach のモジュールを目で追っかけていった. 直接関係しそうなのは下記の 1 行ということを把握. 但し 「1 行」 とは言っても, これと同様の行が複数のモジュール, 複数のメソッドに記述されている.


return sb::Interface->get->head('type'=>'text/html') . $self->set_main($cms->output);

…凄いなコレ. テンプレートから生成された文書 (≒ メソッド sb::TemplateManager::output の戻り値 $cms はクラス sb::TemplateManager のオブジェクト.) が何であろうが関係なく 'text/html' だなんて. せっかくメディアタイプを指定できるように sb::Interface::head が実装されているのに これじゃ意味ねーじゃん.

オブジェクト指向的には, テンプレートのメディアタイプを判別して出力する sb::TemplateManager::get_type なるメソッドを追加すると良さげ. これをプラグイン追加の形で実現するのは簡単だろうけど, あちこちに散在している上記 1 行の修正もプラグイン追加の形で, つまり 1 行を書き換えるためだけにメソッドをオーバーライドする, てのは非現実的だなぁ.

また明け方になって就寝するのはマズいので今回はここまで. 近いうちに作業しようと思う.

  • Comments (Close): 0
  • TrackBack (Close): 0

sb::Admin::AccessLog の改造

  • 2007年1月17日 04:25
  • 備忘録

Serene Bach のアクセスログの表示が前々から気に食わなかったから改造した.

AccessLog.pm 改造前AccessLog.pm 改造後

「ページ別集計」 で一番見たいのは URI の末尾の方だろうがよ, てことで. これまではリンク文字列上にマウスカーソルを持っていって見る必要があって, そのちょっとした手間が面倒臭かった.

修正したのは plugin/AccessLog.pm で定義されているメソッド sb::Admin::AccessLog::_display_elements. 本当は これを直接書き換えずにオーバーライドと言っていいのか ? するようなプラグインを作る事で対処したくて試行錯誤したんだけど, 諦めた. たった 1 行の変更のためにオーバーライドするのは大袈裟のようにも思えてきたし.


sub _display_elements {
    my $self = shift;
    my %param = (
        'mode'   => undef,
        'length' => LOG_MAXLENGTH,
        'text'   => undef,
        @_
    );
    $param{'length'} = LOG_MAXLEN_AGNT if ($param{'mode'} eq 'agnt');
    my $flag = (length($param{'text'}) > $param{'length'});
    my $attr = $flag ? ' title="' . $param{'text'} . '"' : '';
    # Modified here.
#   my $text = $flag ? sb::Text->clip('text'=>$param{'text'},'length'=>$param{'length'}) : $param{'text'};
    my $text = $flag ? sb::Text->clip('text'=>$param{'text'},'length'=>$param{'length'},'fromend'=>($param{'mode'} eq 'page')) : $param{'text'};
    if ($param{'mode'} ne 'host' and $param{'mode'} ne 'agnt') {
        $attr .= ' target="_blank"';
        return sprintf('<a href="%s"%s>%s</a>',$param{'text'},$attr,$text);
    } else {
        return sprintf('<span%s>%s</span>',$attr,$text);
    }
}

因みに, sb::Admin::YetAnotherAccessLogsb::Admin::AccessLog を継承してるんで, そのページ別集計も上の改造後の画像と同様に表示される.

  • Comments (Close): 0
  • TrackBack (Close): 0

zsh, screen, mlterm

  • 2007年1月15日 23:41
  • 備忘録

この記事を書いた翌日くらいから zsh とか mlterm とかを使うようにしてみた. 今も続いてる. ただなんとなく今の設定ファイルを晒してみる.

.zshrc

# {{{ for command completion
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format '%B%d%b'
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format 'No matches for: %d'
zstyle ':completion:*' group-name ''
zstyle :compinstall filename '/home/iihoshi/.zsh/.zshrc'
autoload -Uz compinit
compinit
# }}}
# {{{ for command history
HISTFILE=~/.histfile
HISTSIZE=1000
SAVEHIST=1000
# }}}
# {{{ for bind-keys
bindkey -v
# }}}
# {{{ for colorful prompt
setopt prompt_subst
autoload -U colors
colors
PROMPT="%{$fg_bold[green]%}%n%{$fg_bold[red]%}@%m%{$fg[blue]%}%#%{$reset_color%} "
RPROMPT="%{$fg[yellow]%}[%(4~,%-1~/.../%2~,%~)]%{$reset_color%}"

eval `dircolors -b`
# }}}
# {{{ for screen window's title
# (ref. http://www.zsh.org/mla/workers/2000/msg03990.html)
# (ref. http://nijino.homelinux.net/diary/200206.shtml#200206140)
# (ref. http://d.hatena.ne.jp/cooldaemon/20061113)
if [ x$TERM = xscreen ]
then
    function change_screen_title()
    {
        echo -n "^[k$1^[\\"
    }

    function preexec()
    {
        emulate -L zsh
        local -a cmd; cmd=(${(z)1})
        case $cmd[1] in
            fg)
                if [ $#cmd -eq 1 ]
                then
                    cmd=(builtin jobs -l %+)
                else
                    cmd=(builtin jobs -l $cmd[2])
                fi;;
            %*)
                cmd=(builtin jobs -l $cmd[1]);;
            sudo)
                if [ $#cmd -gt 1 ]
                then
                    cmd[1]="# $cmd[2]"
                fi
                change_screen_title "$cmd[1]:t"
                return;;
            *)
                change_screen_title "$cmd[1]:t"
                return;;
        esac

        local -A jt; jt=(${(kv)jobtexts})
        $cmd >> (
            read num rest
            cmd=(${(z)${(e):-\$jt$num}})
            change_screen_title "$cmd[1]:t"
        ) 2> /dev/null
    }
fi
# }}}
# {{{ for ssh on screen
if [ x$TERM = xscreen ]
then
    function ssh_screen()
    {
        eval hostname=\${$#}
        screen -t $hostname ssh "$@"
    }

    alias ssh=ssh_screen
fi
# }}}
# {{{ aliases
# {{{ for ls
alias ls='ls -CF --color=auto'
alias ll='ls -l'
alias la='ls -A'
# }}}
# {{{ for ``safe rm''
# (ref. http://homepage3.nifty.com/hit-c_soft/Safe_rm/Safe_rm.html)
alias rm="${HOME}/local/bin/trash"
alias delete="/bin/rm"
#alias emptytrash="/bin/rm ~/.Trash/*"
alias recover="${HOME}/local/bin/undel"
# }}}
# {{{ for jude
alias jude="${HOME}/bin/jude_community/jude"
# }}}
# }}}
  • こちらのようにファイルを分けるのも良いなと思ったけど, vim で folding 使えば十分か, ということで. でもそうすると vim 以外では見通し悪いよね.
  • completion とか history とかは全然手をつけていない. まだ使いこなそうともしてない.
  • もちろん bindkey -v でしょ.
  • preexec()sudo に関して追加. よく使うんで.
  • 無意識のうちに rm をタイプすることって割とあるよね.
  • jude については alias よりもシンボリックリンクを使った方が良いような気も.
  • そういや前出の記事のコメント欄で教えてもらったのはまだ追記してなかった.
.screenrc

autodetach on
caption always " %{=br}screen%{-} | %-Lw%{=b}%n*%f %t%{-}%+Lw %=| %Y/%m/%d %c "
defencoding eucJP
hardstatus alwayslastline " %{=b}$TERM%{-} | %?%{= dd}%h%{-}%?"
vbell off
  • こっちもあんまり使いこなそうとしてねーなぁ.
  • captionhardstatus を両方とも最下行 (2 行) に表示するように変更.
.mlterm/main

termtype=mlterm
col_size_of_width_a=2
fontsize=14
use_anti_alias=true
use_transbg = true
use_scrollbar=false
fg_color=white
bg_color=black
brightness=20
contrast=50
bel_mode=none
  • mlterm の設定はなんか独特で はじめはよく分からんかった. 今もよく分かってないままのものがちらほら.
  • .mlterm/aafont とか .mlterm/color とかも弄ってるが晒しはしない.
  • Comments (Close): 0
  • TrackBack (Close): 0

jBibTeX

  • 2007年1月11日 17:39
  • 備忘録

大学での研究活動期間の半分が過ぎた今頃になってようやく, jBibTeX を使うようにしてみた. んでスタイルファイルは非公式ながら信学論準拠を謳っているこれを使ってみた. …うーん俺の好みとは違うかも. いつか改造しよう. いつか.

ついでに Makefile も書き直した.


# Makefile for hoge.tex

.PHONY:     all dvi ps pdf clean distclean
.SUFFIXES:  .tex .aux .bbl .dvi .ps .pdf

LATEX   = platex
BIBTEX  = jbibtex
DVIPS   = dvips
DVIPDF  = dvipdfmx
RM      = rm

TARGET  = hoge

all:    dvi ps pdf
dvi:    $(TARGET).dvi
ps:     $(TARGET).ps
pdf:    $(TARGET).pdf
clean:
        $(RM) -f *~ *.aux *.log *.bbl *.blg
distclean: clean
        $(RM) -f *.pdf *.ps *.dvi

.tex.aux:
        $(LATEX) $*
.aux.bbl:
        $(BIBTEX) $*
.tex.dvi:
        $(LATEX) $*
        $(LATEX) $*
.dvi.ps:
        $(DVIPS) $*
.dvi.pdf:
        $(DVIPDF) $*

$(TARGET).aux:  $(TARGET).tex
$(TARGET).bbl:  $(TARGET).tex $(TARGET).aux
$(TARGET).dvi:  $(TARGET).tex $(TARGET).bbl
$(TARGET).ps:   $(TARGET).dvi
$(TARGET).pdf:  $(TARGET).dvi

変数TARGETの辺りがなんか格好悪い.

  • Comments (Close): 0
  • TrackBack (Close): 0

Home> 備忘録: 2007年1月アーカイブ

カテゴリ
アーカイブ
購読
Powerd By

Return to page top