2005.02.03
1. 画像の枠線の削除
Movable Type 3.122に入れ替えたら、画像の枠線が付いている。
2.66のときはついていなかったので、同じにしたいと思って調べたら、以下のところをを修正すればよい事がわかった。
mtディレクトリー内の/lib/MT/App/CMS.pmを修正
HTML
} elsif ($q->param('include')) {
(my $fname = $url) =~ s!^.*/!!;
if ($thumb) {
return <<HTML;
<a href="$url">
<img alt="$fname" src="$thumb" width="$thumb_width"
height="$thumb_height" border="0"/></a>
HTML
} else {
return <<HTML;
<img alt="$fname" src="$url" width="$width" height="$height"
border="0">
ついでに、最近mail-entry.cgiから乗り換えて使わせてもらっているpost2blogにもborder=”0″を追加しておこう。
$description = "<a href="$returl"><img src="$returl" width=
"$imgx"height="$imgy" alt="$orgfilename" border="0"></a><br/>
$description";
2. 編集ボタンの追加
おー、今度はMozillaでもエントリーBodyの記入枠の上にBold, Italic, Undeline, Link, Blockquoteなどの挿入アイコンが付く。
ファイルのアップロードが新設されたのも便利に使えそうだ。
あとは、Preを付けておくのだが、今回は簡単で・・・mt/tmpl/cms内のedit_entry.tmplをQuote(blockquote)の記述をコピーして追加しQuoteをPreに’blockquote’を’pre’とするだけでよい。
2箇所ある。
write('<a title="<MT_TRANS phrase="Pre">"
href="#" onclick="return formatStr(document.entry_form.text,
'pre')"><img src="<TMPL_VAR NAME=STATIC_URI>
images/html-pre.gif" alt="<MT_TRANS phrase="Pre">"
width="22" height="16" /></a>');
ついでに赤字を指定する”Red”も付けておこう。
しかし、赤字は閉じるタグは開始タグに”/”をつければ良いとは行かない。
<font color=#ff0000>文が入る< /font>としなければならない。
結局mt.cgiと同じディレクトリにあるmt.jsに以下のようなformatStr2を追加した。
function formatStr2 (e, v) {
if (!canFormat) return;
var str = getSelection(e);
if (!str) return;
setSelection(e, '<' + v + '>' + str + '</font>');
return false;
}
これで準備が整ったのでedit-entry.tmplに以下を追加する。
formatStr2にして、新しくmt.jsに追加したfunctionを呼んでいるのに注意。
write('<a title="<MT_TRANS phrase="Red">" href="#" onclick="return
formatStr2(document.entry_form.text, 'font
color=#ff0000')"><img src="<TMPL_VAR NAM
E=STATIC_URI>images/html-red.gif"
alt="<MT_TRANS phrase="Red">" width="22" heigh
t="16" /></a>');
2005.01.30
いままで、Movable Typeの2.66版を使っていたが、UTFでメールを送るとデータベースが破壊されて回復不能の致命的な状態に陥ることがある。
わたしも、やってしまってバックアップしていたのを用いて回復させたことがある。
最近のものは直っているらしいので3.122版に入れ替えた。
しばらく、使ってみたりテストしないと直ったか否か分からないが・・・
2005.01.23
またまたまた、Majordomoの改造の話です。
sequencerを改造してOutlook Expressでもメールシーケンスの重なりを起こらないようにしたが、Eudoraでは重なりが起こる事が分かった。
EudoraのSubjectはSubject:のWordの直後に改行が入るので、最初の方法ではシーケンス番号を取り除けない。
Subject:
=?ISO-2022-JP?・・・
のようになっているので、Subject:行の次の行もmimedecodeしてmimeencodeしシーケンスを取り除く必要がある。
Subject:行の次の行も処理すべき対象か、それ以外の行かは、mimeencodeされた行には=?が現れる事で判別しているが、Subjectの継続行以外でmimeencodeされている可能性はFrom, To, Reply行であるので、これらは除く。
また、メールの本文中にシーケンスの重なり除去のアルゴリズムに引っかかるものが存在すると困るのでシーケンス番号の除去はメールのheader部だけに作用させるようにした。
これらの条件を考慮した結果が次である。
$in_header = 1;
while (<STDIN>) {
if ($in_header){
if (/^s*$/) {$in_header =0 ;}
if (/^Subject:/ || (/=?/ && !/From|To|Reply/)) {
$_ = &mimedecode($_);
$_ = &mimeencode($_);
s/[rR][eE]:.*[([].*d+[)]]/Re:/;
s/[rR][eE]:s*[rR][eE]:/Re:/g;
}
}
#############################################
if(/out-of-the-office/i){$taboo = 1;}
############################################
print IN $_;
}
どうも、スッキリした方法では無いですね。
誰か、良いアイデアがあればお教えください。
2005.01.15
またまた、Majordomoです。
メーリングリストでタイトルにシーケンスナンバーを付けるのが一般化しています。
このため、Majordomoではresendの変わりにsequencerを使うが改造が必要なのは既に書いた。
ところが、これでもOutlook ExpressではMIME decodeのルールに違反しているため、シーケンスナンバーの重なり防止が出来ない。
そこで、mime-decodeして改めてmime-encodeして正しいMIMEに直してやる必要がある。
このためにはmimer.plとmimew.plを取ってきて、sequencerの67行目あたりに次のように使用を宣言する。
require "shlock.pl";
+require "mimer.pl";
+require "mimew.pl";
そして、158行あたりを以下のように改造する。
&open_temp(IN, "/tmp/sequencer.$$.in") ||
&abort("sequencer: Can't open /tmp/sequencer.$$.in: $!");
while (<STDIN>) {
+ # by nob & tamotsu
+ if (/^Subject:/) {
+ $_ = &mimedecode($_);
+ $_ = &mimeencode($_);
+ s/[rR][eE]:.*[([].*d+[)]]/Re:/;
+ s/[rR][eE]:s*[rR][eE]:/Re:/g;
+ }
print IN $_;
}
さて、これで終わりだと思ったら、sequencerを使うとtaboo headerやtaboo bodyの「禁句」の指定が有効にならない。
taboo headerは添付ファイルの禁止する場合など、便利に使え是非欲しい機能である。
しかし、幸いにもsequencerはsequencerそのものに指定できる場所がある。
275行目あたりに下の赤字部分を挿入して添付ファイル(multipart/mixed)を禁止する。
/^subject:s*Failed mailb/ ||
/^subject:s.*bchangeb.*baddressb/ ||
/^subject:s*requestb.*badditionb/i ||
/^Content-Type:s*multipart/mixed/i )) {
&bounce("Admin request");
}
次にtaboo bodyであるが、私の運営しているMLで最近、出張に際して自動不在メール設定をした人がいて、メールがループする事故が起こった。
元来、長期にメールが受け取れないときは一時的にMLから退会して戻ったら入り直すべきとは思うがMLの運営側でも対策を考えることにした。
そこで、前述のシーケンス重なり防止の後ろに以下を挿入した。
自動応答不在メールの本文のどこかに必ずout-of-the-officeの語句を入れてもらい、これを引っ掛けてBounce mailにして逃げようというものである。
s/[rR][eE]:s*[rR][eE]:/Re:/g;
s/[rR][eE]:s*[rR][eE]:/Re:/g;
}
#############################################
if(/out-of-the-office/i){$taboo = 1;}
############################################
print IN $_;
}
さらに、taboo headerで追加した前述の後ろに以下のようにBounce mailを発行させる行を追加する。
/^subject:s*requestb.*badditionb/i ||
/^Content-Type:s*multipart/i )) {
&bounce("Admin request");
}
#############################
if($taboo == 1){&bounce("Auto reply mail");}
############################
管理者には誰かMLに投稿する度にBounce mailが届くが、これは良しとした。
やれやれ、これで目的は達したか???
2005.01.09
サーバでMLなどを運用すると、namazuを入れて記事の検索をするようにすることが良くある。
それで、真夜中の適当な時間にIndexファイルを更新するようcronを設定することとなるが、実行結果はrootのメールとなり一般的には管理者に伝えられる。
ところが、namazuの実行結果の出力文字コードはEUCにしていることが多く、メールでは日本語文字が化けてしまう。
メーラーでEUCコードを指定して変換して読むこととなるが、大したことでないとは言いながら、毎日となると案外めんどうです。
そこで、crontab に以下のようにjis変換を付けておくと便利である。
0 2 * * * /usr/local/bin/namazuindex | /usr/local/bin/nkf -j
ちなみに、namazuindexは
#!/bin/sh
export LANG=ja
/usr/local/bin/mknmz -O /hogehoge/index/abcd /MLdirectory/abcd
/usr/local/bin/mknmz -O /hogehoge/xyz /Mldirectory/xyz
などとしておく。 特にLANG=Jaを入れておかないと日本語のindexファイルが作られないので要注意です。