« 2005年11月 | Main

2005年10月31日

Thingamablog 1.0.2-OKAMURA-20051031

概要

Thingamablog 1.0.2-OKAMURA-20051025 から更に修正を加えたスペシャルエディション Thingamablog 1.0.2-OKAMURA-20051031 をリリースします。

  • Character Encoding が UTF-8 で Transport Type が FTP のとき一部の文字が文字化けするバグを解消。

配布ファイル

配布ファイルは以下の通り。

thingamablog.jar
コンパイルした Thingamablog 本体です。
thingamablog-1.0.2-OKAMURA-20051031.patch
Thingamablog のソースのパッチファイルです。パッチファイルとは変更内容を記載したファイルで、オリジナルに対して patch コマンドを使用すると変更が適用されます。このパッチファイルはオリジナルのソースに対して適用してください。

使い方

配布ファイルの使い方を説明します。

thingamablog.jar.gz
  1. Thingamablog 1.0.2 を終了する。

    もし Thingamablog 1.0.2 を起動しているのでしたらそれを終了させてください。

  2. オリジナルの thingamablog.jar を退避する。

    Thingamablog 1.0.2 をインストールしたディレクトリの thingamablog.jar を thingamablog.orig.jar とリネームします。

  3. thingamablog.jar.gz を解凍する。

    thingamablog.jar が生成されます。

  4. thingamablog.jar をオリジナルと入れ替える。

    解凍してできた thingamablog.jar を Thingamablog 1.0.2 をインストールしたディレクトリにコピーまたは移動してください。

以後、オリジナルと同じ手順で Thingamablog を起動すると、このスペシャルエディションが起動されます。

thingamablog-1.0.2-OKAMURA-20051031.patch.gz

まず 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
gzcat thingamablog-1.0.2-OKAMURA-20051031.patch.gz |\
patch -p0

これでソースが展開されたディレクトリ thingamablog-1.0.2 にパッチが適用された状態になります。

2005年10月30日

Custom Tags の便利な使い方

ご存知のとおり Thingamablog にはブログのプリファレンスから設定できる Custom Tags という機能がある。これは名前とその値を設定しておくとテンプレートファイルの中で <$名前$> と書いたところをその値に置き換えてくれる機能だ。

この Custom Tags はちょっとした文字列の置き換えだけではなく、HTML コードをごそっと入れることもできるのだ。テンプレートファイルを変更するのもよいがこの Custom Tags に HTML コードを入れてテンプレートで使うというのもよい。というか積極的にこちらを使った方がよいと思う。

複数種類のページに同じ固定された HTML コードを入れたいとき、それを Custam Tag にして <$名前$> をテンプレートファイル達に書いておけば、一カ所に HTML コードを書くだけでその HTML コードが複製されるからだ。後から変更したくなったりしても一カ所の変更で済む。

例えば現在このブログではサイドの "Powerd by" という項目の前に "関連リンク" という項目を表示している。この項目はテンプレートでは <$NavigationItems$> となっている。"NavigationItems" という名前の Custom Tag で追加のサイド項目を書くことにしている。例えばブログローリングとかアフィリエイト商品とかブログペットとか入れるといいだろう。

欠点はテンプレートタグが使えないことだ。

過剰な %-escape の原因

Thingamablog のメイン画面のツールバーの右から 4 つ目にあるブログの Front Page を開くアクションで、URL 中の %-escape が過剰な件を調べた。

