Movabug 0.2

4.1以降に未対応です。手が回らないため、一時開発を停止しています。ご了承下さい。 先日公開したプラグイン開発援助プラグイン「Movabug」に、わずかながら修正と機能追加をしました。バージョン0.2として公開します。 blog.aklaswad.com: Movabug Movabug0.2.zip 変更点は次の通りです。 TheSchwartzを実行する「run jobs」モードを追加した 「run tasks」「force tasks」「run jobs」実行時にスプラッシュ画面にログが表示されるようにした cookieを利用して画面遷移時に「display ids」「display classes」の状態が維持されるようにした

August 29, 2007

Movabug

4.1以降に未対応です。手が回らないため、一時開発を停止しています。ご了承下さい。 プラグイン開発用を援助するプラグインです。transformer用の管理画面内のタグ情報の表示や、スケジュールタスクの実行などを行えます。 通常のブログ運用ではあまり役に立たないと思います。最新版のダウンロード Movabug0.2.zip 動作環境 このプラグインは、Movable Type 4.0 以降専用です。 インストール ダウンロードしたファイルを解凍したら、pluginsディレクトリの中のMovabug ディレクトリを、お使いの MovableTypeの「plugins」ディレクトリにアップロードしてください。 機能 現在のところ、基本機能にはすべて、画面上部の「movabug」メニューバーからアクセスします。 display ids 管理画面のテンプレートで使用されているid属性を実際の管理画面上に表示します。(MovableTypeのテンプレートエンジンが利用する属性で、実際に出力されるHTMLのid属性とは異なります。)transformerプラグインの作成などに役に立つかと思います。 クリックする毎に非表示、その場に表示(absolute)、並べて表示(relative)3つの状態を順に遷移します。「position: absolute」としてオーバーレイっぽく表示させると、複数の要素が重なってしまって見えない場合があったので、とりあえずこんなになりました。 display classes 管理画面のテンプレートで使用されているclass属性を実際の管理画面上に表示します。 クリックする毎に非表示、その場に表示(absolute)、並べて表示(relative)3つの状態を順に遷移します。 現在のテンプレートではあまり多くは使われていないようです。ダッシュボードウィジェットやインフォメーション表示などで確認できますね。 run tasks クリックするとスケジュールタスクを実行します。 force tasks スケジュールタスクは、負荷軽減のため?それぞれのタスクに実行間隔が設けられています。例えば日時指定投稿では、前回の実行から1分以内に再度実行しても、日時指定の状態となっているブログ記事があるか確認すらせずに終了します。(ちなみに、日時指定投稿の実行間隔はmt-config.cgiにFuturePostFrequencyというディレクティブを書くと変更できるっぽいです。未確認。) これが古いスパムコメントの削除等のタスクになると、12時間ごとにしか動きません。これではテストの度に徹夜作業になってしまいますね。 force tasksでは、MT::Sessionに記録されているスケジュールタスク関連のレコードをいったん削除してからスケジュールタスクを実行することで、強制的にスケジュールタスクを実行させています。 run jobs TheSchwartzを利用したジョブキューを実行します。(0.2から) チェンジログ 0.2 (20070828) Movabug0.2.zip TheSchwartzを実行する「run jobs」モードを追加した 「run tasks」「force tasks」「run jobs」実行時にスプラッシュ画面にログが表示されるようにした cookieを利用して画面遷移時に「display ids」「display classes」の状態が維持されるようにした 0.1 (20070826) Movabug0.1.zip 最初の公開

August 26, 2007

プラグインの作成を手助けするプラグイン「Movabug」開発中

4.1以降に未対応です。手が回らないため、一時開発を停止しています。ご了承下さい。 粗製濫造と言われかねないですね。また新しいプラグインです。今回は超マニアック、プラグインを自分で作る人以外は何のことだか分からない代物です。その名も「Movabug」! Movabug Movabug0.1.zip 昨日のMTHack-a-thonで少し手をつけていたのですが、とりあえず動くようになったので公開してみます。 将来的に、もういくつか使いやすい機能を付け加えられたら、と考えてます。気負った名前を付けてみたものの、現在のところ、以下の二つの機能しかありません。すべて上部メニューからアクセスするようになっています。 transformerで利用可能な、管理画面のテンプレートに含まれるid,classを実際の管理画面に表示する スケジュールタスクを管理画面から実行する スケジュールタスクの実行については、事前にタスクのセッションレコードを削除することで、設定されているintervalを無視して強制的に実行させることが出来るようになっています。...

August 26, 2007

Hack-a-thon に突撃してきた

SixApartのMT4Hack-a-thonに突撃してきたyo! いきなりブルースクリーンが連発! ご迷惑をおかけしてしまいました。。。 おおはまりの一日! 何を作ろうとしても嵌りました。成果物なし。 発表会で発表せず! 成果も無かったわけですが、ビビリ入ったのが大きい。 藤本さんのカテゴリソートプラグインは凄く使いやすそうだった。 飲み会まで行った! 名刺は必要だと思った! 変な手書きのメモ渡された方すみません。 iPhone触った! 酔っ払って変なことを口走ったりしてないか心配。 また機会があったら是非参加したいですー。...

August 26, 2007

スタイルの変更とStyleCatcher2.0についての覚え書き

