Results tagged “Movable Type”

BuildTracer 0.3 出来ました。

  • Posted on
  • by

BuildTracer0.3.zip

ちょっと気合入れてインターフェイスを改造してみました。

bt0.3-screen.png

なんだかデバッガぽくなってきた気がします。

使い方はこんな感じ。

bt0.3-screen-inst.png

ちょっと重いのが難点です。

<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 ">
<mt:getvar name = "boo" capitalize = "1" strip = "-" />
値には小なり「<」大なり「>」記号を含めることが出来る
実はMT4.1から。それ以前は大なり「>」を含めることが出来ませんでした。
<mt:setvar name="goo" value="<fizz><buzz>">
nameキーは省略可能
<mt:getvar goo>
これは、
<mt:getvar name="goo">
と同じ意味となります。
カンマ区切りで配列を渡せる
<mt:setvar moo value="fizz","buzz">
区切りはコロンでもOKです。
<mt:setvar weekdays value="sun":"mon":"tue":"wed":"thu":"fry":"sat">
なお、配列を指定する場合は、クオート(''や""の括り)が必須となります。
実際にモディファイアに直接配列を指定できるケースというのはそう多くは無いのですが、Entriesのidモディファイアや、regex_replaceグローバルモディファイアで利用することが出来ます。
<mt:entries id="1":"3":"5">
    <mt:entrytitle>
</mt:entries>
<mt:getvar boo regex_replace="/z/g","k">
$記号で変数展開
<mt:setvar doo value="foo">
<mt:getvar name="$doo">
これは、変数「foo」の値が出力されます。
この変数展開は、配列に対しても有効です。
<mt:setvars>
pattern=/z/g
replace=p
</mt:setvars>
<mt:getvar boo regex_replace="$pattern","$replace">
なお、[]や{}による配列やハッシュへのアクセスは、あくまで「mt:setvar」「mt:getvar」のタグに固有の機能となりますので、今回は調べませんでした。
おわり。

BuildTracer0.1

  • Posted on
  • by

ハッカソンからこっち、すっかりMT三昧の日々です。
中でも、ちょこちょこ作ってきたプラグインが形になってきたので、公開してみます。

buildtracer_tracer2.png

MTの再構築の結果を構造化して表示します。
自分で言うのもなんですが、MTerの方はなんとなく見るだけでも面白いと思うのでお試し下さい。

あ、ちょっとですが副作用があるので、気をつけてお使い下さい。

アイコンの設置と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()
                created_on: issued/child::text()

Action Streams!

  • Posted on
  • by

SixApartから登場した新しいプラグイン、Action Streams がステキすぎます。

自分もいくつか似た様なものを作っていましたが、こっちのほうがよさそうですね。

さて、早速導入してみたのですが、導入に関して何箇所かつまずいたところがあったので、注意点をまとめておきます。

文字コードは UTF-8 で!

現在のバージョンでは文字コードの変換を行ってくれないようです。このブログは euc-jp で公開していたのですが、見事に取得したActionが文字化けしてくれました。
多分何も文字コードを操作していないと思うのですが、twitterやvoxに日本語をポストしている場合はutf-8で返ってくるようですので、MT側もutf-8なら問題ないようです。
文字コードが異なる状態でActionStreamsが動作してしまった場合、文字化けした状態のActionやタグが登録されてしまい、後の作業での障害になる場合があります。特に文字化けしたタグは削除することが容易ではないので、必ず事前に、導入する MT の文字コードがutf-8であることを確認しましょう。


自分の場合は、かねてからutf-8にしたいと考えていたので、無理やり文字コードを変更しました。こちらの記事が参考になりました。

追記: あー、どうもあちこちおかしいと思ったら、Storableされてるメタデータやプラグインデータがぶっ壊れたかも。ふむう。DBのダンプをnkfではダメみたい。なにか違うやり方を考えないと。

テンプレートセットを適用するときはユーザーの言語設定を英語に!

ActionStreamsプラグインは、専用のテンプレートセットを提供してくれます。が。こちらもローカライズが一部問題あるようです。
以下の手順で、テンプレートが中途半端に日本語化されないようにしましょう。

  1. プロフィール画面を開く。管理画面右上の「こんにちは(ログイン名)さん」から開けます。
  2. 使用言語を英語にして保存
  3. テンプレートセット「ActionStream」を使って新規ブログを作成

テンプレートセットの適用後は、言語設定を日本語に戻してしまっても問題ありません。

Actionが少ないと寂しい!

えー。
・・・・・・頑張ってついったりヴぉくすったりします。


ではでは。

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

  • Posted on
  • by

SixApartさんにお邪魔して、MTハッカソンに参加させていただきました。
前回も参加したので、なんとなくわかっていたのですが、まあ、本当にひたすらハックする集まり。
誰もが(普段以上に)黙々とハックしておりました。

勿論、名だたるMTハッカーが集まっているのでちょっとした質問議論から大いに盛り上がることもあり。(o)さんがホワイトボードにメモしながら説明している風景などは、見ていて胸に来るものがありました!

MT4.1リリース

  • Posted on
  • by

RC2が公開されたと思うまもなく、MT4.1の正式版が公開されました。早速アップグレードして記事を書いています。
このタイミングでリリースしたという事は、あさってのhackathonで新機能祭りをやろうということですね。僕も参加します。楽しみです。

全体的な印象として、がっつり変化したMT4.0の時よりも、ちょっとした管理画面のレイアウトの変化など、細部までこだわった観が感じられます。すばらしい。

夏のMT4公開時の技術者カンファレンスでBrad Choateは、MT4.1or2で「カスタムフィールド」「テンプレートセット」「リビジョンログ機能」を追加したいと語っていましたが、このうちの二つが早くも実現したことになります。すばらしい。

