ApacheからTeraStationのファイルを公開

 前エントリでTeraStationにたまってるDivXファイルを、なんとかHTMLリンク一覧としてHTTP共有できると、DLNAとかより便利かも、ということに気付いたので、早速チャレンジしてみました。

■CIFSでマウントする

TeraStationをLinuxマシンでマウントするには、とりあえずSMB、FTP、ちょっとゴニョってNFSという選択肢があるわけですが、とりあえず手軽そうなSMBを試してみたところできない。調べてみると、CentOS5ではsmbfsやsmbmountの代わりにCIFSというあたらしいWindowsファイル共有プロトコルを使えば良いとわかりました。

mount -t cifs -o user=<ユーザ名>,password=<パスワード> //<TeraStation名/<共有名> /mnt/terastation/

って感じでOKでした。

あとは、このフォルダをApacheのドキュメントルート下に適当にシンボリックリンクして、BASIC認証をかけます。

ただ、これだけだと、リストは取得できるんですが、動画ファイルにアクセスするとエラーになってしまいます。ターミナルからcpなどでコピーはできるんですが、Apacheを経由するとダメ。

これは

EnableSendfile Off

で解決。パフォーマンス向上のための機能のようなので、当該ディレクトリのディレクティブ内に設定するのが良いでしょう。

■Apacheのインデックスリストをカスタマイズして利用

さて、これでアドレスでディレクトリ名を指定すれば、(そのフォルダにindex.htmlが無いので)Apacheが生成するインデックスリスト(ファイル一覧画面)が表示され、PS3からそれをクリックして再生できるのが確認できました。しかし2バイト文字が文字化けしています。ブラウザの設定でUTF-8にすれば正常に表示されるんですが、ページ遷移するたびにするのは面倒だし、それこそ実家向けには難しすぎます。なんとかインデックスリストの文字コードを指定する方法を模索して、

IndexOptions Charset=UTF-8

でいけることを突き止めました。これも当該ディレクトリ内だけで良いんでしょうけど、特に他で弊害もでなさそうだったので、グローバルに指定しておきました。これで、きちんと日本語ファイル名で表示でき、先の実験でダメだったPS3からの再生/DLもなぜか出来てしまいました。

ついでに、インデックスリストをカスタマイズするオプションを色々見つけたので、最終更新日付を非表示にする、.AVIファイルのdescriptionに「DivX/etc Video Files」と表示する、Thumb.dbを隠す、などカスタマイズ。外部スタイルシートも指定できました。

ざっとこんな感じ。

IndexOptions Charset=UTF-8
AddDescription "DivX/etc Video File" .avi

<Directory /xxxxx/xxxxx/video/>
  Options FollowSymLinks Indexes IncludesNOEXEC
  AllowOverride None
  IndexOptions SuppressLastModified SuppressHTMLPreamble HTMLTable
  IndexIgnore *.db *~
  IndexStyleSheet "video_list.css"
  EnableSendfile Off
</Directory>

PS3でDivXのプログレッシブダウンロード

PS3はファームウェア2.0から動画ファイルをダウンロードしながら再生する「プログレッシブダウンロード」に対応しました。基本的に、PlayStationStoreのMPEG4ファイル用と思ってたんですが、ふと思い立ってDivXなAVIファイルで実験。

できました!

適当なHTMLにリンク書いておけば、内蔵ブラウザでリンクを選択するだけで再生が始まります(PlayStationStoreのように再生するかどうかのボタンは出ない)。ローカルに保存することも可能。ただし、2バイト文字のファイル名はダメっぽいです。

PS3/40GBを購入した実家向けに、手軽に動画を見せる/渡す方法として地味に重宝しそうな予感。適当なポータル作っておいて、今度帰省した時にブックマーク登録してこよっと。

ウチのDivXファイル群はTeraStation上に保存してあるので、FTPかSMBでサーバーからマウントして、適当な半角英数ファイル名を生成するゲートウェイスクリプトを書いたら、帰省中の動画消化にも良いんじゃないかとか。

Yahoo! JAPANのOpenIDはMT4では使えない?

 MovableType4化でコメント認証がOpenIDに対応したはず、ということで、早速先日対応したYahoo! JAPANでIDを取得して動作確認してみたもののダメ。

 どうもYahoo!のOpenIDがセキュリティレベルの高いOpenID 2.0にしか対応していないせいっぽい。PlaceEngineのサイトでもYahoo!のOpenIDははじかれるみたいだし、現状では(日本のサイトでは特に)あまり使い道なさそうですね。

 MovableTypeのOpenIDモジュールを差し替えるワザもあるっぽいけど、そもそもOpenID使いが日本ではまだあんまりいなさそうなので、まだいっか、という気も。

 といあえず、↓のサインインボタンを押した時のデフォルトがOpenIDではなくTypeKeyにする方法はないものか。