ブログの見た目を変えてみました。職場で「今風のデザインにした。影とか。」と主張したところ「古臭い。なんかモノクロだし。」と笑われました。ぎゃーす。 土日にチョコチョコと作業していたのですが・・・、いやあ、なんかいいですね。こういうのって。なんかいいよ。WindowsPCをはじめて手に入れた頃の、毎日デスクトップの壁紙とスクリーンセーバーを変えたり、winampのスキン選びで5時間くらい悩んだりした日々を思い出しました。 自分はcssとかは全く不勉強なので、どこかおかしいところがあるかもしれません。IE6では透過画像周りでぼろぼろになっているかと思われますが、面倒くさいので何もしませんので近日中に修正します。 今回は、MT4での新StyleCatcherの勉強がてら、ボソボソと調べながら作成しました。 気に入ったという奇特なお方は、ご自由にお使いください。 実はStyleCatcherって、cssファイルを直接指定して取ってくることが可能となっています。必ずしもリポジトリとして公開されている必要はないんですね。 例えば、今回作成したcssファイルのURLは以下になります。 http://blog.aklaswad.com/cgi-bin/blog/mt-static/support/themes/black-silver/black-silver.css MT4のStyleCatcherで「カテゴリー」の右の緑十文字をクリックして、上記cssファイルのURLを入れれば、スタイルを取得できるはずです。 cssを公開してStyleCatcherで取得可能にする方法 StyleCatcher2.0に対応したスタイルの作成メモです。 StyleCatcherにきちんと対応するためには、MovableType のテンプレートやbase_theme.cssにあわせてcssが記述してあることに加え、以下の条件を満たしておく必要があります。 画像ファイルをディレクトリにまとめない StyleCatcherは、css内で読み込む画像ファイルについても自動的に取得しますが、これは画像ファイルがcssファイルと同じディレクトリに置かれていて、かつ、画像のurl指定がディレクトリ名を含まない、ファイル名だけの相対パスとなっている場合だけです。 「url(hoge.jpg)」はOK。「url(images/moge.jpg)」はNG。 画像用にディレクトリを分けたりしたいところですが、そうするとStyleCatcherは対応してくれません。ご注意を。 サムネイル画像を用意する あらかじめサムネイル用の画像を用意しておくことで、取得側のプレビュー画面に表示させる事ができます。サムネイルは、大小それぞれの画像を「thumbnail.gif」「thumbnail-large.gif」という名前でcssと同じディレクトリに配置することでStyleCatcherに検出されます。 MT4のStyleCatcherでは、以下のサイズでサムネイルを表示するようです(目測値)。 ファイルヨコタテ thumbnail.gif12090 thumbnail-large.gif278209 MT3.xでのサイズとちょっと違ってますね。このサイズでサムネイルを用意しておくと良いかもしれません。Voxとの絡みもあるかもしれないので、正確なところは、何らかのアナウンスが出るのを待ちたいと思います。とりあえず上のサイズの画像で、読み込んでくれないということは無いみたいです。 以前は、サムネイルが無いスタイルも取得できたような記憶があるのですが、現在のStyleCatcher2.0ではサムネイルが存在しない場合、スタイルの取得自体が出来なくなるようです。 メタデータを記述する cssのコメントとして、メタ情報を埋め込むことが出来ます。キーと値をコロンで区切って、一行に一つずつ記述します。 以下のような感じです。 /* name: Black Silver designer: Aklaswad designer_url: http://blog.aklaswad.com/ layouts: layout-wt, layout-tw */ ソースコードを見た感じ、以下のようなメタデータが利用できるようです。どこで使われているのか分からないものもありますね。 nameスタイルの名前 descriptionスタイルの説明? designerデザイナーの名前 designer_urlデザイナーのサイトのurl author作者の名前 author_url作者のサイトのurl author_affiliation作者の所属 layouts利用可能なレイアウト 新要素のlayoutsをメタデータに記述する StyleCatcher2.0では、layoutsメタデータで利用可能なレイアウトを指定できます。 以下の四つのレイアウトが指定できるようです。 layout-wtt layout-twt layout-wt layout-tw 上記をカンマ区切りでlayoutsメタデータに記述しておくことで、スタイルの適用時に選択が可能となるようです。逆に一部のレイアウトには対応していないスタイルを作った場合、そのレイアウトを記述しなければ、スタイルの適用時に選択ができないようになります。 とりあえずココまで調べました。またそのうち気づいたことがあれば書くかも知れません。おやすみなさい。

August 23, 2007

TaggingHelper

ブログ記事の編集画面に過去に使われたタグを候補として表示し、選択することでタグを指定できるプラグインです。要するにはてなブックマーク式のあれです。 MT4.2対応暫定版 TaggingHelper For MT4.2 - blog.aklaswad.comインストール 解凍して出てきた中から、「plugins/TaggingHelper」ディレクトリを、お使いのMTのpluginsディレクトリ内にアップロードしてください。 動作環境 MT3.3とMT4のどちらでも動作します。 当たり前ですが、MT3.2以前ではMTにタグ機能が無いため、動きません。 動作検証は基本的にFirefox2.0でしか行っていません。 IE6でも最低限の動作は確認しましたが、それ以外のブラウザでは確認してません。 Firefox 2.0, Firefox 3.0, IE7 で動作確認を行っています。 設定 特になし。 最新版のダウンロード TaggingHelper.0.3.zip 既知の問題点 シングルクオートを含むタグをクリックするとjavascriptエラーが発生して動作しない(Trackback(774)さんにご報告いただきました)0.3で修正しました。 Safari で「過去のタグ」リンクをクリックしても、タグクラウドが生成されない(Hiromi さんにご報告いただきました) チェンジログ 0.3 (20080529) タグ一覧を、使われている頻度順で表示するモードを追加した。 本文に含まれる文言のタグを抽出して表示するモードを追加した。 シングルクオートを含むタグが扱えない問題に対応した。指摘してくれたTrackback(774)さんありがとうございます。 タグの途中で改行してしまう問題に対応した。 TaggingHelper.0.3.zip 0.21 (20070822) IEでクリックごとにダイアログが表示されていた問題を修正 見た目を少し変更 TaggingHelper0.21.zip 0.2 (20070822) 3.3のtransformerに対応 TaggingHelper0.2.zip 0.1 (20070822) 最初のリリース TaggingHelper0.1.zip

August 22, 2007

プラグインなら何でもよかった: タグ入力支援プラグイン