原因は Browser Opener というフリーのユーティリティクラスの中にあった。ソースを見ると displayURL というメソッドの中で [a-zA-Z0-9.:&@/?%+=#\\-] 以外の文字を %-escape している。

これじゃあ Thingamablog 側ではいかんともしがたい。こっちのソースも直そうかなあ。いやいや、間違いというわけじゃないんだから間違っている .Mac の方が直すべきだな。

dotmac.info への更新 Ping

.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 先に設定したいから URL を教えてくれと dotmac.info に頼む。
  • 更新 Ping の URL を独自に調査する。

独自に調査してブログの更新 Ping 先として設定したら dotmac.info へ更新 ping を送ることができた。dotmac.info のページを開いて更新 Ping を送るのは面倒だし、苦手な英文を書いて頼むのも面倒だからこのままにしておこう。よい子は真似しないように。更新 Ping の URL は dotmac.info を尊重してここでも非公開にしておく。

Mac_Stripe-XHTML_Strict-ja の2005年10月30日の更新のお知らせ

たびたび済みません。カレンダーからアーカイブページの当該の日の部分へ移動できないという不具合があったので Mac_Stripe-XHTML_Strict-ja を更新しました。

それから前回の更新時に書きそびれていたのですが、Include コンテナで取り込む poweredby.template も前回更新してあります。Mac_Stripe-XHTML_Strict-ja および オリジナルの Thingamablog へのリンクを補足しました。

Trackback People に話題を作った

BlogPeople トラックバック・ピープルに「Thingamablog」という話題を申請して承認された。

承認の通知メールをもらってから何度かトラックバックをくきさんの素敵ツール「Dashboard 用 Trackback Ping送信ソフト PiyoTrackbackPing」で送ろうとしたのだが成功していない。うーむなんでだろう?

とりあえずバナー画像を募集中なのだ。

他の OS との共有は面倒くさい

先日まで 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) を使わなくて済むし。

2005年10月29日

Mac_Stripe-XHTML_Strict-ja の2005年10月29日の更新のお知らせ

Mac_Stripe-XHTML_Strict-ja をアップデートしました。変更点は次のとおりです。

feed.template
  • guid 要素の内容を <$EntryPermalink$> に変更。
  • guid 要素に isPermaLink="true" を付加。
archive.template, category.template, entry.template, main.template
  • DayHeader コンテナ内に <div class="day"> を追加。
  • BlogEntry コンテナの終わりに DayFooter コンテナを追加し、内容を </div> とした。
archive.template, category.template, entry.template, index.template, main.template
  • <h3 class="title"> から class="title" を除去。
index.template
  • Google によるサイト内検索フォームを追加。
styles-site.css
  • img.banner に関するスタイルを追加
  • img.banner.banner75x32 に関するスタイルを追加
styles-index.css
新規ファイル。

オリジナルからの変更点についてはカテゴリ「解説」で順次解説してゆく予定です。

文書の適合性(Mac_Stripe-XHTML_Strict-ja 解説)

Mac_Stripe-XHTML_Strict-ja に含まれるテンプレートにおいてオリジナルとは異なる部分のうち、文書の適合性に関する箇所について解説をします。

XML 宣言(推奨事項)

オリジナルコード
(なし)
改良コード
<?xml version="1.0" encoding="<$Charset$>" ?>
根拠
XHTML 1.0: 拡張可能 ハイパーテキスト マークアップ言語 (第二版)」の「3.1.1 厳密適合文書」より

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 宣言を使用するように強く推奨される。

対象
  • archive.template
  • category.template
  • entry.template
  • index.template
  • main.template

文書型宣言(必須事項)

オリジナルコード
(なし)
改良コード
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
根拠
XHTML 1.0: 拡張可能 ハイパーテキスト マークアップ言語 (第二版)」の「3.1.1 厳密適合文書」より

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 宣言がなければならない。

対象
  • archive.template
  • category.template
  • entry.template
  • index.template
  • main.template

html 要素の xmlns 属性(必須事項)

オリジナルコード
<html>
改良コード
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
根拠
XHTML 1.0: 拡張可能 ハイパーテキスト マークアップ言語 (第二版)」の「3.1.1 厳密適合文書」より

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 と定義される。

対象
  • archive.template
  • category.template
  • entry.template
  • index.template
  • main.template

html 要素の lang 属性(推奨事項)

オリジナルコード
<html>
改良コード
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
根拠
Web コンテンツ アクセシビリティ ガイドライン」の「4.3 文書の主な自然言語の識別。 [優先度 3]」に次のように書かれている。

For example, in HTML set the "lang" attribute on the HTML element.

例えば、HTML では HTML 要素に "lang" 属性を設定すること。

対象
  • archive.template
  • category.template
  • entry.template
  • index.template
  • main.template

html 要素の xml:lang 属性(推奨事項)

lang 属性を付けるという条件下で必須事項です。

