Movable Type: 2003年9月アーカイブ

え~と、実はまだUTF-8環境での文字化けの不安は残りますが、Version 1.3を公開しました。
talk to oneself 2 の太鉄さんが作成されたMT4iを改造してiMode対応してみました。
iMode用URLはこちら→http://valium.oops.jp/i/
以下のような改変を施しました。
・Berkley DB に対応(かなりいい加減な対応ですが・・・)
・iModeアクセスキーに対応

北海道で大きな地震が起きました。地震の後片づけ中に車にはねられて亡くなられた方もいるとのことです。ご冥福をお祈りします。時間がたつにつれ、被害状況が続々と報道されています。家屋の損傷、道路の寸断や液状化も起こっています。まだ余震が続く中、これから夜を迎え、被災地の方々はさぞ不安なことでしょう。願わくば、さらなる被害のでませんことを。

そんな中、talk to onself 2さんで、MTで作られたページをi-mode向けに変換するスクリプト「MT4i」の新バージョンがリリースされました。被災時における情報伝達の準備を進める中、MTを携帯電話から見れるようにするのが課題の一つだったため以前より注目していたのですが、Berkley DBに対応していないのが悩みの種だったのです。(i-mode向けですが、実際にはj-skyでもez-webでも見れるはず、です。ここ1、2年の機種なら大丈夫かと。Berkley DBとは、MySQLなどのSQLデータベースがサーバーに用意されてなくても使えるデータベース、だと思います。SQLデータベースをサポートする低価格レンタルサーバーは少ないので、MTで一番利用されてるのはBerkley DBなのでは。)

それがなんと、人生迷い箸さんでBerkley DBに対応させる改造を行ったとのこと。それを受け、talk to onself 2の太鉄さんは改造部分を取り込む意向を示されました。

前のエントリーでの「被災時向けの機能」について質問をいただきましたので、どんなものかを書きます。コメントに書いてたら長くなってしまったので、改めてエントリー。


私は東海地震で大きな被害が想定される地域に住んでいるため、私の言う「被災時」の主な想定は地震災害です。
大きな地震が起これば通信状態が確実でない状態になることが予想されます。
そんな状況で、情報を確実にエントリーするための機能がまず一番の課題です。エラーが出たら通知する、成功したら通知する、というのが一番簡単な方法でしょうか。ただそれらがトラフィックの過度な増大につながってはいけませんから、ほんとにこの機能をつけて良いのかどうかは悩むところです。短い通知メールぐらいなら大丈夫だとは思いますが。

mail2entryを改変してみた

今回の改変の目的は
・PingのOn/Offをメールで制御できるようにする。
 →スケジュールなどの更新はPingサイトに知らせたくない。ただそれだけ。
・エントリーの内容(body)だけでなく、追記(extend)も書けるようにする。
 →思いのほか長い文章になることがあるので、分けられるとうれしい。
・署名部分の自動削除
 →「---/n」の行より後ろは自動的に削除。ただし署名の先頭行が「---」じゃないとNGなわけですが。ボク仕様なのでOK(笑)

穴水版mail2entryの改変情報です。個人的には署名部分の削除機能にひかれます。追記のも重宝しそうですね。mail2entryを使い出すと、普段のエントリーをすべてメールで済ましてしまいたくなりますもん。取り込んじゃおっかなぁ・・・

メーラーの挿入する自動改行を取り除く機能が個人的にすごく欲しい今日この頃。でもとりあえず、被災時向けの機能の実装が先かなぁ。

※最新版が公開されていますので、このページからのダウンロードは出来なくなりました。こちらへ

名前、変えた方が良いですかね。Joi Itoさんのと混同されないように。んー

えー、ver.0.2.0です。rebuild_indexも合わせてダウンロードしてください。
Download mail2entry.cgi(ダウンロード後、拡張子.txtを.cgiに変更)
Download rebuild_index.cgi(ダウンロード後、拡張子.txtを.cgiに変更)