2chを見てむしゃくしゃして作った。プラグインなら何でもよかった。後悔はしていない。 TaggingHelper0.1.zip しまった、2chのスレの人はMT3.35が指定だった。。。 これはMT4でしか動かないです。明日MT3.35に対応させる。今は反省している。 とりあえず3.3でも動くようにした。TaggingHelper0.2.zip 説明ページを作った

August 22, 2007

MT4: ちょっとしたレイアウト技を思いついた

MT4のStyleCatcherでは、カラム数などのレイアウトを指定できるようになっています。テンプレートを編集せずにレイアウトを変更することが出来、非常に楽でよいです。 しかし、レイアウトが簡単に変更できる反面、メインページだけ3カラム、他は2カラム、といった使い分けが出来なくなっています。 そこで、StyleCatcherからレイアウトを変更でき、しかも必要なテンプレートでは別個にレイアウトを指定できるようなカスタマイズを行ってみました。まず、"ヘッダー”テンプレートの編集を行います。ヘッダーはテンプレートモジュールの一覧の中にあります。 7行目、今ちょっと話題のこの行 <$MTInclude identifier="styles" trim_to="0"$> この直後に、以下の内容を追加します。 <mt:if name="page_layout_override"> <mt:setvar name="page_layout" value="$page_layout_override"> </mt:if> 仕込みは以上です。早速メインページのレイアウトを変更してみます。 メインページのテンプレート編集画面を開き、最初の方で延々続くMTSetVarの嵐の中に、以下の行を追加します。 <mt:setvar name="page_layout_override" value="layout-wtt"> 追記する場所は、<$MTInclude module="ヘッダー"$>の行より前ならどこでもOKだと思います。 layout-wttの部分が、レイアウトの指定になります。指定可能なレイアウトは以下の通りです。 指定子レイアウト layout-wtt3カラム大小小 layout-twt3カラム小大小 layout-tw2カラム小大 layout-wt2カラム大小 この指定は、メインページ、アーカイブインデックスと、各アーカイブテンプレートで利用できます。 サイドバーをまったく使わない設定(1カラム)としたい場合、<MTSetVar name="sidebar" value="1">という指定をvalue="0"とすればサイドバーが消えます。レイアウトによっては妙に左に寄ったりしてしまいますので、layout-twtを指定しておきましょう。 今回、実験としてとりあえずこのブログのメインページを3カラム大小小、アーカイブインデックスを3カラム小大小、ブログ記事アーカイブはサイドバー無し、月別アーカイブページは2カラム大小、としてみました。 でも、自分でぶち上げておいてなんですが、自分は全ページ同じレイアウトのほうが好きなので多分3日くらいで元に戻します。。。 終わりです。 追記: レイアウトを戻しました。(20070820)

August 13, 2007

About

blog.aklaswad.comは、aklaswadのパーソナルなウェブサイトです。 About me 1975年生まれ。 のんべんだらりとした日々を過ごしていたところ、ひょんな事からMovable Typeに出会う。Perl、JavaScriptなど周辺技術を独学で学ぶ。 2008年Six Apart入社。MT5、MT5.1のコア開発メンバーとしてエンジニアリングを担当。 MT2012年、Six Apartを退社し、Orinoco Peatixにjoin。 ハンドルネームは本名をもじったもの。当時良く聞いていたAphex TwinやAutechreなどの曲名の影響で、発音できないような綴りがカッコイイと思ったものの、人に「読めない」「覚えられない」と言われ困っています。「エーケーナントカ」と読んでください。 Find me elsewhere

August 12, 2007

FaviconManager2.0をリリースします

以前ベータ版として公開した、FaviconManagerプラグインのMT4対応版です。 blog.aklaswad.com: Favicon Manager やはり自分の方針として、MT4の機能をフルに活用したかったので(といってもたいしたことはしてませんが)、MT4専用となります。MT3.35以前のバージョンでは使えません。 今回のバージョンアップでは、ベータ版に比べて以下の改善を行っています。 ダイナミックパブリッシング用のphpファイルをMT4のアーキテクチャにあわせてplugins以下に移動した ダイナミックパブリッシングで、必要の無いファイルに対して置換を行っていた問題を修正した ローカライズを少し...

August 12, 2007

Favicon Manager

FaviconManager を利用すると、非常に簡単な手順でブログにFaviconを追加できます。テンプレートをカスタマイズする必要はありません。用意したFavicon画像のURLを、管理画面から貼り付けるだけですぐにブログにFaviconを設定できます。ダウンロード FaviconManager2.01.zip 動作環境 このプラグインは、Movable Type 4.0 以降専用です。 インストール ダウンロードしたファイルを解凍したら、pluginsディレクトリの中のFaviconManager/ ディレクトリを、お使いの MovableTypeの「plugins」ディレクトリにアップロードしてください。 設定方法 ブログにFaviconを設定する ブログセレクタ(管理画面左上のあれ)から、設定したいブログを選択する 設定 > プラグインをクリックしてプラグインの設定画面を開く FaviconManagerの設定タブを開く Favicon画像ファイルのURLアドレスか、ファイルのID(後述)をblog favicon urlの欄に入力する 保存をクリックし、ブログを再構築する 管理画面にFaviconを設定する 殆どの手順は、上の「ブログにFaviconを設定する」と同じです。最初のブログセレクタでシステムメニューを選択するか、画面右上からシステムメニュー > プラグインと進んで、システムレベルで同様の作業を行ってください。管理画面のFaviconについては、再構築は必要ありません。 asset ID MT4のファイルアップロード機能を利用してアップロードした画像をFaviconに利用する場合、URLの代わりにその画像ファイルのAsset IDを以下のように指定できます。 asset:42 Asset IDの調べ方は、今のところちょっとよい方法が思い浮かばないので、宿題とさせてください。 チェンジログ 2.01 (20071208) URLが未設定のブログの再構築で警告が出ていた問題を修正 FaviconManager2.01.zip 2.0 (20070812) 最初のリリース faviconmanager_2_0.zip