MovableType3→4移行時のツボ~その2. コメントフォーム編

 前回に続いて、MT3→MT4のテンプレート更新の覚え書きです。今回は、コメントフォーム部分。ウチではフォームのテキスト欄が表示されず、見出しだけになる現象が発生しました。

 コメントに関係しそうなのは、テンプレートモジュールでは、「コメント」、「コメント入力フォーム」、「コメント詳細」。システムテンプレートでは「コメントプレビュー」、「コメント完了」の計5点のようです。MT3時代に作成したブログでは、テンプレートモジュールは3点とも存在せず、システムテンプレートはアリ、という状態でした。

 ついでにトラックバックもほぼ同様の作業なので一緒に処理してしまいます。

■テンプレートモジュールを作成

 この3点は「エントリ・アーカイブ」(MT4では「ブログ記事」)でインクルードされるモジュールです。「コメント」が他の2点をインクルードするようです。おそらくフォームが正しく表示されないのはこの部分の影響でしょう。元々この部分はたいしていじっていなかったはずなので、新モジュールをそっくり使ってしまいます。トラックバック関係は「トラックバック」のみのようです。

 計4点、新規に作っておいたテスト用のブログからコピペで作成します。

■新コメントモジュール利用する設定

 MTデフォルトではコメント欄は個別の「エントリー・アーカイブ」で使われているだけだと思うので、そこだけ修正すれば良いはず。「アーカイブ・テンプレート」→「エントリー・アーカイブ」テンプレート(名称は作成時期で多少違うと思います。MT2の頃だと英語だったり)を開き、コメントは、<MTIfCommentsAcrive>~</MTIfCommentsAcrive>、トラックバックは、<MTIfPingAcrive>~<MTIfPingAcrive>の部分をそれぞれ下記のように置き換えて下さい。

<$MTInclude module=”トラックバック”$>
<$MTInclude module=”コメント”$>

 更に、<body>タグに以下の属性を追加します。前回の検索フォーム対策をしてある場合は、「ヘッダー」テンプレートの中にあると思います。また、元々class属性がある場合は、残して置いた方が良いかも知れません。でないとスタイルシートが正しく適用されなくなります。

<body class=”<MTIf name=”body_class”><$MTGetVar name=”body_class”$> </MTIf><$MTGetVar name=”page_layout” default=”layout-wtt”$>”<MTIf name=”body_onload”> onload=”<$MTGetVar name=”body_onload”$>”</MTIf>>

 コメント、トラックバック部分がモジュールに追い出せたので、直接コードを書いてあった元のテンプレートに比べると、かなりスッキリしますね。もともと細かくいじる部分ではないので合理的です。

■JavaScriptテンプレートを作成

 さて、これで試しに適当なエントリを再構築してみると、無事コメント欄が正しく表示されるようになると思います。ただし、TypeKeyなどの認証サービスを利用するリンクが表示されません。これはJavaScriptファイルであるmt.jsが存在しないためのようです。

 「インデックステンプレート」を開くと、古いmt-site.jsというファイルに紐付いた「JavaScript」テンプレートがあるので、削除するなりして無効化し、やはりこれも新ブログからコピペします。「テンプレートの種類」は「JavaScript(javascript)」を選び、ファイル名は元あったmt-site.jsなど、現在のヘッダ部分で記述しているままを指定します。

(そういえば、この「テンプレートの種類」という項目、他のインデックステンプレートでも再設定しておく方が無難かも知れません。)

 以上で、コメント欄は正しく表示、動作するようになったはずです。MT4では最初、コメント欄は隠れており、「サインイン」か「匿名でコメント」というリンクをクリックするとそれに応じた動作をする、という仕様のようです。

■システムテンプレートの更新

 さて後は、「確認」ボタンを押した時のプレビュー画面を定義する「コメントプレビュー」(旧名は「Comment Preview Template」)と、コメント送信後の完了画面を定義する「コメント完了」の2点のシステムテンプレートを、やはり新ブログからコピペします。前者は旧名のテンプレートをクリックして中身を書き換えたら名称も自動的に更新されました。

 以上で、ブログの外観はほとんど変わらず、コメント周りが正しく機能するようになると思います。動作チェックの後、残りの個別エントリを全て再構築して作業完了です。