これからもすばらしいソフトを作り続けてください。開発チームのみなさま、お疲れ様でした!

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="check" value="2">
<mt:getvar name="is_prime" regex_replace="/(^\s*|\s*$)/mg":"">
 
<mt:setvar name="num" value="111">
<mt:setvar name="check" value="2">
<mt:getvar name="is_prime" regex_replace="/(^\s*|\s*$)/mg":"">
 
<mt:setvar name="num" value="113">
<mt:setvar name="check" value="2">
<mt:getvar name="is_prime" regex_replace="/(^\s*|\s*$)/mg":"">

実行結果は以下のようになりました。

71 は素数だった!
109 は素数だった!
111 は 3 で割り切れたので素数じゃなかった!
113 は素数だった!

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="0"><mt:setvar name="output_line" value="fizz"></mt:if>
    <mt:if name="count_5" eq="0"><mt:setvar name="output_line" value="buzz"></mt:if>
    <mt:if name="count_3" eq="0">
        <mt:if name="count_5" eq="0">
            <mt:setvar name="output_line" value="fizzbuzz">
        </mt:if>
    </mt:if>
    <mt:getvar name="output_line">
    <mt:getvar name="count_up">
</mt:entries>

詳説MTEntries

  • Posted on
  • by

MTがなぜ大規模なテンプレートエンジンとアーカイブエンジンを持つに至ったかというと、全てはMTEntriesを動かすためといっても過言ではありません。
MTEntriesを制するものはテンプレートを制す、と言っても良いでしょう。

というわけで、MTEntriesのMT4.01での実装を、細かく調べてみました。

以下、MTEntriesの内部動作について気をつけたい点を一通り確認した後、実際のコードの流れを追う形で具体的な処理の詳細を見てみます。

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}">   #うまく代入できておらず、出力が空文字列になってしまう

こういった書き方が出来る事を期待して、後輩の前でかっこよさげに月の表示を陰暦で書き出すというカスタマイズを「かんなづきいー」とか叫びながらやってみたところ出来なかったので色々となっかりした。

そういえば、各種日付フォーマットも外から弄れないので、何とかしたいですなあ。

GregPacker'sPublishingを試してみた。

  • Posted on
  • by

再構築なんてこわくない! (Junnama Online (Mirror))でRebuildAt1stViewプラグインの最新版が公開されていたので、インストールしてみた。

waiting_for_iphone.png

実は記事中の「GregPacker'sPublishing」という名称は自分が考えたのだが、そのくせこれまでプラグインを使ったことは無かった。すみません。

で、今回インストールしてみた感想。すっげえ良い。ここまで快適だとは思っていなかった。
このブログはSQLiteで運用しているのだが、MT標準のダイナミックパブリッシングはSQLite環境では利用できない。(PHPの標準ライブラリが非対応のため。SQLite2では利用可能。詳しくはMT 4.0をpdo_sqliteに対応 (ただし非公開) - Ogawa::Memorandaを参照。)
そのため、これまでずっと長時間の再構築に耐えてきたわけですが、その呪縛からも開放されました。再構築に要する時間が10秒以下とはどういうことか。今までの苦難の日々はなんだったのか、と言いたいです。
そのうえ、Perlで再構築されるので、プラグインのphp対応を考慮する必要も無い。
良い事ずくめですねー。

ただ、インストールがちと難しいので、手順について後でまとめてみるつもりです。

新しく追加されたというタスクでの物理再構築については、ちょっと疑問。製作現場的な視点での機能追加との事ですが、一般ユーザーはむしろサイトを最新の状態に保つために、定期的にファイルを削除したいんじゃないかしら。その辺は選択できるようになると良いですね。

何はともあれすばらしいプラグインをありがとうございます。

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

色々弄りたいけど、鼻炎止めのクスリが効いてやたらと眠いので今日はこれまで。ぐー。

ついに公開されたMTOS。本家MTから削られる機能は無いどころか、機能追加された最新版がオープンソースとして公開される模様です。
あちこち機能追加があるようですね。色々仕事そっちのけで触ってみていますがおもしろいです。

テンプレートタグも、結構な数が追加されているようです。以下、特に気になったいくつかのタグを、実際に試してみました。

mtosがベータテスト開始

  • Posted on
  • by

boomer20071212_2.pngついにMTOS(オープンソース版のMovable Type)のベータテストが始まった模様です。
早速インストールしてみましたが、新規のインストールでは、特に致命的な問題も無く動いている模様。

ナイトリービルドをダウンロードすると英語版となりますが、subversionのリポジトリからexportして自前でmakeすれば日本語版のパッケージを入手することも可能です(もともとログインユーザーごとに言語設定できるので、大きな違いではないのですが)。MTのパッケージのmakeについては、こちらに解説があります。


boomer20071212_1.png

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の全体または一部の再配布と再利用を、歓迎し、また、応援します。あなたが一緒に仕事をしたいなら、コンタクトください。

詳細は、こちらで確認してください、とのこと。

TagMan 0.1

  • Posted on
  • by

何だか久しぶりの更新になってしまいました。

以前作りかけて放置していたプラグインを公開します。
テンプレート編集画面に、テンプレート内で使用されているタグの一覧を表示します。タグリファレンスへのリンクになっているので、ちょっと便利かもしれません。

tagman_capture.png

ダウンロードはこちらから blog.aklaswad.com: TagMan


web activities on October 9, 2007

  • Posted on
  • by

09:16:49 on Hatena Bookmark

裸眼
[増田][読み物] シュレーディンガーの乳首・・・か。

09:32:20 on Hatena Bookmark

やっとできたぜ。。 - 因果の螺旋
[movable type][xrea] CMSへの自動広告挿入対策

13:56:38 on Twitter

油そばを eat it! *Tw*