オリジナルコード
<html>
改良コード
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<$Lang$>" lang="<$Lang$>">
根拠
XHTML 1.0: 拡張可能 ハイパーテキスト マークアップ言語 (第二版)」の「C.7. langxml:lang 属性」より

Use both the lang and xml:lang attributes when specifying the language of an element.

要素の言語を指定するときは langxml:lang 属性の両方を使用すること。

対象
  • archive.template
  • category.template
  • entry.template
  • index.template
  • main.template

2005年10月27日

2005年10月26日

残るは MonthLabel だけ

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 にコメントとトラックバックを付ける

前置き

Thingamablog にコメントやトラックバックを付けるための道具には幾つかの選択肢がある。大きく分けると次のようになる。

サービス型
サービス元が提示するコードをページに付けることでコメントのページ(コメントを見たり投稿するためのページ)やトラックバックのページ(トラックバックを見たり、Ping URL を表示するページ)へのリンクを付けたり、コメントやトラックバックをページに表示することができるようになる。
CGI 型
Perl など多くの Web スペースで使える言語を用いて作成された CGI でコメントやトラックバックを実現するもの。

.Mac では CGI が使えないので CGI 型を使用しようとすると必然的にレンタルサーバや自前のサーバを利用することになる。そうしたらそっちでブログを公開してもよいわけで、ここではあくまでも .Mac を主体に考えていきたいのでサービス型を検討した。

検討したと言っても多くのものを検討したわけではない。Tecknik.net: Commenting: Systems などに一覧されているが、確実に UTF-8 など日本語が表示できるエンコードをサポートしていて Trackback もでき、更に無料でも使用できるものとなるとやっぱり HaloScan くらいしか見つからなかった。他のは日本語が扱えるかどうかは外から見ただけではわからなかった。サインナップしてみたら UTF-8 が使えないとかでは嫌だし。HaloScan はときどき調子が悪くなるが、CacheUpIt があるので致命的なことにはならない。

設定

まず、HaloScan アカウントを取得し、HaloScan の設定を行う。特に大事なのが 設定ページの中の Character Encoding の設定だ。ここで日本語が表示可能なエンコードを選択しておかなければならない。

次に Install ページへ行って thingamablogDisplay trackback code にチェックを入れて [Next > >] ボタンを押して Thingamablog 用のコードを表示させるわけだが、ここで表示されるコードは次の理由で薦められない。特に Step 2: Automated for Thingamablog Users のコードはかなりまずい。

  • JavaScript が有効でないブラウザではコメントにもトラックバックにもアクセスできない。

    コメントページやトラックバックページへのリンクが javascript スキームの URL になっているので、JavaScript を処理できないとリンクを辿ることができないからだ。

  • ポップアップウィンドウが開くので Web アクセシビリティに欠ける。

    健常者でもポップアップウィンドウが開いたことに気付かないこともたまにはあると思う。ましてや操作に慣れない人や、急な変化をすぐに認識できない人や、スクリーンリーダーを使っている目が不自由な人には、ポップアップウィンドウはかなりわかりにくいインターフェースだろう。

    そもそも HTML 4.01 Strict や XHTML 1.0 Strict には a 要素に target 属性は存在しない。旧態のタグ付けからの移行用の Transitional では残っているが、新しいウィンドウを勝手に表示させるのは推奨されていないということだ。

  • HaloScan の調子が悪いときもトラックバックにもアクセスできないことがある。

    HaloScan の調子が悪く Step 1 の JavaScript がロードできないとそうなってしまうからだ。

三つ目問題について最近 HaloScan も認識したらしく Handling HaloScan downtime gracefully というページでよりよいコードがアナウンスされている。ところがどっこいここのコードもあまりお薦めできない。まだ一つ目と二つ目の問題が残っていることに加えて、次の問題が新たに発生するからだ。

  • nobr という HTML 4.01 にも XHTML 1.0 にも定義されていない要素が使用されている。

    標準でない要素なので相互運用性に問題が発生する可能性が大きい。CSS で white-space: nowrap; などを付ける方がよい。

  • script 要素を理解しないブラウザでは長々と JavaScript コードが表示されてしまう。

    script 要素を知っている上でサポートしないブラウザであればそうはならないが、script 要素を全く知らないブラウザでそうなってしまう。例えば携帯電話のブラウザなどに見られる。

