Pure MTML で NabeAzz

mixiのMTテンプレート大喜利大会(違う)に出したネタです。 NabeAzzというのは、えー、FizzBuzzの変形でー。 多分発祥はここだと思います。 そろそろ FizzBuzz に飽きた - にぽたん研究所 mixiでは文字数制限が怖かったのでコメント一切無しにしました。 ちょっとわかりづらいところもあると思うので、コメント付で再掲します。 自分の作ったテンプレートの目標は、ノープラグイン、ノースクリプト。MTタグのみでのNabeAzzです。 <mt:ignore><!-- 単純な線形合同法で乱数を生成。 --></mt:ignore> <mt:setvarblock name="seed"><mt:date format="%S"></mt:setvarblock> <mt:setvartemplate name="rnd"> <mt:getvar setvar="seed" name="seed" op="*" value="13" /> <mt:getvar setvar="seed" name="seed" op="+" value="5" /> <mt:getvar setvar="seed" name="seed" op="%" value="24" /> <mt:getvar name="seed"> </mt:setvartemplate> <mt:ignore><!-- 配列の初期化はsetvar一発で。 --></mt:ignore> <mt:setvar name="aho" value="www":"ktkr":"ぶーん":"だわよのさ":"へっぺふむーん"> <mt:setvar name="dog" value="ダワン":"キャイーン":"キャンキャン":"バウウウ":"ガルルル"> <mt:ignore><!-- 指定された配列からランダムに要素をとってくる。 --></mt:ignore> <mt:setvartemplate name="get_suffix"> <mt:setvarblock name="idx"><mt:getvar name="rnd" trim="1"></mt:setvarblock> <mt:setvarblock name="max"><mt:getvar name="$target" function="count"></mt:setvarblock> <mt:getvar setvar="idx" name="idx" op="%" value="$max"> <mt:getvar name="$target" index="$idx">...

April 13, 2008

MT4LP5に参加してきました。

非常に楽しく、また有意義な時間を過ごせました。小粋空間さんの最適化話が特に興味深かったです。 アフターパーティーでも、色々な方から貴重なお話を沢山聞くことができました。 またこのような機会があれば参加したいですねー。 以下、役に立たない雑感 アフターパーティーが手羽先屋なのに手羽先の登場が遅く、俺の手羽先スキルが全く注目されなかったのが心残り タイトルのMT4LP5と開催日の4月5日がシンクロしていたことにさっき気づいた via http://www.tohdamikio.com/2008/04/mt41mt4lp5mt41c_a127.html 名刺は絶対に必要

April 6, 2008

遺言状が簡単に作成できるMTプラグイン「TestameMT」

遺言状の作成を簡単に行えるMTプラグイン「TestameMT」を開発しました! 主な機能 遺言状作成機能 簡単なフォームを埋めるだけで遺言状の文面を自動作成します。 もちろん、文面は豊富なテンプレートタグでカスタマイズ可能です。 遺産カート機能 Movable Type のアイテム機能と連携。遺産一覧をアイテムとして登録し、ドラッグ&ドロップで簡単に分配を行えます。Paypalとの連携も可能です。 弁護士Approval機能 弁護士Approval機能を使えば、作成した遺言状の弁護士による確認も半径ワンクリックで行えます。 死亡日投稿機能 ご臨終に際して、自動的に遺言状がインターネット経由で全世界に公開されます。これにより、不逞の輩による改竄の心配が無くなります。 斎場予約機能 GoogleMapと連携し、最寄りの斎場や焼き場を予約可能。案内状の作成も簡単です。 最新版のダウンロード 現在、ダウンロードサイトを準備中です。急なご利用が必要な方はご相談ください。 やんごとなき事情のため公開を無期延期します。

April 1, 2008

CustomEditorButton2.0.21 でIE7に対応しました。

IE7に対応しました。わりと上手く出来ました。mt_core.jsは良く出来てますね。ふう。 blog.aklaswad.com: CustomEditorButton2

March 12, 2008

CustomEditorButton2 0.2 を公開します。

とりあえずバージョンアップです。ダウンロードは以下のページからお願いします。 blog.aklaswad.com: CustomEditorButton2 変更点は、 利用頻度の低いボタンを退避させる「ポケット」を追加した ボタンのドラッグ時などの見た目の改善 など。また、ボタン作成用の機能として、以下の拡張を行いました。 画像を用意しなくてもボタンを作成できるようにした ボタン作成時に利用可能なオプション引数を追加 コールバックの戻り値の処理の拡張

March 9, 2008

Writting Custom Button Plugins

Custom Editor Button 2 用のプラグインの作成方法を解説します。 プラグインを作成することで、CustomEditorButton2に任意のボタンを追加できます。 プラグインは通常の Movable Type のプラグインとして作成します。 といっても、ボタンの画像と簡単なyamlファイルを用意するだけですので、MTのプラグイン作成の知識はほとんど必要ありません。 ここでは、ボタンをクリックすると「Hello!」という文字列を追加するボタンを例として、作成の流れを見ていきます。 まずはyamlファイルの作成から始めましょう。 yamlファイルを作成する プラグイン情報を書く 適当なテキストエディタで、新規ファイルを作成します。 最初に書くのは、プラグインとしての情報です。ここで書いた内容が、MTの管理画面のプラグイン一覧に表示されます。 name: Hello Button id: Hello Button key: HelloButton author_link: http://blog.aklaswad.com/ author_name: Aklaswad description: Say hello. version: 0.1 plugin_link: http://blog.aklaswad.com/mtplugins/hellobutton/ あちこち省略しても問題ありませんが、せっかくだからきちんと書いておきましょう。 ボタンを追加する 次に、ボタンを追加します。 buttons: hello: image: hello.png title: say hello! code: | function ceb_hello ( text ) { return 'Hello! ' + text; } 一つのプラグインで、複数のボタンを追加することも出来ます。 ボタンの名前を指定する buttons: hello: この部分です。ここからボタンの指定が続きますよ、という指定の「butons:」の次の行に、半角スペース4つ分字下げしてボタンの名前を指定します。今回は「hello」という名前にします。 名前には半角スペースなどを含めないようにしてください。 image: ボタンの画像を指定する 用意した画像ファイルのファイル名を指定します。詳しくは後述します。...

