MovableTypeの最近のブログ記事

たまたまみつけたのですが、このiMTを使うとiPhoneでMTの管理(エントリの追加、編集、コメント操作)ができるようになります。

インストールは上記の記事に詳しくあるので参考にしてみてください。

iMT

自分も早速インストールしてみたのですが、ちょっとしたときに書けるのはうれしいかも。

操作感に関しては、ボタンが大きいし画面がiPhone用になってるので使い易いです。その点では先に紹介したBlog Itよりいいかもですね。

これからはこのブログの更新頻度が上がるかもしれません。たぶん。きっと。
先週末時間があったので、MTを3系から4系にバージョンアップしました。

データ変換にドキドキしたけど、さすがMTなんなく変換してくれました。

でもこのサイトは古くからつかっているために、
テンプレートが古くて最新のスタイルがつかえません。

そこで全てのテンプレートを初期化した!
ここからいろいろな調整をするのが一番大変だったよ!

MovableTypeを3.2へバージョンアップしてみた。
さくさくバージョンアップできました。

バージョンアップの方法というか手順を簡単に書く。ほんと簡単に…。

  1. ダウンロードしてくる
  2. とりあえず「限定個人ライセンス」で。
  3. mt-config.cgiを作成
  4. mt-config.cgi-originalをmt-config.cgiという名前でコピーして、旧バージョンのmt.cfgを見つつ適宜編集。
  5. pluginsのコピー
  6. インストールしていたpluginsを旧バージョンのディレクトリからコピー
  7. mt.cgiにアクセス
  8. あとは手順通りにやるだけで、勝手にインストールが完了しました。

んー、簡単。。。

Beta Weblog: Movable Type の文字コード変換スクリプト

Movable Type 3.0 のデータベースに格納されているデータの、文字コードの変換スクリプトのテスト版を公開します。必ずデータのバックアップを作成してから変換してください。

思うところがあり、今までMovableTypeで格納データと公開ページのエンコーディングがEUC-JPだったのですが、それをUTF-8に変えてみた。

どうやってやったらいいか調べたら、本家のブログに変換スクリプトがあったのでそれを使った。

やり方は簡単で、変換スクリプトダウンロードしてきて、解凍して出きたmt-convert-code.cgiをMTのホームディレクトリに置いて、それをブラウザから叩けばよい。
※やる前には必ずDBのバックアップを取っておきましょう。

あとはmt.cfgのPublishCharsetをEUC-JPからUTF-8に変えたら、すべてのページを再構築するだけ。(mod_perlで動いている場合にはapacheを再起動したあとに再構築方がいい)
テンプレートのcharsetとかも普通はcharset=<$MTPublishCharset$>となってると思うのでそのままイケるはずです。

Solution to Trackback Spams

The way it works is fairly simple - if the incoming trackback does not come from the host as stated in the URL, we reject the trackback. For example, if a trackback from url http://online-poker.psxtreme.com/ comes from 194.63.235.156 (an open proxy), then it is likely to be spam. (online-poker.psxtreme.com does not resolved to 194.63.235.156).

Trackback Spamがいいかげん多くて、手動で消すのがバカらしくなったので、ネットでその手のプラグインを探したらこのプラグインがみつかったので導入してみた。まだ導入したばかりなので効果はわかりません。

やってることは、Trackback pingのホストのIPと送ってきたサーバのIPが違うと拒否というものらしい。gethostbynameでIPを調べてますね。

追記:
これやっぱり外しました。軒並各ブログサービスからのTBを拒否するし…。まぁTBを送ってくるサーバのIPとドメインなんて個人じゃなけりゃ同じじゃないということかな。。。さて、MT3.2に上げようかなぁ、、ボソ。
del.icio.us自分のブックマークのフィードがJSON形式で取れるようになってますね。これってJavaScriptと親和性が高いので、XMLで書かれているものをXPathやDOMでごにょごにょやるのに比べたら、Ajaxとかでいじったりする場合にはとても楽ですし、Perl使いとしてはこの形式(JSON)がなんとなく見易いので重宝しそうです。ということで、MTでもこれと同じようにJSON形式でフィードを出せるようにするプラグインを作ってみた。

作ったプラグインは、mt-jsonfeed.plです。RSSフィードと同じようにファイルに書き出すために簡単なテンプレートを作らなければならないのが、ちょっとめんどくさいのですが。。。

インストール方法は下記。

  1. まず上記のプラグインをダウンロードして$MT_HOME/plugins/以下に配置します。
  2. 次に必要なモジュールをCPANからインストールしておきましょう。必要なものはJSONJcodeです。
  3. 次に適当な名前を付けてテンプレートを1つ追加します。テンプレートの内容は下記のような感じ。charset_fromとcharset_toは元のコードと出力コード(デフォルトは両方utf-8)、obj_nameは出力するjsに使うオブジェクト名、numは出力するエントリの数です。
  4. <$MTJSONFeed charset_from="euc" charset_to="utf8" obj_name="JSONFeed" num="10"$>
    
  5. 最後に上記で作成したテンプレートを作成すると、JSON形式のフィードが出力されます。
