外部リソースへのアクセスを行うようなプラグインを作成するときに、OAuth認証を利用する必要がある場合があります。ぶっちゃけて言うと、7月からTwitterにアクセスするために必要になります。

OAuthによるアクセスについては、PostTwiOAuthなどで実現されていますが、プラグインごとに認証部分を再実装するのは面倒ですし、OAuthの性質上、プラグインのインストール後にそれなりの設定作業が必要になるため、エンドユーザー視点でも設定項目をプラグイン間で共有して欲しいのではないかと思います。

そこで、OAuthサービスプロバイダに関する設定のプラグイン間での共有や、Handshakeの実行、および取得したトークンの管理を行うプラグインを開発しています。

ドキュメントは、以下で準備を進めています。

プラグイン本体については、基本機能は実装済みですが、スタイリングやデザインの一部などは手つかずです。メインのAPI等の部分も、まだまだ改良の余地があるかと思います。今月末をメドに形にしたいと考えていますので、興味のあるプラグイン開発者の方は触ってみてください。フィードバック、パッチ、おしかり、ウェルカムです。このエントリのコメント/トラックバックや、githubのITSまで連絡いただければ幸いです。

今回のアップグレード/リニューアル作業で、Archive Indexページにちょっとしたカスタマイズをしてみました。 見ていただければわかると思うのですが、月別アーカイブ一覧のリストの項目をクリックする事で、その月のエントリー一覧を展開する事が出来るようになっています。 予告通り、カスタマイズの詳細を公開しておきます。

MT5にアップグレードした

MT4 + SQLite >> MT5 + SQLite >> MT5 + MySQL と長い旅路を経てようやく(今更)MT5にアップグレードできました。
色々無茶な拡張を重ねていたので、convert-db実行時に一部データが消失したり等、いくつかのトラブルが発生しましたが、懸念していた文字化けなど、MT本体についてMT4からMT5で大きな変更があった点については、問題なく作業が進みました。一般的な環境での作業なら、ほぼノートラブルでアップグレード出来るのではないかと思います。

幾つかプラグインをドロップしたので、テンプレートもそのままでは再構築できず。えいっとPicoベースに変更しました。すっきりしていて好みのデザインです。
久々にテンプレートのカスタマイズをして、普段使わない脳みその部位が脳肉痛です。Archivesのページでは、前から考えていたAjaxを使ったツリー展開を試してみました。なかなか軽快に動作しているので満足しています。このカスタマイズは後で手順をまとめておこうと思います。乞うご期待!

という事で、ゴールデンウィークのまっただ中、丸一日MTと戯れてマジ楽しい一日でした。

簡単なTwitterのbotを作ってみようと思ったのですが、普通にperlとかで書くのもつまらないので、MTMLでボットを書けるようなプラグインを作ってみました。

右上の「Download Source」ボタンからダウンロードできます。なかなかサックリ書けたと思います。

そして、早速、占いをするボットを作ってみました。

Twitterで@mturanaiあてに投稿すると、占いらしき返事を返します。お暇な方は遊んでみてください。

以下プラグインの説明。

MT5がリリースされ、MT関連のイベントも賑やかになってきました。
ここ何週間かの間に、いくつかのMT関係のイベントに参加しました。ずいぶん遅くなってしまったものもありますが、まとめてレポート書きたいと思います。

第1回MT5勉強会

Dakinyさん主催の、有志による勉強会です。 MT5.0リリースの直後に行われたところに、無理矢理参加させていただきました。急な参加をお願いしてしまい、運営の皆様には大変ご迷惑をおかけしたと思います。有り難うございました。

ワークショップでは、テーマ作成のテーブルに参加させていただきました。
自分の作業を進めつつ、時にはテーマ機能のいろんな側面に関してディスカッションになったり、現場で想定される運用について貴重な意見をいただいたり、すごく勉強になりました。
なお、いくつかの点で動作がおかしいという指摘を頂き、原因が分からず後半はかなり挙動不審になってた事をお詫びいたします。バグ怖いねん。

その後の懇親会では、すごく楽しい時間を過ごさせていただきました。

Movable Type エンジニアの夕べ

続いて、スカイアークさんの主催の、MT関係のエンジニアで集まってのライトニングトーク大会+MTカルトQというイベントに参加しました。

ここでは、僕もLTに参加させていただき、個人的に作成しているネタ系(?)プラグインのTagOverrideを紹介させていただきました。

他の方のLTも、興味深いものばかりでした。