March 2, 2008

CustomEditorButton2 出来ました。

以前に公開していた(今もしている)CustomEditorButtonというプラグインを、ようやくMT4に対応させることが出来ました。 blog.aklaswad.com: CustomEditorButton2 以前のバージョンとは異なり、ボタンは別プラグインの形で追加していきます。この辺はActionStreamsと同じ感覚ですね。 しばらく使ってみて不便であれば、以前のように、管理画面からもボタンの追加が出来るようにしてみます。 当面のToDo: ボタンが増えすぎたときの対処。至急。 画像なしでもボタンを作れるように。まあまあ急ぎ。 プラグイン側から、ブログにスタイル定義を追加できるようにする。ちょっとしたタグを書けば実現できそう。プラグインをインストールしてタグ一個書くだけでスーパーpreが使えるようになったりすると良いですね。 L10N javascriptまわりでヒントをくださったYoshimatsuさんに感謝します。...

March 2, 2008

CustomEditorButton2

管理画面のブログ記事投稿画面に、任意の機能を持ったボタンを追加できるプラグインです。 以前に公開していたCustomEditorButtonのMT4対応版となります。最新版のダウンロード CustomEditorButton2_0_3.zip 使い方 インストールが成功すると、自動的にブログ記事編集画面にボタンが追加されます。MTのデフォルトのボタンと同様に、エディタで範囲選択をした状態でボタンをクリックしてください。 ボタンの並び順を変更する カスタムボタンは、ドラッグ&ドロップで簡単に並び替えることが出来ます。 今のところ、見た目ドラッグしている感じが無いのでわかりづらいかもしれませんが、本当に変更できます。 並び順を変更したら、右端のフロッピーディスクのアイコンをクリックしてください。変更結果が保存され、次回に編集画面を開いたときにもこの並び順で作業を再開できます。 「ポケット」をクリックすると、ポケットが開き、格納されたボタンを表示できます。使いたいボタンをドラッグして、現在使用中のボタンの列に並べてあげてください。当面使わないボタンなどは、「ポケット」にしまっておくことも出来ます。ボタンを「ポケット」にしまいたいときは、「ポケット」ボタンの上か、開いたポケットにドラッグしてください。 ボタンを追加する CustomEditorButton2用のプラグインを追加することで、新しいボタンをインストールすることが出来ます。自分でもポリポリ頑張って作っていきたいと思います。 プラグインの作成は、なるべく簡単に出来るようにしてあります。皆さんも挑戦してみてください。 作成方法は、以下のページにまとめてあります。 blog.aklaswad.com: Writting Custom Button Plugins 公開されているボタン追加プラグイン 以下のサイトでも、CustomEditorButton2で利用可能な追加ボタンプラグインが公開されています。ありがとうございます。 こだるま日和 - CustomEditorButton2 用のフォント色指定ボタンを作ってみた かたつむりくんのWWW | CEB2_plusUtility maRkのMyOwn - Custom Editor Buttonで記事作成の効率アップ Pure Kei - PLUGINS(Custom Editor Button 2) 20080821追加 トラックバックありがとうございます! MT4.1:CustomEditorButton2 プラグイン via Under the Bridge 掲載忘れてました。超サンクス>< Amazonクイックリンク用ボタンwith CEB2 - ネット×PC=Web交差点 必要環境 MT4.1 以降専用です。MT3.xではまったく動きません。 MT4.0については、今のところ検証してません。一通りの機能追加が終わってから検証したいと思います。 ブラウザ Firefox2およびInternetExplorer7で動作します。 基本的にFirefoxでの利用を想定しています。 現時点では、IEでの動作は見ていません。一通りの機能追加が終わってから検証します。 IE7では動くと思いますが、IE6はかなり危ないと思います。 IE6で動かなくても、多分直しません。 ライセンス GPLv2 チェンジログ 0.3(20080821) CustomEditorButton2_0_3.zip MT4.2に対応した...

March 2, 2008

バージョン表記がひどすぎる件について

wolawolaの中の人に指摘していただいて初めて気がついたのですが、拙作プラグイン「BuildTracer」のバージョン番号がめちゃくちゃでした。 正しくは以下の通りになります。 管理画面での表示特徴本当のバージョン 0.1 上部パネルが無い stashを選択できない 0.1 0.1 上部パネルが無い stashを選択できる 0.2 0.1 上部パネルがある オートランが無い 0.3 0.4 上部パネルがある オートランがある 0.31...

February 27, 2008

BuildTracer0.31をリリースします

今回は大きな機能追加などはありません。主に内部的な修正を行いました。 blog.aklaswad.com: Build Tracer BuildTracer0.31.zip

February 24, 2008

BuildTracer 0.3 出来ました。

BuildTracer0.3.zip ちょっと気合入れてインターフェイスを改造してみました。 なんだかデバッガぽくなってきた気がします。 使い方はこんな感じ。...

