May 31, 2004

Movable Type 3.0DEのバグフィックス

ここで書いている内容はすでにobsoleteです。Movable Type 3.0 Developer Edition日本語版では、すでにここに記載しているほぼすべての問題が解決しています。2004.07.15記。

このエントリでは、Movable Type 3.0の以下のバージョンに関する既知のバグについてまとめています。また、可能な限りその修正方法についても付記するようにしています。

  • Movable Type 3.0 Developer Edition(英語版)
  • Movable Type 3.0 Developer Edition(日本語版ベータ)
  • Movable Type 3.0 Limited Free Version(英語版)

なお、6月8日までこのエントリでバグ修正を行うためのdefault-templates.plを配布しておりましたが、これはMovableType 3.0の配布に含まれる特定のファイルを改変して(つまり派生物を)再配布していると判断されかねません。したがってこの方法での公開は取りやめ、差分パッチパッケージで改めて公開することにしました。パッチパッケージはOgawa::Buzz: Movable Type 3.0DE修正パッチ(パッケージ配布)から取得できるようになっています。また、このパッチパッケージによって修正されるテンプレートの一覧に関しては、Ogawa::Buzz: Movable Type 3.0DE修正パッチ(テンプレート一覧)で公開しています。内容が重複してしまいますので、このエントリの修正テンプレート一覧は削除してありますのでご了承ください。

このエントリは、Ogawa::Buzz: Movable Type 3.0 DE release 個人的修正の内容を皆様のご意見を参考に更新したものです。皆様のご協力に感謝いたします。引き続き、「こんな問題がある」「ここに解決方法が載ってる」などの情報をお持ちでしたら遠慮なくコメント欄にお書き込みください。
2004年6月8日以前にこのエントリからdefault-templates.zipをダウンロードしてくださった皆様、Comment Listing Templateに誤りがありました。Ogawa::Buzz: Movable Type 3.0DE修正パッチ(テンプレート一覧)を参照して修正していただく必要があります。Comment Listing Templateはコメントポップアップ画面の生成に使われるテンプレートでMT3では通常は使用されません。しかし、Main IndexなどのテンプレートをMT2.Xから引き継いでいてコメントポップアップ機能を使っている場合に使用されます。

以下では、今のところ私が把握してバグとその修正方法について述べます。

