Ktai Entryタグの投稿

2008-06-25
晴れ

WordPress 2.6 対応を盛り込む

ゆりこ による 23:51:56 の投稿
カテゴリー: WordPressハック
タグ: , , ,

WordPress 2.6 ベータ版が出た (tai さんの記事) とのことで、拙作プラグインも対応を図ることにしました。一番影響が大きいのは「wp-config.php をウェブルート以外の場所に置く機能」ですね。Ktai StyleKtai Entry は、wp-config.php を require するという挙動をしている箇所がいくつかあるので、これらを新設の wp-load.php の require に変更しなければなりません。WordPress 2.5.1 以前との互換性を考えると、以下のように wp-load.php の存在をチェックして require するファイルを変更すればいいでしょう (ABSPATH のチェックはお好みで)。

if (defined('ABSPATH')) {
	$path = ABSPATH;
} else {
	$path = dirname(dirname(dirname(dirname(__FILE__)))) . '/';
}
if (file_exists($path . 'wp-load.php')) {
	require_once $path . 'wp-load.php';
} else {
	require_once $path . 'wp-config.php';
}

他の方が作られている携帯閲覧プラグイン、メール投稿ツールも、wp-config.php を include/require している箇所があるため対応は必須ですね。ただし、wp-config.php を従来と同じ箇所に置く場合はそのままで動いてしまいます。とはいえ、「セキュリティーのため、wp-config.php を移設することが好ましい」という設置指南がされることもありそうですから、その場合は対応していないプラグイン・ツールは「WordPress 2.6 非対応」となりそうです……。

[追記]「セキュリティにより重きを置くためにリモートパブリッシングを無効にできる機能」は、XML-RPC や Atom API を停止するだけで、wp-mail.php を停止するものではないようです。これも停止しないと片手落ちだと思うので、さっそく trac に提案かな〜〜。どうせ提案するなら「wp-mail.php 経由の POP3 サーバー DoS アタックを防止する機能」「wp-mail.php の日本語対応」もパッチ送付したいところです。

[さらに追記] wp-config.php を include しているプラグインは、「Lightweight google Maps」も該当でした (Ajax で非同期にアクセスする locations.php にある)。最近アップデートしてないので新機能も盛り込んでのリリースをしましょうか? hiromasa さん作の「wp-otenki」も該当しますので、ひさびさのアップデートがされることでしょう ;-)

[またまた追記] 「WP_CONTENT_DIR, WP_PLUGIN_DIR 定数への対応を行なって気がつきましたが、この定数を変更してプラグインディレクトリーを変更すると、上記の wp-load.php 読み込みが正常動作しなくなります!! wp-load.php への相対パスが一意に決まらないためです。うーん。どうしましょう。

2008-06-17
晴れ

WordPress メール投稿プラグイン Ktai Entry 0.8.5 リリース

ゆりこ による 21:32:49 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.5 をリリースいたします。変更点は以下の通りです。

  • 外部メールボックスを読み出すトリガーを、スタイルシートの呼出しに変更しました。これにより、JavaScript オフの設定がされたブラウザーによる閲覧でもメール読み込みが行なわれます。
  • 同じ時刻の投稿があれば重複としてエラーにする確認を、DATE コマンドで添付画像の撮影日時を投稿日時に指定した場合でも行うようにしました。
  • 同じ内容の投稿がある場合、重複とみなしてエラーとするようにしました。
  • デフォルトの投稿スラッグが、時分秒を繋いだ6ケタの数字にならず、固定の文字列「003328」になってしまうバグを修正しました。(Ktai Entry 0.8.4 のみ存在するバグ)
  • Windows サーバーで運営していて、かつ、プラグインのフォルダー名を ktai_entry 以外に変更しているとき、正常に動作しない不具合を修正しました。
  • GD が組み込まれていない PHP で稼動させたとき異常終了していましたが、添付画像ファイルを無視して投稿処理がされるようにしました。
  • WordPress MU で使用した場合、管理パネルの「メール投稿」でメールサーバーの設定をできるようにしました。通常の WordPress の場合は従来通り、「投稿設定」→「メールでの投稿」にて設定してください。ただし、添付画像の投稿にはうまく対応していないかもしれません。(Ktai Entry 0.8.4 で作り込んだつもりでしたが動作していなかった)
ダウンロード: ktai_entry085.tar.bz2 (76.2 KB)
バージョン 0.8.6 をリリースしました。