あとは、これを下記のようにJavaScriptから読み込めるようにすればどこでもくっつきフィードが簡単に使えます。
<div id="container"><h2>my json feeds</h2></div>
<script type="text/javascript" src="http://example.com/jsonfeed.js" charset="UTF-8"></script>
<script type="text/javascript">
var ul = document.createElement('ul')
for (var i=0, post; post = JSONFeed.posts[i]; i++) {
        var li = document.createElement('li')
        var a = document.createElement('a')
        a.setAttribute('href', post.permalink)
        a.appendChild(document.createTextNode(post.title))
        li.appendChild(a)
        ul.appendChild(li)
}
document.getElementById('container').appendChild(ul)
</script>
ちなみに自分の環境だと<script>タグにcharsetを指定してやらないと日本語が入ってる場合にはブラウザで文字コードが解析できず、JavaScriptエンジンでコケました。でもSafariだとcharsetを指定してやってもだめっぽいです。charsetを指定する以外にもJSONのjsを出力するときのヘッダのContent-Typeにcharset=を付けてもイケます。 表示例は続きにありますです。

ぼーっと自分のブログ見ていたらアーカイブのリンクがいよいよ長くなってきてなんかやだなと思ったのでselectに変更してみた。

参考にするまでもないjsなのですが、本家の方にやり方が載っていたのでそれを参考にしました。

あるときからこのMTで、TypeKeyの認証をして戻ってきたら「The validation failed」というエラーが出て認証に失敗してコメントができなくなっていたので、それについてずっと調べていたがやっと原因がわかった。

ネットでこの問題を検索してみると、いろいろな場合があって、主に下記のようなことが原因なのが多い。

1 MTのバージョンに依存した問題
 lib/MT/Utils.pmのdsa_varifyの1275行目付近のif文で
 if ($has_crypt_dsa && 0) {
 となっている「&& 0」を取ると直る
2 個別アーカイブのテンプレートで、typekeyへ飛ばすURLで、v=1.1というのがある/ないの問題
3 lib/MT/Utils.pmのperl_sha1_digestが上手くいかない問題
4 lib/MT/App/Comments.pmの$SIG_WINDOWの値が短かすぎる(デフォルト10分)問題

などがあるらしく、どれか一つにあてはまるとコケたりするらしい。

んで、このブログがなににあてはまったかというと、上記でいう4に近い感じでした。いろいろと変数をえんやこらとダンプしてデバッグしたところ、このTypeKeyの認証は時間を測ってある一定時間内(これが10分)に認証処理が完了しないとエラーを出す仕様になっているらしく、それを判定する基準となるサーバの時計がズレているために問題が起っていた様です…。なので、ntpdをちゃんと設定したらあっさりTypeKeyで認証できました。

意外なところに落とし穴があった…。

ちなみにMTはwarnを使ってデバッグをすると画面にその文字列がでるのだが、それがいやな場合にはMT::log()という関数があるので、それを使えば管理画面のトップページからリンクされているログを参照するページでその出力を参照することができます。って言わずもがな、かな…。

昔MTでファイルをアップロードしていたときは、標準でファイルをアップロードするときに
サムネイルを作成するIFが付いてたけど今サーバを変えて運用してからそのIFがなくなってしまっていた。
なんでだろうと思ったら、Image::MagickかNetPBMが入ってないとだめなんですね。
#よくできてんなMT…

いつもならImage::Magickを入れるところだが、NetPBMってのがよくわかってなかったのでインストールしてみた。ppmtogifとかのツールは見たことあったんだけど、それはNetPBMのツールだったのか!知りませんでした。

設定のしかたは、NetPBMをインストールしたら
mt.cfgの
ImageDriver NetPBM
NetPBMPath /home/foo/netpbm/bin
ImageDriverは、NetPBM(Image::MagickならImageMagick)を設定。NetPBMPathは、NetPBMのツールの入っているディレクトリ。
この2つを設定するだけで、勝手にファイルアップロードでのサムネイル作成のIFが表れる。

前のエントリで書いたMTBanASCIIの文字コードの判定ですが、
本家の方がバージョンアップしたので、そちらを使った方がよいと思われます。

いたずらをしていたのは例の如くutf8フラグだったみたい。

自分の認識では、もともとの判定は[\x00-\xff]で判定していたのだが、
内部の文字コードがutf8フラグがONにならない文字コードを使っていたりすると、
2バイト文字であってもそれを1バイトずつ判定してしまうためにASCIIと
判定してしまっていた。

なのでutf8フラグをONにすることで、perlでの判定する際に2バイト文字を判定単位の1つ
として\xffff(←例えばの話ね)という風に判定することで、ASCIIでないと判定するように
したのだと思います。

たぶんこういうことだと思います。

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja