Movable Type 5.14リリースと5.13との差分
Movable Type 5.14がリリースされました。
1.追加機能
環境変数HeaderCacheControlが追加されました。
この環境変数は、管理画面に対して、Cache-Controlの値を設定します。運用上のセキュリティポリシー上、プロキシサーバーなどの外部サーバにキャッシュを保持させたくないなどに利用します。
この環境変数に指定した値は、HTTPレスポンスに記述され、管理画面のコンテンツキャッシュをどう制御するか、指定することができます。
例えば、
HeaderCacheControl private
と設定すれば、HTTPレスポンスに「Cache-Controle:private」が指定され、ページを閲覧するユーザー以外、サーバーにキャッシュを残さないようになります。
2.修正点
約50の修正が行われています。詳細はリリースノートをご覧ください。
上記リンク先には記載されていませんが、管理画面で利用するjQueryが1.4.4から1.6.4にアップグレードされています。
3.5.13とのファイル差分
MT5.13と5.14のファイル差分を掲載しておきます。
- addons/Commercial.pack/config.yaml
- addons/Commercial.pack/lib/CustomFields/App/CMS.pm
- addons/Commercial.pack/lib/CustomFields/ImportExport.pm
- addons/Commercial.pack/lib/CustomFields/Util.pm
- addons/Commercial.pack/templates/professional/blog/comment_response.mtml
- addons/Commercial.pack/templates/professional/blog/javascript.mtml
- addons/Commercial.pack/templates/professional/website/comment_response.mtml
- addons/Commercial.pack/templates/professional/website/javascript.mtml
- addons/Commercial.pack/tmpl/edit_field.tmpl
- addons/Community.pack/lib/MT/App/Community.pm
- addons/Community.pack/lib/MT/Community/L10N/de.pm
- addons/Community.pack/lib/MT/Community/L10N/es.pm
- addons/Community.pack/lib/MT/Community/L10N/fr.pm
- addons/Community.pack/lib/MT/Community/L10N/nl.pm
- addons/Community.pack/templates/blog/comment_response.mtml
- addons/Community.pack/templates/blog/powered_by.mtml
- addons/Community.pack/templates/global/javascript.mtml
- default_templates/comment_response.mtml
- default_templates/entry.mtml
- default_templates/notify-entry.mtml
- extlib/I18N/LangTags/Detect.pm
- extlib/Locale/Maketext/Guts.pm
- extlib/Locale/Maketext/GutsLoader.pm
- extlib/Locale/Maketext/TPJ13.pod
- extlib/Locale/Maketext.pm
- extlib/Locale/Maketext.pod
- lib/MT/App/CMS.pm
- lib/MT/App/Comments.pm
- lib/MT/App/Search.pm
- lib/MT/App/Trackback.pm
- lib/MT/App.pm
- lib/MT/Asset/Image.pm
- lib/MT/Asset.pm
- lib/MT/Association.pm
- lib/MT/Atom.pm
- lib/MT/AtomServer.pm
- lib/MT/Auth/MT.pm
- lib/MT/Auth.pm
- lib/MT/Author.pm
- lib/MT/Blog.pm
- lib/MT/Bootstrap.pm
- lib/MT/CMS/AddressBook.pm
- lib/MT/CMS/Asset.pm
- lib/MT/CMS/Blog.pm
- lib/MT/CMS/Comment.pm
- lib/MT/CMS/Common.pm
- lib/MT/CMS/Entry.pm
- lib/MT/CMS/Filter.pm
- lib/MT/CMS/Log.pm
- lib/MT/CMS/Tag.pm
- lib/MT/CMS/Template.pm
- lib/MT/CMS/Tools.pm
- lib/MT/CMS/User.pm
- lib/MT/Core.pm
- lib/MT/Entry.pm
- lib/MT/FileInfo.pm
- lib/MT/L10N/de.pm
- lib/MT/L10N/en_us.pm
- lib/MT/L10N/es.pm
- lib/MT/L10N/fr.pm
- lib/MT/L10N/ja.pm
- lib/MT/L10N/nl.pm
- lib/MT/Object.pm
- lib/MT/ObjectDriver/SQL.pm
- lib/MT/ObjectScore.pm
- lib/MT/Permission.pm
- lib/MT/Revisable/Local.pm
- lib/MT/Summary/Triggers.pm
- lib/MT/Tag.pm
- lib/MT/Template/Context.pm
- lib/MT/Template/ContextHandlers.pm
- lib/MT/Template/Tags/Calendar.pm
- lib/MT/Template/Tags/Tag.pm
- lib/MT/Template/Tags/Website.pm
- lib/MT/Template.pm
- lib/MT/Theme/Category.pm
- lib/MT/Theme.pm
- lib/MT/Upgrade/v5.pm
- lib/MT/Upgrade.pm
- lib/MT/Util.pm
- lib/MT.pm
- mt-check.cgi
- mt-cp.cgi
- mt-static/codemirror/demo/activeline.html
- mt-static/codemirror/demo/changemode.html
- mt-static/codemirror/demo/complete.html
- mt-static/codemirror/demo/folding.html
- mt-static/codemirror/demo/fullscreen.html
- mt-static/codemirror/demo/marker.html
- mt-static/codemirror/demo/mustache.html
- mt-static/codemirror/demo/preview.html
- mt-static/codemirror/demo/resize.html
- mt-static/codemirror/demo/runmode.html
- mt-static/codemirror/demo/search.html
- mt-static/codemirror/demo/theme.html
- mt-static/codemirror/index.html
- mt-static/codemirror/lib/codemirror.css
- mt-static/codemirror/lib/codemirror.js
- mt-static/codemirror/lib/util/foldcode.js
- mt-static/codemirror/lib/util/javascript-hint.js
- mt-static/codemirror/lib/util/runmode.js
- mt-static/codemirror/lib/util/simple-hint.js
- mt-static/codemirror/LICENSE
- mt-static/codemirror/mode/clike/clike.js
- mt-static/codemirror/mode/clike/index.html
- mt-static/codemirror/mode/clojure/clojure.js
- mt-static/codemirror/mode/clojure/index.html
- mt-static/codemirror/mode/coffeescript/coffeescript.js
- mt-static/codemirror/mode/coffeescript/index.html
- mt-static/codemirror/mode/css/index.html
- mt-static/codemirror/mode/diff/diff.css
- mt-static/codemirror/mode/diff/index.html
- mt-static/codemirror/mode/groovy/groovy.js
- mt-static/codemirror/mode/groovy/index.html
- mt-static/codemirror/mode/haskell/index.html
- mt-static/codemirror/mode/htmlmixed/index.html
- mt-static/codemirror/mode/javascript/index.html
- mt-static/codemirror/mode/javascript/javascript.js
- mt-static/codemirror/mode/jinja2/index.html
- mt-static/codemirror/mode/lua/index.html
- mt-static/codemirror/mode/markdown/index.html
- mt-static/codemirror/mode/markdown/markdown.js
- mt-static/codemirror/mode/ntriples/index.html
- mt-static/codemirror/mode/pascal/index.html
- mt-static/codemirror/mode/pascal/pascal.js
- mt-static/codemirror/mode/perl/index.html
- mt-static/codemirror/mode/perl/perl.js
- mt-static/codemirror/mode/php/index.html
- mt-static/codemirror/mode/php/php.js
- mt-static/codemirror/mode/plsql/index.html
- mt-static/codemirror/mode/python/index.html
- mt-static/codemirror/mode/python/python.js
- mt-static/codemirror/mode/r/index.html
- mt-static/codemirror/mode/rst/index.html
- mt-static/codemirror/mode/rst/rst.js
- mt-static/codemirror/mode/ruby/index.html
- mt-static/codemirror/mode/ruby/ruby.js
- mt-static/codemirror/mode/rust/index.html
- mt-static/codemirror/mode/rust/rust.js
- mt-static/codemirror/mode/scheme/index.html
- mt-static/codemirror/mode/smalltalk/index.html
- mt-static/codemirror/mode/smalltalk/smalltalk.js
- mt-static/codemirror/mode/sparql/index.html
- mt-static/codemirror/mode/stex/index.html
- mt-static/codemirror/mode/tiddlywiki/index.html
- mt-static/codemirror/mode/velocity/index.html
- mt-static/codemirror/mode/xml/index.html
- mt-static/codemirror/mode/xml/xml.js
- mt-static/codemirror/mode/xmlpure/index.html
- mt-static/codemirror/mode/xmlpure/xmlpure.js
- mt-static/codemirror/mode/yaml/index.html
- mt-static/codemirror/mt/mt.css
- mt-static/codemirror/README.md
- mt-static/codemirror/test/index.html
- mt-static/codemirror/test/test.js
- mt-static/codemirror/theme/cobalt.css
- mt-static/codemirror/theme/eclipse.css
- mt-static/codemirror/theme/elegant.css
- mt-static/codemirror/theme/monokai.css
- mt-static/codemirror/theme/neat.css
- mt-static/codemirror/theme/night.css
- mt-static/css/form.css
- mt-static/css/listing.css
- mt-static/css/main.css
- mt-static/css/simple.css
- mt-static/css/sortable.css
- mt-static/css/structure.css
- mt-static/jquery/jquery.js
- mt-static/jquery/jquery.min.js
- mt-static/jquery/jquery.mt.js
- mt-static/jquery/jquery.mt.min.js
- mt-static/mt.js
- mt-static/mt_de.js
- mt-static/mt_es.js
- mt-static/mt_fr.js
- mt-static/mt_nl.js
- php/lib/block.mtcalendar.php
- php/lib/block.mtentries.php
- php/lib/block.mtif.php
- php/lib/block.mtifmoreresults.php
- php/lib/block.mtsethashvar.php
- php/lib/class.mt_session.php
- php/lib/function.mtinclude.php
- php/lib/function.mtsetvar.php
- php/lib/function.mtvar.php
- php/lib/l10n_de.php
- php/lib/l10n_es.php
- php/lib/l10n_fr.php
- php/lib/l10n_nl.php
- php/lib/mtdb.base.php
- php/lib/thumbnail_lib.php
- php/mt.php
- plugins/MultiBlog/lib/MultiBlog.pm
- plugins/MultiBlog/php/block.mtmultiblog.php
- plugins/MultiBlog/php/init.MultiBlog.php
- plugins/StyleCatcher/lib/StyleCatcher/CMS.pm
- themes/classic_blog/templates/comment_response.mtml
- themes/classic_blog/templates/entry.mtml
- themes/classic_blog/templates/javascript.mtml
- themes/classic_website/templates/comment_response.mtml
- themes/classic_website/templates/javascript.mtml
- themes/pico/templates/comment_response.mtml
- themes/pico/templates/javascript.mtml
- tmpl/cms/cfg_prefs.tmpl
- tmpl/cms/dialog/adjust_sitepath.tmpl
- tmpl/cms/dialog/footer.tmpl
- tmpl/cms/edit_asset.tmpl
- tmpl/cms/edit_category.tmpl
- tmpl/cms/edit_comment.tmpl
- tmpl/cms/edit_template.tmpl
- tmpl/cms/include/asset_table.tmpl
- tmpl/cms/include/entry_table.tmpl
- tmpl/cms/include/header.tmpl
- tmpl/cms/list_category.tmpl
- tmpl/cms/list_common.tmpl
- tmpl/cms/restore_end.tmpl
- tmpl/cms/search_replace.tmpl
- tools/rebuild-pages
以下はMT5.14で追加されたファイルです。
- extlib/auto/Image/Size: emfsize.al
- extlib/SOAP/Transport: LOOPBACK.pm
その他、mt-static/codemirror関係で差分がありますが割愛します。
Facebookアプリの「Page Tab Edit URL:」について
Facebookアプリの「Page Tab Edit URL:」について調べてみました。
「Page Tab Edit URL:」はFacebookアプリ管理ページの「ページタブ」に表示されている項目のひとつですが、この項目に言及している記事がほぼありません。