今回は投稿スラッグが固定の文字列になってしまうバグの修正および、重複投稿チェックの強化、外部メールボックスの読み出しトリガーの変更を行なっています。最後のものはちょっとチャレンジングな変更かもしれません。JavaScript オフの環境でも動作する反面、スタイルシートの呼び出しをきっかけとしているため、ブラウザーのキャッシュに入りやすい (==何回も実行されない可能性がある) という欠点があります。手元では問題なく動作していますが、環境によってはうまくメール取り込みが行なわれないかもしれません。

機能自体の強化ではありませんが、附属ドキュメントに「メール投稿されたら管理者にメールが届くようにしたい」というカスタマイズを掲載しました。作者としてはそういう機能の必然性を感じないため本体に取り込む予定はありませんが、必要な方はカスタマイズを行なってみてください。

今回は変更点やカスタマイズについて慎重にテストを行なっているので、たぶん問題なく動作するはずです。

2008-06-14
晴れ

Ktai Entry と Ktai Location にバグ発見

ゆりこ による 22:06:36 の投稿
カテゴリー: 更新履歴
タグ: , ,

本日の、東京地下鉄副都心線初乗りレポートを実施していて、Ktai Entry および Ktai Location にバグがあることが判明しました。申し訳ありません。

Ktai Entry の方は、投稿スラッグが時分秒を繋げた6ケタの数字にならず「003328」という固定の数字になってしまうというものです。複数回投稿すると、追番がついて「003328-2」などとなります。Ktai Location の方は、Yahoo! 地図情報の緯度・経度が小数点フォーマットの場合に認識されないというものです。どちらも以前は正常動作していたもので、機能アップやバグフィックスした際にエンバグしてしまったものです。非常に情けない……。

投稿スラッグについては、テスト時に見落してました。今日は1日で何通も投稿したため、スラッグが変だぞと一発で分かったのですが、テストは1通しかしてなかったので、一見問題ないように見えたのでした。

Yahoo! の方は、以前から存在する dms2deg() 関数にあったバグが、今回発覚したというものです。この関数は、度分秒フォーマットを小数点フォーマットに変換するものですが、小数点フォーマットを与えた場合はそのまま戻ってくるという仕様のはずでした。そのため、Yahoo! 地図情報では、度分秒フォーマットか小数点フォーマットかを気にせずにどちらの場合でも関数を通せばよいはずでした。しかし、実際にはバグのため小数点フォーマットを与えると false が戻ってしまったのです。他の地図 URL の場合は、「必ず度分秒フォーマットが来る」ことが決まっているのでバグが露呈しなかったのです。とはいえ、ソースコードをよく見たら一発で分かる類いのものです。ソースコードレビューがおざなりになっていたわけですね……。

これらの不具合は近日中に直して修正版を出したいと思います。なんか、最近はエンバグすることが多くて迷惑をおかけしています。もうちょっと品質保証体制を整えないといけませんね。

[追記 2008-06-15] Ktai Location は修正版を出しました。Ktai Entry は他に直したいところがあるため、もうしばらくお待ちください。

[追記 2008-06-18] Ktai Entry の修正版も出しました。今回のバグ以外にも気になる点が多かったため、だいぶいじっています。かなり安定しているはずです。

2008-06-05
くもりのち雨

WordPress メール投稿プラグイン Ktai Entry 0.8.4 リリース

ゆりこ による 04:18:27 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.4 をリリースいたします。変更点は以下の通りです。

  • 投稿日時を指定できるようにしました。日時を直接指定する方法と、添付する画像の撮影日時を投稿日時にする指定方法の2種類に対応しています。
  • 添付ファイルの MIME タイプと拡張子の対応を確認し、一致しない場合は画像を保存しないようにしました。(気休め程度のセキュリティー確認)
  • WordPress MU で使用した場合、管理パネルの「メール投稿」でメールサーバーの設定をできるようにしました。通常の WordPress の場合は従来通り、「投稿設定」→「メールでの投稿」にて設定してください。
ダウンロード: ktai_entry084.tar.bz2 (74.0 KB)
バージョン 0.8.5 をリリースしました。

今回は投稿日時指定コマンドの追加と、WordPress MU でのメールサーバー設定フィールドの追加です。個人的には、単純な日時指定コマンドは不要と思っていましたが、「添付写真の撮影日時を投稿日時にする」機能をつけたかったため、オマケとして単純な日時指定もできるようにしました。「撮影日時を投稿日時とする」アイディアはいずみちゃんから頂きました。ありがとうございます。ただし、シャープ製ソフトバンク端末のように EXIF がつかない場合や、画像回転コマンドを併用した場合 (EXIF が落ちるため) は使えません。後者については今後改善する予定です。