February 17, 2008

BuildTracer0.2をリリースします。

BuildTracer0.1で問題だった、トレースの実行時に実際にファイルが置き換えられてしまう問題に対応しました。 blog.aklaswad.com: Build Tracer BuildTracer0.2.zip

February 11, 2008

MTタグの書き方を調べてみました。

<mt:setvar foo value="fizz","buzz"> こんなMTタグの書き方はありでしょうか!?実はありなんです! というわけで、MT4.1で利用可能なMTタグの書式を調べてみました。 全般編 基本形 <$MTBlogName$> $マークは省略出来る <MTBlogName> かたっぽだけというのもOK。ただしかっこ悪い。 <$MTBlogName> <MTBlogName$> これはMT3から省略できました。ちなみに、ブロックタグでは$マークをつけること自体出来ません。ブロックの閉じタグの頭のスラッシュ「/」と$マークが両立できないためです。 末尾に/を付けられる これはMT4からの機能。 <MTBlogName /> XMLの空タグ風に記述できます。これもブロックタグでは使えないかと思われます。 タグ名編 大文字小文字は問わない MT4より。 <mtblogname> <mtBlogName> <mTblOgnAme> すべてOKです 「MT」とタグ名の間にコロンを挟める MT4より。 <mt:blogname> モディファイア編 基本 キー="値"の形で指定します。 <mt:setvar name="foo" value="fizz"> 値の括りはシングルクオートでも可 <mt:getvar name='foo'> クオートを省略しても可 <mt:getvar name=foo> ただし、半角スペースのような、単語の区切りとみなされる物を値に含む場合はダメです。つまり、これはOKですが <mt:setvar name=fizzbuzz value=15> <mt:getvar name=fizzbuzz> これはNGです。<mt:getvar name=fizz buzz> イコールの前後やアトリビュートの前後にスペースや改行を挟める <mt:setvar name = "boo" value = " fizz buzz "...

February 6, 2008

Build Tracer

再構築の詳細を追跡、図示するプラグインです。 最新版のダウンロード BuildTracer0.31.zip 何をするプラグインか Movable Type の再構築の動作を表示します。 表示は、以下のような形で行われます。 現在の所、以下のようなことが出来ます。 ブロック構造の可視化 <mt:if>などの判定の確認 変数の変化の追跡 処理時間の表示 動作環境 このプラグインは、Movable Type 4.1 専用です。 もしかしてMT4.0xでも動作するかもしれませんが、コードのベースとして4.1のものを利用しているため、トレース結果が信頼できなくなります。 また、ダイナミックパブリッシングを利用している場合も、実際に公開されるブログとトレース結果が異なる場合は考えられます。 ブラウザについて、Firefox での利用をお勧めします。IE7での動作は確認しておりますが、どうもパフォーマンスが良くないようです。IE6では動作しません。 インストール パッケージには、「plugins」「mt-static」の二つのディレクトリが含まれています。 plugins/BuildTracerディレクトリを、お使いのMTのpluginsディレクトリに、また、mt-static/plugins/BuildTracerディレクトリを、お使いのMTのmt-static/pluginsディレクトリにそれぞれアップロードしてください。 利用方法 Build Tracer のトレース画面は、以下の方法で呼び出すことが出来ます。 Fileinfo一覧から呼び出す BuildTracerがインストールされると、管理画面の「一覧」メニューの中に「Fileinfo」という項目が追加されます。 ここから、該当のブログが生成しているファイルのURL一覧を表示できます。 一覧表示から、トレース画面を開きたいファイルを選択してください。 ブックマークレットから呼び出す トレース画面の右下のほうにブックマークレットを用意しました。これをブラウザのお気に入りに登録しておけば、実際のブログ画面から直接トレース画面を開くことが出来ます。 URLのチェックをしていないため、関係ないウェブページから呼び出した場合には変なエラーが表示されます。 ライセンス GPLv2 MIT License (since 20130716) 既知の問題 アーカイブテンプレートのトレース時にstash->templateがチェックされているとエラーが発生してトレースできない。将来のバージョンでインターフェース自体を変更予定です。現在、stashのトレース自体が削除されています。 現在の実装では、トレースを行う際に、実際にファイルを再構築しています。 そのため、場合によっては実際のブログのファイルが置き換わってしまう場合があります。 ファイルの内容に変化が無い場合には、基本的に、実際のファイルが書き換えられることはありません。しかし、例えばテンプレート中で<mt:date>タグを利用して最終更新日を表示している場合など、再構築ごとに内容が変化する箇所がある場合、ファイルがトレースを行った時点のものに書き換えられます。 また、ダイナミックパブリッシングの動作では、静的ファイルが存在しないことが前提となっているため、上記副作用でファイルが出力された場合、(そのファイルだけが)ダイナミックパブリッシングの対象から外れてしまうということが考えられます。ご注意下さい。 ver.0.2で対応しました。 チェンジログ 0.31 (20080224) BuildTracer0.31.zip IE7でJSONの読み込みに失敗する問題に対応した オートラン機能を追加した 配列やハッシュの変数をJSONで表示するようにした インターフェイスの見た目の改善 ブックマークレットが表示されていなかった問題を修正 (内部的な変更)変数の変化をキャッシュするようにした (内部的な変更)ファイルを分割した 0.3 (20080217) BuildTracer0.3.zip インターフェイスを刷新 機能的にはやや後退(stashの観察が出来なくなったなど) 0.2 (20080211) BuildTracer0.2.zip トレース実行時にファイルが上書きされる問題に対応...

