<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
    <channel>
        <title>blog.aklaswad.com</title>
        <link>http://blog.aklaswad.com/</link>
        <description></description>
        <language>ja</language>
        <copyright>Copyright 2008</copyright>
        <lastBuildDate>Thu, 07 Aug 2008 01:15:00 +0900</lastBuildDate>
        <generator>http://www.sixapart.com/movabletype/</generator>
        <docs>http://www.rssboard.org/rss-specification</docs>
        
        <item>
            <title>「Movable Type 4.2 パーフェクトガイド」にBuild Tracerが掲載されてます。</title>
            <description><![CDATA[<p><a href="http://www.koikikukan.com/">小粋空間</a>のyujiroさんの著書<a href="http://www.amazon.co.jp/Movable-Type-4-2-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89-%E5%8B%87%E6%AC%A1%E9%83%8E/dp/4839927790%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dblogaklaswadc-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839927790" target="_blank">Movable Type 4.2 パーフェクトガイド</a>が発売になりました。おめでとうございます!<br />
しかも、一冊戴いてしまいました。ありがとうございました!</p>

<p><a href="http://www.amazon.co.jp/Movable-Type-4-2-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89-%E5%8B%87%E6%AC%A1%E9%83%8E/dp/4839927790%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dblogaklaswadc-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839927790" target="_blank">Movable Type 4.2 パーフェクトガイド</a><br />荒木 勇次郎<br /><a href="http://www.amazon.co.jp/Movable-Type-4-2-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88%E3%82%AC%E3%82%A4%E3%83%89-%E5%8B%87%E6%AC%A1%E9%83%8E/dp/4839927790%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dblogaklaswadc-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839927790" target="_blank"><img src="http://ecx.images-amazon.com/images/I/31VAjKmpxAL._SL160_.jpg" border="0" alt="4839927790" /></a><img src='http://www.assoc-amazon.jp/e/ir?t=blogaklaswadc-22&l=ur2&o=9' width='1' height='1' border='0' alt='' /><br /></p>

<p>時間を見ては目を通しているのですが、本当にすごいボリュームです。しかも、随所にコラムとして関連情報へのポインタが含まれていて、情報の密度も半端じゃないです。手に取った瞬間に、並大抵ではないエネルギーが費やされている一冊だと分かります。すばらしいです。<br />
改めてyujiroさん、お疲れ様でした。</p>

<p>それでですね。なんと!パーフェクトガイド内で、当サイトで公開しているプラグイン<a href="http://blog.aklaswad.com/mtplugins/buildtracer.html">Build Tracer</a>が紹介されています。しかも、通常のプラグイン紹介とは別枠で、パーフェクトガイドのメインともいえるテンプレート解説の冒頭付近に一ページ強を割いて掲載されていました。見た瞬間変な汁が出ました。<br />
あの<del>超ニッチな</del>プラグインを取り上げられるとは、これは、自分も頑張らなくちゃとやる気がたくさん出ました。ありがとうございました!</p>

<p><ins datetime="2008-08-08T00:50:50+09:00">IndexContextプラグインもピックアップされてました。うぇーい。</ins><br />
</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000435.html</link>
            <guid>http://blog.aklaswad.com/2008/000435.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Build Tracer</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
            <pubDate>Thu, 07 Aug 2008 01:15:00 +0900</pubDate>
        </item>
        
        <item>
            <title>TaggingHelper For MT4.2</title>
            <description><![CDATA[<p>そろそろ、当サイトで配布しているプラグインをMT4.2に対応させていく必要があるのですが、今回は色々動かなくなるものが多くて、頭を抱えています。</p>

<p>とり急ぎTaggingHelperを対応させました。まったくの暫定版なので、バージョン外とします。<br />
Movable Type / MTOS 4.2 でのみ動作します。また、タグの使用頻度順でのソートが出来ません。</p>

<p><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.aklaswad.com/mtplugins/TaggingHelperForMT4_2.zip">TaggingHelperForMT4_2.zip</a></span></p>

<p>今後の対応については、考え中です。</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000434.html</link>
            <guid>http://blog.aklaswad.com/2008/000434.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MT4.2</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">TaggingHelper</category>
            
            <pubDate>Wed, 06 Aug 2008 22:33:27 +0900</pubDate>
        </item>
        
        <item>
            <title>iPhone用テンプレートを導入してみました。</title>
            <description><![CDATA[<p>cremaさん作成の iPhoneテンプレート for MT を、このブログに導入してみました。iPod TouchやiPhoneをお持ちの方は、アクセスしてみてください。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="blogaklaswadcomimage.png" src="http://blog.aklaswad.com/images/blogaklaswadcomimage.png" width="320" height="480" class="mt-image-none" style="" /></span></p>

<p>テンプレートは以下のページで配布されています。すばらしいです。<br />
<a href="http://cremadesign.jp/blog/iphone/iphone_template_for_mt.html">「iPhoneテンプレートfor MT」を公開いたします。｜iPhone｜東京Webデザイナー日記リターンズ｜crema design</a></p>

<p>なお、 iPhoneテンプレートはブログURL内の「i」ディレクトリに出力する仕組みになっていますので、iPhoneでアクセスする時に専用のURLにアクセスする必要があります。<br />
このブログでは、インストールの際に以下のようなカスタマイズを行って、PCでの閲覧時と同じURLになるようにしてみました。</p>

<ul>
	<li>追加したiPhoneテンプレート内のトップページとブログ記事アーカイブへのリンクを、通常のものに書き直す。
	<ul><li>画像やcssファイルなどへのリンクは変更しない</li>
	<li>アーカイブマッピングは、「i」ディレクトリ内へ出力する設定のままにする</li></ul>
        </li>
	<li>ブログトップの.htaccessに以下を追加。</li>
</ul>
<pre class="code">
  RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod)
  RewriteCond %{REQUEST_URI} !^/i/
  RewriteRule ^(.*)\.html$ /i/$1.html [L]
</pre>

<p>.htaccessの記述は、利用しているサーバーによっては上手く動かないかもしれません。またその場合、即座にサイト全体が500エラーになってしまうような事態も考えられます。.十分注意して作業を行ってください。<br />
</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000433.html</link>
            <guid>http://blog.aklaswad.com/2008/000433.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Template</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
            
            <pubDate>Tue, 05 Aug 2008 15:00:00 +0900</pubDate>
        </item>
        
        <item>
            <title>mt:ifStaticとmt:ifDynamicは似て非なる物。</title>
            <description><![CDATA[<p>自分は、今見ているテストページがスタティックパブリッシングとダイナミックパブリッシングのどちらによる出力なのか、一目で分かるように、以下のような表示をさせておくことがあります。</p>

<pre class="code">このテンプレートは&lt;mt:ifDynamic&gt;ダイナミック&lt;mt:else&gt;スタティック&lt;/mt:ifDynamic&gt;で構築されました。</pre>

<p>いくらPerl弄っても動作が直らないと思ったらPHPのほうに問題があった。何を言ってい(ry等と言うことにならないためですね。</p>

<p>さて、ここでちょっとした罠があります。<a href="http://www.movabletype.jp/documentation/appendices/tags/ifdynamic.html">mt:ifDynamic</a>と対になるようなテンプレートタグ<a href="http://www.movabletype.jp/documentation/appendices/tags/ifstatic.html">mt:ifStatic</a>では、このような書き方は出来ません。</p>

<pre class="code">このテンプレートは&lt;mt:ifStatic&gt;スタティック&lt;mt:else&gt;ダイナミック&lt;/mt:ifStatic&gt;で構築されました。</pre>

<p>上記テンプレートは、スタティックでは期待通りに動きますが、ダイナミックでは以下のような出力になってしまいます。</p>

<blockquote>このテンプレートはで構築されました。</blockquote>

<p>原因は、mt:ifStaticタグのPHPでの実装が、テンプレートタグとしてではなく、コメント(のような)扱いになっているためです。<br />
&lt;mt:ifStatic&gt;・・・&lt;/mt:ifStatic&gt;の部分が、再構築より前に強制的にテンプレートから削除されてしまうんですね。なので、その中に何個mt:elseを書こうが、全部消えてしまうわけです。mt:ignoreと同じですね。</p>

<p>これはおそらくダイナミックパブリッシングでは、ページビューごとに構築が行われるため、より細部の高速化を重視しているものかと思われます。mt:ifStaticとmt:ifDynamicで非対称な動作となっているのでちょっと違和感がありますが、上手く使い分けると良いと思います。</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000432.html</link>
            <guid>http://blog.aklaswad.com/2008/000432.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">mt:ifDynamic</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">mt:ifStatic</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">tips</category>
            
            <pubDate>Fri, 01 Aug 2008 18:18:18 +0900</pubDate>
        </item>
        
        <item>
            <title>iPhoneに感じるワクワク感の正体が判明した。</title>
            <description><![CDATA[<p>購入以来、それはもう指紋の跡が消える暇が無いほど、むしろ俺の指紋が消えちまうんじゃないかと思うくらい触りまくってるiPhoneですが、最高です。<br />
バッテリーもとりあえず普段の会社往復の間は持つようだしアプリは楽しいしとりあえず生活圏ではwi-fiか3Gのどちらかは拾えるし余りに楽しいのでアプリ開発したくなって金無いのに真剣にMacBookの購入を検討し始めたりしてるわけです。</p>

<p>で、ですね。なんか、単純に外でウェブに繋がるとか、iPodと電話が一緒になったとか、そういう個々の具体的な機能についてとは、まったく別の次元のワクワク感を、iPhoneを触るたんびに感じるんですよ。</p>

<p>だって不思議じゃないですか?<br />
あの愛想の無い、ともすれば上下間違えてスリープボタン押せなかったりするのっぺらぼうなデザインのクセに、ひとたびロック解除すれば触る撫ぜる傾ける音が出る話す震える表示する移動する、と、あらゆる手段でのインターフェイスが提供されていて、およそコンピュータに出来そうな事ならいつ何時でも反応してくれる。<br />
それなのに電源切れば、ほとんどただの板。<br />
このギャップにスゲエワクワクするんです。</p>

<p><br />
そのワクワク感の正体が今日分かりました。気づきました。<br />
iPhoneって<a href="http://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E6%8E%A2%E5%81%B5%E5%9B%A3">東京探偵団</a>に出てきた「CJカード」を現実にしてしまったんだな、と。</p>

<p>東京探偵団ってのは「ギャラリーフェイク」や古くは「さすがの猿飛」「GU-GUガンモ」の作者の細野不二彦が書いていた、ホモの少年と守銭奴の少女とマゾの少年で構成される探偵事務所が超巨大財閥の金の力を後ろ盾にホモの中年が起こす事件を金の力で解決するという内容の傑作マンガです。<br />
wikipediaによると連載は'85-'87年ですので、当時自分は小6くらいで読んでたんでしょうか。</p>

<p>そのマンガの中で、探偵団の一人が落とした探偵団専用のスペシャルクレジットカード「CJカード」を貧しい家出兄妹が拾う、という話があるのですが、そこで描かれるカードの機能がとにかく凄いんですよ。<br />
クレジットカードとして勿論最強。何しろ日本に10枚と無い超スペシャルカード。限度額無限。取り出した瞬間即VIP待遇。<br />
そして、ここが大事なのですが、一見ただのクレジットカードなのに、ちょっとカードの端を触って操作すると、音楽が聴ける、ファミコンが出来る、ショッピングも出来る、テレカにもなる、位置情報も確認できる、お父さんに会いたいとカードに話しかければ、居場所を音声で答えてくれる。なんだか分からないくらいハイテクな色々が詰め込まれた超高機能カード。<br />
このエピソードの肝は、ただのカードなのに、家出兄妹の希望を次から次へと叶えていくという、そのファンタジーにあったと思います。そこで描かれていたものは、まさに「魔法のカード」でした。子供心に凄く憧れ、何度も読み返したことを今でも覚えています。</p>

<p><br />
そして20年が過ぎ、iPhoneが今、手の中にあります。<br />
ゲーム、音楽、電話。加速度センサー、GPS、そしてマルチタッチディスプレイ...。20年前のマンガに登場したファンタジー、子供だった当時の自分が憧れた魔法のほとんどが、この板状の小さいボディに実現されています。これは、ワクワクせざるを得ませんよね。</p>

<p>子供の頃のそんな記憶を思い出しながら、ぼーっと黒いiPhoneを眺めていると、これって本当「魔法のカード」と呼ぶにふさわしい代物だと思えてきてしまいます。そりゃカードと呼ぶには少々分厚くて大雑把ですが、少なくとも、電話の受話器から発展してきた携帯電話のデザインと比べて強いてどちらかといえば、間違いなくカードでしょう。</p>

<p>ぱっと見は何も出来なさそうなのに、ちょっと触るだけで万能的に要求に答えてくれるという感覚。<br />
これは、10キーのついた受話器の末裔たちからは絶対に感じ取ることの出来ない、特別な快楽なんじゃないかな、と思います。</p>

<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=blogaklaswadc-22&o=9&p=8&l=as1&asins=484010526X&fc1=000000&IS2=1&lt1=_blank&m=amazon&lc1=0000FF&bc1=000000&bg1=FFFFFF&f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>]]></description>
            <link>http://blog.aklaswad.com/2008/000430.html</link>
            <guid>http://blog.aklaswad.com/2008/000430.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">東京探偵団</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">細野不二彦</category>
            
            <pubDate>Fri, 25 Jul 2008 23:40:00 +0900</pubDate>
        </item>
        
        <item>
            <title>驚くほどあっさりとiPhoneをGetした。</title>
            <description><![CDATA[<p>そう、それは三日前の土曜日。驚くほどあっさりとiPhoneを入手できました。イエー。バッバッ。<br />
発売フィーバー直後、遅れて何件か量販店など回ってみたものの、カスリもしなかったので「これは厳しいな」と思っていましたところ。</p>

<p>発売から一週間後となる先週末。<br />
友人と遊ぶ予定もあって朝から開店待ちをするわけにも行かず、iPhoneを入手出来るのは当分先だなと諦めていた三連休初日の午後5時過ぎ。場所は23区内の某駅前。<br />
お遊びも一段落、これから飲みに行くぞ、という時に、ちょっとお金を下ろしに銀行に寄ったんですよ。<br />
で、その隣か隣の隣にソフトバンクショップがあったので、冷やかし半分で店員に聞いてみました。</p>

<p>「iPhoneの在庫はありますか」<br />
「ありません」</p>

<p>当然の答えが返ってきました。ですよねー。<br />
おおう。これで終戦。とも思ったのですが、明日以降のリサーチのために、入荷数や行列の様子などを店員さんに聞いてみました。すると、</p>

<p>「Softbank端末からの機種変更でしょうか?」</p>

<p>逆に質問が帰ってきました。<br />
質問を質問で返すんじゃねえぞとも思ったのですが、そこは<del datetime="2008-07-22T23:11:02+09:00">チキン</del>大人な自分なので</p>

<p>「いえ、iPhone目当てで他キャリアからソフトバンクさんに乗り換えようと決心しております!」</p>

<p>とかそんなことを言ってみました。すると、おおなんということでしょう。店員さん、急に張り切って<br />
「予約分のキャンセルが無いか、電話で確認してみますので、ちょっとお待ちいただけますかー」<br />
とか言いつつどこかへ走っていきます。</p>

<p>あれ、なにこの展開。<br />
大昔には、新規ゼロ円機種変万円なんて時代もあったけど、今でもそんなメソッド使えるの?とgkbrしながら待つこと数分。</p>

<p>「16Gのブラックでよろしかったでしょうかー」<br />
「2階の契約カウンターでお待ちいただけますかー」</p>

<p>なんと。ktkr。</p>

<p>後はあっという間でした。MNPの手続きから何から面倒見てもらって、30分程度で俺の手元に俺のアクティベーション済みの俺のiPhoneが。<br />
飲み会を半分すっぽかしてしまった友人には申し訳なかったが(合流後iPhoneネタで盛り上がったので良しとする)、こんな棚ボタでiPhoneをGetできた自分は超ラッキーだと思います。イエー。バッバッ。</p>

<p>結論としてはWinWinの関係が大事だよねービジ☆ネス、というお話でした。</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000429.html</link>
            <guid>http://blog.aklaswad.com/2008/000429.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">iPhone</category>
            
            <pubDate>Tue, 22 Jul 2008 23:35:00 +0900</pubDate>
        </item>
        
        <item>
            <title>iPhoneから投稿。</title>
            <description><![CDATA[<p>モバイルミー</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000428.html</link>
            <guid>http://blog.aklaswad.com/2008/000428.html</guid>
            
            
            <pubDate>Sat, 19 Jul 2008 22:33:07 +0900</pubDate>
        </item>
        
        <item>
            <title>googleの面接のパズルを颯爽と解いてみた。</title>
            <description><![CDATA[タイトルは99%関係ないんですがね。こういうパズル大好きなんですよ。

<blockquote>
1025   学名ナナシ  :2008年07月15日 21:46<br />
今までこれ系で一番難しかったのは、<br />
<br />
13枚のコインがあって、1枚だけ偽者があります。<br />
偽者は重いのか軽いのかはわかりません。<br />
天秤を3回だけ使ってどのコインが偽者か当てなさい。<br />
<br />
どうしても解けない...<br />
<br />
<a href="http://alfalfa.livedoor.biz/archives/51329664.html">googleの面接 : アルファルファモザイク</a><br />

</blockquote>

↓10分くらいで考えた回答
]]><![CDATA[<pre>
とりあえず、(1)から(13)まで番号を振る
(1)(2)(3)(4)と(5)(6)(7)(8)を天秤に乗せる

傾いたら
    残りの(9)-(13)は本物
    (1)(2)(3)(5)(6)と(9)(10)(11)(12)(13)を天秤に載せる
    傾いたら
        ここで偽者が重いか軽いかが判明
        かつ、一回目の結果を考えると、(1)(2)(3) OR (5)(6) のいずれに偽者が含まれるかも判明
        (1)(2)(3)に偽者が含まれるなら
            (1)と(2)を比較。
        (5)(6)に偽者が含まれる
            (5)と(6)を比較
    傾かなかったら
        (4)(7)と(12)(13)を比較
        傾いたら
            偽者が重いか軽いかが分かる。
            かつ、一回目の結果を考えれば、(4)と(7)のどちらが重いか分かるので、判定可能
        傾かなかったら
            (8)が偽者(重いか軽いかは分からず)
傾かなかったら
    残りの(9)-(13)に偽者が含まれる。(1)から(8)は本物
    (1)(2)(3)と(9)(10)(11)を天秤に
    傾いたら
        偽者が重いか軽いかが分かる
        (9)と(10)を天秤に
    傾かなかったら
        (12)(13)のいずれかが偽者
        (1)と(12)を天秤に
</pre>

で、perlで書いてみた。

<pre class="code">
#!/usr/bin/perl
use strict;
sub which_is_heavy {
    my ($left, $right) = @_;

    #この辺は本来ならブラックボックス
    my ($left_mass, $right_mass);
    map { $left_mass += $_ } @$left;
    map { $right_mass += $_ } @$right;

    return $left_mass > $right_mass    ? 'left'
            : $left_mass < $right_mass ? 'right'
            :                            'balanced';
}
 
sub get_fake_from_three {
    #偽者が重いか軽いか分かってれば3つのコインから一発で偽者を割り出せるよ関数
    my ($fake, @coins) = @_;
    if ($coins[0] > $coins[1] ) {
        return $fake eq 'heavy' ? 0 : 1;
    }
    elsif ( $coins[0] < $coins[1] ) {
        return $fake eq 'heavy' ? 1 : 0;
    }
    else {
        return 2;
    }
}
 
sub get_fake {
    my @c = @_;
    my $first_result = which_is_heavy( [ @c[0..3] ] ,[ @c[4..7] ] );
    if ($first_result eq 'balanced' ) {
        #0-7は本物
        my $second_result = which_is_heavy( [@c[0..2]], [@c[8..10]] );
        if ($second_result eq 'balanced' ) {
            #11,12が偽者
            my $third_result = which_is_heavy( [ $c[0] ], [ $c[11] ]);
            return $third_result eq 'balanced' ? 12 : 11;
        }
        else {
            #8-10に偽者かつ重いか軽いかが判明
            my $fake = $second_result eq 'left' ? 'light' : 'heavy';
            return 8 + get_fake_from_three($fake, @c[8..10]);
        }
    }
    else {
        #8-12は本物
        my $second_result = which_is_heavy( [$c[0],$c[1],$c[2],$c[4],$c[5]],[@c[8..12]] );
        if ($second_result eq 'balanced' ) {
            my $third_result = which_is_heavy( [$c[3], $c[6]], [@c[8..9]] );
            if ( $third_result eq 'left') {
                return $first_result eq 'left' ? 3 : 6;
            }
            elsif ( $third_result eq 'right' ) {
                return $first_result eq 'left' ? 6 : 3;
            }
            else {
                return 7;
            }
        }
        else {
            my $fake = $second_result eq 'left' ? 'heavy' : 'light';
            if ( ( $fake eq 'heavy' && $first_result eq 'left' )
              || ( $fake ne 'heavy' && $first_result ne 'left' ) ) {
                return get_fake_from_three( $fake, @c[0..2] );
            }
            else {
                if ( $fake eq 'heavy' ) {
                    return $c[4] > $c[5] ? 4 : 5;
                }
                else {
                    return $c[4] > $c[5] ? 5 : 4;
                }
            }
        }
    }
}
 
print get_fake( 3,2,2,2,2,2,2,2,2,2,2,2,2 ) . " will be 0\n";
print get_fake( 2,3,2,2,2,2,2,2,2,2,2,2,2 ) . " will be 1\n";
print get_fake( 2,2,3,2,2,2,2,2,2,2,2,2,2 ) . " will be 2\n";
print get_fake( 2,2,2,3,2,2,2,2,2,2,2,2,2 ) . " will be 3\n";
print get_fake( 2,2,2,2,3,2,2,2,2,2,2,2,2 ) . " will be 4\n";
print get_fake( 2,2,2,2,2,3,2,2,2,2,2,2,2 ) . " will be 5\n";
print get_fake( 2,2,2,2,2,2,3,2,2,2,2,2,2 ) . " will be 6\n";
print get_fake( 2,2,2,2,2,2,2,3,2,2,2,2,2 ) . " will be 7\n";
print get_fake( 2,2,2,2,2,2,2,2,3,2,2,2,2 ) . " will be 8\n";
print get_fake( 2,2,2,2,2,2,2,2,2,3,2,2,2 ) . " will be 9\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,3,2,2 ) . " will be 10\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,2,3,2 ) . " will be 11\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,2,2,3 ) . " will be 12\n";
 
print get_fake( 1,2,2,2,2,2,2,2,2,2,2,2,2 ) . " will be 0\n";
print get_fake( 2,1,2,2,2,2,2,2,2,2,2,2,2 ) . " will be 1\n";
print get_fake( 2,2,1,2,2,2,2,2,2,2,2,2,2 ) . " will be 2\n";
print get_fake( 2,2,2,1,2,2,2,2,2,2,2,2,2 ) . " will be 3\n";
print get_fake( 2,2,2,2,1,2,2,2,2,2,2,2,2 ) . " will be 4\n";
print get_fake( 2,2,2,2,2,1,2,2,2,2,2,2,2 ) . " will be 5\n";
print get_fake( 2,2,2,2,2,2,1,2,2,2,2,2,2 ) . " will be 6\n";
print get_fake( 2,2,2,2,2,2,2,1,2,2,2,2,2 ) . " will be 7\n";
print get_fake( 2,2,2,2,2,2,2,2,1,2,2,2,2 ) . " will be 8\n";
print get_fake( 2,2,2,2,2,2,2,2,2,1,2,2,2 ) . " will be 9\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,1,2,2 ) . " will be 10\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,2,1,2 ) . " will be 11\n";
print get_fake( 2,2,2,2,2,2,2,2,2,2,2,2,1 ) . " will be 12\n";
 
</pre>]]></description>
            <link>http://blog.aklaswad.com/2008/000427.html</link>
            <guid>http://blog.aklaswad.com/2008/000427.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">baka</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">google</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">puzzle</category>
            
            <pubDate>Thu, 17 Jul 2008 23:45:13 +0900</pubDate>
        </item>
        
        <item>
            <title>[mt.js]mt:tabを使ってみる</title>
            <description><![CDATA[<p>MT4の管理画面では、かなりしっかりした独自のJavaScriptライブラリ(mt.js)が用意されています。Transformerやalt-tmplでの管理画面のカスタマイズに応用できると良いのですが、残念ながら、今のところまとまったドキュメントも無く、応用するのが難しい状況です。</p>

<p>でもやっぱり、そんな使えるライブラリを放置するともったいないお化けが出るぞ、ということで、mt.jsの機能の中で一番簡単そうな、タブ機能の使い方を調べてみました。</p>]]><![CDATA[<p>以下、Movable Type の管理画面内でタブ(同ウィンドウ内での一部画面の切り替え)を実現する場合のサンプルコードです。<br />
以下コードを、ファイルに保存してalt-tmplディレクトリに「dashboard.tmpl」とかの名前で置くと動くと思います。</p>

<pre class="code">&lt;mt:setvarblock name=&quot;page_title&quot;&gt;mt:tab test&lt;/mt:setvarblock&gt;
&lt;mt:include name=&quot;include/header.tmpl&quot;&gt;
 
&lt;h2&gt;サンプル1 : tab-container の骨格部分&lt;/h2&gt;
&lt;style type=&quot;text/css&quot;&gt;
#sample1 .hidden {
    display: inline !important;
    color: #aaa;
}
&lt;/style&gt;
&lt;span id=&quot;sample1&quot; mt:delegate=&quot;tab-container&quot;&gt;
    &lt;span mt:tab=&quot;foo&quot; mt:command=&quot;select-tab&quot;&gt;foo&lt;/span&gt;
    &lt;span mt:tab=&quot;bar&quot; mt:command=&quot;select-tab&quot;&gt;bar&lt;/span&gt;
    &lt;span mt:tab=&quot;buz&quot; mt:command=&quot;select-tab&quot;&gt;buz&lt;/span&gt;
    &lt;span mt:tab-content=&quot;foo&quot;&gt;
        foofoofoo
    &lt;/span&gt;
    &lt;span mt:tab-content=&quot;bar&quot;&gt;
        barbarbar
    &lt;/span&gt;
    &lt;span mt:tab-content=&quot;buz&quot;&gt;
        buzbuzbuz
    &lt;/span&gt;
&lt;/span&gt;
&lt;mt:include name=&quot;include/footer.tmpl&quot;&gt;</pre>

<p>このサンプルは敢えてタブらしくない動きにしてます。見ての通り、JavaScriptは一切書かずに動きます。</p>

<p><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="mttab.png" src="http://blog.aklaswad.com/images/mttab.png" width="354" height="108" class="mt-image-none" style="" /></span></p>

<p>先頭の「foo bar buz」の部分をクリックすると、それに応じて後続の部分のstyle属性が変化し、見た目も変わると思います。firebugなどで各要素のclass属性の変化を追ってみてください。</p>

<p>大雑把な動作プロセスとしては、</p>

<ul>
	<li>mt:delegate="tab-container"が指定された要素の内側では</li>
	<li>属性「mt:command="select-tab"」が指定された要素がクリックされたら</li>
	<li>その要素のmt:tab属性で指定されたタブのID(foo)を表示するように</li>
	<li>mt:tab-content属性を持ち、そこに同じタブID(foo)が指定されている要素のclassから「hidden」を取り除き</li>
	<li>mt:tab-content属性にタブID(foo)が指定されていない要素にはclass「hidden」を追加する</li>
</ul>

<p>という動作になります。<br />
MTの管理画面では事前に設定されているcssにより、「hidden」クラスは非表示となるので、タブらしい動作が実現できるというわけです。</p>

<p>以下、ちょっとだけcssを追加してみたバージョンです。お試し下さい。</p>

<pre class="code">&lt;mt:setvarblock name=&quot;page_title&quot;&gt;mt:tab test&lt;/mt:setvarblock&gt;
&lt;mt:include name=&quot;include/header.tmpl&quot;&gt;
 
&lt;h2&gt;サンプル2 : css を加えてみる&lt;/h2&gt;
 
&lt;style type=&quot;text/css&quot;&gt;
#sample2 .tab {
    border: 1px solid #abc;
    cursor: pointer;
}
 
#sample2 .selected-tab {
    text-decoration: underline;
    color: #f00;
}
 
#sample2 .tab-container {
    border: 1px solid #678;
}
 
&lt;/style&gt;
&lt;div id=&quot;sample2&quot; mt:delegate=&quot;tab-container&quot;&gt;
    &lt;span mt:tab=&quot;foo&quot; mt:command=&quot;select-tab&quot; class=&quot;tab selected-tab&quot;&gt;foo&lt;/span&gt;
    &lt;span mt:tab=&quot;bar&quot; mt:command=&quot;select-tab&quot; class=&quot;tab&quot;&gt;bar&lt;/span&gt;
    &lt;div class=&quot;tab-container&quot; mt:tab-content=&quot;foo&quot;&gt;
        foofoofoo
    &lt;/div&gt;
    &lt;div class=&quot;tab-container hidden&quot; mt:tab-content=&quot;bar&quot;&gt;
        barbarbar
    &lt;/div&gt;
&lt;/div&gt;
 
&lt;mt:include name=&quot;include/footer.tmpl&quot;&gt;</pre>]]></description>
            <link>http://blog.aklaswad.com/2008/000425.html</link>
            <guid>http://blog.aklaswad.com/2008/000425.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MT4</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">alt-tmpl</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">hack</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">transformer</category>
            
            <pubDate>Thu, 19 Jun 2008 17:16:53 +0900</pubDate>
        </item>
        
        <item>
            <title>TaggingHelperお試し版</title>
            <description><![CDATA[<p>Firefox限定ですが、プラグインをインストールせずに動作確認が出来るお試し版を用意してみました。<br />
Movable Type のブログ記事を書く画面が開いている状態で、以下のコードを全選択コピーして、ブラウザのアドレスバーに直接貼り付けEnter、として実行してみてください。</p>

<p>MT4用。<br />
<textarea cols="80">javascript:(function(){var th = document.createElement('div');th.id = 'tagging_helper_container';th.innerHTML = '<link rel="stylesheet" href="http://blog.aklaswad.com/tagginghelper.css" type="text/css" /><script type="text/javascript" src="http://blog.aklaswad.com/tagginghelper.js"></script><span id="taghelper_abc" onclick="TaggingHelper.open(\'abc\')" class="taghelper_command">ABC</span><span id="taghelper_count" onclick="TaggingHelper.open(\'count\')" class="taghelper_command">freq</span><span id="taghelper_match" onclick="TaggingHelper.open(\'match\')" class="taghelper_command">match</span><span id="taghelper_close" onclick="TaggingHelper.close()" class="taghelper_command">close</span><div id="tagging_helper_block" style="display: none;"></div>';document.getElementById('tags-field').appendChild(th);})();</textarea></p>

<p>こちらはMT3用。<br />
<textarea cols="80">javascript:(function(){var th = document.createElement('div');th.id = 'tagging_helper_container';th.innerHTML = '<link rel="stylesheet" href="http://blog.aklaswad.com/tagginghelper.css" type="text/css" /><script type="text/javascript" src="http://blog.aklaswad.com/tagginghelper3.js"></script><span id="taghelper_abc" onclick="TaggingHelper.open(\'abc\')" class="taghelper_command">ABC</span><span id="taghelper_count" onclick="TaggingHelper.open(\'count\')" class="taghelper_command">freq</span><span id="taghelper_match" onclick="TaggingHelper.open(\'match\')" class="taghelper_command">match</span><span id="taghelper_close" onclick="TaggingHelper.close()" class="taghelper_command">close</span><div id="tagging_helper_block" style="display: none;"></div>';document.getElementById('tag-field').appendChild(th);})();</textarea></p>

<p>動作が気に入ったら、是非プラグインをインストールして使ってみてください。</p>

<ul>
	<li><a href="http://blog.aklaswad.com/mtplugins/tagginghelper.html">プラグインのページ</a></li>
</ul>

<p>ちなみに、IEでは上手く動きませんでした。残念。<br />
というか、Firefoxはbody中にscript経由で突っ込まれたlinkタグも読み込んでしまうんですね。試してみたら動いたのでびっくりしました。<br />
</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000424.html</link>
            <guid>http://blog.aklaswad.com/2008/000424.html</guid>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">TaggingHelper</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">css</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">javascript</category>
            
            <pubDate>Thu, 29 May 2008 22:38:00 +0900</pubDate>
        </item>
        
        <item>
            <title>TaggingHelper0.3を公開します。</title>
            <description><![CDATA[<p>TaggingHelperの新しいバージョンを公開します。久しぶりの更新となりますね。</p>

<ul>
	<li><span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.aklaswad.com/mtplugins/TaggingHelper.0.3.zip">TaggingHelper.0.3.zip</a></span></li>
        <li><a href="http://blog.aklaswad.com/mtplugins/tagginghelper.html">blog.aklaswad.com: TaggingHelper</a></li>
</ul>

<p>主な更新内容はこちら。</p>

<ul>
	<li>タグ一覧を、使われている頻度順で表示するモードを追加した。</li>
	<li>本文に含まれる文言のタグを抽出して表示するモードを追加した。</li>
	<li>シングルクオートを含むタグが扱えない問題に対応した。指摘してくれたTrackback(774)さんありがとうございます。</li>
        <li>タグの途中で改行してしまう問題に対応した。</li>
</ul>

<p><ins datetime="2008-05-30T16:06:31+09:00">内部構造をちょっと変更した結果、どうやらSafari、Operaなどのブラウザでも利用可能となっているようです。Windows版のSafari3.1.1、Opera<br />
9.24で動作を確認しました。やったね!</ins></p>]]></description>
            <link>http://blog.aklaswad.com/2008/000423.html</link>
            <guid>http://blog.aklaswad.com/2008/000423.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Plug-ins</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">TaggingHelper</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">plug-in</category>
            
            <pubDate>Thu, 29 May 2008 16:15:00 +0900</pubDate>
        </item>
        
        <item>
            <title>CustomEditorButton2用ボタン追加プラグイン</title>
            <description><![CDATA[<p>拙作のCustomEditorButton2,使ってくれている方がいるみたいで大変嬉しいです。<br />
以下のサイトでは、ボタン追加が出来るプラグインが配布されています。すばらしいですー。</p>

<ul>
	<li><a href="http://isly.sub.jp/kodaruma/2008/04/customeditorbutton2.html">こだるま日和 - CustomEditorButton2 用のフォント色指定ボタンを作ってみた</a></li>
	<li><a href="http://www.tinybeans.net/blog/movabletypeplugin/ceb2-plusutility.html">かたつむりくんのWWW | CEB2_plusUtility</a></li>
</ul>

<p>特に、「かたつむりくんのWWW」さんで配布されている<a href="http://www.tinybeans.net/blog/movabletypeplugin/ceb2-plusutility.html">CEB2_plusUtility</a>はかなりゴージャスです。<br />
dl/dt/ddタグの挿入や、引用元表示機能付きblockquoteボタンとかは、自分でも欲しくてそのうち作ろうと思っていたので、大変嬉しいです。</p>

<blockquote cite="http://www.tinybeans.net/blog/movabletypeplugin/ceb2-plusutility.html">
<p>かたつむりくんのWWW | CEB2_plusUtility</p>
<p>さらに、「引用元のURI + 改行 + 引用元のタイトル + 改行 + 引用文」という書式で書いて選択すると、引用元のURIをblockquote要素のcite属性に追加し、引用元のタイトルをblockquote要素のtitile属性に追加できます。</p>
</blockquote>

<p>公開されているプラグインについては、<a href="http://blog.aklaswad.com/mtplugins/customeditorbutton2.html">プラグインページ</a>にも一覧を作って、適時アップデートしていきたいと思います。CEB2用プラグイン作ったよ公開するよ、という方は、トラックバックなどしていただけたら嬉しいです。</p>

<p>他にも、配布はしていないが、自分でボタン作って使っているよというエントリーもちらほら見かけました。<br />
基本的には、そういう個人用にカスタマイズする使い方を想定しています。がんがん使ってくださいー。</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000411.html</link>
            <guid>http://blog.aklaswad.com/2008/000411.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">CustomEditorButton</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Plug-ins</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">CustomEditorButton</category>
            
            <pubDate>Fri, 02 May 2008 23:10:00 +0900</pubDate>
        </item>
        
        <item>
            <title>CustomEditorButton2用の追加プラグイン「EntryUtilButtons」作りました。</title>
            <description><![CDATA[<p>HTMLのマークアップ補助ではない系統のボタンもあれば便利だよな、と作ってみました。CustomEditorButton2プラグインと併用することで、ブログ記事編集画面に以下の3 つのボタンを追加します。</p>

<dl>
<dt><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="tag.png" src="http://blog.aklaswad.com/images/tag.png" width="22" height="22" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></span>タギングボタン</dt>
<dd>本文中から単語を選択した状態でこのボタンを使うと、選択部分をタグ欄に追加します。普段タグ入力補完ばかりに頼っていたら、タグクラウドの成長が止まってしまった、という症状に効きます。</dd>
<dt><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="now.png" src="http://blog.aklaswad.com/images/now.png" width="22" height="22" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></span>時間あわせボタン</dt>
<dd>エントリーの公開日欄を、現在の時刻に合わせます。エントリーを書いていたら日付が変わってしまった。しかし昨日の日付が公開日となるのは納得できない!という場合に便利です。</dd>
<dt><span class="mt-enclosure mt-enclosure-image" style="display: inline;"><img alt="kill_tags.png" src="http://blog.aklaswad.com/images/kill_tags.png" width="22" height="22" class="mt-image-left" style="float: left; margin: 0 20px 20px 0;" /></span>タグ削除ボタン</dt>
<dd>選択範囲に含まれるHTMLタグっぽいもの(<strong>&lt;</strong>と<strong>&gt;</strong>で挟まれた部分)をごっそり削除します。MTデフォルトのリストボタンでリストを作成中、後から追加を行いたいが自分でliとか書きたくない、でもアンドゥも出来ない、なんて場合、このボタンを使って一度マークアップ無しの状態に戻し、行を追加した後に再度リストボタンを適用する、なんて使い道が考えられます。リッチテキストフォーマットでも各種の文字装飾の削除に利用できますが、改行まで消し飛んでしまうので諸刃の剣。</dd>
</dl>

<p><br />
このプラグインを利用するためには、同じ環境に<a href="http://blog.aklaswad.com/mtplugins/customeditorbutton2.html">CustomEditorButton2</a>がインストールされている必要があります。<br />
ダウンロードする: <span class="mt-enclosure mt-enclosure-file" style="display: inline;"><a href="http://blog.aklaswad.com/mtplugins/EntryUtilButtons0.1.zip">EntryUtilButtons0.1.zip</a></span><br />
</p>]]></description>
            <link>http://blog.aklaswad.com/2008/000410.html</link>
            <guid>http://blog.aklaswad.com/2008/000410.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">CustomEditorButton</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">CustomEditorButton</category>
            
            <pubDate>Fri, 02 May 2008 22:30:00 +0900</pubDate>
        </item>
        
        <item>
            <title>Pure MTML で NabeAzz</title>
            <description><![CDATA[<p>mixiのMTテンプレート大喜利大会(違う)に出したネタです。</p>

<p>NabeAzzというのは、えー、FizzBuzzの変形でー。<br />
多分発祥はここだと思います。</p>

<p><a href="http://blog.livedoor.jp/nipotan/archives/50985988.html">そろそろ FizzBuzz に飽きた - にぽたん研究所</a></p>

<p>mixiでは文字数制限が怖かったのでコメント一切無しにしました。<br />
ちょっとわかりづらいところもあると思うので、コメント付で再掲します。</p>

<p>自分の作ったテンプレートの目標は、ノープラグイン、ノースクリプト。MTタグのみでのNabeAzzです。 </p>

<pre class="code">&lt;mt:ignore&gt;&lt;!-- 単純な線形合同法で乱数を生成。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvarblock name=&quot;seed&quot;&gt;&lt;mt:date format=&quot;%S&quot;&gt;&lt;/mt:setvarblock&gt;
&lt;mt:setvartemplate name=&quot;rnd&quot;&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;*&quot; value=&quot;13&quot; /&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;+&quot; value=&quot;5&quot; /&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;%&quot; value=&quot;24&quot; /&gt;
    &lt;mt:getvar name=&quot;seed&quot;&gt;
&lt;/mt:setvartemplate&gt;
 
&lt;mt:ignore&gt;&lt;!-- 配列の初期化はsetvar一発で。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvar name=&quot;aho&quot; value=&quot;www&quot;:&quot;ktkr&quot;:&quot;ぶーん&quot;:&quot;だわよのさ&quot;:&quot;へっぺふむーん&quot;&gt;
&lt;mt:setvar name=&quot;dog&quot; value=&quot;ダワン&quot;:&quot;キャイーン&quot;:&quot;キャンキャン&quot;:&quot;バウウウ&quot;:&quot;ガルルル&quot;&gt;
 
&lt;mt:ignore&gt;&lt;!-- 指定された配列からランダムに要素をとってくる。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvartemplate name=&quot;get_suffix&quot;&gt;
    &lt;mt:setvarblock name=&quot;idx&quot;&gt;&lt;mt:getvar name=&quot;rnd&quot; trim=&quot;1&quot;&gt;&lt;/mt:setvarblock&gt;
    &lt;mt:setvarblock name=&quot;max&quot;&gt;&lt;mt:getvar name=&quot;$target&quot; function=&quot;count&quot;&gt;&lt;/mt:setvarblock&gt;
    &lt;mt:getvar setvar=&quot;idx&quot; name=&quot;idx&quot; op=&quot;%&quot; value=&quot;$max&quot;&gt;
    &lt;mt:getvar name=&quot;$target&quot; index=&quot;$idx&quot;&gt;
&lt;/mt:setvartemplate&gt;
 
&lt;mt:ignore&gt;&lt;!-- 以下、出力用ループ --&gt;&lt;/mt:ignore&gt;
&lt;ul&gt;
&lt;mt:for from=&quot;1&quot; to=&quot;40&quot;&gt;
    &lt;li&gt;
    &lt;mt:getvar name=&quot;__counter__&quot;&gt;
    &lt;mt:unless name=&quot;__counter__&quot; op=&quot;%&quot; value=&quot;5&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;dog&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;/mt:unless&gt;
    &lt;mt:unless name=&quot;__counter__&quot; op=&quot;%&quot; value=&quot;3&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;aho&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;mt:elseif name=&quot;__counter__&quot; like=&quot;3&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;aho&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;/mt:unless&gt;
    &lt;/li&gt;
&lt;/mt:for&gt;
&lt;/ul&gt;</pre>]]><![CDATA[<p>以下、解説。</p>

<pre class="code">&lt;mt:ignore&gt;&lt;!-- 単純な線形合同法で乱数を生成。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvarblock name=&quot;seed&quot;&gt;&lt;mt:date format=&quot;%S&quot;&gt;&lt;/mt:setvarblock&gt;
&lt;mt:setvartemplate name=&quot;rnd&quot;&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;*&quot; value=&quot;13&quot; /&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;+&quot; value=&quot;5&quot; /&gt;
    &lt;mt:getvar setvar=&quot;seed&quot; name=&quot;seed&quot; op=&quot;%&quot; value=&quot;24&quot; /&gt;
    &lt;mt:getvar name=&quot;seed&quot;&gt;
&lt;/mt:setvartemplate&gt;</pre>

<p>最初のこのブロックは、mt:setVarTemplateを使ってrndというルーチンを作成しています。<br />
内容は、線形合同法という非常に素朴な乱数生成ルーチンです。</p>

<p><a href="http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95">線形合同法 - Wikipedia</a></p>

<p>MTMLのみで乱数作れないかと思い立って調べてみたところ、なんだか簡単そうなので試してみました。今回のナベアツ問題なら精度の高い乱数は必要ないので、こんなのでも良いのではないかと思います。上限が24で最大周期も24、という貧弱貧弱なルーチンです。数字を調整すればもう少し良いものになるかもしれません。<br />
乱数のシード(初期値)の値はmt:date(再構築が実行された時間を取得するタグ)からとっています。</p>

<pre class="code">&lt;mt:ignore&gt;&lt;!-- 配列の初期化はsetvar一発で。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvar name=&quot;aho&quot; value=&quot;www&quot;:&quot;ktkr&quot;:&quot;ぶーん&quot;:&quot;だわよのさ&quot;:&quot;へっぺふむーん&quot;&gt;
&lt;mt:setvar name=&quot;dog&quot; value=&quot;ダワン&quot;:&quot;キャイーン&quot;:&quot;キャンキャン&quot;:&quot;バウウウ&quot;:&quot;ガルルル&quot;&gt;
</pre>

<p>あらかじめ配列に、アホ発言と犬発言を準備しておきます。ちょっと変な記法の解説は<a href="http://blog.aklaswad.com/2008/000358.html">こちら</a>。</p>

<pre class="code">&lt;mt:ignore&gt;&lt;!-- 指定された配列からランダムに要素をとってくる。 --&gt;&lt;/mt:ignore&gt;
&lt;mt:setvartemplate name=&quot;get_suffix&quot;&gt;
    &lt;mt:setvarblock name=&quot;idx&quot;&gt;&lt;mt:getvar name=&quot;rnd&quot; trim=&quot;1&quot;&gt;&lt;/mt:setvarblock&gt;
    &lt;mt:setvarblock name=&quot;max&quot;&gt;&lt;mt:getvar name=&quot;$target&quot; function=&quot;count&quot;&gt;&lt;/mt:setvarblock&gt;
    &lt;mt:getvar setvar=&quot;idx&quot; name=&quot;idx&quot; op=&quot;%&quot; value=&quot;$max&quot;&gt;
    &lt;mt:getvar name=&quot;$target&quot; index=&quot;$idx&quot;&gt;
&lt;/mt:setvartemplate&gt;</pre>

<p>ここで、またmt:setVarTemplateを使ってルーチンを作成しています。<br />
このルーチンでは、「target」という変数に指定された名前の変数から、要素を一つ取り出して出力する、という作業を行っています。<br />
ポイントはここでしょうか。「mt:getvar name="$target" index="$idx"」。<br />
MTのテンプレートエンジンでは、タグそのものの処理が行われる前の段階で、モディファイア内の「$」記法の変数の展開が行われます。そのため、一部のタグに対しては、変数の名前を別の変数に入れて渡す、ということが可能となっています。<br />
この場合では、「target」変数に「aho」または「dog」という文字列を入れておくと、まずテンプレートのパーサーが「$target」を展開してahoなどの文字列に置き換え、それを更にmt:getVarタグが解釈して、aho変数の中身を参照しに行ってくれる、というカラクリです。<br />
これが出来るのは、モディファイアとして変数名を受け取ることが出来る一部のタグのみですが、応用するとかなりパワフルなことが出来るのではないかと思います。</p>

<pre class="code">&lt;mt:ignore&gt;&lt;!-- 以下、出力用ループ --&gt;&lt;/mt:ignore&gt;
&lt;ul&gt;
&lt;mt:for from=&quot;1&quot; to=&quot;40&quot;&gt;
    &lt;li&gt;
    &lt;mt:getvar name=&quot;__counter__&quot;&gt;
    &lt;mt:unless name=&quot;__counter__&quot; op=&quot;%&quot; value=&quot;5&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;dog&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;/mt:unless&gt;
    &lt;mt:unless name=&quot;__counter__&quot; op=&quot;%&quot; value=&quot;3&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;aho&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;mt:elseif name=&quot;__counter__&quot; like=&quot;3&quot;&gt;
        &lt;mt:setvar name=&quot;target&quot; value=&quot;aho&quot;&gt;
        &lt;mt:getvar name=&quot;get_suffix&quot;&gt;
    &lt;/mt:unless&gt;
    &lt;/li&gt;
&lt;/mt:for&gt;
&lt;/ul&gt;</pre>

<p>最後に出力用にループを回しています。条件分岐はそんなに変なことはしてません。testモディファイアを使うともっと短くなるんだろうけど、使い方がわからないので諦めました。</p>

<h3>TechMemo</h3>
<ul>
	<li>_math_operationに直接式をかけると良いと思った。op="($aho + $dog) * $rnd"みたいな。駄目なら、配列で渡せるというのはどうだろう。op="+","*" value="$aho","5"のように。</li>
	<li>配列orハッシュ変数の展開は今のところgetvarの機能となっているが、これはbuild側でやるべきじゃないだろうか。</li>
	<li>mt:date format="%s"って何で無いんだ?小文字で、0埋め無しの秒を取れると思ってたら取れなかった。ここで一番嵌った。需要が無いから?</li>
        <li>&lt;mt:getvar setvar="seed" name="seed" op="*" value="13"&gt;ここのモディファイアの並べ方はちょっと悩んだ(動作的には関係ないが、読みやすさの意味で)が、最終的にはc、perl系の言語っぽく並べるのが一番わかり易いと思った。「$seed = $seed * 13」 と書くのと同じ並び。mt:var系列は複雑で把握しきれない。もっと短く書けた気がする。。。</li>
</ul>]]></description>
            <link>http://blog.aklaswad.com/2008/000409.html</link>
            <guid>http://blog.aklaswad.com/2008/000409.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Hack</category>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">NabeAzz</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">Template</category>
            
                <category domain="http://www.sixapart.com/ns/types#tag">mtml</category>
            
            <pubDate>Sun, 13 Apr 2008 23:30:00 +0900</pubDate>
        </item>
        
        <item>
            <title>MT4LP5に参加してきました。</title>
            <description><![CDATA[<p>非常に楽しく、また有意義な時間を過ごせました。<a href="http://www.koikikukan.com/">小粋空間</a>さんの最適化話が特に興味深かったです。<br />
アフターパーティーでも、色々な方から貴重なお話を沢山聞くことができました。<br />
またこのような機会があれば参加したいですねー。</p>

<p>以下、役に立たない雑感</p>

<ul>
	<li>アフターパーティーが手羽先屋なのに手羽先の登場が遅く、俺の手羽先スキルが全く注目されなかったのが心残り</li>
	<li>タイトルのMT4LP5と開催日の4月5日がシンクロしていたことにさっき気づいた<br />via <a href="http://www.tohdamikio.com/2008/04/mt41mt4lp5mt41c_a127.html">http://www.tohdamikio.com/2008/04/mt41mt4lp5mt41c_a127.html</a></li>
	<li>名刺は絶対に必要</li>
</ul>]]></description>
            <link>http://blog.aklaswad.com/2008/000406.html</link>
            <guid>http://blog.aklaswad.com/2008/000406.html</guid>
            
                <category domain="http://www.sixapart.com/ns/types#category">Movable Type</category>
            
            
                <category domain="http://www.sixapart.com/ns/types#tag">MT4LP5</category>
            
            <pubDate>Sun, 06 Apr 2008 14:20:27 +0900</pubDate>
        </item>
        
    </channel>
</rss>