追加機能、改良点を更新履歴より以下に引用します。

  • 更新通知pingを発信できるようにしました。それに伴い、Setting節に$flagpingを新たに設けました。1で発信、0で発信しません。
  • ブラウザからmail2entryを実行した場合の結果表示が文字化けする問題に対処しました。
  • 2通以上のメールを処理すると、前のエントリーへのナビゲータがうまく付かないことがある問題に対処しました。この問題に対処するため、rebuld_index.cgiも更新されています。でも、メールを送った順番とエントリされる順番が逆転してしまう場合などにはまだ現象が出ます(逆転してしまうのも原因不明)。なお、rebuld_index.cgiへBlogIDをmail2entryから受け渡すようにしたため、今までのようにrebuld_index.cgi内でBlogIDを指定する必要が無くなりました。perlのパス以外はそのままで使えると思います。

更新通知のpingが問題なく送れるようになったようなのでバージョンを0.2まで上げました。また少しまともなスクリプトになった気分(笑)
リビルドのあたりのコードが少し変わりました。blog->saveが新登場。いまいち使い方分からず使ってます。こうしたらいいとか、ここが変とか、どしどしご指摘くださいませ。

アップデートするときの注意点。


  • 更新履歴にもありますが、Setting節に$flagpingが新たに加わっています。一番下に追加しましたので、それ以降のソースをカットアンドペーストしてください。ソース自体を改造されてる方は申し訳ありませんが前バージョンと見比べながらアップデートしてください。どこを書き換えたかもう分からないです・・・
  • rebuild_index.cgiもアップデートされています。今回のアップデートで、blogIDの指定をしなくて良くなりました。perlのパスにだけ注意して、今までのものに上書きするだけで大丈夫だと思います。

と、こんな感じです。でもまだなにか書き忘れているような・・・
実験用コードですので、ご利用に際してはくれぐれもご注意ください。ログが吹っ飛ぶようなことはないと思いますけど。

pingの問題を追求してたら、関係ないところのバグを見付けました。

useがいっぱいあるところのすぐ下のこの文を、

print "Content-type: text/html; charset=$to_jcode?n?n";

下のように変えないと、ブラウザからmail2entry.cgiを直接実行した場合に文字化けして表示されてしまうことがありました。エントリー自体はちゃんとされますが、気持ち悪いので修正。

my %printJcode = ( "euc" => "EUC-JP", "sjis" => "SHIFT_JIS", "jis" => "ISO-2022-JP",
"ucs2" => "UCS2", "utf8" => "UTF8");

print "Content-type: text/html; charset=$printJcode{$to_jcode}?n?n";

・・・UCS2って何?(汗)

2003/9/23追加:
"utf8" => "UTF-8" (ハイフンが入る)が正しいです。板屋かえでさんありがとうございました。

mail2entryの更新通知pingですが、あのコードだけだとうまく動かないようです。PING.BLOGGERS.JPのようにサイト名だけ表示してくれるところですと問題は出ないのですが、Myblog japanのようにRSSまで読み込んで表示するところだと、前回のエントリーのRSSを読んでしまうようです。

現在板屋かえでの覚え書きさんで鋭意調査中の模様です。続報を待ちましょう(人任せ(汗))

といいつつも、同じ現象が出るかどうか実験するためのエントリーだったりします。どうかなぁ。

穴水版mail2entryではいままで、せっかくエントリーしても更新通知pingは発信されませんでした。ver.0.1.3以降では出来るようになります。まだ0.1.3を公開するまでに少し作業をしたいので、とりあえずその部分のコードだけをご紹介します。

※最新版が公開されていますので、このページからのダウンロードは出来なくなりました。こちらへ


14:50修正:

Download mail2entry.cgi(ダウンロード後、拡張子.txtを.cgiに変更)