February 4, 2008

BuildTracer0.1

ハッカソンからこっち、すっかりMT三昧の日々です。 中でも、ちょこちょこ作ってきたプラグインが形になってきたので、公開してみます。 blog.aklaswad.com: Build Tracer MTの再構築の結果を構造化して表示します。 自分で言うのもなんですが、MTerの方はなんとなく見るだけでも面白いと思うのでお試し下さい。...

February 4, 2008

ActionStreamsではてなブックマーク

アイコンの設置とcssでのli要素への表示が上手くいかずごり押しした。追加サービスの配布を考えるとこれから、て感じかしら。 あと、タグの取得もまだです。 ちょっとお出かけするのでパッケージングともども、あとで考えます。 config.yamlは大体こんな感じ。 あちこち変なので、もう少し手を入れる予定。 name: Hatena Bookmark id: hatenabookmark key: Hatebu author_link: http://blog.aklaswad.com/ author_name: aklaswad description: Adds profile service and activity stream for Hatena Bookmark. version: 1.0 plugin_link: http://blog.aklaswad.com/ profile_services: hatenabookmark: name: Hatena Bookmark url: http://b.hatena.ne.jp/%s icon: images/b.png action_streams: hatenabookmark: bookmarks: name: Bookmarks description: Hatena Bookmark fields: - note html_form: '[_1] bookmarked <a href="[_2]">[_3]</a> [_4]' html_params: - url - title - note url: 'http://b.hatena.ne.jp/{{ident}}/atomfeed' identifier: url atom: note: summary/child::text()...

February 2, 2008

Action Streams!

SixApartから登場した新しいプラグイン、Action Streams がステキすぎます。 Action Streams | Plugin Directory | movabletype.org Six Apart - 広報ブログ: 自分の行動履歴を自分で管理できるMTプラグイン「Action Streams」 Action Stream をインストール : MTで、FlickrやTwitterなど色々なサービスの更新状況を表示:Goodpic 自分もいくつか似た様なものを作っていましたが、こっちのほうがよさそうですね。 さて、早速導入してみたのですが、導入に関して何箇所かつまずいたところがあったので、注意点をまとめておきます。 文字コードは UTF-8 で! 現在のバージョンでは文字コードの変換を行ってくれないようです。このブログは euc-jp で公開していたのですが、見事に取得したActionが文字化けしてくれました。 多分何も文字コードを操作していないと思うのですが、twitterやvoxに日本語をポストしている場合はutf-8で返ってくるようですので、MT側もutf-8なら問題ないようです。 文字コードが異なる状態でActionStreamsが動作してしまった場合、文字化けした状態のActionやタグが登録されてしまい、後の作業での障害になる場合があります。特に文字化けしたタグは削除することが容易ではないので、必ず事前に、導入する MT の文字コードがutf-8であることを確認しましょう。 自分の場合は、かねてからutf-8にしたいと考えていたので、無理やり文字コードを変更しました。こちらの記事が参考になりました。 追記: あー、どうもあちこちおかしいと思ったら、Storableされてるメタデータやプラグインデータがぶっ壊れたかも。ふむう。DBのダンプをnkfではダメみたい。なにか違うやり方を考えないと。 sqliteのdbの文字コードを変換する (Yusukebe::Tech) テンプレートセットを適用するときはユーザーの言語設定を英語に! ActionStreamsプラグインは、専用のテンプレートセットを提供してくれます。が。こちらもローカライズが一部問題あるようです。 以下の手順で、テンプレートが中途半端に日本語化されないようにしましょう。 プロフィール画面を開く。管理画面右上の「こんにちは(ログイン名)さん」から開けます。 使用言語を英語にして保存 テンプレートセット「ActionStream」を使って新規ブログを作成 テンプレートセットの適用後は、言語設定を日本語に戻してしまっても問題ありません。 Actionが少ないと寂しい! えー。 ・・・・・・頑張ってついったりヴぉくすったりします。...

February 2, 2008

[error] mod_mime_magic: can't read `***.cgi' は多分無視して構わない気がします。

mod_mime_magicというのは、ファイルの拡張子に頼らずにMIMEタイプを推測するApacheモジュール。 Apacheは通常、拡張子を見て「.mp3」なら「audio/mpeg」です、というようにファイルの種類(MIMEタイプ)を返している。だがmod_mime_magicを利用すると、実際のファイルを読み取って、たとえば先頭のnバイトが特定のパターンになっていたら、これはmp3に違いない、と判断して自動的に「audio/mpeg」を返してくれるようになる。たとえばXMLの場合、ファイルの先頭からの文字列が「<?xml」なら「text/xml」を返却する、という具合。以下、実際のmod_mime_magicの設定ファイルの一部。 0 string \<?xml text/xml こんな感じでいろんなファイルの種類が指定してあるので、いちいち拡張子ごとの設定を行ったりしなくても済むようになって便利だよね、というモジュールです。 さて。suExec環境でCGI を設置したときに、「mod_mime_magic: can't read `***.cgi'」というエラーがエラーログに山ほど残る場合がある。これはmod_mime_magicが、MIMEタイプ推測の際のファイルの読み取りに失敗した場合に出るらしい。 suExec 環境下では、CGI の実行自体はファイルのオーナーとして行われるため、オーナーの権限が設定されていればOK。0700、なんてパーミッションでもきちんと動作する。 しかし、mod_mime_magic がファイルを読みに来るときには、Apache ユーザーで読みに来てしまうため、ここでワールドのパーミッションが必要となってしまう。お馬鹿。 で、まあ、エラーログに「mod_mime_magic: can't read `***.cgi'」がたくさん出てウザイという場合は、cgiファイルのパーミッションを0704とかにしてみるととりあえず回避できると思います。 また、メッセージ自体は単に「MIMEタイプの推測に失敗した」と言う警告なだけで、実際のCGIの実行には問題が無いので、そのまま放置しても構わないはず。(CGI側できちんとMIMEtypeをヘッダに含めて返しているはずなので。)...