ということで、ざっくりですが調べた内容を展開します。認識誤りがありましたらご指摘ください。
1.「Page Tab Edit URL:」の役割
「Page Tab Edit URL:」は、Facebookページにアプリを登録したあと、アプリの編集を行う場合のURLを設定するためのもののようです。
Facebookアプリを開発されている方は、この項目についてよくご存知かと思いますが、アプリというほどのものでもない、いわゆる「IFrameタブページ」を表示するだけであれば、この項目は利用することがないと思われます。
2.アプリの編集リンクはどこに?
アプリの編集リンクは、Facebookページのアプリ設定画面に表示されたアプリの「アプリケーションへ移動」のリンクが該当します。

このリンクをクリックすると、「Page Tab Edit URL:」に指定したURLにジャンプします。
またURLのクエリーデータとして「fb_page_id(FacebookページのID)」が渡されます(サンプルの数字はでたらめです)。
http://user-domain/hoge.php?fb_page_id=205512332781231
3.編集画面できること
Facebookページ用アプリケーションとして、この編集画面でアプリの各種設定を行います。
たとえば、アプリ開発側で自前のデータベースを用意して、fb_page_idをキーにしたアプリ用の各種設定項目の保存などを行うことが想定されます。
また、次のような実装をすれば(認証が必要であれば必ずするものかもしれませんが)、facebookデータを利用することもできます。
<?php
require_once('facebook.php');
$facebook = new Facebook(array(
'appId' => 'アプリID',
'secret' => 'シークレットID',
'cookie' => true
));
…中略…
?>
ということで、参考になりましたでしょうか。
ブラウザから実行可能な画像形式一括変換ツール
ブラウザから実行可能な画像形式一括変換ツールをPerlで作ってみました。