バージョンがちまちま上がっていきます。前バージョンからの変更点は、


  • 前回分のエントリーをリビルドするように修正。
  • 画像を保存するディレクトリを、$image_dir/西暦年/月(いずれも2桁)という形にした。$image_dirは準備しておく必要がありますが、下層のディレクトリは自動生成します。
  • メール無しの時やその他のエラー時にInternal Server Errorにならないように修正(たぶん)。エラー内容が(ある程度)ブラウザに出力されるようにしました。
  • 設定項目の最下部に、新たに$myblog_idを作りました。メールでエントリーする対象のブログIDを指定してください。今まではスクリプト中にmy $blog = MT::Blog->load("1");という形で直接書き込んでいましたが、変数に代入することにしました。これで、バージョンアップ時にはSetting節以降を置き換えるだけで良くなりました。たぶん。
  • 設定項目に、新たに$flagresizeを作りました。$resize_widthで指定した幅より大きな画像を添付したときに、リサイズするかどうかを0か1で示します。0なら「しない」、1なら「する」です。デフォルトは0です。Image::Magickがインストールされていない場合にリサイズしようとしてエラーが出てしまうことに対する対処です。
  • $flagmessageの宣言場所をSetting節から動かしました。バージョンアップの際は、「# POP3サーバへのログイン」の前に、my $flagmessage = 0;を挿入してください。(もしかしたらすでにSetting節から動かしていたかもしれません)