February 1, 2008

AssetThumbnailPlus

「MTAssetThumbnailLink」「MTAssetThumbnailURL」のテンプレートタグが生成するサムネイルは、基本的に元画像の縦横比を維持した形で出力されます。これを、不要な部分をトリムして、正方形にするモディファイア「square」を追加するプラグインです。 ちょっと名前が大袈裟ですが、ほんとにそれだけの小さなプラグインです。 動作条件 MT4.1でしか動作確認していません。多分MT4.0以上で動きます。 通常のパブリッシングでは、MTが利用できる画像ライブラリ(ImageMagickかNetPBM)が必要になります。ひょっとしたらNetPBMでは動かないかもしれません。何かありましたらご報告下さい。 ダイナミックパブリッシングで利用する場合、phpのGDライブラリが必要となります。 最新版のダウンロード AssetThumbnailPlus.0.1.zip 動作 テンプレートタグ「MTAssetThumbnailLink」「MTAssetThumbnailURL」でモディファイア「square」が有効になります。 「square="1"」を指定すると、モディファイア「width」または「height」で指定したサイズにリサイズした後、さらに正方形になるように中央部分を残して余計な箇所をカットします。 「square」を指定しない場合や、「square="0"」とした場合は、MT標準と同じ動作になります。 ライセンス...

January 28, 2008

hack-a-thonに行って来ました。

SixApartさんにお邪魔して、MTハッカソンに参加させていただきました。 前回も参加したので、なんとなくわかっていたのですが、まあ、本当にひたすらハックする集まり。 誰もが(普段以上に)黙々とハックしておりました。 勿論、名だたるMTハッカーが集まっているのでちょっとした質問議論から大いに盛り上がることもあり。(o)さんがホワイトボードにメモしながら説明している風景などは、見ていて胸に来るものがありました! 前回は変なところでつまずいて成果物なしだったのですが、今回は一応動くところまで行き、皆さんの前で発表してきました。発表風景はこんな感じです。120%男前に撮ってくださった2xupのkaminogoyaさんに超感謝です。今度フルサイズで下さい。 帰宅後、phpで動かなかった箇所を修正した(というか、次の日起きて試したらなぜか動いていた)のが、以下のプラグインです。 blog.aklaswad.com: AssetThumbnailPlus 以下、TechMemo。 なぜか、MT本体のコードにすでにそのままの動作が組み込まれており、やることは、テンプレートタグが呼ばれた際に、必要なフラグを右から左に渡してやることだけ。 タグのハンドラ関数をこぴぺして一行加えて、それを、コアタグをオーバーライドする形で実行するだけでした。超楽勝。 だかしかし、それはPerlでのお話。 ダイナミックパブリッシングのコードにはこれは含まれておらず、その辺はゴニョゴニョしました。また、phpでのコアタグのオーバーライドについてはほとんど資料が無く、smartyのリファレンスを適当に見ながら動くようにしました。 init.HOGEHOGE.phpという形でphpディレクトリの中においておくと初期化時にロードしてくれるので、その中でregister_functionとしてみました。一応動いてはいるのですが、これでいいのか良くわかりません>< また、一行、絶対に必要だと思われるrequireOnceの行が最後まで動かず、コメントアウトしたままです。プラグインをロードするタイミングについて勘違いしているのかしら。よくわかりません>< fumiakiyさんにもその辺を伺ったところ、phpでのコアタグの上書きはあまり例が無いので、手法を確立するかMT.phpにAPIを追加してコミットしてくれとの事。 だがしかし、俺はPHPは全然わからないので、誰かお願いします>< 唐突なまとめ。...

January 28, 2008

MT4.1リリース

RC2が公開されたと思うまもなく、MT4.1の正式版が公開されました。早速アップグレードして記事を書いています。 このタイミングでリリースしたという事は、あさってのhackathonで新機能祭りをやろうということですね。僕も参加します。楽しみです。 全体的な印象として、がっつり変化したMT4.0の時よりも、ちょっとした管理画面のレイアウトの変化など、細部までこだわった観が感じられます。すばらしい。 夏のMT4公開時の技術者カンファレンスでBrad Choateは、MT4.1or2で「カスタムフィールド」「テンプレートセット」「リビジョンログ機能」を追加したいと語っていましたが、このうちの二つが早くも実現したことになります。すばらしい。 これからもすばらしいソフトを作り続けてください。開発チームのみなさま、お疲れ様でした!

January 24, 2008

映画「アース」を見てきました。

アースを見てきました。 北極から南極まで、動物の生き様を最新の撮影技術で追った、動物ドキュメンタリー映画です。 出だしは冬の北極圏。闇の世界を雄のホッキョクグマがえさを求めてさまようシーンから、これまで見たことのない映像で圧倒されます。 最新の技術による空撮、高速、高感度撮影は見ごたえ十分。bullet-timeに匹敵するような映像体験でした。サメのハンティングの瞬間などは、本当にすばらしかったです。(全体的には、「決定的瞬間」はあえて避けていた編集でしたが。) また、印象に残ったのはホッキョクグマやオシドリの子供のありえないかわいさ。頬が緩みっぱなしでした。 だって飛べないのに初飛行とか。落ちてるだけ。なのに兄弟みんな続いていく。全員落下。落ち葉がなければ死ぬって。現代の日本人が失ってしまった真の家族愛を感じました。 ストーリーはほとんど無いのでうっかり眠りかけましたが、いい映画でした。映画館でみてよかったと思いました。