August 12, 2007

CustomEditorButton

MT4に対応したCustomEditorButton2を公開しました! 数行のjavascriptを記述するだけで、エントリー画面のボタンを自作できるプラグインです。 作成から利用までの流れは、動作イメージのムービーをご覧ください。 動作環境 Movable Type 3.3 専用のプラグインです。他のバージョンでは動作しません。 インストール ファイルをダウンロード、解凍したら、お使いのMovable Typeのディレクトリに上書きする形でアップロードしてください。「mt-static」を移動している場合や、上書きが不安な場合は、以下の2箇所にファイルをアップロードしてください。 解凍したディレクトリの「plugins/CustomEditorButton」を、お使いのMovable Typeの「plugins」ディレクトリに解凍したディレクトリの「mt-static/plugins/CustomEditorButton」を、お使いのMovable Typeの「mt-static/plugins」ディレクトリに ボタンの作成 新規にボタンを追加する場合、以下の項目を設定します。 name: ボタンの名前です。 表示文字: ボタンの表示に使用される文字を指定します。ボタンの表示用の画像が設定されている場合は、この項目は使用されません。画像へのURL: ボタンのイメージに画像を使用する場合、アップロードした画像のurlをここに指定してください。現在の仕様では、ボタン外側の枠は自動的に提供されます。ボタンの中身だけの画像を用意してください。 説明: ボタンの説明を入力します。 コード: 後述のように、ボタンの動作をjavascriptで記述してください。 コード javascriptでボタンの動作を定義します。 ここに書かれたjavascriptのコードは、関数の中に自動的に展開されるので、必要な動作の内容だけを記述するだけですみます。 現在の仕様では、エディター画面で範囲選択がされている場合にのみ、選択範囲が「str」という変数に代入されて、このコードが実行されます。 str変数に処理結果を代入することで、選択範囲に処理が反映されます。 例えば、選択範囲を「div」タグで囲む場合は、以下の一行をコード欄に入力します。 str = '<div>' + str + '</div>'; なお、別途宣言済みの変数「txt」に値を代入すると、textareaの全体をtxtで置き換えます。 個人用の設定 各投稿者は、システムにインストールされているボタンの中から、好きなものを選択して使用できます。 画面の右上のログアウトの隣に、「My Button」メニューが追加されていますので、クリックして個人のボタン設定画面にすすんでください。 画面上段が、現在利用する設定となっているボタンの一覧です。利用したいボタンが下段にある場合、ドラッグ&ドロップで上段に放り込んでください。並び順もそのまま適用されます。 最新版のダウンロード CustomEditorButton 0.23 CustomEditorButton_20070227.tar.gz CustomEditorButton_20070227.zip

August 11, 2007

MT4

...

August 9, 2007

MovableTypeプラグインのコードを書く準備を40秒で済ませる

Movable Type のプラグイン作りはそれはそれは楽しいのです。 しかし、作り始める時には中々腰が上がらないもの。 ディレクトリ作ってL10Nの雛形をコピペして。svnにimportしたらテスト用にMTインストールしてプラグインディレクトリに突っ込んで。 そうです。自分のコードを書き始めるその前の準備が面倒くさいんです。 そんなところに現れた救世主こそ、われらがCheebowさん作、MTPlugin-Starterスクリプトです。 ヒビノアワ: MTプラグインを簡単に作る方法 MTプラグインの雛形を作るスクリプト MTPlugin-Starter (エムロジック放課後プロジェクト) これは素晴らしいです。雛形があっという間に出来るので、いきなりコードを書き始められます。This is good! さて、残る大きな手間は、テスト用のMovable Type環境の用意と、作成したプラグインのテスト環境へのインストールです。ココの作業を簡略化できれば、もう怖いもの無しではないでしょうか。そこで、ちょっと工夫してみました。最終的な目標は、次の通りです。 Movable Typeのアプリのディレクトリにプラグインをインストールする手間を省きたい svnでのバージョン管理を容易にしたい この二つは表裏一体ですね。折角MTPlugin-Starterを使ってプラグインの雛形をさくさく作ったとしても、動作確認をするためにいったんsvn commitしてからテスト環境のMTディレクトリにexportして・・・などとやっていたのでは能率が悪いです。逆にプラグインの作業ディレクトリにMTのパッケージをまんま展開する方法も考えられますが、今度はsvn addしたりするのが面倒になりますし、結局MTを一つ新しくインストールしているわけですから、それだけでも結構な手間がかかります。 プラグインを読み込めるようにする つまり、プラグインのパッケージを展開したままの状態で、既存のMTがそのプラグインを認識すればよいわけです。 これを実現するために、mt-config.cgiに以下のように追記してみます。 PluginPath /home/melody/public_html/cgi-bin/mtdev/mt/plugins PluginPath /home/melody/public_html/cgi-bin/mtdev/MyPlugin/plugins/ 上の例では、ユーザー「melody」が自分のホームディレクトリ以下のpublic_html/cgi-bin内に「mtdev」ディレクトリを作り、その中で作業を行おうとしていることを想定しています。以下、この「mtdev」ディレクトリを作業の中心にします。 mtdev/mtがMTのアプリのインストールディレクトリで、MyPluginディレクトリがプラグインのパッケージです。 この状態でmtdev/mt/mt-config.cgiに上の二行を追加すると、なんと、mtのアプリにプラグインを突っ込まなくてもプラグインを認識してくれます。既存のプラグインもきちんと読み込みます。ちなみに下の行だけだと既存のプラグインが読み込まれなくなってしまいますのでご注意ください。 mt-staticも実行時にマージされるようにする 話はこれでは終わりません。プラグインのパッケージには、plugins(主にPerlで書かれたプラグインのコア部分がはいってます)ディレクトリの他にも、様々なディレクトリが含まれています(無い場合もある)。 「mt-static」や「php」等ですね。 「mt-static」ディレクトリには、プラグインが使用する画像やcssなどの静的ファイルが入っています。実際にプラグインをインストールする際には、「MyPlugin/mt-static/plugins/MyPlugin」というディレクトリを、mtの同名のディレクトリにコピーすれば動くよ、という意味で、pluginsディレクトリの外に置かれています。(という慣習になっています。) では早速こいつも実際にインストールはせずに利用可能にしてみましょう。 とりあえずmt-config.cgiにプラグインのmt-staticディレクトリを利用するように書いてみます。 StaticWebPath http://example.com/cgi-bin/mtdev/MyPlugin/mt-static/ しかし、これだけでは駄目です。これではMTの管理画面が普段読んでいるcssやらjavascriptにアクセスできなくなります。StaticWebPathの性質上、複数指定することもできません。 mt-staticディレクトリの中身は普通にユーザーがブラウザから閲覧する際にアクセスが行われるので、apacheの設定で何とかします。apacheの黒魔術ことmod_rewriteを利用します。 <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^MyPlugin/mt-static/(.*)$ /~melody/cgi-bin/mtdev/mt-static/$1 [L,QSA] </IfModule> mtdevディレクトリに.htaccessを作成し、上記の内容を仕込みます。これで、プラグインのmt-staticにアクセスしてファイルが無かった場合には、apacheが自動的に本来のmt-staticディレクトリに探しに行ってくれます。(mt-staticディレクトリは一階層上に移動してます。) mt-config.cgiが自動的に切り替わるようにする まだまだ終わりません。mt-config.cgiにプラグイン固有の情報が入ってしまったことで、新しいプラグインを作成するときには、mt-confg.cgiを書き換えなくてはならなくなってしまいました。新規プラグインの作成時にmt-config.cgiを修正するだけなら構わないのですが、以前のプラグインの動作を確認するような場合に毎回書き換える必要があるとなると、ちょっと、いや、かなり嫌ですね。 そこで、各プラグイン毎に一つずつのmt-config.cgiを用意して、動作確認をしたいプラグインに応じて自動的に、MTが読み込むmt-config.cgiが切り替わるようにします。 MTが構成ファイルとして読み込むファイルは、デフォルトではMTディレクトリの「mt-config.cgi」ファイルとなっていますが、実はシステムの環境変数に「MT_CONFIG」として指定することで変更が可能です。 再びapacheの十徳ナイフことmod_rewriteの出番です。mod_setenvifもあわせて利用します。 <IfModule mod_rewrite.c> RewriteRule ^x/([^/]+?)/(.*)$ /~melody/cgi-bin/mtdev/mt/$2 [L,QSA,E=MT_CONFIG:$1-config....