TIPS:
このエントリのURLに「#BUGXX」(XXはバグ情報を指す二桁の数字)を付記すると、このエントリ内の特定のバグ情報をポイントできます。
例: http://blog.as-is.net/2004/05/movable-type-30de.html#BUG08
  1. lib/MT/L10N/ja.pmのtypo。日本語版ベータでは修正済みです。

    詳しくはMT-3.0D の英語版をつかうときの注意 ;-) [dh's memoranda]参照。

  2. tmpl/cms/cfg_prefs.tmplのtypo。312行目あたり。

    <p><MT_TRANS phrase="To enable comment registration, enter your TypeKey
     site token."> <MT_TRANS phrase="To sign up for a TypeKey token,
     visit the "><a href="http://www.typekey.com/t/typekey/">TypeKey</a>
     <MT_TRANS phrase="website">.</p>
    
  3. 日本語版ベータのTypo。lib/MT/App/Comments.pmの693行目あたり。コメントしようとすると「An error occurred: Global symbol "$cookie" requires explicit package name at lib/MT/App/Comments.pm line 693. Compilation failed in require at mt-comments.cgi line 21.」と怒られるはずです。

        if ($cookies && $cookies->{commenter_name} &&
            $cookies->{commenter_name}->value()) {
    
  4. JavaScriptのsetCookieのバグ。Individual Entry Archiveのテンプレートとコメント関係の動的テンプレート(Comment Previewなど)にこのバグが含まれています。

    function setCookie (name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) + 
                      (expires ? "; expires=" + expires.toGMTString() : "") +
                      (path ? "; path=" + path : "") + 
                      (domain ? "; domain=" + domain : "") + 
                      (secure ? "secure" : "");
        document.cookie = curCookie;
    }
    
  5. TypeKeyでニックネームに日本語などを使用すると文字化けします。これはクッキーに格納されているニックネームを取り出すのにJavascriptのunescapeメソッドを使用しているためです。一般的に非ASCII文字はUTF-8に変換した後URIエンコーディングした状態でクッキーに格納されることになっています。これを正しくデコードするにはunescapeメソッドの代わりにdecodeURIComponentメソッドを使う必要があります。同様にescapeメソッドの代わりにencodeURIComponentメソッドを使うことを強く薦めます。

    詳しくはOgawa::Buzz: Movable Type 3.0のCookie参照。

  6. コメント関係の動的テンプレートで使われているMTCommentFieldsタグが生成するHTMLは、コメントの中身(本文、Author、Email、URL)を出力してくれません。MTCommentFieldsの仕様が変更される可能性はありますが、このままだとすれば、JavaScriptなどで出力を補ってやる必要があります。

    詳しくはOgawa::Buzz: Movable Type 3.0のMTCommentFields tag参照。

  7. MTCommentFieldsタグが生成するHTMLはAuthor、Email、URLをクッキーに保存・クッキーから削除するために(onclick, onsubmitイベント経由で)rememberMe, forgetMeメソッドを呼び出します。しかし、これらのメソッドが定義本体が存在しないために正常に動作しません。Individual Entry Archiveと同様にメソッドの定義を追加する必要があります。

  8. MTCommentFieldsタグが生成するHTMLコードには誤りがあるような気がします。Individual Entry Archiveでは「Remember me?」ラジオボタンの「Yes」を選択するだけでクッキーに保存されますが、Comment Previewなどでは「Yes」を選択した状態で「Preview」ないし「Post」をクリックすると保存されます。MT 2.Xの時には後者に統一されていたのですが…。

    前者の動作に統一するのなら、lib/MT/Template/Context.pmの1126行目と1196行目を以下の通り修正する必要があります。後者に動作を合わせるのならIndividual Entry Archiveのテンプレートを修正することで済みますが、前者の方が好ましい動作ではないかと個人的には考えています。

    <input type="radio" id="remember" name="bakecookie"
        onclick="rememberMe(this.form)" />
    <label for="bakecookie">
    <label for="remember"><MT_TRANS phrase="Yes"></label>
    <input type="radio" id="forget" name="bakecookie" onclick="forgetMe(this.form)"
        value="Forget Info" style="margin-left: 15px;" />
    <label for="forget"><MT_TRANS phrase="No"></label>
    <br style="clear: both;" /></p>
    
  9. Microsoft Internet Explorerでしばしば観測される「TypeKeyにサインインしてもサインインできない(?)」問題。問題の詳細と私がベータサイトで述べた解決策(案)をtugaaさんがまとめてくださっています。また、「TypeKeyでサインインしたら直前コメントした人の名前が表示された(?)」問題も同じ理由で生じているのではないかと思われます。

    簡単に書くと以下のようにIndividual Entry Archiveのテンプレートを書き換える(ちなみに二箇所あります)と期待した動作をします。

    <script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
    <script type="text/javascript"><!--
    var commenter_name = getCookie("commenter_name");
    //--></script>
    

    この修正はテンプレートに対する修正で済みますが、修正方法が場当たり的ですし、本質的にはソースコードの改変によって解決すべき問題ではないかと思います

  10. QuickPostのAllow Comments(コメントを受け入れる)の設定値が読み込まれません。ここは本来checkboxではなくselection listになっているべきです。tmpl/cms/bm_entry.tmplの160行目あたりを以下のように修正することで正常に機能します(HTMLのタグの対応が取れていない点も含めて修正しています)。

    <p>
    <TMPL_IF NAME=SHOW_ALLOW_COMMENTS>
    <label><input type="checkbox" name="allow_comments" value="1" /><MT_TRANS phrase="Allow Comments"></label><br />
    <p>
    <label for="allow_comments"><MT_TRANS phrase="Allow Comments"></label><br />
    <select name="allow_comments" id="allow_comments">
    <option value="0"<TMPL_IF NAME=ALLOW_COMMENTS_0> selected</TMPL_IF>><MT_TRANS phrase="None"></option>
    <option value="1"<TMPL_IF NAME=ALLOW_COMMENTS_1> selected</TMPL_IF>><MT_TRANS phrase="Open"></option>
    <option value="2"<TMPL_IF NAME=ALLOW_COMMENTS_2> selected</TMPL_IF>><MT_TRANS phrase="Closed"></option>
    </select>
    </p>
    <TMPL_ELSE>
    <input type="hidden" name="allow_comments" value="0" />
    </TMPL_IF>
    
    <TMPL_IF NAME=SHOW_ALLOW_PINGS>
    <p>
    <label><input type="checkbox" name="allow_pings" value="1" /><MT_TRANS phrase="Allow TrackBack Pings"></label><br />
    </p>
    <TMPL_ELSE>
    <input type="hidden" name="allow_pings" value="0" />
    </TMPL_IF>
    </p>
    
  11. Bookmarkletにはそもそも長さ制限があるため、QuickPostが動かない場合があります。lib/MT/App/CMS.pmの380行目近辺の_bm_jsの定義を読むと「scrollbars=yes」が無駄に二回指定されています。これを削るだけで15文字余裕ができる計算になり、すべてのオプションを付けた場合でも「http://.../mt.cgi」が35文字以内であれば動作するようです。

    sub _bm_js {
        my($uri, $show, $height) = @_;
        qq!javascript:d=document;w=window;t='';if(d.selection){t=d.selection.createRange().text}else%20if(d.getSelection){t=d.getSelection()}else%20if(w.getSelection){t=w.getSelection();}void(w.open('$uri?is_bm=1&bm_show=$show&__mode=view&_type=entry&link_title='+escape(d.title)+'&link_href='+escape(d.location.href)+'&text='+escape(t),'_blank','scrollbars=yes,width=400,height=$height,status=yes,resizable=yes,scrollbars=yes'))!;
    }
    

    さらに細かい話をすれば、Apache httpdサーバを使用している多くの場合、mt.cfgで以下のように設定しておけば「mt.cgi」の「.cgi」は省略できます。つまり、最悪でもCGIPathが33文字以内に収まれば問題ないことになります。現実的にはすべてのオプションを付けることは稀でしょうが、長めのURLにならざるを得ない場合にはご参考になさってください。

    AdminScript mt
    
  12. Windowsの右クリックメニューにQuickPostを追加しても正しく機能しません。この機能を使うためには、lib/MT/App/CMS.pmの4324行あたりのreg_bm_jsを以下のように変更する必要があります。
    sub reg_bm_js {
        my $app = shift;
        my $q = $app->{query};
        my $js = _bm_js($app->base . $app->uri, scalar $q->param('bm_show'),
                        scalar $q->param('bm_height'));
        $js =~ s!d=document!d=external.menuArguments.document!;
        $js =~ s!d\.location\.href!external.menuArguments.location.href!;
        $js =~ s!^javascript:!!;
        $js =~ s!\%20! !g;
        $app->{no_print_body} = 1;
        $app->send_http_header('text/plain');
        $app->print('<script language="javascript">' . $js . '</script>');
        1;
    }
    
  13. コメンター情報としてURLを入力した場合、MTCommentAuthorLinkは通常そのURLへのリダイレクトページ(http://.../mt-comments.cgi?__mode=red;id=XXX)へのリンクを生成します。ちなみにMTCommentAuthorLinkにno_direct="1"というオプションを付けた場合には直接リンクになるため、以下で述べる問題は生じません。

    このリダイレクトページの生成に問題がある場合があります。具体的にはリダイレクトページは以下のようになっています。

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html><head><title>Redirecting...</title>
    <meta name="robots" content="noindex, nofollow">
    <script type="text/javascript">
    window.onload = function() { document.location = document.links[0].href; };
    </script></head>
    <body>
    <p><a href="http://...">Click here</a> if you are not redirected</p>
    </body>
    </html>
    

    このページは、ページ内に存在する最初のリンクにリダイレクトします。通常は「<a href="http://...">Click here</a>」がその該当リンクとなりますが、一部の広告リンクなどを自動的に挿入するサイトではこのリンクの前に広告リンクが挿入され、リダイレクトはそのページに対して行われることになります。これは期待した動作ではないでしょう。

    この問題を解決するには、lib/MT/App/Comments.pmの97行目あたりを以下のように修正する必要があります。また、この修正を行っても広告が挿入されないサイトも通常通り動作します。

    window.onload = function()
    { document.location = document.links[0].href'$uri'; };
    

    参考: Question Board [Past Log]

  14. MySQLを使っている場合に、Draftとして保存したエントリがMonthly Archive Listing(↓)のMTArchiveCountに数え上げられてしまいます。

    <ul>
    <MTArchiveList archive_type="Monthly">
    <li><a href="<$MTArchiveLink$>"><$MTArchiveTitle$></a> (<$MTArchiveCount$>)</li>
    </MTArchiveList>
    </ul>
    

    正確にはDaily、WeeklyなどのすべてのDate-based Archiveに対するMTArchiveCountが誤った値になるという現象が起きます。ちなみにarchive_type="Category"とした場合やMySQLではなく既定のBerkeleyDBを使っている場合には、正しくPublishしたエントリだけが数え上げられます。

    参考: movabletype.org : Support Forum

関連リンク

May 29, 2004

香取慎吾の体重体組成計

ANA Mileage Clubのマイルは景品にも交換できることは広く知られている事実だが、6月末までなら9500マイル(通常1万マイル)でオムロンの体重体組成計HBF-900がゲットできる。このモデルでは、体重、体脂肪率、内臓脂肪レベルが図れる。BMIや基礎代謝量も表示できるモデルもあるらしい(↓)。

これは戦争だ!史上最強のダイエット作戦: 香取慎吾の体重計を買った

まあこれらの数値は電卓さえあれば体重と身長の測定値から簡単に計算できる。

BMI = 体重 / (身長)2
基礎代謝量(男) = 665 + (13.7×体重) + (5.0×身長) - (6.8×年齢)
基礎代謝量(女) = 665 + (9.6×体重) + (1.7×身長) - (7.0×年齢)

ひとまず自分で測ってみて、8.5%とか表示される非現実的な体脂肪率にうな垂れている(ここんとこ毎日ビール飲んでるのに…)。

May 25, 2004

Vpass: 三井住友VISAカード

三井住友VISAカード

三井住友VISAカードのオンラインサービスのVpassで使われているIDは、今までrootパスワードかよってくらい分かりにくい7文字の固定文字列だった。それがようやく変更できるようになった。しかし、8文字以上のIDしか設定できない。こうしておけば固定IDとぶつかる心配はないという設計者の安直な判断が見え隠れして微笑ましい。

何にせよ以前よりはましになった。

May 22, 2004

VAIO type TR5S

30ヶ月ぶりに自宅用PCを刷新することにした。自宅用PCと言っても結局オクサマPCなのでCPUパワーもストレージも必要ない。メモリも1GBまで増設できれば十分3年持つと言える(3年以内にこのマシンのOSがLonghornになることはまずありえない)。ただたまに持ち運ぶので軽くて見た目が良いほうがよい(前回無断でSotecにしてものすごい不興を買った)。

そういうわけでちょっと前から検討していたのが、ソニーのVAIO TR。

職場でも持ってる人の多いUltra LightセグメントのノートPC。この夏の各社のモデルチェンジで多くのUltra Light PCがULV Dothanへの載せ換えにある程度対応してきた(?)のに対して、ソニーはマイナーチェンジのみ、Ultra Light以外のセグメントは総入れ替えなのにちょっと寂しい気もする。

新モデル(PCG-TR5B・TR5EB)登場時点で旧モデル(PCG-TR3B・TR3EB)が値崩れすることを期待していたのだが、22万(PCG-TR3B)、17万(PCG-TR3EB)と高止まり状態にあり、かつ新モデルとの価格差はそれぞれ2万しかない。どうやら在庫も大して残っていないらしく、この値段をキープしたままあっとういうまにフェードアウトする気配(cf., PBR1倍切っててエラく割安だなーと思っていたら次の日倒産)がぷんぷんする。それなら新モデルでかつ安い方(PCG-TR5EB)を買うのだが、この製品には実はがある。

それは今上げた4機種の中で唯一Bluetoothを搭載していないのだ。Bluetoothは私の予定の中では20ヶ月後くらいにブレークすることに決まっているのでどうしても外せないデバイスなのだ。というか、CPUがCeleron M 800MhzからCeleron M 900Mhzになる代わりにBluetoothがなくなっているのに2万も高いってどうよ!こうよ!と思っていたら、TR5EBの値段はみるみる下がってTR3EBと同じくらいになってしまった。やっぱりね。

そこで目をつけたのがソニースタイルモデル(TR5S・TR5PS)。

VAIO type TR -Sony Style

BluetoothとIEEE802.1a/b/gは標準で付いていて、後はCPUをCeleron M 900Mhz・Pentium M 1.1Ghz、メモリを256MB・512MB・1GB、セカンドドライブをCD-RW/DVD-ROM・DVD-RWから選べる。また、OSをWindows XP Professional Edition(TR5PS)、Home Edition(TR5S)を選べるほか、Microsoft Officeの有無も指定できる。Celeron M、512MB、CD-RW/DVD-ROMを選択して20万強ってとこ。ソニースタイルで買うと(本来なら3000円払って引き取ってもらうところが)古いVAIOを引き取ってもらえる他、クーポンもろもろ合わせて正味18万くらい。三年保証でソニータイマー耐性もある。

経済学は社会学の一種なのか?

経済学は社会科学の一分野と認識しているが、ときどき社会学の一種なのではないかと思えてくるのは、↓のようなセンセーションだけを狙った記事を書く輩がいるからだ。

週刊!木村剛: デフレ論者は何処に消えた?

そもそも「デフレ論者」って何だ?デフレ論というのは聞いたことがない。「良いデフレ」などと口走っていた連中をデフレ論者と呼ぶなら理解できなくもないが、それなら木村自身が「デフレ論者」と呼ばれるべき人物なのだが。

ともあれ私の理解するところでは、構造改革論者と財政出動論者とリフレ論者の三者がいる。構造改革論者の理論的基盤は(私などのような門外漢には)とても理解不能だが、他二者には明快なロジックがある。財政出動論者はマクロ・ミクロを混同した市井の人々には(無駄遣いするなと)評判が悪く、植草タンのようにタイーホされる人が出る始末で一層旗色が悪い。リフレ論者はデフレは貨幣的な現象だからリフレ政策(ゼロ金利で事実上機能不全になっている短期市場金利操作以外の金融政策)を行うことが必要で、財政出動を(してもいいが)しなくてもよいと主張してきた。多分木村剛が言うのは財政出動論者とリフレ論者の二者なんだろう。

だとすると矛盾があって、竹中平蔵や山崎拓は不良債権処理を進めることを主張する以外にも、金融緩和やインフレターゲット導入も主張している(いた)リフレ論者でもある。実際、大規模な円売り介入はその資金を外国為替資金証券発行とその実質日銀引き受け(一部は特例として米国債権の日銀引き受け)によって得ているのだから、リフレ政策以外の何物でもない。この方法で調達した資金を減税や財政出動の原資、あるいは将来の年金の原資にしてしまえばよほど直接的なデフレ対策になるし、またそうしなくとも中長期国債の購入に充ててもよいはずだが、非伝統的な手法ということで忌避されている。まあ米国がクラッシュせずに済むことで期待される需要や輸出企業の業績も内需同様(か現状それ以上に)に重要なので仕方がないとも言える。

だいたい海外商品市況や中国の活況などでたまたまインフレ圧力が高まっているというのが現状で、これは国内の元々の経済状態とは無関係に起きる事象ではないのか(設備投資も輸出・製造関連を中心に活発化しているのであってこれらは外需次第)。なんだ、不良債権処理をしたからデフレが解消しつつあるわけではないと木村剛は自分で書いているのではないか。なんていう矛盾なんだ。

これらの業界の値上げ傾向と不良債権処理との因果関係を証明するのは常識的に考えればほとんど不可能(競合会社が半分になったらどれだけ値上げ圧力が増すのか計量できるか?)だが、それを不良債権処理の効果だとするのは社会学者のいつものやり口に過ぎない。戯言だ。

May 20, 2004

Movable Type 3.0のMTCommentFields tag

ここで書いている内容はすでにobsoleteです。MTCommentFieldsはpreview="1"オプションを付けることでCommentPreviewBodyを展開してくれるように修正されています。ご注意ください。 2004.07.15記

Movable Type 日本語版サイト: Movable Type 3.0 Developer Edition 日本語ベータ版をお届けします
alfabeat: MovableType 3.0D日本語版がリリース

とかっていう具合に日本語版リリース作業が進んでおり、私も自分のページでBug fixを公開したり、ベータテストのページ(Beta Weblog)でパッチを流したりしているわけです。

が、当初から何かの冗談ではないかと思っているのが、Comment Preview Templateなどに使われているMTCommentFieldsタグです。Comment Preview時のFormを展開してくれるタグなのですが、前のページで入力したCommentBodyをTextareaに展開してくれません。コメンター情報(Author、Email、URL)も展開してくれません。ソースのどこを読んでもそんなこと書いてないわけで当然と言えば当然なのですが...。

lib/MT/Template/Context.pmの中にあるMTCommentFieldsタグをガリガリ書き換えてもいいのですが、以下のようにComment Preview Templateなどの<MTCommentFields>の直後にJavaScriptを追加することで対処するのがよいでしょう。

<MTCommentFields>
<script language="javascript" type="text/javascript">
<!--
if (document.comments_form.author)
    document.comments_form.author.value =
        '<$MTCommentPreviewAuthor encode_js="1"$>';
if (document.comments_form.email)
    document.comments_form.email.value =
        '<$MTCommentPreviewEmail encode_js="1"$>';
if (document.comments_form.url)
    document.comments_form.url.value =
        '<$MTCommentPreviewURL encode_js="1"$>';
if (document.comments_form.text)
    document.comments_form.text.value = 
        '<$MTCommentPreviewBody convert_breaks="0" encode_js="1"$>';
-->
</script>

上記は、Ogawa::Buzz: Movable Type 3.0DEのバグフィックスで説明しているdefault-templates.zipで修正できます。

May 19, 2004

Randy Johnson's Perfect Game

Arizona Diamondbacks : news : Randy Johnson's Perfect Game

Randy Johnson、40歳で完全試合。9イニングを117球、無安打無四球、13奪三振。すげー。

これでこの日に引退を決めてたら、Kevin Costnerのクソ映画(というよりSam Raimiのクソ映画)For Love of the Gameみたいな話だった。

Nolan Ryanは44歳でNo hits - No runsをやっているらしい。

May 18, 2004

Movable Type 3.0のCookie

TypeKeyの、というよりMT3の、Cookieハンドリングがどうも怪しいようです。

TypeKeyにサインインするとTypeKeyで設定しているニックネームまたはフルネームがCommenter Nameとして使われますが、それをCookieに格納する際のエンコーディング方法がMovableTypeのAuthor Nameとは異なります。この相違は、MovableTypeに含まれるJavaScriptでescape/unescapeメソッドを使用しているために生じます。

具体的には、Microsoft Internet Explorer 6 (SP1)の場合には次のようなことが起きるはずです(念のため、発生する現象はブラウザによって異なる可能性があります)。「(お)」という名前を設定すると、MovableTypeのAuther Nameでは%uFF08%u304A%uFF09という文字列がCookie (mtcmtauth)に格納されますが、TypeKey経由で設定されるCommenter Nameでは%EF%BC%88%E3%81%8A%EF%BC%89という文字列がCookie (commenter_name)に格納されます。前者はescapeメソッドでデコードできますが後者はできませんから、Comment PreviewなどでTypeKeyのCommenter Nameを表示しようとすると文字化けが生じます。

そもそもCookieに格納する文字列は、UTF-8に変換された上でURIエンコーディングされることになっています。これをエンコード、デコードするJavaScriptのメソッドはencodeURI(またはencodeURIComponent)、decodeURI(またはdecodeURIComponent)です。歴史的な経緯もあり、escape、unescapeメソッドがURI文字列をハンドリングするために使われてきましたが、その動作はブラウザごとに異なるため現在は推奨されていません。事実、MSIE6では、文字列をUCS2の16進表示にした上で「%u」をプレフィクスとして付けた文字列が生成され、これはunescapeではデコードできるが、decodeURI(decodeURIComponent)ではデコードできません。逆にencodeURI(encodeURIComponent)を使って正しくURIエンコーディングされた文字列は、unescapeではデコードできません。要するにescape、unescapeメソッドは使うべきでないのです。

ちなみにencodeURIとencodeURIComponent、decodeURIとdecodeURIComponentの違いはそれぞれ前者が「:/」などの予約文字を変換しないのに対して後者は変換するという違いです。したがって、URLや「:/」を含むCommenter Nameをクッキーに格納する際は後者を使う必要があります。

ここにテスト用のHTML(escapeTest.html)を置いておきます。

この問題の対策として、MovableTypeに含まれているJavaScriptでescape、unescapeメソッドをencodeURIComponent、decodeURIComponentメソッドに置き換えるべきだと思います。

function setCookie (name, value, expires, path, domain, secure) {
    var curCookie = name + "=" +
 (window.encodeURIComponent ?
  encodeURIComponent(value) : escape(value)) +
 (expires ? "; expires=" + expires.toGMTString() : "") +
 (path ? "; path=" + path : "") +
 (domain ? "; domain=" + domain : "") +
 (secure ? "secure" : "");
    document.cookie = curCookie;
}
function getCookie (name) {
    var prefix = name + '=';
    var c = document.cookie;
    var nullstring = '';
    var cookieStartIndex = c.indexOf(prefix);
    if (cookieStartIndex == -1)
        return nullstring;
    var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
    if (cookieEndIndex == -1)
        cookieEndIndex = c.length;
    var value = c.substring(cookieStartIndex + prefix.length, cookieEndIndex);
    return window.decodeURIComponent ?
        decodeURIComponent(value) : unescape(value);
}

上記は、Ogawa::Buzz: Movable Type 3.0DEのバグフィックスで説明しているdefault-templates.zipで修正できます。

May 15, 2004

Movable Type 3.0 DE release+個人的修正

Movable Type 3.0 Developer Editionがリリースされました(Movable Type News)。

国内でノリノリな人達の記事は↓や、↓のTrackback Listから辿れるでしょう。
米国で Movable Type 3.0 開発者バージョンがリリースされました [dh's memoranda]
blog.bulknews.net: Movable Type 3.0 Developer Edition
Milano::Monolog: Movable Type 3.0 リリース

以下の内容はobsoleteです。Ogawa::Buzz: Movable Type 3.0DEのバグフィックスがこのエントリのupdated versionとなります。

しかし、看過できない種類のバグがベータ版からそのまま放置されている様子です。このエントリでは私が気がついているバグの修正方法について述べます。

以下は、私が把握している要修正点です。

  1. lib/MT/L10N/ja.pm のtypo。日本語環境を使わない私には関係ありません。
    MT-3.0D の英語版をつかうときの注意 ;-) [dh's memoranda]
    また、日本語ベータ版では修正済みです。
  2. tmpl/cms/cfg_prefs.tmpl のtypo。312行目あたり。
    <p><MT_TRANS phrase="To enable comment registration, enter your TypeKey
     site token."> <MT_TRANS phrase="To sign up for a TypeKey token,
     visit the "><a href="http://www.typekey.com/t/typekey/">TypeKey</a>
     <MT_TRANS phrase="website">.</p>
    
  3. 日本語ベータ版のTypo。lib/MT/App/Comments.pmの693行目あたり。コメントしようとすると「An error occurred: Global symbol "$cookie" requires explicit package name at lib/MT/App/Comments.pm line 693. Compilation failed in require at mt-comments.cgi line 21.」と怒られるはずです。
        if ($cookies && $cookies->{commenter_name} &&
            $cookies->{commenter_name}->value()) {
    
  4. JavaScriptのsetCookieのバグ。Individual Entry ArchiveのTemplateといくつかのDynamic Templateにこのバグが含まれています。
    function setCookie (name, value, expires, path, domain, secure) {
        var curCookie = name + "=" + escape(value) + 
                      (expires ? "; expires=" + expires.toGMTString() : "") +
                      (path ? "; path=" + path : "") + 
                      (domain ? "; domain=" + domain : "") + 
                      (secure ? "secure" : "");
        document.cookie = curCookie;
    }
    
  5. Ogawa::Buzz: Movable Type 3.0のCookieで指摘している問題。(2004.06.18追加)
  6. Ogawa::Buzz: Movable Type 3.0のMTCommentFields tagで指摘している問題。(2004.06.20追加)
  7. Comment Listing, Comment Preview, Comment Errorのtemplateの明白なミス。必要なJavaScriptのコードが欠落しているのでまったく正常に動作しません。例えば、name/email/urlが正常に挿入されませんし、これらを入力してクッキーに格納するスクリプトが動作しません。

4.以降の問題はすべてTemplateに対する修正ですので以下の要領でまとめて対処できます。

(MT 2.Xからのアップグレードではなく)一からMT 3.0を設定する場合:

以下のdefault-templates.zipに含まれるdefault-templates.plでlib/MT/default-templates.plを上書きした上で、mt-load.cgiを実行するとよいでしょう。日本語ベータ版を使っている場合には、default-templates.zipに含まれるdefault-templates-ja.plを代わりに使うようにしてください。

MT 2.Xからのアップグレード、またはすでに設定したMT 3.0の修正をする場合:

以下の要領でTemplateを置き換えた後にRebuildすることで対処できます。

  • TypePadなどと同様にComment関連のJavaScriptのコードをTemplateとして分離しておくと便利なのでそうします。以下をIndex Templateとして登録し、comments.jsとして保存されるようにしてください。このcomments.jsは、Individual Entry Archive, Comment Listing, Comment Preview, Comment Listingの各テンプレートで共通に利用されます。

    Comment.js

  • Templateを以下のものに置き換えます。ここに示したテンプレートは上記のcomments.jsを使用します。ここに列挙されていないTemplateに関してはmovabletype.org : Default Templatesをご参照ください。

    Individual Entry Archive

    Individual Entry Archive (日本語版)

    Comment Listing Template

    Comment Listing Template (日本語版)

    Comment Preview Template

    Comment Preview Template (日本語版)

    Comment Error Template

    Comment Error Template (日本語版)

  • Templateをお好みに修正して、Rebuild (Individual Archives Only)してください。

May 14, 2004

「払いたくなかったから払ってない。」

「払いたくなかったから払ってない。」発言を密かに石原慎太郎に期待する今日この頃。

NIKKEI NET:主要ニュース

未納者が増えるほど国庫負担は小さくなり、将来の増税が抑制されるのにいったい世の中の人は何の不満があるのだろう。「未納率が上昇すると年金が破綻する」という㌧でもない誤解をしてはいまいか。話があべこべだ。

それはともかく、今払っていない(払えない)他人の将来の受給を心配するという、一見美徳のようにも見える感情の裏にあるのは、実は今自分は払っているのに払わない他人に対する妬みのような低俗な感情に過ぎない。だから大衆受けするわけだが。他にも財政政策が緊縮に向かうのも、「孫子の代に借金を残すな」みたいな美辞にしばしば飾り立てられるが、実のところ自分にお金をくれるのならともかく(自分は恩恵を受けなかったバブルで踊った)公共事業に携わっている人々が潤うのは妬ましい(けしからん)という、低俗な感情に裏打ちされているのでとても支持され易い。

むしろ厚生労働省が、未納者が将来無保険者となった場合に生活保護等(国会議員や筑紫哲也が受給する危惧はない)の社会保障費の増大を招くことを危惧するのは理解できる。が、こういう観点からの報道は見かけない。無保険率と生活保護受給率の関係を示したデータはないのだろうか。

May 9, 2004

箱根ハイランドホテル

連休中に出かけられなかったので、改装後の箱根ハイランドホテルに宿泊。記憶にあるハイランドホテルより随分きれいになって、新車試乗会の会場に使えそうなオサレ加減になっていた。

小田急(仙石原)箱根ハイランドホテル

ドシャ降りなので、バーベキューやバードウォッチングや乗馬など前向きなことは何一つできず…。

2004.05.11追記:
つーか普通に試乗会に使われているようだ。

Alfa Romeo 156 GTAに試乗

May 3, 2004

The Passion of the Christ

Title: THE PASSION OF THE CHRIST
Director: Mel Gibson
Year: 2004
Place: ヴァージンシネマズ六本木ヒルズ
Eval: ★★

パッション オフィシャルサイト : HERALD ONLINE

「受難劇」の忠実かつ暴力的な映像化。

例えば、受難劇にしろ宗教画にしろ、茨の冠は罰・暴力を意味する記号としてしか描かれておらずまたそのようにしか捉えようがない。が、映像化されると冠をされたキリストが痛みに声を上げるし、血も滴る。万事がこの調子でリアルに残虐に表現されているのがこの映画だ。

暴力性や反ユダヤ主義に関していろいろ物議を醸しているが、この映画で最重要なのは最後の非常に短いカットでキリストの復活が描かれているという事実。これがなければ史実(らしきもの)に基づいたリンチ事件を描いた(つまり反ユダヤ主義に関して云々してしかるべき)映画だが、これがあることによって宗教映画として成立しており、劇中十字架を背負っているキリストは観客の原罪も背負っているという意味になる。それに共感できるかどうかは信仰の問題だが。

May 2, 2004

Movable Type 3.0beta2

ベータテストに参加開始しました。

Six Apart Japan: Movable Type 3.0日本語版のベータ・テストを開始しました

ライセンス条項があるので詳しくは述べられませんが、TypeKey Authentication enabledである点を除いては目新しい機能はないようですよ、少しRebuildが速くなったみたいですが。

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com