1.機能
指定したディレクトリにある「変換前の拡張子(ピリオドは不要)」の画像ファイルを、「変換後の拡張子(ピリオドは不要)」のファイルに一括変換して、同じディレクトリに出力します。
変換状況は下のスクリーンショットのように順次表示します。
ディレクトリは絶対パス・相対パスのいずれも可能です。ディレクトリは再帰的に検索するので、指定したディレクトリ配下のすべての画像ファイルが対象になります。
変換後の同名ファイルがある場合、上書きします。
必要に迫られてとりあえず作ったものなので、細かいチェックはできていません。レンタルサーバによっては長時間実行すると500エラーになるかもしれません。
2.実行環境
このツールの実行には、PerlとImageMagick(PerlMagick)が必要です。
余談ですが、ImageMagickを使った形式変換は、SSHが利用可能であればコマンドラインから実行できます。
本ツールはSSHが使えない環境での利用を想定しています。
3.使い方
以下の「changeImageType.zip」をダウンロードして、展開した中にあるchangeImageType.cgiをサーバにアップロードし、実行可能なパーミッションに変更してください。
ブラウザからツールにアクセスして、「ディレクトリ」「変換前の拡張子」「変換後の拡張子」を設定して実行してください。
ツールは自由に改変してもらって結構です。ImageMagickの実装部分を書き換えれば「一括サムネイル作成」など、色々利用方法があると思います。
また「こうした方がいい」という機能や実装があれば、どこかでつぶやいてください。
「file:///」でスラッシュが3つ並んでいる理由
ブラウザにテキストファイルや画像ファイルをドラッグるすと、テキストや画像が表示され、URLが「file:///」で始まるのは皆さんご存知かと思います。

