試しに、入れ替えて MovableType で rebuild all してみたのですが、ハングしてしまいました。
たぶん、XML::Parse::Lite あたりでハングしている気がします。。前もハングしたの見たことがあるので。
ともかく、自分のメインサーバで動かすと、MTが動かなくなっちゃうので、実験環境で実験継続することにします。
IEのCSSバグとMTの個別エントリアーカイブの表示 の続きです。
やはり、floatがらみがオカシイのですね。
現状、MovableTypeのサイトにあるサンプルスタイル「Gettysburg」をベースにしているのですが、このサンプルは、
という順に並んでいて、右側がフロート指定になっています。色々調べた結果、左側がフロートになっていると、右側のリンクリストが左側の裏側に回り込むということが分かりました。(だから、デザインが変になる)。本文部分をフロートにするのはちょっと変だと思うので、バグと言ってもいいのかもしれない。。
すったもんだした結果、
と指定し、かつ、Master Index Template で、link の部分の後に、ブログ本文の部分をもって行く(つまり、HTML的に順番を入れ替える。フロートなので表示は変わらない)ことで、かなり表示が安定しました。特に、フロートの部分の幅が一定以上あるいはリンクが混ざっていての特定条件だと、文字が見事に全部消えてしまうのが致命的だったのですが、殆ど起きなくなりました。
現状、納得いかない点として、
という二点が、まだあるのですが、消えちゃうトラブルは相当減ったと思われるので、とりあえずこれでしばらく使ってみようかなと。
SpamAssassinの2.60が、ようやく出ました。早速入れよう。。
Webサイトみたら、Ben Trott(@MovableType)の名前が。。MacOSX向けのインストール手順をコントリビュートしてるんですね。
# 再検証済んだので、出し直しです
注意: 現状、perl 5.8でしか動作しません perl 5.6.x 以下だと意味が無いハックです。
perl 5.8 で、mt-jcodeを用い、PublishCharset にUTF-8を用いているとうまくいかないという問題があったのですが、とりあえず私の環境では、(ほぼ)解決しました。まだレビュー足らないので誤解がある可能性がありますが、いまのところ、このコードを入れると正しく動作するようになりました。
以下、現状の解釈です。
perl 5.6以降はちょっとperlから遠ざかっていたので、ちょいと勉強した結果、Perl 5.6以降の内部表現はUnicodeベースだがプラスアルファの情報があり、かつ、perl 5.8以降は、デフォルトの動作が use utf8になっている、ということが分かりました。(詳しくは、perl 5.8 の perldoc で、perluniintro、perlunicode、Encode (特にThe UTF-8 Flagのところ)あたりを見てください。
MovableTypeのモジュールは、perlの内部UTF-8フラグを落とすようにハックしてあります(例: MT::App::TrackBack::no_utf8)。
一方、XML::Parseが返すperlオブジェクトは、perlの内部表現に「しっかり」なっているため、UTF-8だと思って書き出したとき、MTの他の部分は内部表現と完全に思いこんでいるため、、混ざって出てしまうというのが真相だったようです。
というわけで、RSSを正しく動作させるためには、単純に内部表現からUTF8に変換するコードがあれば事足りると推測し、perl 5.8 用のmt-jcode相当の動作をするモジュールを作りました。ただし、パースするRSSがUTF-8以外の場合は、取り込む段階で工夫が必要です。また、perl(MovableType)が結構エラーを吐くので、コレについては追々対策する予定です。
そんなわけで、どちらかというと、mt-rssfeed 自体で、パース直後に文字コード変換してしまったほうが良さそうですが、まぁ、とりあえず動いたし、こういうモジュールあってもバチはあたらないので、公開しておきます。
ということで、以下においておきますので、ご利用ください。
使い方は、mt-jcode.pl の場合と同じで、
<$MTRSSFeedItemTitle encode="utf8"$>等と書きます。
mt-jcodeの公開して頂いたのがヒントになっています。感謝です。
perl 5.8 をまじめに使い出したのは最近なので、誤認などありましたら、御指摘くださると助かります。
なお、私のように複数のblogを作って、お互いでRSS Feedしていたりすると、RDFデータの関係か化け方が振動するので(笑)全てのrebuildを何回かやるべきと思います。私は、また壊れたかと勘違いしてしまいました。。もう大丈夫だけど。
James Clarkが、Emacs 用のXMLモードnXMLを書いてくれました(記事)。なかなかすばらしそう。
EmacsでXMLなファイルを見たり編集するのに良い方法なかったのですが、決定打になりそうな予感。
James Clarkは、expat (MovableTypeでも使われている、XML::Parseで使われているパーサライブラリ)を書いた人です。
実験している段階から、どうも、IEのCSSのバグと思しき問題が散見されていて気持ち悪いです。
今は、Movabletype のサイトから持ってきたテンプレートを元にやっているのですが、どうも以下の点がよろしくない。
後者については、最後についているコメントフォームの部分で、Styleを直接指定しているせいのようです。ここでのStyle指定を抜いたらちゃんと表示されるようになりました。(設定は、Templeteの編集から、Individual Entry Archive とCommentListing Templateを編集し、div で直接スタイルを書いている部分を抜けばOK。なお、MTの中で同じ方法でdiv使っているのはこの2カ所だけのようです。(具体的には、デフォルトテンプレートの中にあるだけ。)
今のところの推測では、float使っているせいではないかと思っています。なぜって、多分エントリはちゃんと書いているのだけれど、上から上書きしてつぶしているっぽい感じだからです。遅いPCで確認すると分かるかもしれない(笑)。
再表示すると直る問題はともかく、個別エントリが表示されないのは、よく知られた問題なんでしょうかね。Googleしてみても、あんまり見つからない。
Moziillaで確認しようと思っているのですが、僕のPCでは、なぜかMozilla Firebirdが動いてくれない(DNSのresolveのところでハングしているっぽい。。いろいろやってもダメ)なので、そのうち解決したい。。
追記 (2003/9/21)
やっぱり、結構機知の問題だったようですね。探し方が悪かった。
「perl 5.8 movabletype」でGoogleしたら、割と有効なエントリを発見。
個別の記事URLまたはコメントURLをブラウザで開くと、文字が真っ白になってしまう問題について
しかし。。。エントリ多い Linkn' Around の方が白くなる理由が解決出来ていない。。
気持ち悪いです。
一方、これも使えそう(別エントリでトラックバック予定)メモメモ。。