Thingamablog 1.0.2-OKAMURA-20051025 から更に修正を加えたスペシャルエディション Thingamablog 1.0.2-OKAMURA-20051031 をリリースします。
配布ファイルは以下の通り。
配布ファイルの使い方を説明します。
もし Thingamablog 1.0.2 を起動しているのでしたらそれを終了させてください。
Thingamablog 1.0.2 をインストールしたディレクトリの thingamablog.jar を thingamablog.orig.jar とリネームします。
thingamablog.jar が生成されます。
解凍してできた thingamablog.jar を Thingamablog 1.0.2 をインストールしたディレクトリにコピーまたは移動してください。
以後、オリジナルと同じ手順で Thingamablog を起動すると、このスペシャルエディションが起動されます。
まず Thingamablog 1.0.2 のソースアーカイブをダウンロードします。そのアーカイブファイルは thingamablog-1.0.2-src.zip です。以後、このファイルをカレントディレクトリにダウンロードしたものとします。
カレントディレクトリにダウンロードした thingamablog-1.0.2-OKAMURA-20051031.patch.gz を置きます。
そしてシェルで次のようにしてください。
unzip thingamablog-1.0.2-src.zipこれでソースが展開されたディレクトリ thingamablog-1.0.2 にパッチが適用された状態になります。
ご存知のとおり Thingamablog にはブログのプリファレンスから設定できる Custom Tags という機能がある。これは名前とその値を設定しておくとテンプレートファイルの中で <$名前$> と書いたところをその値に置き換えてくれる機能だ。
この Custom Tags はちょっとした文字列の置き換えだけではなく、HTML コードをごそっと入れることもできるのだ。テンプレートファイルを変更するのもよいがこの Custom Tags に HTML コードを入れてテンプレートで使うというのもよい。というか積極的にこちらを使った方がよいと思う。
複数種類のページに同じ固定された HTML コードを入れたいとき、それを Custam Tag にして <$名前$> をテンプレートファイル達に書いておけば、一カ所に HTML コードを書くだけでその HTML コードが複製されるからだ。後から変更したくなったりしても一カ所の変更で済む。
例えば現在このブログではサイドの "Powerd by" という項目の前に "関連リンク" という項目を表示している。この項目はテンプレートでは <$NavigationItems$> となっている。"NavigationItems" という名前の Custom Tag で追加のサイド項目を書くことにしている。例えばブログローリングとかアフィリエイト商品とかブログペットとか入れるといいだろう。
欠点はテンプレートタグが使えないことだ。
Thingamablog のメイン画面のツールバーの右から 4 つ目にあるブログの Front Page を開くアクションで、URL 中の %-escape が過剰な件を調べた。
原因は Browser Opener というフリーのユーティリティクラスの中にあった。ソースを見ると displayURL というメソッドの中で [a-zA-Z0-9.:&@/?%+=#\\-] 以外の文字を %-escape している。
これじゃあ Thingamablog 側ではいかんともしがたい。こっちのソースも直そうかなあ。いやいや、間違いというわけじゃないんだから間違っている .Mac の方が直すべきだな。
.Mac ユーザのための国際的なコミュニティ dotmac.info に iBlog のように更新 Ping を送りたいと思った。まずは自分のアカウントにこのブログを登録して、更新 Ping の送り先の URL を探してみた。
WEBLOG PING というページからフォームを使って更新 Ping を送ることができるのだが、そのページに次のように書いてある。
If you're a software developer and would like to include the ability to Ping dotmac.info in your application, let us know.
ソフトウェア開発者の方で dotmac.info へ Ping する機能をアプリケーションに組み込みたい方は、私達に知らせてください。
つまり、スパム Ping が任意のところから Ping を送れないように更新 Ping の URL は非公開。アプリケーションに機能として組み込むときはこっそり教えてあげるからねってことだ。だからとるべき手段は二つだ。
独自に調査してブログの更新 Ping 先として設定したら dotmac.info へ更新 ping を送ることができた。dotmac.info のページを開いて更新 Ping を送るのは面倒だし、苦手な英文を書いて頼むのも面倒だからこのままにしておこう。よい子は真似しないように。更新 Ping の URL は dotmac.info を尊重してここでも非公開にしておく。
たびたび済みません。カレンダーからアーカイブページの当該の日の部分へ移動できないという不具合があったので Mac_Stripe-XHTML_Strict-ja を更新しました。
それから前回の更新時に書きそびれていたのですが、Include コンテナで取り込む poweredby.template も前回更新してあります。Mac_Stripe-XHTML_Strict-ja および オリジナルの Thingamablog へのリンクを補足しました。
BlogPeople トラックバック・ピープルに「Thingamablog」という話題を申請して承認された。
承認の通知メールをもらってから何度かトラックバックをくきさんの素敵ツール「Dashboard 用 Trackback Ping送信ソフト PiyoTrackbackPing」で送ろうとしたのだが成功していない。うーむなんでだろう?
とりあえずバナー画像を募集中なのだ。
先日まで Thingamablog のデータベスディレクトリを USB メモリに入れておけば、Java が動くところならどこでも自由にブログが書けていいなあと思っていた。昨日実際にやろうとして悩んでしまった。FTP や SFTP のアップロード先ならそれほど問題はないのだが、.Mac では相手は WebDAV だからだ。
WebDAV によるネットワークボリュームをマウントすると Mac OS X 上では /Volumes/URLの最後のパス要素/ というディレクトリ、もしくはそういうディレクトリが既にあったら /Volumes/URLの最後のパス要素-番号/ というディレクトリがマウントポイントとして作成されてそこにマウントされることになっている。もちろん mount コマンドを直に使う場合は別だが、場所はどこでも構わない。Windows では \\idisk.mac.com\yuji_okamura なんていうパスだったりするわけだ。
これだけだったらその場で Base Path を書き換えれば済む。しかしテンプレートの Include コンテナのために指定するパスも変えないといけない。なにしろ Mac OS X では /Users/ユーザ名/foo/bar という感じになるのに Windows では C:\Documents and Settings\foo\My Documents\bar という感じになる。あー面倒くさい。
UNIX 系も面倒だ。まず、webdav_fs をサポートしているかどうかが大問題だ。サポートしていなかったら自分でソースを引っ張ってきてカーネル弄ってとかやらないといけない。サポートしていても大抵はホームディレクトリは /home/foo/ だから Mac OS X の /Users/foo/ とは違う。まあ、それでもパスの指定形式は同じだから自分が管理しているマシンだったらホームもマウントポイントもシンボリックリンクでなんとかなる。Windows よりは webdav_fs をサポートさえしていればましだ。サポートしていなくても本当にローカルに吐き出してから WebDAV クライアントで同期してやればいいのだ。
やっぱり Thingamablog が WebDAV もサポートしてくれれば問題ないんだな。そうすれば遅い Finder(というか webdav_fs) を使わなくて済むし。
Mac_Stripe-XHTML_Strict-ja をアップデートしました。変更点は次のとおりです。
<$EntryPermalink$> に変更。isPermaLink="true" を付加。<div class="day"> を追加。</div> とした。<h3 class="title"> から class="title" を除去。img.banner に関するスタイルを追加img.banner.banner75x32 に関するスタイルを追加オリジナルからの変更点についてはカテゴリ「解説」で順次解説してゆく予定です。
Mac_Stripe-XHTML_Strict-ja に含まれるテンプレートにおいてオリジナルとは異なる部分のうち、文書の適合性に関する箇所について解説をします。
<?xml version="1.0" encoding="<$Charset$>" ?>
An XML declaration is not required in all XML documents; however XHTML document authors are strongly encouraged to use XML declarations in all their documents.
XML 宣言は全ての XML 文書で必須というわけではない。しかしながら XHTML 文書作成者はその全ての文書の中で XML 宣言を使用するように強く推奨される。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
The root element of the document must be html.
文書の root 要素は html でなければならない。
および同セクションの次の箇所。
There must be a DOCTYPE declaration in the document prior to the root element.
その root 要素に先立って文書には DOCTYPE 宣言がなければならない。
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
The root element of the document must contain an xmlns declaration for the XHTML namespace [XMLNS]. The namespace for XHTML is defined to be http://www.w3.org/1999/xhtml.
文書のその root 要素は XHTML 名前空間 [XMLNS] のための xmlns 宣言を含んでいなければならない。XHTML のための名前空間は http://www.w3.org/1999/xhtml と定義される。
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
For example, in HTML set the "lang" attribute on the
HTML element.
例えば、HTML では HTML 要素に "lang" 属性を設定すること。
lang 属性を付けるという条件下で必須事項です。
<html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
lang と xml:lang 属性」より
Use both the lang and xml:lang attributes when specifying the language of an element.
要素の言語を指定するときは lang と xml:lang 属性の両方を使用すること。
Thingamablog 1.0.2-OKAMURA-20051025 と Hyptertext Tags 型のテンプレートタグの close_empty_tags 属性の発見でほとんどの問題が克服できたのだが、カレンダーの <$MonthLabel$> の表記が「10月 2005年」というように英語式に年と月の順序が逆になってしまうのだけが残った。
ソースを調べてみたらクラス net.sf.thingamablog.generator.CalendarContainer の getMonthLabel メソッドでフォーマットが "MMM yyyy" に固定されていた。つまりテンプレートからのアプローチでは「2005年10月」というように直すことはできないということだ。
ソースを書き換えてフォーマットを変更してしまえばよいのだが、それだと日本語限定になってしまう。MonthLabel はクラス TemplateTag のインスタンスとして実装されている。つまり Help でいう Basic Tags 型のテンプレートタグだ。これを Help でいう Date Tags 型のテンプレートタグ、つまりクラス DataTag に変更すれば format 属性が使用できる。ちょっと面倒くさいな。
MonthLabel だけかと思ったらアーカイブページのタイトルもだ。今日はもう眠いのでソースを見るのはまた今度。
Thingamablog にコメントやトラックバックを付けるための道具には幾つかの選択肢がある。大きく分けると次のようになる。
.Mac では CGI が使えないので CGI 型を使用しようとすると必然的にレンタルサーバや自前のサーバを利用することになる。そうしたらそっちでブログを公開してもよいわけで、ここではあくまでも .Mac を主体に考えていきたいのでサービス型を検討した。
検討したと言っても多くのものを検討したわけではない。Tecknik.net: Commenting: Systems などに一覧されているが、確実に UTF-8 など日本語が表示できるエンコードをサポートしていて Trackback もでき、更に無料でも使用できるものとなるとやっぱり HaloScan くらいしか見つからなかった。他のは日本語が扱えるかどうかは外から見ただけではわからなかった。サインナップしてみたら UTF-8 が使えないとかでは嫌だし。HaloScan はときどき調子が悪くなるが、CacheUpIt があるので致命的なことにはならない。
まず、HaloScan アカウントを取得し、HaloScan の設定を行う。特に大事なのが 設定ページの中の Character Encoding
の設定だ。ここで日本語が表示可能なエンコードを選択しておかなければならない。
次に Install ページへ行って thingamablog
と Display trackback code
にチェックを入れて [Next > >] ボタンを押して Thingamablog 用のコードを表示させるわけだが、ここで表示されるコードは次の理由で薦められない。特に Step 2: Automated for Thingamablog Users
のコードはかなりまずい。
コメントページやトラックバックページへのリンクが javascript スキームの URL になっているので、JavaScript を処理できないとリンクを辿ることができないからだ。
健常者でもポップアップウィンドウが開いたことに気付かないこともたまにはあると思う。ましてや操作に慣れない人や、急な変化をすぐに認識できない人や、スクリーンリーダーを使っている目が不自由な人には、ポップアップウィンドウはかなりわかりにくいインターフェースだろう。
そもそも HTML 4.01 Strict や XHTML 1.0 Strict には a 要素に target 属性は存在しない。旧態のタグ付けからの移行用の Transitional では残っているが、新しいウィンドウを勝手に表示させるのは推奨されていないということだ。
HaloScan の調子が悪く Step 1
の JavaScript がロードできないとそうなってしまうからだ。
三つ目問題について最近 HaloScan も認識したらしく Handling HaloScan downtime gracefully というページでよりよいコードがアナウンスされている。ところがどっこいここのコードもあまりお薦めできない。まだ一つ目と二つ目の問題が残っていることに加えて、次の問題が新たに発生するからだ。
標準でない要素なので相互運用性に問題が発生する可能性が大きい。CSS で white-space: nowrap; などを付ける方がよい。
script 要素を知っている上でサポートしないブラウザであればそうはならないが、script 要素を全く知らないブラウザでそうなってしまう。例えば携帯電話のブラウザなどに見られる。
というわけで Handling HaloScan downtime gracefully で提示されているコードをベースにもっとよいコードを付ける手順を示す。上に述べた問題点の他にも色々考慮してみた。
この JavaScript ファイルは script 要素で長々と記述しろと HaloScan が提示している JavaScript コードをファイルにしたものだ。
web ディレクトリとは Thingamablog を最初に起動したときに場所を訊かれた database 置き場にある数字列によるディレクトリ(一つのブログの全データが入っている)の直下にある web ディレクトリのことだ。
<script type="text/javascript" src="<$BaseURL$>/haloscan.js"></script>
<script type="text/javascript" src="http://www.haloscan.com/load/YOURNAME"></script>
head 要素とは <head> から </head> までのこと。YOURNAME は自分の HaloScan アカウント名に置き換えなければならない。
対象となるテンプレートは次のとおり。
<a href="http://www.haloscan.com/comments/YOURNAME/entry_<$EntryID$>" title="「<EntryTitle><$EntryTitle strip_html="1"$></EntryTitle>」へのコメント"><script type="text/javascript"><!--
HaloScanCount('entry_<$EntryID$>', 'comment');
// --></script>Comment<script type="text/javascript"><!--
HaloScanPlural('entry_<$EntryID$>', 'comment');
// --></script></a>
<a href="http://www.haloscan.com/comments/YOURNAME/entry_<$EntryID$>" title="「<EntryTitle><$EntryTitle strip_html="1"$></EntryTitle>」へのコメント" onclick="HaloScan('entry_<$EntryID$>');return false;"><script type="text/javascript"><!--
HaloScanCount('entry_<$EntryID$>', 'comment');
// --></script>Comment<script type="text/javascript"><!--
HaloScanPlural('entry_<$EntryID$>', 'comment');
// --></script></a>
<a href="http://www.haloscan.com/tb/YOURNAME/entry_<$EntryID$>" title="「<EntryTitle><$EntryTitle strip_html="1"$></EntryTitle>」へのトラックバック"><script type="text/javascript"><!--
HaloScanCount('entry_<$EntryID$>', 'trackback');
// --></script>Trackback<script type="text/javascript"><!--
HaloScanPlural('entry_<$EntryID$>', 'trackback');
// --></script></a>
<a href="http://www.haloscan.com/tb/YOURNAME/entry_<$EntryID$>" title="「<EntryTitle><$EntryTitle strip_html="1"$></EntryTitle>」へのトラックバック" onclick="HaloScanTB('entry_<$EntryID$>');return false;"><script type="text/javascript"><!--
HaloScanCount('entry_<$EntryID$>', 'trackback');
// --></script>Trackback<script type="text/javascript"><!--
HaloScanPlural('entry_<$EntryID$>', 'trackback');
// --></script></a>
対象となるテンプレートは次のとおり。
もちろん YOURNAME は自分の HaloScan アカウント名に置き換えなければならない。
テンプレートを更新すると影響するページがちゃんと生成されて公開される。
手順 2,3 のコードの中で YOURNAME を自分の HaloScan アカウント名に置き換えるわけだが、単純に置き換えるとテンプレートに汎用性がなくなる。そこで Custom Tags を次のように設定する。
そして手順 2,3 の YOURNAME を <$HaloScanAcount$> に置き換えると更によいだろう。
Thingamablog 1.0.2 に次の修正を加えたスペシャルエディション Thingamablog 1.0.2-OKAMURA-20051025 を配布します。
このスペシャルエディションを使用すると RSS が valid になる上に、RSS 中のマルチバイト文字のほとんどが実体参照になっていたのを解消できます。
配布ファイルは以下の通り。
配布ファイルの使い方を説明します。
もし Thingamablog 1.0.2 を起動しているのでしたらそれを終了させてください。
Thingamablog 1.0.2 をインストールしたディレクトリの thingamablog.jar を thingamablog.orig.jar とリネームします。
thingamablog.jar が生成されます。
解凍してできた thingamablog.jar を Thingamablog 1.0.2 をインストールしたディレクトリにコピーまたは移動してください。
以後、オリジナルと同じ手順で Thingamablog を起動すると、このスペシャルエディションが起動されます。
まず Thingamablog 1.0.2 のソースアーカイブをダウンロードします。そのアーカイブファイルは thingamablog-1.0.2-src.zip です。以後、このファイルをカレントディレクトリにダウンロードしたものとします。
カレントディレクトリにダウンロードした thingamablog-1.0.2-OKAMURA-20051025.patch.gz を置きます。
そしてシェルで次のようにしてください。
unzip thingamablog-1.0.2-src.zipこれでソースが展開されたディレクトリ thingamablog-1.0.2 にパッチが適用された状態になります。
RSS の日本語のほとんどが実体参照になる原因を調べるためにソースを見ていたら XHTML 1.0 Strict も可能なことがわかった。ヘルプに載っていない Hypertext Tags 型のテンプレートタグの属性があったのだ。
その属性は close_empty_tags。例えば <$entryBody close_empty_tags="1"$> とするとエントリの内容の中のから要素をその場閉じしてくれる。
これを使って Front Page を XHTML 1.0 Strict で書いてみた。ついでに構造を見直した。構造の見直しに伴って CSS も書き直した。ただし、これはまだ Front Page だけなので CSS は new-styles-site.css としてまだ HTML 4.01 Strict のままのページには影響しないようにした。
全 HTML ページを valid にした。DOCTYPE は HTML 4.01 Strict。
日時の書式も 2005-10-20 15:30 のような書式ではなく 2005年10月20日 15時30分 というようにした。これは当該部分を読み上げたときに ニセンゴ ハイフン ジュウ… と意味不明になってしまうのを防ぐためだ。この措置はテンプレートタグのうち Date Tags と呼ばれる種類のタグに書式指定ができるからできたことである。
このように Thingamablog ではテンプレートタグがどのように展開されるかを指定するオプションを付けることができる。テンプレートの中に記述する場面に応じて展開のさせ方を指定することができるのだ。Date Tags だったら書式が指定できるので、普通に記述するときの書式と ID 属性値などに使用するときにする記述を細かく指定することができる。Hypertext Tags という種類のテンプレートタグならその値のとおりに展開するのかタグを省略させるのか、HTML の予約文字を実体参照にするのかを選ぶことができる。是非 iBlog にも欲しい機能だ。
これで通常の使用方法の範囲では RSS 以外を正しく生成できることが実証された。しかも JavaScript を前提としないページなので、JavaScript が有効でないブラウザのために代替手段を提供する苦労からも解放される。RSS さえ valid になればとてもよい出力結果が得られるというわけだ。ただし Mac OS X で使用する場合、仮名漢字変換がかなりもたつく。通常の Edit モードで書くときは致命的と言えるくらい苦痛だ。Edit <HTML> モードで書けば大分ましだが、HTML で書かなければならない。一般的には HTML でブログのエントリを書くのユーザにとって好ましくないだろう。
仮名漢字変換のもたつきは改善することが困難だと思われるが RSS の日時の書式は簡単に改善できる。カスタム Thingamablog を作成してみることにする。
エントリ「RSS の日時のフォーマットが間違っている原因」の件を Thingamablog のフォーラムに投稿した。トピックは「RSS datetime format」。
エントリ「RSS の日時のフォーマット」で指摘したように Thingamablog が出力する RSS における日時の値のタイムゾーンが間違っている。+0900 とすべきところを JST としているのだ。これの原因を調べてみた。
クラス net.sf.thingamablog.generator.DateTag において静的変数 RFC822_FORMAT の値が "EEE, dd MMM yyyy kk:mm:ss z" となっているが正しくは "EEE, dd MMM yyyy kk:mm:ss Z" でなければならない。日時の文字列の生成にはクラス java.text.SimpleDateFormat が使用されているが、同クラスでは小文字の "z" だとタイムゾーンに名前があるとそれが用いられてしまう。RFC822 では一部を除いて 4 桁タイムゾーン形式でなければならない。RFC822 方式にするためには大文字の "Z" を用いなければならない。
この間違いを直してコンパイルした Thingamablog を使えば正しい RSS が出力できる。
テンプレートファイルをエディタで編集して保存するときは使用しているロケールでネイティブなエンコードで保存しなければならない。ページの文字コードを UTF-8 に設定しているとテンプレートも UTF-8 のような気がしてしまうがそうではない。
テンプレートファイルを読み込んだ時点で文字列になるのだが Java では通常その時点でエンコードを指定しなければならない。省略されたら現在のロケールにネイティブなエンコードが指定されたものとみなされる。なぜならば Java における文字コードは UNICODE だから変換が必要になるからだ。
だからテンプレートファイルが様々なエンコードになっているとしたら、テンプレートファイルの外でエンコードを指定しておかなければならないがファイルにそういうものはない。したがって現在のロケールにネイティブなエンコードにならざるを得ない。
Mac OS X では Shift_JIS ということになる。
エントリの permlink 先のページ、iBlog でいう EntryPage のテンプレートファイル entry.template も valid にした。
検証は前回と同じで
で行った。
Front Page は iBlog でいう BlogPage、つまりブログのトップページのこと。これのテンプレートと CSS を valid にした。元にしたのは Mac Stripe というテンプレートと CSS のセット。
DOCTYPE は HTML 4.01 Strict とした。本当は XHTML 1.0 Strict を使いたいのだが Thingamablog が吐き出すコードは XHTML ではないのだ。
さっきまでこの仮のブログのタイトルを間違えていて「Thigamablog メモ」としていた。n が抜けていたのだ。ああ、HaloScan を付けていれば誰かに突っ込んでもらえたのに。がっかり。
というわけで HaloScan をどうやって付けようか考えてみることにする。既にどこかで Thingamablog + HaloScan をやっているのは知っているけど自分で考えてみたいんだよーん。
このブログは仮のブログなので実際には HaloScan を付けないかもしれない。とりあえずこのブログへの突っ込みはエントリ「 Thingamablog」の コメントにしてください。
全国のエッチな皆様、ごめんなさい。想像したようなことは何も書かれていません。
オッホン。気を取り直して本題にいきましょう。
iBlog には勝手に改行コードが挿入されてしまうという問題点があったが、Thingamablog にも同様の問題がある。既に書いてきたエントリのところどころに不振な空白があるのにお気づきの人もいると思う。一つは CSS で割り当てたスタイルに起因する間だが本当に改行コードが挿入されてしまっていて、その結果ブラウザではスペースが入ってしまっているところも多数あるのだ。しかもエントリの編集中に気付いてそのスペースを削除したにもかかわらずだ。
どうやらインライン要素をブロック要素扱いして HTML コードを整形しているために起きているような気がする。iBlog の場合はテンプレートタグを入れ替えて挿入されるコード自体に改行が挿入されているケースもあったが、Thingamablog の場合は今のところそういうケースは無いようだ。
.Mac 上に設置した Thingamablog によるブログを Thingamablog の GUI から参照すると .Mac アカウントによってはエラーとなってしまう。これは Thingamablog にもよくないところがあるものの .Mac のバグだ。
続きを読むThingamablog が Web サーバに何も要求しないから .Mac で使用するブログツールとして使えるというわけだが、実は JavaScript も不要なのだ。つまりクライアント側のブラウザにも必須用件はない。あとは CSS なしでもちゃんと意味が通るテンプレートを用意すればよい。Web アクセシビリティへの配慮もこれなら少しは楽になるだろう。
しかしいいことばかりでもない。iBlog が CommonLib.js を生成して使う仕様になっていたのにはちゃんと理由があるのだ。
例えばエントリを一つ新たに書いたとする。その一つ前のエントリの次のエントリになるのだから HTML に埋め込みでそのリンクを付けていたとしたら一つ前のエントリのページもアップデートする必要がある。例えばカテゴリを一つ増やしたとする。ナビゲーションエリアにあるカテゴリのリストに一つ書き足さないといけない。だから全てのページをアップデートする必要がある。これらが CommonLib.js という一つのファイルの更新で賄えるのだ。効率が良い。
逆に言うとThingamablog ではそういう更新でサーバへのアップロードが iBlog と比較して多く発生し、公開に時間がかかるということだ。その代わり iBlog が JavaScript を通してクライアントにやらせていたことを予めやっておくのだからクライアントに JavaScript を要求しないというわけだ。
生成される RSS の日本語が実体参照になっているというのはまだ許せる。間違ってはいないからだ。 しかし lastBuildData 要素や pubDate 要素の値となる日時のフォーマットが間違っているのは困った。
この間違いについてはエントリ「 再び iBJ フォーラムの RSS を直して提供 」で書いたことがある。以下そのエントリから引用する。
RSS が最後に作成された日時を表す lastBuildDate 要素、item 要素が指しているものが公開された日時を表す pubDate 要素の値において、その時間帯(タイムゾーン)の指定が JST となっています。しかし 3 文字の記号で使用できるのはアメリカの時間帯のみで日本時間の場合は +0900 というように表さないとなりません。
昨夜エントリを書いていて気付いたというか気付かされたのだが、エントリが長くなると仮名漢字変換への切り替えが遅延してキータイプが勝ってしまう。まるで初期の Mac OS X 10.0 のエディタみたいだ。
どういうことかというとこうだ。例えば「原因はこれだ」と書くために command-space でことえりを ON にして「 genninhakoreda」とタイプするとする。そうするとゆっくり「 genninhakoreda」と出力された後で「 げんいんはこれだ 」と表示される。しかもローマ字は確定した状態なのだ。
これはかなり苦痛だ。HTML を直接編集するモードでやればそうではないような気もする。
Thingamablog で初めて ブログをし始める場合や、今までのブログとは別なブログを新たに作る場合は別によいのだが iBlog を使ってきた身としてはやはり iBlog のエントリ群をインポートできるかどうかが気になるところだ。
完全なインポートは相当努力が必要だと思うが、お手軽な方法がある。Thingamablog には RSS からエントリをインポートする機能があるのだ。そこで実験用のブログを Thingamablog で作ってそこに既存の iBlog によるブログの RSS からインポートさせてみた。
iBlog の RSS はプレビュー段階ではまだ完成されていない。公開して初めてちゃんとした RSS になる。そこでインポート元の RSS はオンラインの RSS として URL を指定してインポートしてみた。結果は NG である。エントリは作られてるのだが日本語が文字化けしているのだ。その文字化けの仕方は以前の iBlog にも見られたものと同じ種類のものだった。UTF-8 日本語で書かれた文字が無理矢理 ISO-8859-1 として解釈された結果の文字化けだった。
もちろんその RSS の XML 宣言では文字コードが UTF-8 だと指定してある。不審に思ってソースを見てみた。そうしたら RSS を URL から読み込む際にエンコードは次のようにして判定されることがわかった。
原因はこれだ。多くの Web サーバでそうであるようにリクエストされたファイルのメディアタイプはちゃんと答えるが、それに続く charset の指定は .Mac のサーバ homepage.mac.com は省略してしまう。これはどの charset が用いられているかを知るためにはそのファイルごとに違うかもしれないからだ。.htaccess などをユーザが置くことができるサーバならばやりようはある。しかし homepage.mac.com にはそんな機能はない。だから省略されてしまう。 ところが charset が省略された場合のデフォルトは ISO-8859-1 なのだ。だからこそ RSS 自体をどんなに Valid にしても Feed Validator は警告を出す。( サイト CacheUpIt の RSS の例)
これは標準自体がそういう規定なのだからしかたがない。Thingamablog を改造して UTF-8 をデフォルトにしておくことでも解決できるが、わざわざ標準から外れさせるのは改悪だ。ソースを見ると URL 指定するリモートの RSS ではないときは OS の標準というかそのロケールでの標準のエンコードを用いるようになっている。Mac OS X の日本語環境ではファイルのエンコードは普通は Mac Shift_JIS が用いられる。そこで iBlog からエントリをインポートするには次のようにすればよい。
これで目的のブログの全エントリがインポートされるはずだ。画像などのメディアファイルといったエントリに添付されているファイルもダウンロードされて取り込まれるのかどうかとか、iBlog が大量のエントリを RSS にちゃんと載せることができるのかどうかというのは確認していない。
最初のエントリのときに気付いたのだが、Thingamablog では一つのエントリに複数のカテゴリを割り当てることができる。ソーシャルブックマークで言うタグのような感じだ。
iBlog 2.0 ではそれを可能にするつもりだと iBlog の開発者 Sarat さんが述べていたとどこかで読んだ気もするのだが、とにかく iBlog 1.x にはそういう機能はない。ときどきエントリを書いていて欲しいなと思っていた機能だ。
ちょっと嬉しい。
Thingamablog で生成された RSS では item 要素の link 要素の値がエントリの Permalink ではない。
iBlog ではエントリページの URL になっていて Permalink になっていたからそれが当たり前だと思っていた。Thingamablog では日付で構成されたアーカイブ(他にカテゴリで構成されたアーカイブもある)のページの中の当該のエントリへのリンク、つまり # 付きの URL になっている。
最初「これじゃ駄目じゃん」と思ったのだがよく考えるといいかもしれない。なぜなら、RSS で狙い撃ちでやってきてもその前後のエントリが目に留まるかもしれないからだ。読者側から見たらよけいなエントリをダウンロードさせるなという感じもする。一つ一つのエントリが長かったり重かったりする人は日付によるアーカイブの単位を一週間とか短めに設定した方がよいだろう。
Thingamablog がテンプレートタグを置き換えて生成するコードはどうやら HTML 4.01 らしい。
例えば Shift-enter で改段落ではなく改行をすることができるのだが、それに対応するのは <br> であって <br /> ではない。画像を付けたときも img 要素は /> で終わっていない。そのくせテンプレートは XHTML 風に meta 要素が /> で終わっていてちぐはぐだ。
一般ユーザとしてはテンプレートを HTML 風に改造することで対応するしかない。しかし、世のトレンドはもはや XHTML だろう。HTML だと br 要素や img 要素のような空要素は「その場閉じ 」をしないので XML パーサで読み取って再利用できない。あまり美しい文法ではないのだ。
XHTML を吐き出すようにするプラグインとか出ていないのだろうか? まだ Thingamablog をダウンロードしてこうして少しエントリを書いているだけなのでプラグイン群がどこから入手可能かも知らない。後で調べてみようと思う。
設定事項については Thingamablog のヘルプなどにあるとおりだが、.Mac で使用する上でのコツについて書いておく。なおここで述べる設定事項は後から変更することができる。
それは次の三点である。
Thingamablog 1.0.2 では Transport Type に FTP, SFTP およびローカルが利用できる。しかし .Mac の Web スペースがある iDisk には WebDAV でしかアクセスできない。そこで次のようにそれぞれを設定する。
前のエントリ「インストールと起動」で説明した起動用アプリケーションをそのとおりに作成して Thingamablog の起動すれば事前に iDisk がマウントされる。このため Base Path に指定したディレクトリはローカルのディレクトリと同じように扱えるようになっている。だから Transport Type がローカルで、Base Path は iDisk をマウントしたときのパスなのだ。この Automator によるアプリケーションを通して Thingamablog を起動すれば公開するためにいちいち iDisk をマウントしたり、ローカルのディスクに書き出されたものを rsync などを使用して同期する必要も無い。
ただし、オフラインのときはそのアプリケーションは使用できない。iDisk をマウントすることができないからだ。そういうときはインストールした thingamablog.jar をダブルクリックして起動すればよい。
thingamablog-1.0.2 フォルダの thingamablog.jar をダブルクリックすればよいのだが、thingamablog.jar は Dock に入れることができず不便。そこで Automator を利用してアプリケーションを作成し、そのアプリケーションを Dock に入れることにする。
Automator で次のようにワークフローを作成する。
これをアプリケーションとして保存する。後で保守が可能なようにワークフローとしても保存しておくとよいだろう。こうして作成したアプリケーションを Dock に収めるとよい。