MovableType3→4移行時のツボ~その1. 検索フォーム編

 MovableType3.6のデータを4.1にコンバートしたら、一部機能が正常に機能しなくなりました。 大きくは検索でエラーが出る点とコメントフォームが正しく表示されない点です。

 あれこれいじってなんとか動くようになったんですが、ウチでホストしている他のブロガーの為に、外観、テンプレートを極力書き換えずに機能させる手順をまとめてみました。

 ドキュメント等を見ずに我流で編み出した方法なので、もっとスマートなやり方があるのかも知れません。というか従来のデザインにあまり名残が無いのであれば、いっそテンプレートをリセットしてMT4のものをベースに再構築した方が、後々シアワセになれるかも知れません。モジュール化、サイドバーへのウィジェット配置機能などせっかくのコンセプトが活かせるからです。実際、このブログは練習も兼ねてそうしてみましたが、かなり見通しがよくなった気がします。

■なぜ検索でエラーが出るのか?

 DBコンバートしただけの状態では「 検索結果の作成に失敗しました。」と出てしまうワケですが、この原因は、「システムテンプレート」→「検索結果」テンプレートの中で呼んでる(インクルードしている)「ヘッダー」、「ブログ記事の概要」、「フッター」という3つのテンプレートモジュールが存在しないからのようです。この3つを用意してやれば正常に機能するというワケです。

 「検索結果」テンプレートを開いた画面で、右サイドバーの「インクルードモジュール」という見出しの下に、各モジュールを新規作成するリンクがあるので、そこから作れば簡単です。

■「ヘッダー」

 文字通り<html><head>~</head>辺りのテンプレートです。MT4の標準テンプレートを見ると、<body>以降も共通となる部分は若干含んでいるようです。「メインページ」テンプレートからごっそりコピーするのが簡単でしょう。

 MT3の標準的な2カラムレイアウトのテンプレートをベースにしている場合、

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN”

から、<MTEntries>で記事データが始まる直前の、

<div id=”pagebody”>
<div id=”pagebody-inner” class=”pkg”>
<div id=”alpha”>
<div id=”alpha-inner” class=”pkg”>

あたりまででよさそうです。

■「フッター」

 同様にフッターも「メインページ」から最後の部分をコピペします。サイドバー部分もメインページ同様に表示されるようにするには、</MTEntries>直後からざくっと行きましょう。

■「ブログ記事の概要」(→別名で作成)

 さて、問題は検索に該当した記事の表示フォーマットを既定する部分です。一番簡単には、「メインページ」テンプレートから上記の「ヘッダー」、「フッター」にもってった部分の残り、つまり<MTEntries>~</MTEntries>の中身を流用する手がありますが、これだと本文が全て表示されてしまうので、ヒット数が増えた時に一覧性がよろしくありません(MT4標準ではそうなるようです)。

 そこでこの際、シンプルに日付入りのタイトルのリストになるようにしましょう、

<li class=”search-list-item”><$MTEntryDate format=”%Y.%m.%d”$>: <a href=”<$MTEntryLink$>”><$MTEntryTitle$></a></li>

です。

 「ブログ記事の概要」というテンプレート名はMT4のテンプレート群の中では重要なものなので、中身を大きく改変したものを重複する名前で作っておくと、将来MT4テンプレートを一括導入した時に問題になりそうなので、ここでは「タイトル一覧項目」という名前で作成しておきます。

■「検索結果」テンプレートの調整

 上記モジュールを呼び出すシステムテンプレート「検索結果」を調整します。元々

<$MTInclude module=”ブログ記事の概要” hide_counts=”1″$>

と書かれた行があるので、これのモジュール名を変えつつ、<ul>タグを追加します。下記のように置き換えて下さい。

<div class=”search-content”>
       <ul class=”search-list”>
              <$MTInclude module=”タイトル一覧項目” hide_counts=”1″$>
        </ul>
</div>

 ■スタイルシートの調整

 例えば、リストの文字が小さいな、という気がしたら、「インデックステンプレート」→「スタイルシート」テンプレートに

.search-list-item a {
   font-size:medium;
   margin-left:3px;
}

 などと調整しましょう。

 既にMT3環境がなく、検索結果画面のレイアウトが調べられないので、適当にでっちあげてしまいましたが、以上でとりあえず動くようにはもってけると思います。

 次回は、コメントフォームを動かすための最低ステップをまとめてみたいと思います。