WordPress MU 対応は 0.8.3 リリースでは見送ったのですが、今回「MU のときだけ設定フィールドを出す」という方向で実装しました。通常 WordPress でもメールサーバー設定フィールドを独自に持つのもよさそうなのですが、「同じような設定項目が複数ある」のはよくないと考えました。wp-mail 起動問題については、WordPress コアを改修してもらう方向で直せばいいと思いますし。

2008-05-25
雨のちくもり

写真撮影日時を投稿日時にしてみる

ゆりこ による 20:36:10 の投稿
カテゴリー: WordPressハック
タグ: ,

きょうリリースした Ktai Entry 0.8.3 ですが、実は Mail_mimeDecode.php の内部関数 (コメントで @access private と書いてある関数) を外から使うという凶悪な実装になっています。あまり行儀のよいスタイルとは言えないので、早めに修正したいところです。

で、それだけ修正しても仕方ないので、投稿日時の指定機能を付けることにしました。DATE: 2008-05-25 19:39 などと書けば、その日時になるという仕組みで、実装はとても簡単です。未来の日付にすると、WordPress コアの機能で自動的に予約投稿にもなります。

ただ、それだけ実装してもまるで芸がないので、「写真を添付したときは、写真の撮影日時を投稿日時とする」オプションを盛り込む予定です (「DATE: 1」と書いたら1枚目の写真の日付とする etc)。これは、旅のリアルタイムレポートでは絶大な効果がありまして、「写真を撮って文章を書いているうちに圏外になってしまった」とき、事後送信しても撮影した時刻が投稿日時となるため、記録という意味では正確なウェブログになります。この手法は、いずみちゃんの「Feel Fine!」で実践でされているものです (P BLOG + オリジナルの投稿スクリプトという構成)。

Ktai Entry の処理では、まずマルチパートを解析し (画像はまだオンメモリー)、次に本文だけ投稿処理をして、それから写真を保存して公開します。exif_read_data() は画像がファイルじゃないと使えないので、EXIF の日時は本文投稿時点では読めません。日時は後で読む必要があって、ちょっとややこしい処理になりそうです。

なんとか実装してみて、CVS に放り込んであります。テスト完了したら 0.8.4 としてリリースですね。

WordPress メール投稿プラグイン Ktai Entry 0.8.3 リリース

ゆりこ による 05:01:15 の投稿
カテゴリー: WordPressハック
タグ: , , , , , , ,

WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.3 をリリースいたします。変更点は以下の通りです。

  • 各社装飾メール (デコメ/デコレーションメール等) を送信した場合、同じテキストが重複しないようにしました。装飾をそのまま反映する機能は未実装です。
  • ログ機構が吐くメッセージを日本語化しやすいように、po ファイルにログ用文字列を含めました。デフォルトでは、文字化けを防ぐために英語メッセージのままです。日本語化は各自で行なってください。
  • From フィールドに MIME エンコードされた日本語を含む場合でも正しくメールアドレスを検出するようにしました。従来、1バイト目もしくは2バイト目に < や > を含む場合 (「ぜ」「下」「次」など) では漢字部分をメールアドレスとして判断してしまっていました。
  • 日本語名の添付ファイルを正しく検出するようにしました。ただし、保存時は日本語部分を削除したファイル名となります。すべて日本語部分のときは、ランダムな英数字をファイル名とします。

(以下、技術的な難し〜〜い話)
今回はバグフィックスのみです。「From に漢字を使っていると投稿できない」というバグに対応するため、MIME ヘッダをデコードしないことにしました。From, To, Cc フィールドからメールアドレスを抽出する処理は、正規表現ではなく RFC2822 に準拠した方式にしているのですが、従来、MIME B デコードしてから処理していたため、日本語部分にメールアドレスっぽい文字列があると抽出に失敗していました。MIME デコードしない状態で抽出すれば OK です。正規表現でメールアドレスを探す場合、”Ikeda,Yuriko”@example.com だとか、@ の前後に空白がある (yuriko @ example.com) とかでうまく抽出できないという問題がありますが、独自方式にも落とし穴がありました……。

日本語ファイル名ですが、Ktai Entry は「携帯電話から投稿する」ことを主眼にしていたので、ファイル名は英数字記号だけと想定していました。しかし、PC からメール送信する場合は日本語があり得るので、今回対応を図りました。そうなると、RFC2231 に対応しなければなりませんよね ;-)

既存ツールでは、MobG だけが RFC2231 準拠の日本語ファイル名を認識できます。さすがですね (でも、ソースに「RFC2331」と書いてあるのはご愛嬌)。wp-mb_mail は、RFC 非準拠の MIME B エンコードだけ対応、wpmob は日本語ファイル名を認識できません。まあ、「携帯電話から投稿」という意味では、あまり問題ではないでしょう。

