忘れたときに備えた記録

トップ 最新 追記
2005|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|11|12|
2009|01|02|03|04|05|06|10|12|
2010|06|07|08|12|
2011|07|09|
2012|09|11|
2013|02|03|09|
2015|10|11|
2016|01|08|11|
2017|02|08|10|
2018|11|

2006-04-18(Tuesday)

エスケープされた文字を飛ばす正規表現

たとえば'\$$123$'という文字列から'$123$'を抜き出したいとする。ルールは、

  • 抜き出したいのは$...$という形式の文字
  • ただし、"\$"のように"\"でエスケープされている場合は、抜き出しようの記号とはみなさない

単純に/\$.*?\$/としてしまうと、当然、

str = '\$$123$'
puts str[/\$.*?$$/]

の結果は

$$

となる。最初の\$が$をエスケープしている事を、この正規表現では見抜けないわけ。

今まではこういう場合、例えば

str = '\$$123$'
puts str.gsub(/\\\$/, "\001")[/\$.*?\$/]

などとして、一旦エスケープされるべき文字列を別の記号に置換してから、抜き出しを行っていた。

しかしこのやり方では、例えば"\"自体もエスケープできる等のルールが増えると、事前に置換するべき記号が増えて記述が面倒になる。というか、MathWikiスタイルの実装にこのやり方を使っていて、実際に面倒だったわけだ。

で、何日か前に、これを一発で解決する正規表現を思いついた。