January 21, 2008

MTのテンプレートタグで素数判定をやってみた。

MT4.1ではopモディファイアが導入されて、かなりプログラムチックなことが出来るようになっています。 そこで、なにかMTでやる意味のまったくない作業をテンプレートで作ってみたくなり、とりあえず素数判定を行うテンプレートを書いてみました。 現在のMTのテンプレートエンジンでは、MTForなどのループから任意のタイミングで抜け出すことが出来ないため、MTSetVarTemplateを再帰的に呼び出すことでループの代用をしています。 そのため、大きな数の判定を行うと馬鹿みたいにメモリを喰いまくります・・・ 速度を度外視してアルゴリズムを簡潔にした事もあいまって、実用には耐えられない出来になってしまいました。 家のローカル環境では、大体1000くらいの数までなら耐えられますが、それ以上の素数を判定しようとすると戻ってこなくなります。 まあ、こんなことも出来る、というサンプルになればと思い公開してみます。 <mt:ignore> #setvartemplateを使って関数定義 </mt:ignore> <mt:setvartemplate name="is_prime"> <mt:if name="num" op="%" value="$check"> <mt:ignore> #試し割りで余りが出た場合</mt:ignore> <mt:setvar name="check" op="++"> <mt:if name="num" eq="$check"> <mt:getvar name="num"> は素数だった! <mt:else> <mt:ignore> #再帰!!</mt:ignore> <mt:getvar name="is_prime"> </mt:if> <mt:else> <mt:ignore> #試し割りで割り切れた場合</mt:ignore> <mt:getvar name="num"> は <mt:getvar name="check"> で割り切れたので素数じゃなかった! </mt:if> </mt:setvartemplate> <mt:ignore> #ここに判定したい数字を指定 </mt:ignore> <mt:setvar name="num" value="71"> <mt:ignore> #チェック用変数の初期化。変更不可!</mt:ignore> <mt:setvar name="check" value="2"> <mt:ignore> #setvartemplateで設定したテンプレートを呼び出す。 #ついでに余分な空白を削除。 </mt:ignore> <mt:getvar name="is_prime" regex_replace="/(^\s*|\s*$)/mg":""> <mt:ignore> #続けていくつか試してみる。 </mt:ignore> <mt:setvar name="num" value="109"> <mt:setvar name="...

January 20, 2008

MTのテンプレートタグでFizzBuzz、SetVarTemplateを使ってやってみた。

junnamaさんが面白いことやってたので脊髄反射で反応。MT4.01が前提で。 カウントをインクリメントするルーチンをSetVarTemplateを使って外に出してみました。 まっすぐにやると出来ないのでちょっとかっこ悪い書き方になってしまいました・・・ この辺はMT4.1 で追加される op モディファイアを使えばよりスマートに書けるようになるでしょう。 <mt:setvartemplate name="count_up"> <mt:setvar name="count_3_original" value="$count_3"> <mt:setvar name="count_5_original" value="$count_5"> <mt:if name="count_3" eq="2"><mt:setvar name="count_3" value="0"></mt:if> <mt:if name="count_3" eq="1"><mt:setvar name="count_3" value="2"></mt:if> <mt:if name="count_3_original" eq="0"><mt:setvar name="count_3" value="1"></mt:if> <mt:if name="count_5" eq="4"><mt:setvar name="count_5" value="0"></mt:if> <mt:if name="count_5" eq="3"><mt:setvar name="count_5" value="4"></mt:if> <mt:if name="count_5" eq="2"><mt:setvar name="count_5" value="3"></mt:if> <mt:if name="count_5" eq="1"><mt:setvar name="count_5" value="2"></mt:if> <mt:if name="count_5_original" eq="0"><mt:setvar name="count_5" value="1"></mt:if> </mt:setvartemplate> <mt:setvar name="count_3" value="1"> <mt:setvar name="count_5" value="1"> <mt:entries lastn="100"> <mt:setvar name="output_line" value="$__counter__"> <mt:if name="count_3" eq="...

January 12, 2008

詳説MTEntries