なお、WordPress MU でメールサーバーの設定が入力できない件の対応は見送りました。「MU だけフィールドを増やす」手が楽ですが、それならすべての WordPress で設定フィールドをつけてもよさそうです。で、そうなると、wp-mail.php 起動の根本対策として、メールサーバー設定カラム名称を独自のものに変更することが可能になってしまいます。こうするとセキュリティーが非常にアップして魅力的なのですが、似た設定項目が複数あるとややこしいのではないかと気にもしています。そのへんの検討が進んでないので、見送り、としました。

2008-05-17
くもり時々晴れ

Ktai Entry + Ktai Location で XHTML 文法違反

ゆりこ による 02:29:58 の投稿
カテゴリー: WordPressハック
タグ: , , ,

Ktai EntryKtai Location を併用すると、Invalid な XHTML 出力になってしまうことが分かりました。例えば、「今度は入場時タッチ不良でエラー」という記事を Markup Validation Service で検査させてみると、「p 要素が始まってないのに終了タグがある」などのエラーになります。

旅行記の XHTML エラー結果画面

これは、Ktai Entry の投稿テンプレートと、Ktai Location が位置情報 URL を div 要素で囲む処理の相性が悪く、WordPress の XHTML 整形処理が正しく機能しなくなってしまうためです。投稿テンプレートは以下のように本文を p 要素で囲むようにしています。

<div class="photo">{images}</div>
<p>{text}</p>
<div class="photo-end"> </div>

で、本文に位置情報 URL があると、Ktai Location は locationurl というクラスで div ブロック化します。

<div class="photo">(画像)</div>
<p>(本文)
<div class="locationurl">(位置情報URL)</div>
</p>
<div class="photo-end"> </div>

これを WordPress は以下のように整形してしまいます。本文の直後に p 要素の閉じタグを入れるのです。このため、最初にあった p 要素閉じタグが浮いてしまうわけです。

<div class="photo">(画像)</div>
<p>(本文)</p>
<div class="locationurl">(位置情報URL)</div>
</p>
<div class="photo-end"> </div>

けっきょくのところ、p 要素の中に div 要素を入れてしまうのが不正なので、これは Ktai Location の処理が悪いわけですね。もしくは、Ktai Entry のテンプレートを変更して、本文を p 要素で囲まないようにしても OK です。wp-mta が生成する XHTML はそうなっていました。しかし、この場合、縦横の写真が混ざったときのレンダリングが変になってしまうため、Ktai Entry では本文を p で囲む処理としました。

つまり、Ktai Location の div 要素囲み処理を改善して、p 要素の外に出してやればいいわけです。どうせ class=”locationurl の部分は CSS で display:none となるので、位置をずらしても問題ありません。これは Ktai Location のバグフィックスとしたいと思います。現在のバージョンが 0.99 なので、ついに 1.00 とするか、0.991 と逃げるか……。

[追記] バージョンは 0.991 として、CVS に改良版をコミットしました。手元のテストでは動作良好ですが、これから生田緑地ばら苑見学で実テストする予定です。

[さらに追記] 実地テストはダメでした。今度は div 要素に </p> が入ってしまっていました。地図 URL として認識する部分に HTML タグ要素が入らないように修正してコミットしました。

2008-05-11
雨

WordPress メール投稿プラグイン Ktai Entry 0.8.2 リリース

ゆりこ による 16:05:24 の投稿
カテゴリー: WordPressハック
タグ: , , , , , ,

WordPress 用メール投稿プラグイン「Ktai Entry」のバージョン 0.8.2 をリリースいたします。変更点は以下の通りです。

  • ドキュメントに Gmail および Yahoo! メールでの設定方法を記載しました。
  • ドコモ端末から Gmail, au one メール、Yahoo! メールに送信した場合に、iモード絵文字を認識するようにしました。
  • ソフトバンク 3G 端末から Yahoo! メールに送信した場合に、ソフトバンク絵文字を認識するようにしました。

今回は絵文字対応の強化です。実は従来バージョンでも SSL が使えることが判明したため、Gmail での iモード絵文字対応を行ない、さらに頑張って Yahoo! メールでの iモード絵文字/ソフトバンク絵文字に対応しました。au one メールはテストしていませんが、Gmail と同じインフラなので大丈夫でしょう。Yahoo! メールにおける絵文字 JIS コードは、実機から全絵文字を送信して調査しました;-) Vodafone マークの絵文字などは未調査です (Vodafone 時代の 3G 端末を持っている人がいれば協力お願いします!!)

