<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
   <channel>
      <title>Junnama Online</title>
      <link>http://junnama.alfasado.net/online/</link>
      <description>アルファサード有限会社 代表 野田純生のプライベートなBlog。</description>
      <language>ja</language>
      <copyright>Copyright 2010</copyright>
      <lastBuildDate>Wed, 03 Mar 2010 13:48:34 +0900</lastBuildDate>
      <generator>http://www.sixapart.com/movabletype/</generator>
      <docs>http://blogs.law.harvard.edu/tech/rss</docs> 
      
      <item>
         <title>ユーザーダッシュボードに名言を(名言じゃなくてもいいけど)。</title>
         <description><![CDATA[<p>Twitterのタイムラインについつい気を取られたりTweetしてばっかりで仕事に集中できていないみなさんこんにちは。今日は、そんなみなさんにMTのユーザーダッシュボードの「こんにちは、junnamaさん」の代わりに複数指定したフィードの中からランダムにタイトルを表示するプラグインを紹介するよ。</p>

<a href="http://junnama.alfasado.net/online/2010/03/03/Safari028.jpg"><img alt="ユーザーダッシュボード" src="http://junnama.alfasado.net/online/assets_c/2010/03/Safari028-thumb-400x171-80.jpg" width="400" height="171" class="mt-image-none" style="" /></a></p>

<p>フィードは5つまで指定できます。仕事に集中? できない? 多分できないと思うよ。ご利用は自己責任で。だってここからリンク飛ぶとリファラから管理画面のURLとか飛んで行くから嫌な人は気になる発言にカッとなったりしてリンクを踏んだりしないこと(これ約束ね)。</p>

<p><a href="http://junnama.alfasado.net/online/2010/03/03/Safari029.jpg"><img alt="プラグイン設定画面" src="http://junnama.alfasado.net/online/assets_c/2010/03/Safari029-thumb-400x212-82.jpg" width="400" height="212" class="mt-image-none" style="" /></a></p>

<p>尚、初期設定で設定されているフィードと僕の趣味嗜好は一切無関係です。</p>

<p>※Feeds.App Liteのライブラリを利用しています。</p>

<h3>プラグインのダウンロード</h3>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/03/03/RandomFeed.zip">RandomFeed.zip</a></li>
</ul>]]></description>
         <link>http://junnama.alfasado.net/online/2010/03/post_221.html</link>
         <guid>http://junnama.alfasado.net/online/2010/03/post_221.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Wed, 03 Mar 2010 13:48:34 +0900</pubDate>
      </item>
      
      <item>
         <title>MT5のBrand new API(DPAPI)と格闘してみた(続き)。</title>
         <description><![CDATA[<p>続き。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/_argsclass_entry_argsblog_id_blog_id_argsoffsetn_argslimitn_entries.html">MT5のBrand new APIと格闘してみた。</a></li>
</ul>

<p>MTベースの開発案件の時に「DBのスキーマはどうなりますか? ウチの方でPHPでMySQL叩いて開発とか後でできるでしょうか?」みたいな話が出るので。静的に動的なページを吐き出す(??)サンプル書いてみました。</p>

<p>エントリーを20件リストで表示する、ただそれだけ。直に書いてしまうとせっかくのテンプレートとロジックの分離のメリットが活かされないのですが、部分的に動的な処理を入れたいといった時にはまぁこんなやりかたも出来るということを覚えておいても良いと思います。</p>

<p>インデックス・テンプレートを作成し、「公開→スタティック」「出力ファイル名→foo.php」として保存・再構築。ブログ記事のリストの部分は動的に都度処理されます。それだけですが...</p>

<pre><code class="mtml">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
    &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;head&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=&lt;$MTPublishCharset$&gt;&quot; /&gt;
    &lt;title&gt;DPAPI Example - &lt;MTBlogName escape=&quot;html&quot;&gt;&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;?php
    include('&lt;$MTCGIServerPath$&gt;/php/mt.php');
    $mt = MT::get_instance(&lt;MTBlogID&gt;, '&lt;$MTCGIServerPath$&gt;/mt-config.cgi');
    require_once(&quot;MTUtil.php&quot;);
    $args['class'] = 'entry';
    $args['blog_id'] = &lt;MTBlogID&gt;;
    $args['offset']=0;
    $args['limit']=20;
    $entries = $mt-&gt;db()-&gt;fetch_entries($args);
    $max = count($entries);
    $i = 0;
    foreach ($entries as $entry) {
        if ($i==0) {
            echo '&lt;ul&gt;';
        }
        echo '&lt;li&gt;' . encode_html($entry-&gt;title) . '&lt;/li&gt;';
        $i++;
        if ($i==$max) {
            echo '&lt;/ul&gt;';
        }
    }
?&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/mt5brand_new_apidpapi.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/mt5brand_new_apidpapi.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Sat, 20 Feb 2010 18:20:54 +0900</pubDate>
      </item>
      
      <item>
         <title>MT5のBrand new APIと格闘してみた。</title>
         <description><![CDATA[<p>スタッフの仕事の進捗がヤバげだったので急遽phpを担当することになってブロックタグの大物をMT5対応するために<del>ガンダム</del>Brand new APIと格闘してみたメモ書き。</p>

<ul>
	<li><a href="http://www.slideshare.net/swordbreaker/plugin">ダイナミック：Plugin</a></li>
	<li><a href="http://www.slideshare.net/sakk/mtddc-201025-tokyo-brand-new-api">MTDDC 2010.2.5 Tokyo - Brand new API</a></li>
</ul>

<p># <a href="http://powercms.alfasado.net/">Power CMS for MT</a>にはPHPプラグインが189もあるんだよ...</p>

<blockquote cite="http://twitter.com/junnama/status/9335678689"><p><em><a href="http://twitter.com/junnama/status/9335678689">Twitter / Junnama Noda:  MTのPHP API使ってアプリ開発してるのって日本でhoge人くらいなんだからこんなに力入れてガラッと変えなくても(泣)</a></em></p></blockquote>

<p>さて、ブロックタグの中でのオブジェクトのロードや利用についてのメモを中心に。</p>

<h3>エントリーをロード</h3>

<pre><code class="mtml">$args['class'] = 'entry';
$args['blog_id'] = $blog_id;
$args['offset']=n;
$args['limit']=n;
$entries = $ctx-&gt;mt-&gt;db()-&gt;fetch_entries($args);
</code></pre>

<h3>範囲指定をしてsqlでエントリー(や他のオブジェクト)を読み込む</h3>

<pre><code class="mtml">$entries = $ctx-&gt;mt-&gt;db()-&gt;SelectLimit( $sql, $limit, $offset );
</code></pre>

<h3>(範囲の指定無し)sqlを実行</h3>
<pre><code class="mtml">$entries = $ctx-&gt;mt-&gt;db()-&gt;Execute( $sql );
</code></pre>

<h3>読み込んだオブジェクト数の取得</h3>
<pre><code class="mtml">$entries-&gt;RecordCount();
</code></pre>

<h3>個々のレコードの取得</h3>
<pre><code class="mtml">$entries-&gt;Move($counter);
$entry = $entries-&gt;FetchRow();
</code></pre>

<h3>エントリーのオブジェクト化(但しcategoryやカスタムフィールドの読み込みはSQL側で調整する必要あり)</h3>
<pre><code class="mtml">$e; 
while(list ($key, $val) = each($entry)) {
    if (preg_match('/^entry_/',$key)) {
        $e-&gt;$key = $val;
    }
}
# $ctx-&gt;stash('entry', $e);
</code></pre>

<h3>特定のブログ記事オブジェクトの読み込み</h3>
<pre><code class="mtml">$e = $ctx-&gt;mt-&gt;db()-&gt;fetch_entry($id);
</code></pre>

<h3>特定のウェブページオブジェクトの読み込み</h3>
<pre><code class="mtml">$e = $ctx-&gt;mt-&gt;db()-&gt;fetch_page($id);
</code></pre>

<h3>Findでオブジェクトを読み込み</h3>

<pre><code class="mtml">require_once 'class.mt_entry.php'; #entry
$_entry = new Entry;
$where = $where_statment;
$extra = array(
    'limit' =&gt; $limit,
    'offset' =&gt; $offset,
); 
$results = $_entry-&gt;Find($where, false, false, $extra);
</code></pre>

<p><a href="http://junnama.alfasado.net/online/2010/02/mt5brand_new_apidpapi.html">続きがあります...</a></p>

<h2>参考</h2>

<ul>
	<li><a href="http://www.souken.co.jp/tech/php/adodb/docs-adodb-ja.htm">ADOdb マニュアル - PHPのためのADOdbライブラリ</a></li>
</ul>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/_argsclass_entry_argsblog_id_blog_id_argsoffsetn_argslimitn_entries.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/_argsclass_entry_argsblog_id_blog_id_argsoffsetn_argslimitn_entries.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Sat, 20 Feb 2010 17:40:31 +0900</pubDate>
      </item>
      
      <item>
         <title>New CMSContextプラグイン(β)。</title>
         <description><![CDATA[<p>MT::App::CMS(mt.cgi)のテンプレートファイル(tmpl以下、もしくはalt-tmpl以下の .tmplファイル)の中でMTタグを使えるうようにするプラグイン<a href="http://alfasado.net/contents/labs.html#labs03">CMSContext</a>の新しいバージョン(β)を公開します。</p>

<p>コアなMTユーザーに評判? のプラグインをバージョンアップします(クレジットがウチの会社になってるんですが、とりあえずβということで先行してここで配布してみます)。ちなみに昨日No test, No document とか言ってTwitterに貼っていたやつはやっぱり(?)バグってました(今回のはざっとテストしましたすいません)。</p>

<h2>改良点/追加された機能</h2>
<ul>
	<li>テンプレートの複数箇所でタグが利用された時にキャッシュを使うことでDBへのアクセスを減らしました(これは昨年末の実装)。</li>
	<li>新たに「ユーザー情報の編集」画面でMT::Author系のタグを利用できるようになりました(CMSContextタグの中で)。</li>
	<li>alt-tmplのパスを置き換えるのはそもそもCMSのContextとは別の話なので設定されていない場合はデフォルトのalt-tmplのままとしました。</li>
	<li>alt-tmplのパスをシステムプラグイン設定及びブログ毎のプラグイン設定で設定出来るようにしました(ブログの設定があればそちらが優先されます)。</li>
	<li>alt-tmplのパスをユーザーエージェント毎に指定できるようになりました。iPhone用の管理画面を作る、といった使い方が出来ます。</li>
	<li>URLのパラメタをテンプレートのパラメタに自動的にセットするようにしました。<strong>mt.cgi?foo=bar とした場合、&lt;mt:var name=&quot;cms:foo&quot; escape=&quot;html&quot;&gt; といった形で取り出すことが出来ます。</strong></li>
	<li>ユーザーエージェント判別やその他いくつかのテンプレート・タグを追加しました。</li>
</ul>

<p>要するにこれを使うと<strong>iPhone用MT管理画面とかが簡単に作れるようになります</strong>(誰か是非頑張ってくださいね)。あと...Nokiaは要らないよね? そうだよね?</p>

<h2>テンプレートの例</h2>

<p>alt-tmpl/cms/edit_entry.tmpl</p>

<pre><code class="mtml">&lt;MTCMSContext&gt;
    &lt;MTEntryTitle escape=&quot;html&quot;&gt;
&lt;/MTCMSContext&gt;

&lt;MTIfUserAgentIsiPhone&gt;
    # Some Template for iPhone
&lt;/MTIfUserAgentIsiPhone&gt;
</code></pre>

<h2>設定画面</h2>

<p><a href="http://junnama.alfasado.net/online/2010/02/13/Safari003.jpg"><img alt="Safari003.jpg" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari003-thumb-400x295-73.jpg" width="400" height="295" /></a></p>

<h2>タグ</h2>

<p>タグはCMSのテンプレート中で利用できます。</p>

<h3>ブロックタグ</h3>

<table border="1" cellpadding="1">
<tr>
<th>MTCMSContext</th><td>CMSのテンプレートの中でMTEntries等のタグを利用できるようになります。</td>
</tr><tr>
<th>MTIfUserCan</th><td>現在のユーザーがpermissionモディファイア(例:can_post)で指定した権限を有している場合に真となります。</td>
</tr><tr>
<th>MTIfUserAgentIsiPhone</th><td>ユーザーエージェントがiPhone/iPod Touchの場合に真となります。</td>
</tr><tr>
<th>MTIfUserAgentIsDoCoMo</th><td>ユーザーエージェントがDoCoMoの場合に真となります。 </td>
</tr><tr>
<th>MTIfUserAgentIsAU</th><td>ユーザーエージェントがauの場合に真となります。 </td>
</tr><tr>
<th>MTIfUserAgentIsSoftBank</th><td>ユーザーエージェントがSoftBankの場合に真となります。 </td>
</tr><tr>
<th>MTIfUserAgentIsMobile</th><td>ユーザーエージェントがiPhone/iPod Touch/DoCoMo/au/SoftBankの場合に真となります。 </td>
</tr><tr>
<th>MTIfUserAgentIsKeitai</th><td>ユーザーエージェントがDoCoMo/au/SoftBankの場合に真となります(iPhone/iPod Touchの場合は偽)。 </td>
</tr>
</table>

<h3>ファンクションタグ</h3>

<table border="1" cellpadding="1">
<tr>
<th>MTUserAgent</th><td>$app-&gt;get_header( 'User-Agent' );の値をそのまま出力します。</td>
</tr>
</table>

<h2>プラグインのダウンロード</h2>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/13/CMSContext.zip">CMSContext.zip(4.6 KB)</a></li>
</ul>

<h3>ライセンス</h3>

<ul>
	<li><a href="http://www.perl.com/language/misc/Artistic.html">Artistic License</a></li>
</ul>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/new_cmscontext.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/new_cmscontext.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Sat, 13 Feb 2010 15:55:42 +0900</pubDate>
      </item>
      
      <item>
         <title>[続]Movable Typeの不正ログイン対策。</title>
         <description><![CDATA[<p>問い合わせいただいたのとユーザー名が正しくてパスワード違いの場合にブロックできなかったことが判明したので修正しました。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2008/04/movable_type_3.html">Movable Typeの不正ログイン対策(元ネタ)。</a></li>
</ul>

<p>加えて、IPアドレスのホワイトリスト/ブラックリストに対応させました。IPリストは改行区切りで。画像のように 192.168.11.0/24 のような記述にも対応しています。</p>

<p>ユーザー名やパスワードを間違うことでアクセス元IPアドレスからのログインを一定時間制限します。IPアドレスについてはホワイトリスト→ブラックリストの順にチェックします。お分かりいただけると思いますが設定を間違えるとログイン出来なくなりますのでご利用は計画的に! (無保証、自己責任でのご利用をお願いします)。</p>

<p style="text-align:center"><a href="http://junnama.alfasado.net/online/2010/02/13/Safari001.jpg"><img alt="Protectionプラグインの設定画面" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari001-thumb-330x198-70.jpg" width="330" height="198" /></a></p>

<h3>プラグインのダウンロード</h3>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/13/Protection.zip">Protection.zip(4.0KB)</a></li>
</ul>

<p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/movable_type_8.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/movable_type_8.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Sat, 13 Feb 2010 13:39:57 +0900</pubDate>
      </item>
      
      <item>
         <title>タグを利用して関連エントリーの自動表示(続き)。</title>
         <description><![CDATA[<p>続きです(当日のデモで関連付けがうまくいかなかったのが余程悔しかったのだろう...)。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/mtddclt.html">MTDDCのLT(タグを利用して関連エントリーの自動表示)。</a></li>
	<li><a href="http://junnama.alfasado.net/online/2010/01/macabmtauto_tagging.html">MeCabでMTの自動タグ付けなんかを。</a></li>
</ul>

<blockquote cite="http://junnama.alfasado.net/online/2010/02/mtddclt.html"><p>この方法で出来ないのは、エントリーに対するタグの重み付けなんですね。例えば上記エントリーには「MTDDC」というタグが最も重みが付けられるべきで、そうなれば確実に当日も失敗? しなかったわけです。ところが現状の方法では単語の出現回数なんかでの重み付けがなされないのです。</p>

<p>これについてはMT::ObjectTagオブジェクトを拡張してタグの重み付けを付けるという方法なんかが考えられますが(出現回数なんかでスコアを付ける)、興味のある方はトライしてみても面白いんじゃないでしょうか。</p></blockquote>

<p>と書いてみたものの...というか「興味のある方=俺」なので取り敢えずMT::ObjectTagに「score」というカラムを追加して出現回数を保存するようにしてみた。</p>

<p><a href="http://junnama.alfasado.net/online/2010/02/11/Safari010.jpg"><img alt="scoreを追加したobjecttagテーブル" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari010-thumb-520x57-63.jpg" width="520" height="57" class="mt-image-none" style="" /></a></p>

<p>今回はここまででRelatedEntryを取り出すほうはまだなんだけどね。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/11/MeCab.pl.zip">MeCab.pl.zip(2.0 KB)</a></li>
</ul>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/post_220.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/post_220.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">プログラミング</category>
        
        
         <pubDate>Thu, 11 Feb 2010 18:47:08 +0900</pubDate>
      </item>
      
      <item>
         <title>システムメニューに「サイトを表示」ボタンを追加する。</title>
         <description><![CDATA[<p><ins><strong>MT5にも対応させました。ってかそのままで行けたのでMT5で設定されてない場合はclassがwebsiteのブログを1つロードするようにしました。</strong></ins></p>

<p>完全に自分のために書いた。MT4で複数のブログを作成してサイトを運用しているケースで、メインとなるブログを指定してその下に子ブログぶら下げて運用すること多いと思うんですよ。自社のサイトでもそうしてます。</p>

<p>でね、結構サイトを確認しながら新しいページや記事を作成することが多いわけです。サイト内の他のページにリンクを貼ったり過去の記事を確認しながら表記やマークアップ整えたり。</p>

<p>で、ダッシュボードとかシステムメニューに行った時に「サイトの表示」リンクがないためにURL直接叩いたりメインのブログに移動してからリンククリックしてることが実は多くて、なんでここにリンクがないんだろうって思ってた。</p>

<p style="text-align:center"><a href="http://junnama.alfasado.net/online/Safari008.jpg"><img alt="システムメニューに「サイトを表示」ボタンを追加" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari008-thumb-330x84-58.jpg" width="330" height="84" class="mt-image-none" style="" /></a></p>

<p>URLはシステムプラグイン設定で登録。登録されてなければIDの一番若いブログのsite_urlをセットします。</p>

<p style="text-align:center"><a href="http://junnama.alfasado.net/online/2010/02/11/Safari009.jpg"><img alt="プラグイン設定画面でサイトのURLを指定" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari009-thumb-330x105-60.jpg" width="330" height="105" class="mt-image-none" style="" /></a></p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/11/ViewSite.zip">ViewSite.zip(2.9 KB)</a></li>
</ul>

<p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/mt4_3.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/mt4_3.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Thu, 11 Feb 2010 17:04:47 +0900</pubDate>
      </item>
      
      <item>
         <title>声でつぶやく - Twitter+モバツイ+らくらくホンが拓く新しい世界。</title>
         <description><![CDATA[<p>きっかけはTwitterでのこのあたりのやりとりと、今お手伝いしているコンクール絡みのイベントがあるっていうことなんですが、Twitterに声で投稿できるかというテーマがあって、ちょっとやってみた。らくらくホンでTwitter(モバツイッター(以下モバツイ))を使って気づくあたりの話も含めて少し紹介したい。</p>

<blockquote cite="http://twitter.com/pinpain/status/8798937734
"><p>Twitter / aok mto: .@fshin2000 伝言です。らくらくホンの音声「入力」にも対応してほしい。私自身は未経験なため、何も差し挟む余地はありませんです。土曜日に弱視の人の集まりで、聞きました。</p></blockquote>

<blockquote cite="http://twitter.com/junnama/status/8799336580
"><p>Twitter / Junnama Noda: おそらく音声メールなのでユーザー毎にメール経由のポスト可能ならいけるのでは? http://bit.ly/9Eco70 RT @fshin2000: @pinpain そんな機能があるんですか。なんかブラウザベースだと難しそうな気もしなくもないけど...</p></blockquote>

<blockquote cite="http://twitter.com/fshin2000/status/8799487380"><p>Twitter / えふしん: @junnama @pinpain じゃぁ「メール投稿」でできますね。</p></blockquote>

<p>イベントはこちら。2月24日開催です。</p>

<ul>
	<li><a href="http://daremoga.jp/ceremony/event-0224.html">「ケータイ向けTwitterサービス『モバツイッター』とアクセシビリティ」セミナー ＆ だれもが使えるウェブコンクール中間発表</a></li>
</ul>

<p>機種はF884i(らくらくホンプレミアム)。僕の記憶ではこの機能(音声メール)はオプションで月々210円。興味あったので申し込んでおいたのです。使ったのは今回が初めて。有料である理由は、変換を行うのをiアプリからASP経由で行うため。つまり、流石にこの携帯の中にそれだけの処理が出来るものが埋め込まれているわけれはなく、音声認識からテキスト化は外部のサーバーを使っているのです。</p>

<p>このあたりについては少し前の記事ですが下記のページに紹介記事があります。</p>

<ul>
	<li><a href="http://plusd.itmedia.co.jp/mobile/articles/0804/12/news004.html">声で文章作成──らくらくホンプレミアムの「音声入力メール」を試す</a></li>
</ul>

<p style="width:200;text-align:right;float:right"><a href="http://junnama.alfasado.net/online/2010/02/09/64172468.jpg"><img alt="音声入力中の画面" src="http://junnama.alfasado.net/online/assets_c/2010/02/64172468-thumb-180x282-55.jpg" width="180" height="282" /></a></p>

<p>尚、当然ながらただ音声で入力するだけでなく、ウェブの読み上げから投稿操作までは音声ガイダンスを通じて出来ます。まったく画面を見ることなく僕にも投稿が行えました。</p>

<p>手順は下記の通り。</p>

<ul>
	<li>モバツイへアクセス</li>
	<li>メール投稿</li>
	<li>メール作成(題名入力状態)</li>
	<li>本文欄へ移動</li>
	<li>[カメラボタン]でiアプリ起動</li>
	<li>決定ボタン</li>
	<li>バイブが振動(または音声ガイダンス)</li>
	<li>声で入力(30秒以内)</li>
	<li>iアプリがサーバーに通信してテキスト変換</li>
	<li>確認＞確定</li>
	<li>続きがあれば再度[カメラボタン]でiアプリ起動</li>
	<li>内容確定後、送信</li>
</ul>

<p>一連の動き? を音声ファイルにしましたのでアップします。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/09/f884i.m4a">モバツイのログインからメール投稿まで(f884i.m4a - 625.5 KB)</a></li>
</ul>

<h2>さて、感想等</h2>

<p>「Twitter+モバツイ+らくらくホンが拓く新しい世界」なんていうタイトルを書いたわけですが、これやっぱり新しいコミュニケーションの世界なんだと思います。不思議な感じ。</p>
<p>実際僕が視力を失ってスクリーンリーダーのお世話になることを考えたらそれなりにかなり必死で取り組まなきゃならないと思うんですが、Twitterを使うだけなら実際自分で画面見ないでいけましたから。入力、確認といった煩わしさもなく、まさにTwitter的な世界観とでもいうのでしょうか。</p>

<p>昨日からの帰り道に練習がてらポストしてみたんですが、何ていうか電話で会話している感じ。タイムラインを読み上げて、アクセスキー[3]でメール投稿画面へ飛び(欲を言えばアクセスキー[3]でダイレクトにメールが立ち上がって欲しい。そうすればもっとシームレスに読み上げ＞投稿へ移行できる)、そこから上記の手順でポストします。ひとこと程度のつぶやきなら30秒でいけるし、少し長いものは複数に分けて入れます。ただ、このあたりはいずれ技術が解決してくれると思う。</p>

<p>日常的に使うのであれば変換サーバーとのやりとりの待ち時間とかiアプリ起動の待ち時間とか気にならないわけじゃないですが、新しい可能性を十分に感じさせてくれます。</p>

<h2>モバツイのアクセシビリティ</h2>

<p>モバツイの[元]省エネモード、らくらくホンをも意識されたようなシンプルな表示モード、これで音声読み上げモードでは格段に使いやすくなります。理解もしやすいようにリンクのラベルも工夫されています。このあたりは仕方ないんだろうけど、慣れてくると少しラベルが冗長に感じられるようにはなりますが。慣れてしまうと「このつぶやきにリプライ＠」→「リプライ」のほうがシンプルだし、上級者モードとかを作るのがいいのかもしれないですね。あるいは「ガイダンスモード」っていうのがあって、ガイダンスモードでは「このつぶやきにリプライ＠」、通常モードでは「リプライ」とか。開発側の負担は間違いなく増えますが、こうなればもっと使い勝手が良くなると思います。</p>

<p>アクセシビリティ＝アクセス出来ること、であれば冗長なラベルであってもクリアできてるわけですが、携帯電話、音声読み上げに最適化となれば、ラベルの長いのは少し気になります。</p>

<p>ただ、これはUA側で例えばa要素のtitleを読み上げるかどうか、とかいった実装が出来るようになれば解決する問題でもあります。アクセシビリティって結局最後はそういった話になるんだと僕は思います。</p>

<p>もう一点は既に書きましたがアクセスキー[3]でダイレクトにメールが立ち上がって欲しい。これは<a href="http://twitter.com/fshin2000/status/8802499546">えふしんさんもそう感じてもらえた</a>みたいだから、別に音声読み上げに限ったことじゃないですよね。</p>


<h2>Twitterそのものが抱える(日本語環境での)アクセシビリティ</h2>

これはモバツイに関することじゃないんですが、一番読み上げていて気になるのは実は「ユーザー名」なんです。例えば「fshin2000さん」は、「えふえすえっちあい、にせんさん」です。「junnama」じゃ「じゅんなま」なんですが。英語圏なら名前が単語として登録されているケースが多いでしょうから読めると思うのですが、たとえば「にせんさん」てのは「2003」ともとれてしまうし(fshin2000さんすいません、特に取り上げた理由はないんですw)ユーザー名は本当にわかりにくいです。</p>

<p>ログイン名が表示されるのはTwitterの仕様だから、ここは「設定」画面の「名前」のほうを表示することで解決出来そうな気もします。但しTwitterは＠ユーザー名っていうルールがあるので、つぶやきの本文の中にもユーザー名が頻繁に出てきます。とはいえ実際の読み上げ環境で利用しておられる方はさほど気にしておられないのかもしれませんが。とはいえ、絶対名前が日本語で扱えた方がわかりやすいと思う。これは絶対にそうだと思います。</p>

<h2>それでもこれは新しい体験、新しい世界</h2>

<p>例えばiモードブラウザのインプット要素やテキストエリアが同じく音声入力に対応してサーバーへの接続時間等の問題が解消されたら(またサイト制作者側がこういった用途を意識して構築を行えば)、あたらしい可能性が広がるんじゃないかって。そう思います。正直新鮮な体験でした。ケータイサイトやケータイWebサービスを構築している人には是非とも考えて欲しいテーマです。</p>

<p>それでは、次回はイベントでお会いしましょう。</p>

<h2>関連エントリー</h2>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2009/05/post_196.html">どんな状況になってもコミュニケーションしていたい。</a></li>
	<li><a href="http://junnama.alfasado.net/online/2008/05/post_178.html">音声ですべて操作できる携帯電話が変える人生。</a></li>
	<li><a href="http://junnama.alfasado.net/online/2008/04/post_170.html">携帯サイト＋らくらくホンがウェブアクセシビリティを考える上での大きなヒントとなる。</a></li>
</ul>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/twitter_rakurakuphone.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/twitter_rakurakuphone.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">アクセシビリティ</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">モブログ</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">駄文・雑文</category>
        
        
         <pubDate>Tue, 09 Feb 2010 21:00:42 +0900</pubDate>
      </item>
      
      <item>
         <title>らくらくホンで音声ポスト。</title>
         <description>テスト用のポストをします。
</description>
         <link>http://junnama.alfasado.net/online/2010/02/post_219.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/post_219.html</guid>
        
        
         <pubDate>Mon, 08 Feb 2010 20:40:54 +0900</pubDate>
      </item>
      
      <item>
         <title>MTDDCのLT(タグを利用して関連エントリーの自動表示)。</title>
         <description><![CDATA[<p>先週末に行われたMTDDCに参加してライトニングトークで大トリ? をつとめさせていただきました。前日まで何を話すか決めてなかったんですが、今回はまぁ大阪開催じゃないし? ネタ抜きにして純粋にハックネタを話させていただきました。さすがに数百人前にしてつまらないネタじゃ悪いし(しかも時間一時間近く押していて、あそこで滑ると会場のコンテキスト? に影響するっていう危機感もありましたし。</p>

<p>すでにお気づきの方もいらっしゃる通り、今回のネタは今年一発目に上げた下記のエントリーの改良版です。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/01/macabmtauto_tagging.html">MeCabでMTの自動タグ付けなんかを。</a></li>
</ul>

<p>タグのプライベートモードを使うっていうのを直前に思いついてしまったのが今回の肝でした(しかし何でググると3.3のドキュメントが出てくんの?)。</p>

<ul>
	<li><a href="http://www.sixapart.jp/movabletype/manual/3.3/03_blog_admin_guide/customizing_blogs/private_mode.html">エントリー・タグのプライベート・モード</a></li>
</ul>

<p>方針は以下の通りです。</p>

<ul>
	<li>一回目の保存時には入力されたタグがあればそれにプラスしてタグが自動追加される</li>
	<li>ユーザー辞書に登録されている単語は無条件にタグとして登録される</li>
	<li>タイトルに1度以上、もしくはタイトル＋テキストに2回以上出現した単語で「名詞,一般」もしくは「名詞,固有名詞,組織」にマッチするもの、且つ一定以上のバイト長の単語(サンプルでは[7]以上)をプライベート・タグとして登録する</li>
</ul>

<p>前提としてMeCab、MeCab.pmをインストールする必要があります。ここで紹介するパスは私のMac上でのパスです。MacPortを使ってインストールしているので、一般的な環境とは異なるであろうことご了承ください。</p>

<p>タグとして登録したい単語を下記のようにCSVを作成した保存します。ここでのポイントは「Movable Type Developers &amp; Designers Conference」を「MTDDC」として登録する等のようにマッチした文字列をタグとしてどのように登録したいかを定義付けることです。この辞書では「アルファサード有限会社」と「アルファサード」は同じ「アルファサード」として登録されるようになります。</p>

<pre><code>Movable Type Developers &amp; Designers Conference,-1,-1,1,名詞,一般,*,*,*,*,MTDDC,MTDDC,MTDDC,Tags
プラグイン,-1,-1,1,名詞,一般,*,*,*,*,プラグイン,プラグイン,プラグイン,Tags
Movable Type,-1,-1,1,名詞,一般,*,*,*,*,Movable Type,Movable Type,Movable Type,Tags
アクセシビリティ,-1,-1,1,名詞,一般,*,*,*,*,アクセシビリティ,アクセシビリティ,アクセシビリティ,Tags
アルファサード有限会社,-1,-1,1,名詞,一般,*,*,*,*,アルファサード,アルファサード,アルファサード,Tags
アルファサード,-1,-1,1,名詞,一般,*,*,*,*,アルファサード,アルファサード,アルファサード,Tags
セミナー,-1,-1,1,名詞,一般,*,*,*,*,セミナー・イベント,セミナー・イベント,セミナー・イベント,Tags
イベント,-1,-1,1,名詞,一般,*,*,*,*,セミナー・イベント,セミナー・イベント,セミナー・イベント,Tags
リリース,-1,-1,1,名詞,一般,*,*,*,*,リリース情報,リリース情報,リリース情報,Tags</code></pre>

<pre><code>cd /opt/user
sudo /opt/local/libexec/mecab/mecab-dict-index -d /opt/local/lib/mecab/dic/ipadic-utf8 -u user.dic -f utf8 -t utf8 dict.csv</code></pre>

<p>user.dicが生成されるので、mecabrcにこのファイルをユーザー辞書として使うように登録します。</p>

<pre><code>vi /opt/local/etc/mecabrc</code></pre>

<p>下記の行を追加</p>

<pre><code>userdic = /opt/user/user.dic</code></pre>

<p>プラグイン(当日使ったものです)をMTにインストールします。</p>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/02/08/MeCab.pl.zip">MeCab.pl.zip(1.3 KB)</a></li>
</ul>

<p><a href="http://junnama.alfasado.net/online/2010/02/08/Safari003.jpg"><img alt="自動的に付けられたタグ" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari003-thumb-536x63-51.jpg" width="536" height="63" class="mt-image-none" style="" /></a></p>

<p>これで、ユーザー辞書に登録してあるものは無条件に、形態素解析で自動追加したものは「プライベートタグ(@からはじまる隠しタグ)」として登録されるようになります。</p>

<p>あとはogawaさんの<a href="http://code.google.com/p/ogawa/wiki/TagSupplementals?wl=ja"> TagSupplementalsプラグイン</a>にお任せです。</p>

<pre><code class"mtml">&lt;mt:EntryIfTagged&gt;
&lt;div class=&quot;entry-body&quot;&gt;
&lt;h2&gt;関連する話題&lt;/h2&gt;
&lt;ul&gt;
    &lt;MTRelatedEntries lastn=&quot;3&quot;&gt;
        &lt;li&gt;&lt;a href=&quot;&lt;$MTEntryPermalink$&gt;&quot;&gt;&lt;$MTEntryTitle$&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;/MTRelatedEntries&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/mt:EntryIfTagged&gt;</code></pre>

<p><a href="http://junnama.alfasado.net/online/2010/02/08/Safari001.jpg"><img alt="関連エントリーを自動表示" src="http://junnama.alfasado.net/online/assets_c/2010/02/Safari001-thumb-536x449-49.jpg" width="536" height="449" class="mt-image-none" style="" /></a></p>

<p>ちゃんと大阪でのMTDDCの記事が一番目に出てますよね?(当日失敗したのは...自動でタグ付けされるのを見せたいがために文章色々直前で追加しちゃったんですよね...クソ!)</p>

<p>この方法で出来ないのは、エントリーに対するタグの重み付けなんですね。例えば上記エントリーには「MTDDC」というタグが最も重みが付けられるべきで、そうなれば確実に当日も失敗? しなかったわけです。ところが現状の方法では単語の出現回数なんかでの重み付けがなされないのです。</p>

<p>これについてはMT::ObjectTagオブジェクトを拡張してタグの重み付けを付けるという方法なんかが考えられますが(出現回数なんかでスコアを付ける)、興味のある方はトライしてみても面白いんじゃないでしょうか。</p>

<p>翌日のHack-A-Thonにも参加しましたが、こっちのほうはまたいずれ。</p>]]></description>
         <link>http://junnama.alfasado.net/online/2010/02/mtddclt.html</link>
         <guid>http://junnama.alfasado.net/online/2010/02/mtddclt.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Mon, 08 Feb 2010 14:25:24 +0900</pubDate>
      </item>
      
      <item>
         <title>ひれ酒とか。</title>
         <description>有馬温泉。</description>
         <link>http://junnama.alfasado.net/online/2010/01/post_218.html</link>
         <guid>http://junnama.alfasado.net/online/2010/01/post_218.html</guid>
        
        
         <pubDate>Sun, 31 Jan 2010 23:14:15 +0900</pubDate>
      </item>
      
      <item>
         <title>特定のタグ内をescape_htmlするEscapeCodeプラグイン(MT)</title>
         <description><![CDATA[<p>今日<a href="http://powercms.alfasado.net/blog/">「ブログのサイドバーを見直す(ランキング/表示順/高速化)」</a>って記事を<a href="http://powercms.alfasado.net/">製品サイト</a>の<a href="http://powercms.alfasado.net/blog/">ブログ</a>に書いていて面倒だったので書いたのであげておきます(スタティック専用)。←しかしなんちゅう日本語だ。</p>

<p>特定のタグ(class指定可能)で囲まれた部分を実体参照に変換して出力するモディファイア<strong>escapecode</strong>を提供します。</p>

<pre><code class"mtml"><$mt:EntryBody escapecode="code,mtml"$></code></pre>

<p>上記のようにテンプレートに記述すると、下記の部分をエスケープして出力します。</p>

<pre><code class"mtml">&lt;pre&gt;&lt;code class&quot;mtml&quot;&gt;
&lt;$mt:EntryBody escapecode=&quot;code,mtml&quot;$&gt;
&lt;/code&gt;&lt;/pre&gt;</code></pre>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/01/29/EscapeCode.pl.zip">EscapeCode.pl.zip(677 Bytes)</a></li>
</ul>

<p>This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p>]]></description>
         <link>http://junnama.alfasado.net/online/2010/01/escape_htmlescapecodemt.html</link>
         <guid>http://junnama.alfasado.net/online/2010/01/escape_htmlescapecodemt.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
         <pubDate>Fri, 29 Jan 2010 18:59:13 +0900</pubDate>
      </item>
      
      <item>
         <title>御堂筋のイルミネーション</title>
         <description>御堂筋のイルミネーションも今週末まで。</description>
         <link>http://junnama.alfasado.net/online/2010/01/post_217.html</link>
         <guid>http://junnama.alfasado.net/online/2010/01/post_217.html</guid>
        
        
         <pubDate>Thu, 28 Jan 2010 16:16:27 +0900</pubDate>
      </item>
      
      <item>
         <title>携帯からの投稿設定してみた</title>
         <description>MT5に移行したついでにモブログの設定してみた。</description>
         <link>http://junnama.alfasado.net/online/2010/01/post_171.html</link>
         <guid>http://junnama.alfasado.net/online/2010/01/post_171.html</guid>
        
        
         <pubDate>Sun, 24 Jan 2010 18:50:32 +0900</pubDate>
      </item>
      
      <item>
         <title>MeCabでMTの自動タグ付けなんかを。</title>
         <description><![CDATA[<p>随分ご無沙汰してしまったのですが、本年も引き続きよろしくお願いします。</p>

<p>さて今年の最初は実用性があるかどうかはまったく別にして(且つ環境を選ぶものですけど)、サンプル的な感じで一つ。</p>

<p>きっかけは(ちょっと時間が経ってしまいましたが)、以下のエントリーから。</p>

<ul><li><a href="http://linker.in/journal/2009/10/meeting9movable-type.php">こんぶだしmeeting9杯目：あったらいいな、未来のこんなMovable Type!｜linker journal｜linker</a></li></ul>

<blockquote cite="http://linker.in/journal/2009/10/meeting9movable-type.php"><p>
本文内の文章を言語解析してくれて、関連するエントリーを勝手に出してほしい
</p></blockquote>

<ol>
	<li>MeCab/MeCab.pmをインストール</li>
	<li>MTのタグをMeCabの辞書に書き出して登録</li>
	<li>プラグインによってエントリーの保存時に形態素解析してタグを抽出して自動的にセットする</li>
</ol>

<p>というものです。タグを辞書に登録するのだから素直にDB見に行ってやればいいってのとそういうのもどっかで公開されてるんですが、あくまでもサンプルとして作りました。「名詞,一般」で2文字以上であれば自動登録とかの方法でやってもいいと思いますが、タグっぽくならないはならないので(関連エントリーのためだけに使うのであればそれでもいいと思いますが大量のタグが保存されて重くなるという懸念もあります)、このあたりは工夫の余地があるでしょう。</p>

<p>辞書へのタグの追加は <a href="http://mecab.sourceforge.net/dic.html">MeCab: 単語の追加方法</a> を参照いただくとして(テスト用途であればユーザー辞書として登録するのがいいかと思います)、インデックス・テンプレートに下記のように記述して辞書登録のCSVを作るための <strong>kanji2kana</strong> モディファイアも作りました。</p>

<pre><code>&lt;MTTags&gt;&lt;MTTagName&gt;,-1,-1,1,名詞,一般,*,*,*,*,&lt;MTTagName&gt;,&lt;MTTagName kanji2kana=&quot;1&quot;&gt;,&lt;MTTagName&gt;,Tags
&lt;/MTTags&gt;</code></pre>

<p>このインデックステンプレート<ins>(を再構築して生成されるcsv)</ins>を辞書に登録してエントリーを保存すると自動的にタグ付けされます。表記のゆれについては別途辞書に登録してやって吸収することが出来るでしょう。これに加えてogawaさんの <a href="http://code.google.com/p/ogawa/wiki/TagSupplementals?wl=ja">TagSupplementalsプラグイン</a> で関連するエントリーを出すようにすれば「本文内の文章を言語解析してくれて、関連するエントリーを勝手に出してほしい」ってのに近い環境が構築されないでしょうか?</p>

<p>※備忘録的にローカルMacの辞書登録コマンドをメモ</p>

<pre><code>sudo /opt/local/libexec/mecab/mecab-dict-index -d /opt/local/lib/mecab/dic/ipadic-utf8 -u user.dic -f utf8 -t utf8 dict.csv</code></pre>

<ul>
	<li><a href="http://junnama.alfasado.net/online/2010/01/18/MeCab.pl.zip">MeCab.pl.zip</a></li>
</ul>

<p>ということで(謎)今年も頑張って色々ネタとか提供していければと思いますのでよろしくお願いします。</p>]]></description>
         <link>http://junnama.alfasado.net/online/2010/01/macabmtauto_tagging.html</link>
         <guid>http://junnama.alfasado.net/online/2010/01/macabmtauto_tagging.html</guid>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableType</category>
        
          <category domain="http://www.sixapart.com/ns/types#category">MovableTypeプラグイン</category>
        
        
          <category domain="http://www.sixapart.com/ns/types#tag">Movable Type</category>
        
          <category domain="http://www.sixapart.com/ns/types#tag">Plugins</category>
        
         <pubDate>Mon, 18 Jan 2010 16:45:51 +0900</pubDate>
      </item>
      
   </channel>
</rss>