August 6, 2007

MT4Beta : Beta7 にアップグレードした。

いやあ、StyleCatcherが本格的に動くと、えらく印象が変わりますね。 Vox由来と思われるテーマが同梱されていて、色々とテーマをとっかえひっかえすることが楽しめました。 詳しい仕組みはまだ見ていませんが、レイアウト(2カラム,3カラム、サイドバーは右、いや左、など)まで半径2クリックで変更できるようになっています。 ということでデザインコロコロ変えてます。すみません。...

July 19, 2007

サーバーを引っ越してみた

xreaのやや古めのサーバーから、新しいサーバーに引っ越した。 引越しのお目当てはsvn。xreaの新しいサーバーではsvnが利用可能なので、色々な作業が非常に楽になります。 リポジトリの公開が出来るかは微妙ですが、外部からのexportができるだけでもかなり嬉しいですね。 今回行った作業の手順 新しいサーバーを確保する(ValueDomainでドメインを取得している場合、取得しているドメインの数だけXreaに無料サーバースペースを利用できる。3クリック程度で申請、一時間弱で利用可能になる。) 確保したサーバーにMTをインストール、コピーしたsqliteのデータベースを読ませることでマルッと移植。 でもこれだけでは画像などのデータは移植できないので、ブログディレクトリも移植。tarで固めてwget。楽。 いったん新しい環境に合わせてmt-config.cgiを修正し動作確認。問題なす。 mt-config.cgiを前のものに戻す。ディレクトリ構成は変えない予定。 ValueDomainでDNSの設定を変更。blog.aklaswad.comドメインのAレコードを新しいサーバーに向ける。 DNSレコードが浸透するまでコーヒー。 新しいサーバーのXREAのコントロールパネルから、「ドメインウェブ」の設定(名前ベースのVirtualHost設定)をする。 動作確認して終わり。 手順の8,では、名前がそのサーバーに対して解決できるまでは設定できない。エラーメッセージが小さいので、最初何故設定が反映されないのか分からなかったです。 よそから移動してくる場合、「強制」設定を使えばよかったのですね。 またはdefaultでメンテナンス画面が出るようにするか。...

July 14, 2007

MT4Beta : DashboardWidgetを作ってみた。はてブの新着を表示するよ。