これで、絵文字対応はほぼ完成と言えます。イー・モバイルが対応していませんが、インターネットに出ていく時点で「?」に変換されているため、キャリア側の機能アップを待つしかありません。

あとは、デコメ等の装飾メールに対応すること、コマンドでカテゴリーやタグ一覧を返送できる仕組みを作ること、Ktai Style で下書きを作って電話機に送信し、Ktai Entry 用の投稿メールを作れるようにすること (==既存の下書きを投稿メールで上書きする機能) あたりの対応でしょうか。Ktai Entry は MobG のような投稿作成ウィザードを持ちませんが、それは Ktai Style と連携すれば似た機能が作れると考えています。

2008-05-10
晴れ

Ktai Entry 0.8.2-beta1 (テスト版)

ゆりこ による 22:46:12 の投稿
カテゴリー: WordPressハック
タグ: , ,

WordPress メール投稿プラグイン「Ktai Entry」のテスト版を配布します。

  • デフォルトでログ機能が有効です。
  • ドコモから Gmail に送った iモード絵文字を認識するようにしました。
ダウンロード: ktai_entry082-beta1.tar.bz2 (64.8KB)
バージョン 0.8.2 リリースしました。

ドコモ端末をお持ちの方はぜひお試し頂けると幸いです。デフォルトでログ機構が有効なので、その点にはご注意ください。そのまま放置すると logs/error.log が巨大になって不具合が起きる可能性があります。

携帯から Gmail や Yahoo! メールへ絵文字送信

ゆりこ による 21:23:14 の投稿
カテゴリー: ネットワーク
タグ: , , ,

Ktai Entry がそのままで SSL 使えることが分かったため、Gmail を使えることになりました。そこで、携帯電話から絵文字を Gmail に送信したときの挙動を調べてみました。Yahoo! メールも携帯絵文字の受信に対応しているっぽいので、こちらも調査してみます。

絵文字のエンコード
iモード EZweb S!メール ウィルコム
Gmail に送信 Shift_JIS ISO-2022-JP の変形 ISO-2022-JP (絵文字は〓) ISO-2022-JP + Shift_JIS (Web絵文字だけ Shift_JIS)
Yahoo! メールに送信 ISO-2022-JP の変形 ISO-2022-JP の変形 ISO-2022-JP の変形 ISO-2022-JP + Shift_JIS (絵文字だけ Shift_JIS)

EZweb (au) と WILLCOM は、送信先によらず絵文字が送れます。EZweb は本文は ISO-2022-JP でエンコードされ、絵文字は「Eメール用JISコード」を使います。WILLCOM も本文は ISO-2022-JP でエンコードされ、WILLCOM 絵文字は <#HEART> などのタグに変換、Web 絵文字 (ドコモ互換) は Shift_JIS コードがそのまま入ります。文字コード的には WILLCOM は凶悪仕様ですね ;-) コーディングはしやすいですが。

ドコモ→Gmail は Shift_JIS そのままと、プログラミング的にはやりやすいコードです。ソフトバンク→Gmail は絵文字に対応してなくて、(おそらく) ソフトバンク側で 〓 (ゲタ) に変換してしまいます。これは今後の対応を待ちましょう。

Yahoo!メールは、ドコモ、ソフトバンク両方とも ISO-2022-JP ベースのエンコーディングです。au のように「Eメール用JISコード」が公開されていないので、これは対応に時間がかかりそうです……。

[追記] Yahoo! メールで受信したドコモ/ソフトバンク絵文字ですが、まるで規則性がありません……。「パンチ」の絵文字が同じコードになっているため、Yahoo! メールは EZweb の「Eメール用JISコード」に正規化しているのかも??

ソフトバンク絵文字例
文字 ISO-2022-JP 文字列 16進 Unicode
(^^) }2 0x7d32 U+E002
[パンチ] vN 0x764e U+E00D
[鯨] u) 0×7529 U+E054
[COOL] y9 0×7939 U+E214
[得] vR 0×7652 U+E226
[目] xC 0×7843 U+E419
™ wK 0x774b U+E537
ドコモ絵文字例
文字 ISO-2022-JP 文字列 16進 絵文字番号
♥ x4 0×7834 136
●~ u3 0×7533 154
[クリップ] uY 0×7559 237 (拡37)
☃ u> 0x753e 4
[パンチ] vN 0x764e 153
[チューリップ] v? 0x763f 256 (拡56)

[追記] この調査結果をもとに、Ktai Entry 0.8.2 をリリースしました。また、表の絵文字部分は、今後 Ktai Style が絵文字画像を搭載すれば文字から絵に変わっていきます。