バージョンアップ方法は、Setting節以降(# [/Setting] =====のある行より下)を、新バージョンのものに置き換えてください。このスクリプトに手を出すぐらいの方ならおわかりでしょうが、# [Setting] =====と# [/Setting] =====の間まで置き換えてしまうと、せっかく設定したものが台無しになってしまいます。
また、新たに$flagresizeと$myblog_idという設定項目が増えています。下記の#########で挟まれた部分をSetting節に書き加えてください。デフォルトではそれぞれ0と"1"になっているので、上記変更内容を参考にしてブログに合わせて変えてください。

#############
#画像のリサイズをするときは1、しないときは0
my $flagresize = 0;

#ブログIDの指定
my $myblog_id = "1";
#############

Ver.0.1.2のソースと見比べながら切り張りすると分かりやすいと思います。

設置方法自体は前バージョンから変わっていませんので、穴水版mail2entry公開。為 被災時にはMoblogで。 を参照してください。rebuld_index.cgiとindex.cgiについても同様です。

リンクだけ張っておきます。
Download rebuild_index.cgi
Download index.cgi


なにか不具合があったり、新機能の要望等あればお知らせください。修正も機能追加もお約束できませんが、まだ不完全なスクリプトなのでもうちょっと成熟させたいとは思っています。

穴水版mail2entry.cgi、早速不具合発覚です(汗)
オリジナルコードにはあった前回のエントリーをリビルドする部分を、理解できずにコメントアウトしていたら、そのことすらすっかり忘れて公開にあたって消してしまっていました。
あひるさんから指摘して頂きました。ありがとうございます~!
前回分のエントリーもリビルドしないと、上部のナビゲーション(<< タイトル | Main | タイトル >>)が書き換えられないということです。こんなことにも気づかないとは・・・素人が手を出すもんじゃないですねぇ。

そういうわけで、今日の午後7時頃までにダウンロードした方がいらっしゃいましたら、

# エントリーのリビルド
$mt->rebuild_entry( Entry => $entry )
or die "Rebuild failed: entry";

というコードの下に、下記のコードを付け足してください。

# 前回のエントリーのHTMLをリビルド これをしないと上部ナビゲーションに反映されない
$mt->rebuild_entry( Entry => $entry->previous )
or die "Rebuild failed: previous entry";

凡ミスしましてすいませんです。
最新バージョンは0.1.1になってます。他にもなにかありましたらご指摘お願いします。

※最新版が公開されていますので、このページからのダウンロードは出来なくなりました。こちらへ

Moblogスクリプトである穴水版mail2entry.cgi(Ver.0.1。あひるさん作Ver0.5.0改造品)を公開します。実験用コードですので、使用は自己責任でお願いします。なにが起きても責任は持てません。
以下の2つのファイルをダウンロードして、末尾のtxtをcgiに変えてご利用ください。基本的な設置の仕方はあひるさんのコードと同じですので、WEB-YATAIさんを見てください。スクリプト内での設定項目は、スクリプト内で説明してあります。Settingの節以外にはblog-idの設定が必要です。rebuild_index.cgiにもblog-idの設定が必要です。アクセス権は普通は700でいいはずです。
Download mail2entry.cgi
Download rebuild_index.cgi

使用法は、ブラウザからmail2entry.cgiを開くだけです。エントリーとリビルドに成功すれば本文などが表示されます。
いちいち開くのが面倒な場合は、cronに登録するか、こんなコードを書くといいでしょう。mail2entryの冒頭に書かれているのをいじったものです。
Download index.cgi
前回更新時から5分たっていると、メールサーバーに問い合わせをしてメールがあればエントリーとリビルドをしてからトップページを表示します。ただし、トップページを開くのがちょっと遅くなります。
blogのindex.htmlと同じディレクトリに置きます。普通のサーバーならindex.htmlよりもこのスクリプトの実行を優先するはずです。アクセス権は700で。

スクリプト内の注意事項などにも目を通してください。author詐称も可能なスクリプトですので、複数人で使用するにはさらなる改造が必要です。私の場合は、スクリプト内にもあるとおり被災時の使用が前提のため、詐称できるくらい緩い設定でないと困るのでこうなってます。

コード自体もこのエントリーもごちゃごちゃしてしまいました。美しくなくてすいません。
もしさらに便利に改造したら、ぜひ教えてください!

2003/9/8 am8:45追記:
* 大事なことが抜けていました・・・
* すてきなコードを公開してくださったあひるさん、sekiさん、mail2entry.cgiの詳細な設定方法を公開されているWEB YATAIさん、本当にありがとうございます。

SL-C760のカスタマイズが一段落し軌道に乗ったので、先日の防災訓練で課題となっていた、メールによるサイトの更新を実現すべく作業に入っていました。そんなわけでここ数日更新がさっぱりでした。すいません。でも成果たくさんです。(私的には)

NX80Vでの写真、今度はスナップ(?)用途です」を見て頂いた方はおわかりかと思いますが、私が担当している「湖西災害ボランティア」のサイトの基本構成はほとんどMobile-bozuと同じです。あちらもMovableTypeを使用して、更新作業がなるべく簡単に出来るようにしているんです。
それでも東海地震発生時ともなれば、使用できる通信回線も限られ、おそらく発生当初しばらくの間、良くて携帯電話程度の回線しか確保できないと思われます(現時点では衛星電話の使用を想定しています)。そんな状態だと、MovableTypeの管理画面ですらも重いんです。被災時における外部への情報伝達が最大の使命だったりもするので、それでは困ったちゃんです。

そこでメールを送るだけで情報を書き込めたら便利だ、ということになるわけですが、これがなかなか大変でした。MovableTypeでメールによるエントリーの追加(いわゆるMoblog)を可能にするプログラムのひとつに、mail2entry.cgi(あひるさん作)があります(WEB-YATAIさんの設置方法解説ページ)。

設置方法に従ってやればすぐ動くかと思いきや、ホスティング会社のサーバーには必要なPerlのライブラリが無いとかでエラーでまくり。telnet出来るのを幸いに自分で勝手にインストールして何とかクリアしたら、今度は原因のはっきりしないエラーに遭遇。ちょっとした表記の違いが許容されないみたいでした。Perlのバージョンが低いからかなぁ。もー、大変。Perl初心者にはきついです。2日がたち、コードを全部理解するぐらいになってようやく設置が出来ました。ふーっ。いい勉強になります。

My status

BlogPeople

apple

気になるサイト覚え書き

ウェブページ

Powered by Movable Type 4.1

このアーカイブについて

このページには、2003年9月以降に書かれたブログ記事のうちMovable Typeカテゴリに属しているものが含まれています。

前のアーカイブはMovable Type: 2003年5月です。

次のアーカイブはMovable Type: 2003年10月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。