というわけで Handling HaloScan downtime gracefully で提示されているコードをベースにもっとよいコードを付ける手順を示す。上に述べた問題点の他にも色々考慮してみた。

  1. haloscan.js をダウンロードして自分のブログの web ディレクトリに置く。

    この JavaScript ファイルは script 要素で長々と記述しろと HaloScan が提示している JavaScript コードをファイルにしたものだ。

    web ディレクトリとは Thingamablog を最初に起動したときに場所を訊かれた database 置き場にある数字列によるディレクトリ(一つのブログの全データが入っている)の直下にある web ディレクトリのことだ。

  2. テンプレートの head 要素内に次のコードを入れる。 <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 アカウント名に置き換えなければならない。

    対象となるテンプレートは次のとおり。

    • archive.template
    • category.template
    • entry.template
    • main.template
  3. コメントページへのリンクを入れるところに次のコードを入れる。
    ポップアップをさせない場合
    <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>
  4. トラックバックページへのリンクを入れるところに次のコードを入れる。
    ポップアップをさせない場合
    <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>

    対象となるテンプレートは次のとおり。

    • archive.template
    • category.template
    • entry.template
    • main.template

    もちろん YOURNAME は自分の HaloScan アカウント名に置き換えなければならない。

  5. Thingamablog で公開する。

    テンプレートを更新すると影響するページがちゃんと生成されて公開される。

手順 2,3 のコードの中で YOURNAME を自分の HaloScan アカウント名に置き換えるわけだが、単純に置き換えるとテンプレートに汎用性がなくなる。そこで Custom Tags を次のように設定する。

Name
HaloScanAcount
Value
自分の HaloScan アカウント名

そして手順 2,3 の YOURNAME を <$HaloScanAcount$> に置き換えると更によいだろう。

2005年10月25日

Thingamablog 1.0.2-OKAMURA-20051025 配布

概要

Thingamablog 1.0.2 に次の修正を加えたスペシャルエディション Thingamablog 1.0.2-OKAMURA-20051025 を配布します。

  • RSS の lastBuildDate および pubDate 要素におけるタイムゾーンの表記を RFC 822 に従うようにした。
  • Hypertext Tags 型のテンプレートタグにおいて、encode_html および strip_html 属性を真にしたときに非 7bit 文字が実体参照にならないようにした。

このスペシャルエディションを使用すると RSS が valid になる上に、RSS 中のマルチバイト文字のほとんどが実体参照になっていたのを解消できます。

配布ファイル

配布ファイルは以下の通り。

thingamablog.jar
コンパイルした Thingamablog 本体です。
thingamablog-1.0.2-OKAMURA-20051025.patch
Thingamablog のソースのパッチファイルです。パッチファイルとは変更内容を記載したファイルで、オリジナルに対して patch コマンドを使用すると変更が適用されます。

使い方

配布ファイルの使い方を説明します。

thingamablog.jar.gz
  1. Thingamablog 1.0.2 を終了する。

    もし Thingamablog 1.0.2 を起動しているのでしたらそれを終了させてください。

  2. オリジナルの thingamablog.jar を退避する。

    Thingamablog 1.0.2 をインストールしたディレクトリの thingamablog.jar を thingamablog.orig.jar とリネームします。

  3. thingamablog.jar.gz を解凍する。

    thingamablog.jar が生成されます。

  4. thingamablog.jar をオリジナルと入れ替える。

    解凍してできた thingamablog.jar を Thingamablog 1.0.2 をインストールしたディレクトリにコピーまたは移動してください。

以後、オリジナルと同じ手順で Thingamablog を起動すると、このスペシャルエディションが起動されます。

thingamablog-1.0.2-OKAMURA-20051025.patch.gz

まず 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
gzcat thingamablog-1.0.2-OKAMURA-20051025.patch.gz |\
patch -p0

これでソースが展開されたディレクトリ thingamablog-1.0.2 にパッチが適用された状態になります。

XHTML 1.0 Strict もできる

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 のままのページには影響しないようにした。

2005年10月24日

2005年10月23日