Windowsであれば、「file:///」「file:///C:/」と入力すれば、エクスプローラーのような表示を行うこともできます。

で、「何でスラッシュが3つ並んでるんだろう?」と疑問に感じていたものの、「まぁそういうものなんだろう」と、ほったらかしにしていました。
ということでこの疑問を解消すべく、「file:///」について真面目に調べてみました。
1.「file」について
まず「file」は、ホストコンピュータ上でアクセス可能なファイルを示すもので、RFC1738(URL仕様)の3.10に以下の記載がありました。
3.10 FILES
The file URL scheme is used to designate files accessible on a particular host computer. This scheme, unlike most other URL schemes, does not designate a resource that is universally accessible over the Internet.(file URLスキームは特にホストコンピュータ上でアクセス可能なファイルを示す。他のほとんどのURLスキームと異なるこのスキームは、インターネット上でアクセス可能な普遍的なリソースを示しているのではない。)
「file」の部分は仕様上「スキーム」「スキーム名」と呼ばれるもので、前述のRFC1738、新しいところではRFC3986(URI仕様)に規定されています。
3.1. Scheme
Each URI begins with a scheme name that refers to a specification for assigning identifiers within that scheme.(各URIは、そのスキームを含む識別子を割り当てるための仕様書を参照するスキーム名で始まる。)
fileスキームにおけるURIは、次のような形式になります。
file://<host>/<path>
他のスキームとしては、よく知られた「http」「ftp」「mailto」などがあります。URIはスキームによって若干異なるようです。
公式なスキームは「Permanent URI Schemes」に登録されています。
2.「///」とスラッシュが3つ並ぶ理由
探したところ、RFC1738(URL仕様)の3.10に以下の記載がありました。
3.10 FILES
As a special case, <host> can be the string "localhost" or the empty string; this is interpreted as `the machine from which the URL is being interpreted'.(特殊な例として<host>は "localhost" もしくは空の文字列にできる。これは `URL が処理されているマシーンから' として処理される。)
つまり、ローカルPCにあるリソースにアクセスする場合、さきほどの
file://<host>/<path>
の「<host>」を省略した、
file:///<path>
で表現できるという仕様みたいで、これがスラッシュが3つ並ぶ根拠のようです。長年の疑問が解消しました(笑)。
RFC3986の1.1や3.2.2にも類似の記載がありました。
1.1. Overview of URIs
URIs that identify in relation to the end-user's local context should only be used when the context itself is a defining aspect of the resource, such as when an on-line help manual refers to a file on the end-user's file system(e.g., "file:///etc/hosts").(エンドユーザのローカルの状況と関連して識別するようなURIは、オンラインヘルプマニュアルがエンドユーザのファイルシステム上のファイルを参照する(例えば、"file:///etc/hosts")時のように、状況自体がリソースの定義している解釈である時のみ使用されるべきである。)
3.2.2. Host
If the URI scheme defines a default for host, then that default applies when the host subcomponent is undefined or when the registered name is empty (zero length). For example, the "file" URI scheme is defined so that no authority, an empty host, and "localhost" all mean the end-user's machine, whereas the "http" scheme considers a missing authority or empty host invalid.(URIスキームがhostについて初期値を定義する場合は、host副構成要素が未定義である時、あるいは登録名が空(長さ0)である時に、その初期値が適用される。例えば、"file"URIスキームでは、オーソリティがない、空のホスト、及び "localhost" が全てエンドユーザのマシンを意味するが、"http"スキームはオーソリティがない場合や空のホストは無効であるとみなす。)
ということで、httpではローカルPCであってもホスト名を省略できないようです(実験済み)。
3.関連情報
省略つながりということで、こちらもどうぞ。
ウェブサイトのパフォーマンス測定サービス「WebPageTest」
ウェブサイトのパフォーマンスを測定できるサービス「WebPageTest」を紹介します。