このプラグインは、MT4.0での新機能のサンプルとして作成したものです。機能/性能的に実用に耐えるものではありません。あらかじめご了承下さい。 mt4をインストールして、一番最初に目に飛び込んでくる新機能といえば、ダッシュボード上に並んだウィジェットではないでしょうか。 これももちろんプラグインで追加出来ます。出来るはずです。作りました。作ってみました。 HatenaBookmarkWidget0.1.zip 今回の題材は、はてなブックマークでの、該当のブログ全体での被ブックマークを、タグやコメントも含めて最新20件(かな?)管理画面のダッシュボードにウィジェットとして表示するプラグインです。なんだかはてブのプラグインばかり作っているような気もしますが、気のせいでしょう。 やっぱり肝はレジストリでしょうか。諸情報をレジストリに追加することで動作します。 sub init_registry { my $plugin = shift; $plugin->registry({ applications => { 'cms' => { widgets => { 'HatenaBookmark' => { label => 'HatenaBookmark', template => 'tmpl/widget.tmpl', handler => \&_widget_handler, set => 'sidebar', singular => 1, condition => sub { my ($page, $scope) = @_; return $page eq 'dashboard' && $scope !~ /system/; }, }, }, }, }, }); } 大体、見たままで分かるかと思います。 setは、「main」「sidebar」が指定できるようです。画面の右側に表示するか左側に表示するか、ですね。 singularは、複数同時に表示可能とするか否か、です。 conditionには、現在のページでwidgetを利用可能とするかを判定するサブルーチンのリファレンスを指定します。サブルーチンは、引数として与えられた条件を元に、現在の画面でwidgetを表示するか否か、をブール値で返却します。...

July 11, 2007

FaviconManager2 : FaviconManagerをMT4に対応させたよ

FaviconManager2.0b1.zip 以前のFaviconManagerプラグインとは別設計となり、互換性がありません。MT4beta4でのみ動作確認を行っております。ご注意ください。 また、(基本的にMT4が正式リリースされるまでは)ベータ版とさせていただきます。 MT4が正式にリリースされてから、再度調整や機能追加などを行い、リリースする予定です。 大きな違いは以下の点です。 Change Log テンプレートを書き換える必要が無くなった 以前のバージョンでは事前にテンプレートを書き換える処理を実行する必要がありましたが、その必要がなくなりました。 プラグインが有効な状態で再構築するだけで、自動的にHTMLファイルにfaviconへのリンクが追加されます。 プラグインをアンインストールした場合にも、テンプレートにゴミが残ったりしません。 MTのダイナミックパブリッシングに対応した MT4のassets機能に対応した urlの代わりに、「asset:N」(Nはassetのid)と指定することで、assetから画像を引っ張ってきます。ただ、assetのidをサクっと確認することが出来ないんですよね。。。 管理画面上で一覧表示して選択するように出来ればよいのですが、現在のところ手が回ってませんすみません。 Tech Memo 管理画面へのリンクタグの追加部分では、ちょっと面白いtransformerを使っています。 管理画面のHTMLヘッダー部分はheaderテンプレートで記述されているのですが、この中で順不同で構わないlinkタグなどは、一度「html_head」変数に格納されてから出力されます。 さらに、「mtsetvarblock」タグ部分で「prepend」というアトリビュートが指定されていて、処理時点ですでに変数に値が格納されている場合には、上書きせずに、既存の内容に続けて追記するようになっています。 <mt:setvarblock name="html_head" prepend="1"> ですから、HTMLのヘッダー部分にlinkタグなどを追加したい場合、この「html_head」変数に追加したい内容を入れてあげるだけで、自動的にMTがマージしてくれる、というわけです。 今回は、template_sourceコールバックをフックして、setvarblockタグを含むテンプレートの断片を、直接headerテンプレートの先頭に追加してみました。 MT->add_callback('MT::App::CMS::template_source.header', 9, $plugin, \&_add_cmsfavicon); sub _add_cmsfavicon { my ($eh, $app, $tmpl_ref) = @_; my $url = $plugin->get_favicon_url; my $add = <<"EOT"; <mt:setvarblock name="html_head" prepend="1"> <link rel="shortcut icon" href="$url" /> </mt:setvarblock> EOT $$tmpl_ref = $add . $$tmpl_ref; } これだけで、管理画面のHTMLヘッダ部分に任意の内容を追加できます。mt:varへの値の設定方法については、もっと上手いやり方もあると思います。...

July 9, 2007

MT4Beta : Transformer プラグインを作ってみた速報