全 HTML ページを valid に

全 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 の日時のフォーマットが間違っている原因

エントリ「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 が出力できる。

テンプレートは Shift_JIS のエンコード

テンプレートファイルをエディタで編集して保存するときは使用しているロケールでネイティブなエンコードで保存しなければならない。ページの文字コードを UTF-8 に設定しているとテンプレートも UTF-8 のような気がしてしまうがそうではない。

テンプレートファイルを読み込んだ時点で文字列になるのだが Java では通常その時点でエンコードを指定しなければならない。省略されたら現在のロケールにネイティブなエンコードが指定されたものとみなされる。なぜならば Java における文字コードは UNICODE だから変換が必要になるからだ。

だからテンプレートファイルが様々なエンコードになっているとしたら、テンプレートファイルの外でエンコードを指定しておかなければならないがファイルにそういうものはない。したがって現在のロケールにネイティブなエンコードにならざるを得ない。

Mac OS X では Shift_JIS ということになる。

2005年10月22日

2005年10月20日

Front Page のテンプレートと CSS を valid にした

Front Page は iBlog でいう BlogPage、つまりブログのトップページのこと。これのテンプレートと CSS を valid にした。元にしたのは Mac Stripe というテンプレートと CSS のセット。

DOCTYPE は HTML 4.01 Strict とした。本当は XHTML 1.0 Strict を使いたいのだが Thingamablog が吐き出すコードは XHTML ではないのだ。

検証はいつものとおり で行った。しばらく使えない状態にあったウェブヘルパー ASP版はカレンダーがある時点で駄目なことはわかっているので検証していない。

2005年10月19日

ブログタイトルが…

さっきまでこの仮のブログのタイトルを間違えていて「Thigamablog メモ」としていた。n が抜けていたのだ。ああ、HaloScan を付けていれば誰かに突っ込んでもらえたのに。がっかり。

というわけで HaloScan をどうやって付けようか考えてみることにする。既にどこかで Thingamablog + HaloScan をやっているのは知っているけど自分で考えてみたいんだよーん。

このブログは仮のブログなので実際には HaloScan を付けないかもしれない。とりあえずこのブログへの突っ込みはエントリ「 Thingamablog」の コメントにしてください。

2005年10月18日

同意の無い挿入は嫌

全国のエッチな皆様、ごめんなさい。想像したようなことは何も書かれていません。

オッホン。気を取り直して本題にいきましょう。

iBlog には勝手に改行コードが挿入されてしまうという問題点があったが、Thingamablog にも同様の問題がある。既に書いてきたエントリのところどころに不振な空白があるのにお気づきの人もいると思う。一つは CSS で割り当てたスタイルに起因する間だが本当に改行コードが挿入されてしまっていて、その結果ブラウザではスペースが入ってしまっているところも多数あるのだ。しかもエントリの編集中に気付いてそのスペースを削除したにもかかわらずだ。

どうやらインライン要素をブロック要素扱いして HTML コードを整形しているために起きているような気がする。iBlog の場合はテンプレートタグを入れ替えて挿入されるコード自体に改行が挿入されているケースもあったが、Thingamablog の場合は今のところそういうケースは無いようだ。

.Mac のバグを見つけてしまった

.Mac 上に設置した Thingamablog によるブログを Thingamablog の GUI から参照すると .Mac アカウントによってはエラーとなってしまう。これは Thingamablog にもよくないところがあるものの .Mac のバグだ。

続きを読む

JavaScript も不要

Thingamablog が Web サーバに何も要求しないから .Mac で使用するブログツールとして使えるというわけだが、実は JavaScript も不要なのだ。つまりクライアント側のブラウザにも必須用件はない。あとは CSS なしでもちゃんと意味が通るテンプレートを用意すればよい。Web アクセシビリティへの配慮もこれなら少しは楽になるだろう。

しかしいいことばかりでもない。iBlog が CommonLib.js を生成して使う仕様になっていたのにはちゃんと理由があるのだ。