MTがなぜ大規模なテンプレートエンジンとアーカイブエンジンを持つに至ったかというと、全てはMTEntriesを動かすためといっても過言ではありません。 MTEntriesを制するものはテンプレートを制す、と言っても良いでしょう。 というわけで、MTEntriesのMT4.01での実装を、細かく調べてみました。 以下、MTEntriesの内部動作について気をつけたい点を一通り確認した後、実際のコードの流れを追う形で具体的な処理の詳細を見てみます。 概観 コンテキスト MTEnriesの行う重要な動作の一つに、モディファイアやコンテキストの指定をもとに、表示するべきエントリーを絞り込むことがあります。 コンテキストから読み取る情報については、以下の2種類に分類することが出来ます。 具体的なエントリー一覧として設定されているもの(キャッシュ) アーカイブに含まれるエントリーや、MTEntriesの外側のブロックタグで絞り込み済みのエントリーなど、直近の物が$ctx->{stash}{entries}に格納されています。 ロード済みの(メモリに格納された)エントリーの実体がある場合と、MT::Promiseによって、ロード内容をコードとして持っているが実行していない場合があります。 日付の範囲やカテゴリーなど、絞込みの条件指定 たとえば月別アーカイブでは、月の始まり 20071101000000 と月の終わり 20071130235959 が設定されています。 class MT4から導入された「ウェブページ」機能で作成されたページは、内部的にはエントリーとして保存されています。そのため、MTEntriesで扱おうとしているエントリーが、本当にエントリーなのか、それともウェブページとして作成されたものなのかを判別するためにclassという概念が導入されています。MTEntriesにはclassを判断するためのルーチンが含まれています。 フィルタ 各種絞込み条件は、「フィルタ」という形で適用されます。 フィルタは各種の条件に合わせて作成され、フィルタ一覧に格納されます。 そして、事前に用意された、表示候補となるエントリー一覧をフィルタリングします。候補中の各エントリーそれぞれに対してテストを行い、全てのフィルタを通過したエントリーのみを、実際に表示するエントリーとして登録する仕組みになっています。 動作の流れと詳細 大まかな動作の流れとしては、以下のようになります。 コンテキストとモディファイアを調整 フィルタを作成 エントリーの読み込み フィルタリング ソート ブロック内部をビルド ではいきます。 コンテキストとモディファイアを調整 いわゆる事前準備ですね。枝葉末節までだーっと箇条書きにしておきます。 最初に、sort_byモディファイアにscoreが指定されているにも関わらず、namespaceモディファイアが無い場合、エラーを発生させて終了する、という処理があります。 続いて、複数ブログの指定を展開します。blog_id、blog_ids、include_blogs、exclude_blogsなどのモディファイアが絞込み条件に適用されます。問題があった場合はエラーを発生させて終了します。 以下の条件を満たしている場合、キャッシュを破棄します。 class_typeモディファイアでのclassの指定と、キャッシュされているエントリーのclassが異なっている場合 次のモディファイアのうちのいずれかが指定されている場合('category', 'categories', 'tag', 'tags', 'author', 'id', 'days', 'recently_commented_on', 'include_subcategories') ここで内部動作的な処理として、テンプレート上でのoffset指定がautoで、かつ再構築実行時のCGIのクエリにoffsetという指定があったら、cgiのクエリを反映させるという処理が入ります。 モディファイア「limit」の値がautoなら、ブログの設定にある「ブログ記事の表示数」を絞込み条件に反映させます。また、limitにauto以外の指定があった場合は、モディファイアlastnをlimitの値で上書きします。 この時点でキャッシュが存在しない、かつモディファイア「category」が設定されていない場合、コンテキストにカテゴリーの設定があると絞込条件に反映されます。(モディファイア「categories」は見ない) フィルターの作成 カテゴリ カテゴリのフィルタを作成します。以下の優先順位で指定が存在するかを検査していき、最初に見つかった指定に基づいてカテゴリーのフィルタが作成されます。 モディファイアcategory の指定 コンテキストの mt_categories の指定 コンテキストの archive_category の指定 モディファイア categories の指定 モディファイア「category」「categories」には「AND」「OR」「NOT」を使った複数の条件が指定できます。 タグ 続いてタグによるフィルタの作成です。 モディファイア「tag」または「tags」の指定があれば、タグフィルタを作成します。重複して指定がある場合は「tag」の指定のみが有効になります。 モディファイア「tag」または「tags」には、「AND」「OR」「NOT」を使った複数の条件が指定できます。...

January 10, 2008

MTSetHashVarとMTSetVarsを組み合わせて使いたい。

MTSetHashVar | テンプレートタグリファレンス MTSetHashVarというブロックタグが追加されるらしい。 ブロックタグ内でのMTSetVarタグの振る舞いが、特定のハッシュのキーに対する代入に相当する動作になる、という便利そうなタグだ。詳しくは上のリンク先のドキュメント参照してください。 しかし、現在のリポジトリ上の最新のコードで、MTSetVarsと組み合わせて使うことが出来ない。 これは今のところダメ↓ <mt:SetHashVar name="zep"> <mt:SetVars> vocal=plant guitar=page bass=jones drums=bonzo </mt:SetVars> </mt:SetHashVar> ... <mt:var name="zep{drums}"> #うまく代入できておらず、出力が空文字列になってしまう こういった書き方が出来る事を期待して、後輩の前でかっこよさげに月の表示を陰暦で書き出すというカスタマイズを「かんなづきいー」とか叫びながらやってみたところ出来なかったので色々となっかりした。...

January 8, 2008

GregPacker'sPublishingを試してみた。

再構築なんてこわくない! (Junnama Online (Mirror))でRebuildAt1stViewプラグインの最新版が公開されていたので、インストールしてみた。 実は記事中の「GregPacker'sPublishing」という名称は自分が考えたのだが、そのくせこれまでプラグインを使ったことは無かった。すみません。 で、今回インストールしてみた感想。すっげえ良い。ここまで快適だとは思っていなかった。 このブログはSQLiteで運用しているのだが、MT標準のダイナミックパブリッシングはSQLite環境では利用できない。(PHPの標準ライブラリが非対応のため。SQLite2では利用可能。詳しくはMT 4.0をpdo_sqliteに対応 (ただし非公開) - Ogawa::Memorandaを参照。) そのため、これまでずっと長時間の再構築に耐えてきたわけですが、その呪縛からも開放されました。再構築に要する時間が10秒以下とはどういうことか。今までの苦難の日々はなんだったのか、と言いたいです。 そのうえ、Perlで再構築されるので、プラグインのphp対応を考慮する必要も無い。 良い事ずくめですねー。 ただ、インストールがちと難しいので、手順について後でまとめてみるつもりです。 新しく追加されたというタスクでの物理再構築については、ちょっと疑問。製作現場的な視点での機能追加との事ですが、一般ユーザーはむしろサイトを最新の状態に保つために、定期的にファイルを削除したいんじゃないかしら。その辺は選択できるようになると良いですね。...