そしてクイズ大会!
全十問で、シックスアパートのロゴはどれかと言うような、間違うはずが無い!問題から、実在しないコールバックポイントはどれかという技術的カルトクイズまで盛りだくさんで、非常に楽しめました。

いや、始まる前は全問正解余裕すぎると思っていたのですが。
言い訳ですが、なんか問題文を見てると「あれ、あのコールバックは実装されている筈だけど、実はバグで動いていないという引っかけ問題なのでは・・・!?」と疑心暗鬼になってしまい。バグ怖いねん。
結果、トップに一歩及ばずの八問正解でした。
優勝されたoscarさん(ネタにさせてもらってすみません)、同率首位ながらおしくもジャンケンで敗れたにっくさん、参りました。おめでとうございます!

懇親会は、これまた楽しかったです。BodyMoreってエ(謎)。
その後はあまり記憶がありません。平日なのに。

Movable Type Designers and Developers Conference in Osaka

day1

MTのリリース恒例のカンファレンス第一弾がなんと、初の大阪遠征というかたちで行われました!
それもカンファレンスとハッカソンの2Daysです。

カンファレンスでは、テーマ機能についてお話しさせていただきました。プレゼン資料はこちらからご覧いただけます。

テーマの冒険

また、テーマ機能のデモンストレーションを兼ねて、プレゼン資料の作成に特化したテーマ「Slidon」を作成したうえで、MT上でプレゼン資料を用意するという試みを行いました。
資料作成に利用したテーマも、ダウンロードしてお試しいただけたらと思います。

aklaswad's slidon at master - GitHub

上記リンク先ページで、「download」ボタンをクリックしてダウンロードしてください。「Slidon」テーマは、今後も継続的に開発を進めていけたらと思います。

また、後半のライトニングトークでは、mt-tmpl-testというツールについても発表しました。資料も無く、かなり分かりづらい発表になってしまった事をお詫びいたします。ある意味BuildTracerの兄弟的な位置づけのツールでもあるので、機会があれば改めてエントリーを書けたらと思います。

その後の懇親会は以下略。沢山次会しました。

day2

二日目はハッカソン。前半ではawayukiさんとマルチドメインでのMTの運用について考えつつ、後半はBuildTracerのMT5対応版を作ってました。
BuildTracerについては、色々技術的な困難を抱え込んでしまい、なかなか解決できないまま終了。。。MT5対応にはもう少し時間が必要なようです。
ハックタイム終了後は、ビール飲みつつワイワイガヤガヤと成果発表会。楽しかったです!
会場をお貸しいただいたアルファサードJunnamaさん、okayamaさんには本当にお世話になりました。有り難うございました!

余談

ハッカソン中に、カンファレンスで使用した、MTで出力したスライド資料をまとめていました。
その際、ブログのテンプレート中でBlogURLやAssetURLを利用していると、リンクが絶対URLで作成されてしまい、配布には向かないという状況になりました。
その時「あれ、これってTagOverrideで無理矢理タグの出力を相対パスに変換すれば解決できるんちゃう」と閃きまして。ちょっとした試行錯誤の末、上手い事出来たんです!
いやあ、ネタ思いつきで作ったプラグインでも、きちんと役に立つ場面があるもんですね。

※ ハッカソン中、上記閃きに関して自分自身を絶賛するような独り言がうるさかった事をお詫びいたします。

MT形式のエクスポート用に出力をエスケープする - 刺身☆ブーメランのはてなダイアリー

そうか。MTのエクスポート形式って業界標準なのか。。。

エスケープ結果を復元するコードが無かったので自分で書こうとしたが、もとのコードだとエスケープ後のデリミタと同じパターン(-----<>など)が元の文字列に存在した時に、正確に復元できないという問題に気づいたが、あきらめて風呂に入っているうちに解決策を思いついた。
文字列中のすべての「-」のみの行を3倍とかに変更してしまえば、安全にエスケープでき、かつラウンドトリップ可能となるはずです。3倍なのは本来のデリミタ( '-' x 5 || '-' x 8 )と重複しないためで、彗星と直接の関係ありません。

実際には、後方互換性が必要になる(このエスケープ形式に対応していないインポーターでも違和感無く読み込めるのが理想)ので、実戦投入は無理でしょう。
元記事のほうでは、HTML表示した場合に見た目変化が無いように空タグっぽい<>を末尾に追加したのだと思うのですが、MTなんかでは最終的な出力先がHTMLとは限らないので、良く無い事が起こりそうな気もします。デリミタと重複する行の末尾にスペースを一個追加してしまう、というあたりが落としどころになるのでしょうか。