7月25日追記: この記事中のコードだと現在のバージョンでは動かないようです。コメントでご指摘いただきました。ありがとうございます。 MT4での新しいtransformerに挑戦してみました。 DOMライクなインターフェイスが提供され、管理画面の特定の位置にコードを挿入することが非常に容易になりました。 こんな感じのコードで動きます。 package MT::Plugin::TransformerSample; use strict; use base qw( MT::Plugin ); our $VERSION = '1.0'; my $plugin = MT::Plugin::TransformerSample->new({ name => 'TransformerSample', }); MT->add_plugin($plugin); MT->add_callback('MT::App::CMS::template_param.edit_entry', 9, $plugin, \¶m_transformer); sub param_transformer { my ($eh, $app, $param, $tmpl) = @_; die 'something wrong...' unless UNIVERSAL::isa($tmpl, 'MT::Template'); my $host_node = $tmpl->getElementById('useful-links') or die 'cannot get useful-links block'; my $node = $tmpl->createElement( 'TEXT', '<em>hello <b>MT4</b> transformer?</em>' ); $tmpl->insertBefore($host_node, $node) or die 'failed to insertBefore....

July 5, 2007

GPP

そろそろ静的生成と動的生成ついてひとこと言っとくか。 (Junnama Online (Mirror))で、ページの再構築を、ページの最初の閲覧時まで遅延するプラグインが公開されています。素晴らしいですね。 で、ネーミングを募集されるそうなので考えてみた。 一番乗りするものの待ち時間が一番長いのは自然の摂理。だがそれが良い。 "Greg Packer's Publishing" が良いと思います! 参考: iPhone行列リポート:先頭は「iLoser」 - Engadget Japanese

July 4, 2007

tracのbrowse sourceでphpファイルの内容を表示させる

tracで自分のコードを確認していて気づいたが、phpファイルがブラウズ出来ない。ダウンロードしますかとか言われる。普段phpなんて書かないから、今まで気づかなかった。 コードが表示されるはずの場所には以下の一文が。 got a Dynamic php code. そうだよphpだよいいから表示しろよ。と憤っても仕方ないので、対応してみた。TracFaq - The Trac Project - Trac 本家のFAQページにきちんと書いてあった。 まず、スタンドアローンのphpを入れるらしい。 $ sudo aptitude install php5-cli 最初どれを入れればよいのか分からなかったが、これらしい。 それからtrac.iniにphpのパスを書く。書かなくても動いた気がしたけど、一応書いておく。 [mimeviewer] enscript_path = enscript php_path = /usr/bin/php おお、無事にphpファイルの中身が表示された上に、色までつきやがった。いわゆるシンタックスハイライトってやつだ。 どうやら隣のenscriptというやつも設定してやれば、同様に他の種類のファイルもシンタックスハイライターしてくれるっぽいので、ついでにインストールしてやる。 $ sudo aptitude install enscript これも一応パスを書く。 [mimeviewer] enscript_path = /usr/bin/enscript php_path = /usr/bin/php...

July 3, 2007

TimeType 0.3

TimeType0.3.zip そこはかとなくアップデート。 自動投稿のエントリーの諸設定を、特定のエントリーの設定のクローンとして設定できるようにしてみた。設定のクローン元となる任意のエントリーのentry_idを、プラグインの設定画面から指定してください。カテゴリー、公開設定、改行設定、キーワード、コメントの許可、トラックバックの許可、の設定内容がクローン元エントリーからコピーされて、投稿されます。 メモ中のhttpから始まる文字列にリンクが張られるようにした ブックマークにコメントをつけられるようにした。Timelogのブックマークレットでは、ブックマーク元のページのタイトルがメモに追加されますが、それ以降に、連続した半角スペースか、連続したセミコロン「;」を記入すると、以降がメモとして扱われます。

July 3, 2007

MT4Beta : ExtensibleArchivesを作成してみた雑感

mt4のプラグイン作成上の新機能として、ExtensibleArchivesというものがあります。 それで、試行錯誤しながら作ってみているのですが、どうにも難しくて、段々、自分の問題なのかMTの問題なのか分からなくなってきました。 とりあえず感じたことを書きます。非常に分かりづらい内容の上、実際のプラグインの書き方などの実践的な内容もありません。また、気をつけてコードを追ったつもりですが、やたらややこしいので、根本的に自分がとんでもなく間違った理解をしている可能性もあります。あまり興味のない方は読み飛ばすことをおすすめします。 ExtensibleArchivesというのは(この呼び方が正しいのかは知りません)、プラグインから独自のアーカイブの種類を作成するためのシステムです。現在のMT4beta3で、今までの月別やカテゴリー別のアーカイブに加えて、投稿者別や、カテゴリーごとの月別、週別などのアーカイブが作成できるようになっていますが、これらもプラグインによって実現されています。 さらに、プラグインを自作することによって、より豊富なアーカイブページを作成することが出来るわけです。投稿者ごとのカテゴリーアーカイブとか、カテゴリーごとの世紀別アーカイブとか好き勝手な形式のアーカイブを作成できるわけです。夢が広がりますね。 それで、今回練習がてら、エントリーのタイトルを基準にした英和辞書風アーカイブの作成に挑戦してみました。で、まあ、以下の理由によりうまくいきませんでした。うーん、アーカイブページの出力までは出来るんですけどね。 アーカイブの基本型が固定されている点 プラグインからExtensibleArchiveを作成する場合、事前に、アーカイブの基本型を日付基準、投稿者基準、カテゴリー基準、エントリー基準、の中から選ぶ必要があります。というか無理やり選ばされます。例えば、カテゴリー基準のアーカイブなら「category_based」という項目を有効にします。項目を選ばない場合、自動的に日付基準としての振る舞いをするようです。 そして、「MTArchiveNext」などの一部のテンプレートタグの振る舞いについては、この基本型から振る舞いが決定され、プラグイン側で動作を決めることが出来ないようです。 結果、自分が作ろうとしたアーカイブでは、MTArchiveNextの動作がまったく意図しないものになってしまいました。ずいぶん悪戦苦闘したのですが、いまだに対応できていません。やっぱり、プラグイン作成の手間がかかるようになっても良いから、基本型と異なるスタイルのアーカイブも作成できるようにするために、「non_based」とかそんなものを追加して欲しいですね。 ページの作成とアーカイブリストの作成で動作が非対称な点 プラグインの作成時に、いくつかのサブルーチンを登録する事になるのですが、これらは主に、「アーカイブページの再構築時」「MTArchivesなどのタグでのループ内」の二つの場合に呼び出されることになります。で、この二つの場合でのサブルーチンの呼ばれ方が、それぞれで違うので、非常にややこしいことになっています。 アーカイブを作成する場合に重要になる事の一つに、実際にこのアーカイブではファイルをいくつ出力するのか、ということがあります。 それで、出力するファイルの概要を決定するサブルーチンを、「archive_group_iter」という項目に指定するのですが、これは「MTArchives」から呼ばれるときにしか利用されません。実際のページのビルドのときは、「archive_file」という項目で指定する、出力するファイルのファイル名を決定するサブルーチンの実行結果を元に決定するようになっています。 これは非常に分かりづらいです。何か理由があったのかも分かりませんが、単なる設計ミスなのでは、という気がします。出来たら直して欲しいですねー。...

June 28, 2007

MT4Beta : TimeTypeの投稿を別ブログにして新機能のaggregationを使って引っ張ってみた

ちょっとTimeTypeの投稿が多すぎて、自分の投稿が埋もれてしまう感じだったので、別ブログに投稿先を変更しました。 自動投稿に負けないように毎日記事を書け、というツッコミは無しの方向でお願いします。 それでもって、折角のプラグインの表示が無くなっちゃうというのも寂しいので、MT4の新機能のcross-blog aggregationを使って、サイドバーに最新の数件の投稿を表示するようにしてみました。これですね。 10 Features that Help Make You a Better Blogger and Publisher - movabletype.org # Built-in cross-blog aggregation: Publish pages that include data from some, all, or just one of your blogs で、cross-blog aggregationの実際の利用方法なのですが、MTEntriesなどのタグのアトリビュートに、展開したいブログのidを指定すれば、指定したブログの内容が表示出来るようです。 アトリビュートとしては、 blog_ids include_blogs exclude_blogs といったものが使えるみたいです。カンマ区切りでの複数指定、Allなどの指定方法があるようですが、詳しくは試していないのでちょっとわかりません。 Context.pmのset_blog_load_contextルーチンがブログのaggregation指定を実行している模様なので、詳細はコード読んでください。ビール飲んだら正規表現が分からなくなりましたので僕は読めません;-) で、このblog_idsというやつを使って以下のような記述のwidgetを作成し、別ブログに投稿されているTimeTypeのエントリーをサイドバーに表示してみました。 <div class="module-categories module"> <h2 class="module-header"><a href="http://blog.aklaswad.com/mytimelog/">MyTimeLog</a></h2> <div class="module-content"> <ul class="module-list"> <MTEntries blog_ids="5" lastn="3"> <li class="module-list-item"><h2><$MTEntryTitle$></h2><$MTEntryBody$></li> </MTEntries> </ul> see detail at <a href="http://aklaswad.timelog.jp/">my timelog page</a><br />...

June 22, 2007

TimeLog 20070620

Bookmark 17:51:34 404 Blog Not Found:新カテゴリ - ニセ情報科学

June 21, 2007

MT4Beta : Beta3 にアップグレードした

データベーススキーマの変更は無い模様。特にトラブル無くb3に移行できました。 ダッシュボードの表示がカスタマイズ可能になっていて、ほんとにダッシュボードという感じになっていますね。 この展開は予想していなかったのでちょっとびっくり。 目立った更新として、管理画面全体が日本語化されていますが、文字化けも無く良い感じ。 と思ったらログレコードに色々文字化けを発見。いやしかしこの文字化けは以前からあった気もする。あまり気にしてなかったけど。 しかもよく見ると文字化けした検索は全て同じIPから行われている。 早速nslookupしてみると・・・ 186.70.249.66.in-addr.arpa name = crawl-66-249-70-186.googlebot.com. へー、つまりタグクラウドをgoogle様が絨毯爆撃していたんですね。今更なネタですか。 しかしこれは、うざい。うざいからけど、やめてやめないで。 文字化けを(googleが)直すか、ログに表示しないかして欲しいですね。それpluで。

June 21, 2007

TimeLog 20070619

Memo 12:39:58 TimeType をアップデートしました。今までTemplateモジュールが無くて動かなかった環境でも大丈夫なはずです http://tinyurl.com/2af4nk 14:02:54 TimeType ちょっといじるだけでmt4でも動くようになるな。 14:03:27 実はTransformer以外の部分では、かなりの後方互換性があるらしい [mt4beta]

June 20, 2007

TimeType

Timelogから一日分のログを取得して、MovableTypeに自動投稿するプラグインです。必要環境 TimeTypeの動作には以下の環境が必要です。 Perl5.8.1以上 MovableType3.3以上 インストール 解凍して出てきたpluginsディレクトリ内の「TimeType」ディレクトリをまるごと、インストールされているMovableTypeの「plugins」ディレクトリにアップロードしてください。 初期設定 インストール後、システムメニュー > プラグイン から、システムレベルで設定を行う必要があります。TimeTypeを探して「設定を表示」から設定画面を開いてください。 以下の3項目は必須となります。 Timelog BlogID Timelogの一日分のメモを投稿する先のブログのIDを数字で指定します Timelog username Timelogでのユーザー名を指定します Timelog password Timelogへのログインに利用するパスワードを指定します なお、この設定を行った時にMovableTypeにログインしていたユーザーが、以降自動投稿を行う際のユーザーとなります。必要な場合にはログインユーザーを変更して設定を行ってください。 スケジュールタスクの設定 TimeTypeはMovableTypeのスケジュールタスク機能を利用しているため、cronなどのosの自動実行機能を利用するか、ログフィードを取得するなどの方法で、MovableTypeのタスクが定期的に実行されるように設定する必要があります。詳しくはMovableTypeのマニュアルを確認してください。 実際の動作の概要 スケジュールタスクによってTimeTypeが起動されると、TimeTypeは前回投稿が行われた日付と現在の日付が異なっているか確認します。 異なっていた場合には、Timelogからメモを取得し、エントリーを投稿します。 そして、現在の日付を保存して終了します。 チェンジログと最新版のダウンロード 20070619 TimeType0.2.zip テンプレートエンジンをHTML::Templateに変更 20070703 TimeType0.3.zip 自動投稿のエントリーの諸設定を、特定のエントリーの設定のクローンとして設定できるようにしてみた。設定のクローン元となる任意のエントリーのentry_idを、プラグインの設定画面から指定してください。カテゴリー、公開設定、改行設定、キーワード、コメントの許可、トラックバックの許可、の設定内容がクローン元エントリーからコピーされて、投稿されます。 メモ中のhttpから始まる文字列にリンクが張られるようにした。参考: http://www.din.or.jp/~ohzaki/perl.htm#URI ブックマークにコメントをつけられるようにした。Timelogのブックマークレットでは、ブックマーク元のページのタイトルがメモに追加されますが、それ以降に、連続した半角スペースか、連続したセミコロン「;」を記入すると、以降がメモとして扱われます。

June 19, 2007

TimeLog 20070617

Memo 02:28:22 暑くて寝れない日々がやって来た

June 19, 2007

TimeLog 20070616

Memo 10:59:23 おはようございますー 12:23:44 bloglinesのもっさり感に堪えかねて、livedoorReaderに引っ越した。すげえ楽。

June 19, 2007