例えばエントリを一つ新たに書いたとする。その一つ前のエントリの次のエントリになるのだから HTML に埋め込みでそのリンクを付けていたとしたら一つ前のエントリのページもアップデートする必要がある。例えばカテゴリを一つ増やしたとする。ナビゲーションエリアにあるカテゴリのリストに一つ書き足さないといけない。だから全てのページをアップデートする必要がある。これらが CommonLib.js という一つのファイルの更新で賄えるのだ。効率が良い。

逆に言うとThingamablog ではそういう更新でサーバへのアップロードが iBlog と比較して多く発生し、公開に時間がかかるということだ。その代わり iBlog が JavaScript を通してクライアントにやらせていたことを予めやっておくのだからクライアントに JavaScript を要求しないというわけだ。

RSS の日時のフォーマット

生成される RSS の日本語が実体参照になっているというのはまだ許せる。間違ってはいないからだ。 しかし lastBuildData 要素や pubDate 要素の値となる日時のフォーマットが間違っているのは困った。

この間違いについてはエントリ「 再び iBJ フォーラムの RSS を直して提供 」で書いたことがある。以下そのエントリから引用する。

RSS が最後に作成された日時を表す lastBuildDate 要素、item 要素が指しているものが公開された日時を表す pubDate 要素の値において、その時間帯(タイムゾーン)の指定が JST となっています。しかし 3 文字の記号で使用できるのはアメリカの時間帯のみで日本時間の場合は +0900 というように表さないとなりません。

仮名漢字変換が追いつかない

昨夜エントリを書いていて気付いたというか気付かされたのだが、エントリが長くなると仮名漢字変換への切り替えが遅延してキータイプが勝ってしまう。まるで初期の Mac OS X 10.0 のエディタみたいだ。

どういうことかというとこうだ。例えば「原因はこれだ」と書くために command-space でことえりを ON にして「 genninhakoreda」とタイプするとする。そうするとゆっくり「 genninhakoreda」と出力された後で「 げんいんはこれだ 」と表示される。しかもローマ字は確定した状態なのだ。

これはかなり苦痛だ。HTML を直接編集するモードでやればそうではないような気もする。

iBlog からのインポート

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 から読み込む際にエンコードは次のようにして判定されることがわかった。

  1. とりあえず IS0-8859-1 と仮定しておく。
  2. RSS がある Web サーバが指定する charset があればそれを用いる。

原因はこれだ。多くの 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 からエントリをインポートするには次のようにすればよい。

  1. 目的のブログの RSS のエントリ数を、既に存在するエントリ数以上に設定する。
  2. 目的のブログの RSS にはエントリの概要だけでなく本文も載せるように設定する。
  3. ローカルの公開ロケーションを作って、それに目的のブログを割り当てる。
  4. 一旦その状態で目的のブログをローカルへ 公開をする。
  5. エディタでローカルへ公開された RSS を開き XML 宣言の charset を Shift_JIS に変更する。
  6. エディタで開いている RSS を Shift_JIS で保存する。
  7. Thingamablog で保存した RSS をインポートする。

これで目的のブログの全エントリがインポートされるはずだ。画像などのメディアファイルといったエントリに添付されているファイルもダウンロードされて取り込まれるのかどうかとか、iBlog が大量のエントリを RSS にちゃんと載せることができるのかどうかというのは確認していない。

一つのエントリに複数のカテゴリ

最初のエントリのときに気付いたのだが、Thingamablog では一つのエントリに複数のカテゴリを割り当てることができる。ソーシャルブックマークで言うタグのような感じだ。

iBlog 2.0 ではそれを可能にするつもりだと iBlog の開発者 Sarat さんが述べていたとどこかで読んだ気もするのだが、とにかく iBlog 1.x にはそういう機能はない。ときどきエントリを書いていて欲しいなと思っていた機能だ。

ちょっと嬉しい。

RSS の item 要素の link

Thingamablog で生成された RSS では item 要素の link 要素の値がエントリの Permalink ではない。

iBlog ではエントリページの URL になっていて Permalink になっていたからそれが当たり前だと思っていた。Thingamablog では日付で構成されたアーカイブ(他にカテゴリで構成されたアーカイブもある)のページの中の当該のエントリへのリンク、つまり # 付きの URL になっている。