December 21, 2007

MT4.1b1aにアップグレードしてみた。

とりあえず後先考えずに入れ替えてみた。巷で言われていたようなアップグレードでのエラーも無く、すんなり。...

December 16, 2007

MTOS4.1Boomerで追加されたテンプレートタグ調べました。

ついに公開されたMTOS。本家MTから削られる機能は無いどころか、機能追加された最新版がオープンソースとして公開される模様です。 あちこち機能追加があるようですね。色々仕事そっちのけで触ってみていますがおもしろいです。 テンプレートタグも、結構な数が追加されているようです。以下、特に気になったいくつかのタグを、実際に試してみました。 MTFor 指定した回数繰り返すブロックです。あると間違いなく便利なタグですねー。 次のようなモディファイアが利用できるようです。「|」で区切ったものは、同じ動作と思われる物です。 from | start to | end increment | step glue var 以下のようなテンプレートの出力は、 <mt:for start="2" end="10" step="2" var="loopnumber"> <mt:getvar name="__counter__">番目のループ、数字は<mt:getvar name="loopnumber">です。</mt:for> このようになります。 1 番目のループ、数字は2です。 2 番目のループ、数字は4です。 3 番目のループ、数字は6です。 4 番目のループ、数字は8です。 5 番目のループ、数字は10です。 MTIncludeBlock ちょっと難しそうなブロックタグ。どうやらブロックの内側のテンプレートをビルドした結果を、contentsという変数に設定した上で、モジュールやファイルのインクルードを実行するようです。 たとえば、以下の内容で、「staybold」という名前のモジュールテンプレートを作成します。 <b><mt:getvar name="contents"></b> で、テンプレート中で以下のように利用すると <mt:includeblock module="staybold"> <mt:blogname> </mt:includeblock> こう出力されます。 <b> My First Blog </b> これまた新機能のグローバルテンプレートと組み合わせると便利かもしれません。 右側のインクルードモジュールへのショートカットにリストされないですね。フィードバックしまっせ。 MTSetVars 複数の変数を一括で設定できるブロックタグです。一行に一つずつ、「変数名」=「値」と言う形で記述します。ブロックの中に書かれたMTタグも展開される模様です。 <mt:setvars> blogname=<mt:blogname> version=<mt:version> </mt:setvars> <mt:getvar name="blogname">は<mt:getvar name="version">で作成されています。 上記テンプレートの出力は次のようになります。 My First Blogはboomerで作成されています。 MTBlogTemplateSetID MT4....

December 13, 2007

mtosがベータテスト開始

ついにMTOS(オープンソース版のMovable Type)のベータテストが始まった模様です。 早速インストールしてみましたが、新規のインストールでは、特に致命的な問題も無く動いている模様。 ナイトリービルドをダウンロードすると英語版となりますが、subversionのリポジトリからexportして自前でmakeすれば日本語版のパッケージを入手することも可能です(もともとログインユーザーごとに言語設定できるので、大きな違いではないのですが)。MTのパッケージのmakeについては、こちらに解説があります。 Movable Type Open Source - MovableType.org - Home for the MT Community Anil Dashの、これまでのMovable Typeの歩みと、オープンソースにいたるまでの経緯についての記事が公開されています。興味深いので、あとでゆっくり読みたいと思います。英語ですが頑張ります。iKnow。 記事の最後、MTOSについての簡単なFAQがあったので、雑ですが訳してみました。 MTOSには、Movable Type 4.0 の全ての機能が含まれています。さらに、細かい追加機能やバグフィックスを含みます。 MT4で動作する全てのプラグイン、テーマ、テンプレート、デザイン、そしてAPIは、MTOSで動作します。MTOSは、また、memcachedのような他のSix Apart製のオープンソース技術と連携します。 MTOSは、ビルトインの機能だけで、無制限のブログの運用、無制限のユーザーの登録、OpenIDでのサインインが可能です。MTOSは、プラグインを必要とせずこれらの要件を満たせる、唯一のオープンソースのブログツールの一つです。 商用ライセンスのMovable Type にお金を払った人には、技術サポートや、プラグインやテーマなどのカスタムのアドオンを通じて、更なる利益を還元していきます。 MTOSは、私たちが販売するMTプラットフォームの上位にあたる、Enterprise SolutionやCommunity Solution、個人、商用ライセンスのような、技術サポートを含む有償のソフトウェア製品に補完されています。 MTOSのコードを取得するための公開のSubversionリポジトリと、ナイトリービルドがあります。 公式の安定版がリリースされれば、movabletype.orgでも公開されるでしょう。 あなたがMTOSプロジェクトとMTのコミュニティに貢献する手段は、movabletype.orgで見つけられるでしょう。 MTOSのサポートは、コミュニティのメンバーによって提供されます(新しい Movable Type Wikiは、良いスタート地点です)。Six Apartからのプロフェッショナルなサポートを希望する場合、既存のMovable Type 製品の有償標準ライセンスを購入することが可能です。 Movable Type Open Sourceは標準GPLライセンスの下にリリースされています。 私たちは、他のオープンソースプロジェクトでの、MTOSの全体または一部の再配布と再利用を、歓迎し、また、応援します。あなたが一緒に仕事をしたいなら、コンタクトください。...

December 13, 2007