TagOverride

  • Posted on
  • by

勢いで書きました。後悔はしてません。
MTML自身で、既存のMTタグの動作を上書きする事ができるプラグインです。使い道はちょっと未知数ですが、なんとなく役に立つ使い方も出来るのでは無いかと言う気がします。役に立つと良いなあ。。。

現在の所、MT5.x 専用です。最新版は、以下のページからダウンロードできます。

「$pkg = '$Core::MT::CMS::'」と宣言されているから、 「${pkg}Dashboard::dashboard」というのは「$Core::MT::CMS::Dashboard::dashboard」 のことだと思う。

で、この「$Core」というのが何なのかわからない。

カレントのComponentをFooにセットしてから、Bar::buzを実行してくれ、という意味になります。
上の例で言えば、カレントのComponentとして'Core'を設定した上で、MT::CMS::Dashboardパッケージのdashboardメソッドを実行しろ、ということです。

久しぶりの更新。テンプレート系のコネタです。
ActionStreamsのいくつかのプラグインでは、別途ThumbnailのURLを取得して専用のフィールドに保存してくれますが、そうではない場合もあります。
特にソーシャルブックマーク等のサービスの場合には、そもそもコンテンツとそのサムネイルの関係が事前に分からないため、何もしてくれません。
でもまあ、自分の行動範囲で、URLからサムネイル画像のURLが推測できる範囲なら何とかなるんじゃないか。
そこで、MTMLで無理矢理やっつけてみました。

まず、以下のようなテンプレートを、モジュールテンプレートとして作成します。
前半のmt:setHashVarタグのなかに適当に正規表現をつっこむと対応サイトが増やせます。とりあえずyoutubeとniconico、amazonだけ作りました。検証してないので、取りこぼしや誤作動があるかもしれません。

<mt:setHashVar urls>
<mt:setvar youtube  value="http\://[^\.\/]+\.youtube\.(jp|com)/watch\?v=([0-9a-zA-Z\-]{11})","http://img.youtube.com/vi/$2/default.jpg" />
<mt:setvar niconico value="^http\://www\.nicovideo\.jp/watch/[sn]m([0-9]{1,9})","http://tn-skr2.smilevideo.jp/smile?i=$1" />
<mt:setvar amazon   value="^http\://www\.amazon\.(?:co\.jp|com)/.*(?:ASIN|product-description|product|dp)/([^/]+)(?:/.*)*","http://images.amazon.com/images/P/$1.09._THUMBZZZ_.jpg" />
</mt:setHashVar>
<mt:loop urls>
<mt:setVarBlock check><mt:getVar var="__value__[0]"></mt:setVarBlock>
<mt:setVarBlock pattern>/<mt:getVar var="__value__[0]">/</mt:setVarBlock>
<mt:setVarBlock replace><mt:getVar var="__value__[1]"></mt:setVarBlock>
<mt:if url like="$check"><mt:var url regex_replace="$pattern","$replace"></mt:if>
</mt:loop>

上のを保存したら(仮に「URL2Image」という名前で保存したとします)、ActionStreamsの表示側で、次のようにインクルードします。
変換対象となるURLを、モディファイアのように渡してください。

<mt:if tag="StreamActionThumbnailURL">
    <mt:StreamActionThumbnailURL />
<mt:else>
    <mt:setvarblock name="link"><mt:StreamActionURL /></mt:setvarblock>
    <mt:setvarblock name="thumb"><mt:include module="URL2Image" url="$link" trim="1" /></mt:setvarblock>
    <mt:if thumb><img src="<mt:var name="thumb" />" /></mt:if>
</mt:if>


このブログのメインページに表示しているライフログでも、Youtubeのビデオのブックマークなんかで画像が表示されるようにしてあるので、参考にしてみてください。

今回は、画像のみに絞ったカスタマイズにしましたが、やり方によってはembedタグにしたりアフィリエイトリンクにしたり色々出来ると思います。もちろんActionStreams以外の色々にも利用できると思います。お好みで工夫してみてください。

変換後のURLの前後に半角スペースが混じるとの指摘をいただきましたので、呼び出し側でtrimモディファイアを追加する形で対応しました。
<mt:include module="URL2Image" url="$link" trim="1" />
また、hvc-001さんにご指摘いただき、ニコニコ動画用の正規表現を一部修正しました。トラックバックありがとうございました!