最初「これじゃ駄目じゃん」と思ったのだがよく考えるといいかもしれない。なぜなら、RSS で狙い撃ちでやってきてもその前後のエントリが目に留まるかもしれないからだ。読者側から見たらよけいなエントリをダウンロードさせるなという感じもする。一つ一つのエントリが長かったり重かったりする人は日付によるアーカイブの単位を一週間とか短めに設定した方がよいだろう。

HTML 4.01 らしい

Thingamablog がテンプレートタグを置き換えて生成するコードはどうやら HTML 4.01 らしい。

例えば Shift-enter で改段落ではなく改行をすることができるのだが、それに対応するのは <br> であって <br /> ではない。画像を付けたときも img 要素は /> で終わっていない。そのくせテンプレートは XHTML 風に meta 要素が /> で終わっていてちぐはぐだ。

一般ユーザとしてはテンプレートを HTML 風に改造することで対応するしかない。しかし、世のトレンドはもはや XHTML だろう。HTML だと br 要素や img 要素のような空要素は「その場閉じ 」をしないので XML パーサで読み取って再利用できない。あまり美しい文法ではないのだ。

XHTML を吐き出すようにするプラグインとか出ていないのだろうか? まだ Thingamablog をダウンロードしてこうして少しエントリを書いているだけなのでプラグイン群がどこから入手可能かも知らない。後で調べてみようと思う。

2005年10月17日

.Mac のための設定

設定事項については Thingamablog のヘルプなどにあるとおりだが、.Mac で使用する上でのコツについて書いておく。なおここで述べる設定事項は後から変更することができる。

それは次の三点である。

Base Path
FTP や SFTP サーバあるいはローカルファイルシステムにおけるブログの最上位階層のディレクトリを指定する。
Base URL
Base Path に対応する URL。
Transport Type
公開するときにファイルを転送するために使用するプロトコル。

Thingamablog 1.0.2 では Transport Type に FTP, SFTP およびローカルが利用できる。しかし .Mac の Web スペースがある iDisk には WebDAV でしかアクセスできない。そこで次のようにそれぞれを設定する。

Base Path
/Volumes/.Macアカウント/Sites/パス/
Base URL
http://homepage.mac.com/.Macアカウント/パス/
Transport Type
ローカル

前のエントリ「インストールと起動」で説明した起動用アプリケーションをそのとおりに作成して Thingamablog の起動すれば事前に iDisk がマウントされる。このため Base Path に指定したディレクトリはローカルのディレクトリと同じように扱えるようになっている。だから Transport Type がローカルで、Base Path は iDisk をマウントしたときのパスなのだ。この Automator によるアプリケーションを通して Thingamablog を起動すれば公開するためにいちいち iDisk をマウントしたり、ローカルのディスクに書き出されたものを rsync などを使用して同期する必要も無い。

ただし、オフラインのときはそのアプリケーションは使用できない。iDisk をマウントすることができないからだ。そういうときはインストールした thingamablog.jar をダブルクリックして起動すればよい。

インストールと起動

インストール

  1. Download Thingamablog から thingamablog-1.0.2.zip をダウンロードする。
  2. thingamablog-1.0.2.zip をダブルクリックして解凍する。
    thingamablog-1.0.2 フォルダができる。
  3. thingamablog-1.0.2 フォルダをアプリケーションフォルダに移動する。

起動

thingamablog-1.0.2 フォルダの thingamablog.jar をダブルクリックすればよいのだが、thingamablog.jar は Dock に入れることができず不便。そこで Automator を利用してアプリケーションを作成し、そのアプリケーションを Dock に入れることにする。

Automator で次のようにワークフローを作成する。

  1. Finder のアクション「指定されたサーバを取得」を置いて自分の iDisk の URL を指定する。
    自分のiDisk の URL とは http://idisk.mac.com/ .Macアカウント/
  2. Finder のアクション「サーバへ接続」を置く。
  3. Finder のアクション「指定された Finder 項目を取得」を置き [ファイル/フォルダ] をクリックして [前のアクションからの結果を無視する] を選択する。
  4. Finder のアクション「Finder 項目を開く 」を置く。

これをアプリケーションとして保存する。後で保守が可能なようにワークフローとしても保存しておくとよいだろう。こうして作成したアプリケーションを Dock に収めるとよい。