「WebPageTest」はもともとAOLによって開発されたプログラムで、2008年にBSDライセンスの下でオープンソース化されました。現在はGoogle codeとして管理されています。
今回紹介するオンライン版はWebPagetest LLCによって運営されているもので、かなり高機能です。
当ブログでは最近、このサービスを使ってチェックし、あまりにパフォーマンスが悪かったため、一部最適化を実施し、何秒か改善させました。まだかなり遅いですが。
1.測定
測定したいURLを入力。地域やブラウザの選択を行うこともできます。

「START TEST」をクリック。

測定待ちになります。空いていればすぐに開始します。

測定実施中です。

結果が表示されました。すべての測定が終わるまで30秒ごとにページがリロードされます。
2.測定結果
このような画面になればすべての測定が完了です。右上に各カテゴリ(First Byte Time/Keep-alive Enabled/Compress Text/Compress Images/Cache static content)の結果がA~Fランクで表示されます。Aが一番いい評価です。
サマリーページの上部には2回の測定結果が表示されます。表には時間・リクエスト数・バイト数が表示されます。
詳細はタブをクリックすれば確認できます。
![]()
「Detail」では、各リクエストの詳細が確認できます。
「Performance Review」では、リクエストをカテゴリ別に評価した結果が表示されます。
「Page Speed」では、ブラウザキャッシュ・コンテンツ圧縮・CSS sprite・画像の最適化など、表示速度の最適化に関する詳細が表示されます。
「Content Breakdown」では、コンテンツ(MIMEタイプ)別のリクエスト数やバイトなどの詳細が表示されます。
「Domains」では、ドメイン別のリクエスト数やバイトなどの詳細が表示されます。
「Screen Shot」では、実際の表示や経過時間によるリクエストの実施状況を確認できます。
測定結果は毎回微妙に異なるので、複数回実施するとよいでしょう。
3.その他
ページ右上から、Googleアカウントでログインできるようです。
![]()
サービスの違いは確認できませんでしたが、以前話題になったGoogleの「Page Speed Service」と関連があるのかもしれません。
というか、現在もPage Speed Serviceのページからこのサービスにリンクが貼られています。