BSEAC = "(?:\\\\.|[^\\\\])" # Back Slash Escaped Any Character
str="\$$123$"
puts str[/\A#{BSEAC}(\$.*?\$)/, 1]

これを使えば、事前の記号への変換なしに"\"でエスケープされた文字を飛ばして目的の文字を抽出できる。

Tags: Ruby

テキストファイルに設定を埋め込む

%!zt! diary(2004-04-04)より。

vi(正確にはvim)の設定をテキストファイルに埋め込むことが出来るのは知っていたけど、Emacsでも出来るとは知らなかった。

'# Local Variables:'というキーワードでググると、

などに解説があるのを見つけた。

Tags: メモ

バグ発見

"\R"を"\mathbb R"に置換するように設定した上で

$\R$

と書くと、\Rというコマンドが無いというエラーを出す。

同じバグがHikiで見つかったときに、あわせて修正するのを忘れていた模様です。

Tags: x-tdiary

2006-04-19(Wednesday)

tdiary-develにSPAMと思われた

パッチを投げようとしたらSPAM扱いで弾かれてしまった。なんてこったい。

以下、帰ってきた警告メッセージ。ぱっと見、件名に日本語を使ったのが良くなかったように読めたので英語に修正して送りなおしてみる。

したっけ、今度は警告メッセージも来なくなった。工エエェェ(´゜д゜`)ェェエエ工

ちなみに、送ろうとしたパッチはこちら {あ

This is the Postfix program at host mail.hinet.mydns.jp.

I'm sorry to have to inform you that your message could not be
be delivered to one or more recipients. It's attached below.

For further assistance, please send mail to <postmaster>

If you do so, please include this problem report. You can
delete your own text from the attached returned message.

			The Postfix program

<tdiary-devel lists.sourceforge.net>: host mail.sourceforge.net[66.35.250.206]
    said: 550-SPAM: This message appears to be spam (9.2 points). 550-- 550-If
    you believe this message was classified as spam in error, 550-please open a
    Support Request at the URL below. 550-(Please include this message in any
    Support Request). 550-- 550-- 550-Spam Filtering performed by
    sourceforge.net. 550-See http://spamassassin.org/tag/ for more details.
    550-Report problems to
    http://sf.net/tracker/?func=add&group_id=1&atid=200001 550-5.0
    L_FARAWAY_SUBJ         Subject: contains charsets we don't accept 550-1.0
    FORGED_RCVD_HELO       Received: contains a forged HELO 550 3.2
    CHARSET_FARAWAY_HEADER A foreign language charset used in headers (in reply
    to end of DATA command)

あ}

うわ

トラックバックしたのに言及リンクを付け忘れた(汗

たださんの所でも似た問題が発生している模様です。

tdiary-develにSPAMと思われた (続き)

件名を英文字オンリーにしたメールは無事に届きました。


2006-04-20(Thursday)

新MathWikiスタイル

現在のtDiary用MathWikiスタイルでは

  • 特殊記号のエスケープの仕方が独特すぎる
    • 文中に$自体を記述するためには、$$と書く
    • 文中に\自体を記述するためには、\/と書く
  • \(...\)記法や$$...$$記法が使えない
  • まとめてエスケープする方法が無い

といった不満があった。特に特殊記号のエスケープがひどい。

ので、新しい仕様を考えて実装してみた。新版では以下のようになった。

  • 文中での$や\のエスケープは\$とか\\と書く
  • \{x...x}と書く(xは任意の文字)と、中身(...)はエスケープも数式への変換もしない
  • \(...\)記法と$$...$$記法を使えるようにした

とりあえず自分のサイトのMathWikiスタイルは新版にアップデートしたので、これでしばらく様子見。

また、旧版の書式から新版の書式に変換するCGIも作ってみた。変換は完全ではなく一部で手動の修正が必要になるが、全部手書きで直すよりはだいぶ楽になる。

MathWikiスタイルを使ってる方がいらしたら、スナップショットを新版のものにしたので、是非試してみてください。

Tags: x-tdiary

2006-04-22(Saturday)

procmail でメールの振り分け

今までずっと、クライアントマシンで動かすThunder Birdのメールフィルタ機能を使ってメールの振り分けをしていたのだけど、これをサーバー側で自動的に処理させたくなり、procmailについて調べた。MTAにはpostfixを使っている。

まずpostfixによってサーバが受信した@hinet.mydns.jp宛てのメールを、procmailが処理するようにpostfixの設定を変える。

UNIX-POWER.JPなどを参考にして、/etc/postfix/main.cfに

mailbox_command = procmail

と追加する。

また、procmailの設定ファイルとして /usr/share/doc/procmail/examples/1procmailrc を参考に ~/.procmailrcを以下のように作成した。

PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir   # You'd better make sure it exists
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/from
LOGFILE=$HOME/from
LOCKFILE=$HOME/.lockmail

:0
* ^From.hiraku(at)hinet.mydns.jp
.Test/

(at)は実際には'@'と書いている。

この状態で、Thunder Birdを使ってimapの受信箱の下にTestというフォルダを追加してpostfixを再起動し、自分宛にメールを送ると、無事、一番上の受信箱ではなくTestに直接メールが保存されるようになった。

ただし、Thunder Bird側で何も設定しないと、メールの送受信ボタンを押しただけではTestにメールが届いたことが分からない。 403 - Forbidden を参考に、Testフォルダのプロパティで[このフォルダに新着メッセージがないか確認する]にチェックを入れると、新着メッセージが来たときに自動的にそのことが分かるようになった。

~/.procmailrc が無い場合

試しに~/.procmailrc.disとでも名前変更してみると、メールが届かなくなってしまった。マニュアルを調べてみると、~/.procmailrc が無い場合には/etc/procmailrcを探すのだがそれが存在しないのがいけないらしい。

そこで、/etc/procmailrc として

# Please check if all the paths in PATH are reachable, remove the ones that
# are not.

PATH=$HOME/bin:/usr/bin:/usr/ucb:/bin:/usr/local/bin:.
MAILDIR=$HOME/Maildir   # You'd better make sure it exists
DEFAULT=$MAILDIR/
#LOGFILE=$MAILDIR/from
LOGFILE=$HOME/from
LOCKFILE=$HOME/.lockmail

としたものを用意した。これで、~/.procmailrc を削除してしまってもメールがちゃんと届く。

Tags: メモ

2006-04-29(Saturday)

Namazuで検索

備忘録から必要な情報を引っ張ってくるのに、月ごとの日記を全部表示させてブラウザの検索機能を使うのがいい加減面倒になってきたので、ようやく検索機能を導入することに。

参考にしたのは

Debianで使うにあたって、以下のパッケージをまずインストール

  • libnkf-perl
  • libtext-kakasi-perl
  • namazu2
  • namazu2-index-tools

あとは上に挙げたページを参考にしてsqueeze.rbを使ったりインデックスファイルを作ったり .namazurc を作ったりして終わり。

Tags: tDiary

Namazu自動更新パッチ

複数の日記を使っていて、crontabにNamazuのインデックスファイルの更新を日記の数だけ登録するのが面倒だったので、squeeze.rbをいじって、日記の更新時に自動的にインデックスファイルも更新するようにしてみた。

作ったパッチはこちら

Tags: tDiary