<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Nullyのぶろぐ</title>
	
	<link>http://blog.nully.org</link>
	<description>@Nullyの勉強ブログ</description>
	<lastBuildDate>Wed, 18 Jan 2012 09:58:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta name="robots" content="noindex" />
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/feed/" />
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/blog-of-nully" /><feedburner:info uri="blog-of-nully" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Windows環境でBitbucketを使うためのメモ</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/rIQ44OGridQ/</link>
		<comments>http://blog.nully.org/2012/01/18/using-bitbucket-on-windows/#comments</comments>
		<pubDate>Wed, 18 Jan 2012 09:00:23 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[雑記]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[ToroitseHg]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1654</guid>
		<description><![CDATA[Windows環境でMercurialを利用できるBitbucketを利用するときに、ssh経由でcloneができなく悩んだ挙句、解決したのでめも。 Mercurialとは MercurialはGitと同様に、分散してバ [...]]]></description>
			<content:encoded><![CDATA[<p>Windows環境でMercurialを利用できるBitbucketを利用するときに、ssh経由でcloneができなく悩んだ挙句、解決したのでめも。</p>
<p><span id="more-1654"></span></p>
<h3>Mercurialとは</h3>
<p><a title="Mercurial" href="http://mercurial.selenic.com/" target="_blank">Mercurial</a>はGitと同様に、分散してバージョン管理ができるバージョン管理システムです。</p>
<p>Mercurialは「水銀」という意味らしく、コマンドエイリアスも「hg」と元素記号が利用されています。</p>
<p>GitといいMercurialといい、名前がかっこよすぎます。</p>
<h3>WindowsでMercurialを利用するには</h3>
<p>Windows環境でMercurialを利用するには、<a title="TortoiseHg" href="http://tortoisehg.bitbucket.org/ja/" target="_blank">TortoiseHg</a>を利用します。</p>
<p>インストール時にやることはほとんどなく、私はすべてデフォルトの状態でインストールしました。</p>
<h3>Bitbucketって？</h3>
<p>BitbucketはMercurialとGitに対応したコードホスティングサイトです。</p>
<p>無料で利用することも可能（一部制限はあります）で、もちろん<a title="Plans" href="https://bitbucket.org/plans" target="_blank">有料プラン</a>も用意されています。</p>
<p>今回はすでに登録済みという前提で進めますが、登録する内容はユーザー名、パスワード、メアドなど基本的な内容を登録するだけで完了しますので、割愛させていただきます。</p>
<h3>Puttygenを使って認証鍵のペアを作る</h3>
<p><a href="http://blog.nully.org/files/2012/01/puttygen.gif"><img src="http://blog.nully.org/files/2012/01/puttygen-150x150.gif" title="puttygen" width="150" height="150" class="size-thumbnail wp-image-1656 alignleft" /></a><a title="Puttygen" href="http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html" target="_blank">Puttygen</a>はWindows環境でもsshで利用する公開鍵のペアを簡単に作ることができるアプリケーションです。</p>
<p>ダウンロード後、実行し鍵を作ります。</p>
<p><a href="http://blog.nully.org/files/2012/01/guruguru.gif"><img src="http://blog.nully.org/files/2012/01/guruguru-150x150.gif" title="guruguru" width="150" height="150" class="size-thumbnail wp-image-1657 alignleft" /></a> 「Generate」ボタンを押して、赤文字の枠内あたりでマウスをグルグルします。</p>
<p>鍵の種類は「SSH-2RSA」を選択します。</p>
<p><span style="color: #ff0000;">※最初使ったときはひたすら「なげーなー&#8230;」って思ってたら、ぐるぐるするとはやくなるよ！って見つけてまさか～なんてやったら本当だった。プログラマの考える遊び心は面白いｗ</span></p>
<p><a href="http://blog.nully.org/files/2012/01/gen.gif"><img src="http://blog.nully.org/files/2012/01/gen-150x150.gif" title="gen" width="150" height="150" class="size-thumbnail wp-image-1655 alignleft" /></a> パスワードを設定しなければならないので、「Key Passphrase」にSSH認証する際に利用するパスワードを入力します。</p>
<p>「Confirm Passphrase」にはパスワードの再入力をします。</p>
<p>出来上がった公開鍵はBitbucketのアカウントページから「SSH Keys」の項目に追加するのでコピっておきます。</p>
<p>出来上がった鍵はファイルとして保存します。</p>
<p>「generate」の下に２つ並んで「save public key」と「save private key」があるのでそれぞれボタンを押して保存します。</p>
<p>「private～」の方では保存時に「パスワードが含まれているけど保存する？」というメッセージが出ますが、OKをおし、保存します。</p>
<p>「public」の方は「id_rsa.pub」として、「private」の方は「id_rsa.ppk」として保存しておきます。</p>
<p>この保存した２つのファイルをTortoiseHgのインストールディレクトリ（C:\Program Files\TortoiseHg\）に移動します。</p>
<p>この際Windows7を利用している場合は管理者権限が必要になります。</p>
<h3>Bitbucketにコピった公開鍵を追加する</h3>
<p><a href="http://blog.nully.org/files/2012/01/key.gif"><img src="http://blog.nully.org/files/2012/01/key-150x150.gif" alt="" title="key" width="150" height="150" class="alignleft size-thumbnail wp-image-1659" /></a>Bitbucketのアカウントページから「SSH Keys」に先ほどコピった内容を追加します。</p>
<h3>TortoiseHgの設定</h3>
<p>続いてTortoiseHgの設定です。</p>
<p>TortoiseHgをインストールしたときに、ユーザーディレクトリ直下（C:\Users\ユーザー名）に「mercurial.ini」という設定ファイルが出来上がります。</p>
<p>これをemEditorなどで開き、次の内容を加え、保存します。</p>
<pre>[ui]
username = ユーザー名 &lt;メールアドレス&gt;
ssh = "C:\Program Files\TortoiseHg\TortoisePlink.exe" -ssh -2 -batch -C -i "C:\Program Files\TortoiseHg\id_rsa.ppk"</pre>
<p>sshでの接続を行う際（主にcloneやpush、pullなど）に利用するファイル等の設定を記述することで、都度パスワードを入力せずpushしたりすることができるようになります。</p>
<p>あとはBitbucket上でリポジトリを作成し、ssh経由でcloneすることができるようになるはずです。</p>
<h3>終わりに</h3>
<p>Windows上での情報がなさすぎてこれを全部発見するまでに２時間くらい費やした&#8230;。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/QSLakvzyS_IJPuwP2knqA1xPdHg/0/da"><img src="http://feedads.g.doubleclick.net/~a/QSLakvzyS_IJPuwP2knqA1xPdHg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/QSLakvzyS_IJPuwP2knqA1xPdHg/1/da"><img src="http://feedads.g.doubleclick.net/~a/QSLakvzyS_IJPuwP2knqA1xPdHg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/rIQ44OGridQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2012/01/18/using-bitbucket-on-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2012/01/18/using-bitbucket-on-windows/" />
	<feedburner:origLink>http://blog.nully.org/2012/01/18/using-bitbucket-on-windows/</feedburner:origLink></item>
		<item>
		<title>Zend_Http_UserAgentを使って表示振り分けを試みる</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/CSy_p-yOr4A/</link>
		<comments>http://blog.nully.org/2012/01/07/try-for-using-zend_http_useragent/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 07:00:38 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[WURFL]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1630</guid>
		<description><![CDATA[ZendFramework1.11から利用できるようになったZend_Http_UserAgentを使って、表示振り分けを試みてみます。 動作環境について 動作環境は以下のとおりになります。 OS：Mac10.7（MAM [...]]]></description>
			<content:encoded><![CDATA[<p>ZendFramework1.11から利用できるようになったZend_Http_UserAgentを使って、表示振り分けを試みてみます。</p>
<p><span id="more-1630"></span></p>
<h2>動作環境について</h2>
<p>動作環境は以下のとおりになります。</p>
<ul>
<li>OS：Mac10.7（MAMP）</li>
<li>PHP：5.2系</li>
<li>私の健康状態：良好</li>
</ul>
<h2>Zend_Http_UserAgentでできること</h2>
<p>主にユーザーエージェントを取得します。名前通りです。</p>
<p>このクラスはSerializableを実装していて、セッションの中にUAを保存しておくことが可能になっています。</p>
<p>と言うかデフォルトでは自動的にセッションに保存されます。</p>
<h2>デバイス検出を行うための準備</h2>
<p>Zend_Http_UserAgentクラスだけではデバイス検出を行うことはできません。</p>
<p>なので、WURFL APIを利用してデバイスを検出できるようにします。</p>
<h2>WURFLとは？</h2>
<p>WURFLはワイアレス端末をリソースファイルとしてまとめたもので、主にモバイル端末の検出で利用することができます。</p>
<p>WURFLについて詳しくは<a title="WURFL" href="http://wpedia.goo.ne.jp/enwiki/WURFL" target="_blank">コチラ</a>を御覧ください。</p>
<h3>WURFL APIをダウンロード</h3>
<p>PHPでWURFL APIを利用するためには、公式で配布されているWURFLパッケージクラスを利用します。</p>
<p>ZF内でもこの公式クラスを使います。</p>
<p>DLは<a title="WURLF API" href="http://sourceforge.net/projects/wurfl/files/WURFL%20PHP/1.3/" target="_blank">コチラ</a>から環境にあわせて落としてください。</p>
<p>今回利用するバージョンは1.3.1です。（2012年1月現在）</p>
<p>落としてきたファイルはZFプロジェクト内にある、libraryディレクトリに入れておきます。</p>
<p>これに加え、以下のファイルもそれぞれのディレクトリに入れておきます。</p>
<p>場所は個人的に好む場所で構いません。</p>
<ul>
<li>wurfl-php-1.3.1/examples/resources/web_browsers_patch.xml</li>
<ul>
<li>→ APPLICATION_PATH/var/data/</li>
</ul>
<li>wurfl-php-1.3.1/examples/resources/wurfl-2.0.27.zip</li>
<ul>
<li>→ APPLICATION_PATH/var/data/</li>
</ul>
<li>wurfl-php-1.3.1/examples/resources/wurfl-config.xml</li>
<ul>
<li>→ APPLICATION_PATH/var/data/</li>
</ul>
<li>wurfl-php-1.3.1/examples/resources/wurfl.zip</li>
<ul>
<li>→ APPLICATION_PATH/var/data/</li>
</ul>
</ul>
<h2>コードを記述する</h2>
<p>まずはconfigs/application.iniにオートローダーの名前空間、Zend_Http_UserAgentのリソース設定を記述します。</p>
<h3>configs/application.iniの設定</h3>
<pre>resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/../library/WURFL/"
resources.useragent.wurflapi.wurfl_api_version = "1.1"
resources.useragent.wurflapi.wurfl_config_array.wurfl.main-file = APPLICATION_PATH "/var/data/wurfl-2.0.27.zip"
resources.useragent.wurflapi.wurfl_config_array.wurfl.patches = APPLICATION_PATH "/var/data/web_browsers_patch.xml"
resources.useragent.wurflapi.wurfl_config_array.persistence.provider = "file"
resources.useragent.wurflapi.wurfl_config_array.persistence.dir.dir = APPLICATION_PATH "/var/cache/wurfl"

autoloaderNamespaces.my = "My_"</pre>
<p>「My_」は後ほどControllerPluginを作成するので、そのために予め登録しておきます。</p>
<p>「wurflapi」は上から順に、</p>
<ul>
<li>WURFLパッケージクラスへのパス</li>
<li>WURFL APIの利用するバージョン（1.0か1.1）</li>
<li>WURFLのメインファイルへのパス（zipファイル）</li>
<li>ブラウザパッチへのファイルパス（xmlファイル）</li>
<li>WURFL APIのキャッシュプロバイダ名</li>
<li>WURFL APIのキャッシュディレクトリパス</li>
</ul>
<p>となります。</p>
<p>ディレクトリパスは利用する環境にあわせて変更してもOKです。</p>
<h3>Bootstrapにかきかき</h3>
<p>次は起動コードを書きます。</p>
<p>起動コードの段階であらかじめデバイス検出を行なっておくと、各アクションでの再利用が楽になるのでここでデバイス情報の取得のみ行なってしまいます。</p>
<p>また、ControllerPluginも登録しておき、dispatchループの際に利用するHTMLのフォーマットを決めてしまいます。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"style=" height: 252px;"><div class="php"><ol><li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> _initControllerPlugin<span class="br0">&#40;</span><span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$f</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bootstrap</span><span class="br0">&#40;</span><span class="st0">&quot;frontController&quot;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getResource</span><span class="br0">&#40;</span><span class="st0">&quot;frontController&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$f</span><span class="sy0">-&gt;</span><span class="me1">registerPlugin</span><span class="br0">&#40;</span><span class="kw2">new</span> My_Controller_Plugin_DetectContext<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="co1">// WURFL APIを用いたデバイス情報を取得する</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> _initMobileDevice<span class="br0">&#40;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$ua</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span><span class="me1">bootstrap</span><span class="br0">&#40;</span><span class="st0">&quot;useragent&quot;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getResource</span><span class="br0">&#40;</span><span class="st0">&quot;useragent&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re0">$ua</span><span class="sy0">-&gt;</span><span class="me1">getDevice</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="co1">// みんな大好きコンテキスト</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">protected</span> <span class="kw2">function</span> _initContexts<span class="br0">&#40;</span><span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$context</span> <span class="sy0">=</span> Zend_Controller_Action_HelperBroker<span class="sy0">::</span><span class="me2">getStaticHelper</span><span class="br0">&#40;</span><span class="st0">&quot;contextSwitch&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$context</span><span class="sy0">-&gt;</span><span class="me1">clearContexts</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$context</span><span class="sy0">-&gt;</span><span class="me1">setContext</span><span class="br0">&#40;</span><span class="st0">&quot;pc&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;suffix&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;pc&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;headers&quot;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Content-Type&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html;charset=utf-8&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">setContext</span><span class="br0">&#40;</span><span class="st0">&quot;mb&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;suffix&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;mb&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;headers&quot;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">setContext</span><span class="br0">&#40;</span><span class="st0">&quot;iphone&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;suffix&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;iphone&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;headers&quot;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Content-Type&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html;charset=utf-8&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="sy0">-&gt;</span><span class="me1">setContext</span><span class="br0">&#40;</span><span class="st0">&quot;ipad&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;suffix&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;ipad&quot;</span><span class="sy0">,</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;headers&quot;</span> <span class="sy0">=&gt;</span> <span class="kw3">array</span><span class="br0">&#40;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">&quot;Content-Type&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;text/html;charset=utf-8&quot;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">,</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">    protected function _initControllerPlugin()
    {
        $f = $this-&gt;bootstrap("frontController")-&gt;getResource("frontController");
        $f-&gt;registerPlugin(new My_Controller_Plugin_DetectContext());
    }

    // WURFL APIを用いたデバイス情報を取得する
    protected function _initMobileDevice()
    {
        $ua = $this-&gt;bootstrap("useragent")-&gt;getResource("useragent");
        return $ua-&gt;getDevice();
    }

    // みんな大好きコンテキスト
    protected function _initContexts()
    {
        $context = Zend_Controller_Action_HelperBroker::getStaticHelper("contextSwitch");
        $context-&gt;clearContexts();
        $context-&gt;setContext("pc", array(
            "suffix" =&gt; "pc",
            "headers" =&gt; array(
                "Content-Type" =&gt; "text/html;charset=utf-8"
            ),
        ))
        -&gt;setContext("mb", array(
            "suffix" =&gt; "mb",
            "headers" =&gt; array()
        ))
        -&gt;setContext("iphone", array(
            "suffix" =&gt; "iphone",
            "headers" =&gt; array(
                "Content-Type" =&gt; "text/html;charset=utf-8"
            ),
        ))
        -&gt;setContext("ipad", array(
            "suffix" =&gt; "ipad",
            "headers" =&gt; array(
                "Content-Type" =&gt; "text/html;charset=utf-8"
            ),
        ));
    }</pre></div></div>

<p>すでにお気づきかと思いますが、最終的にはContextSwitchヘルパーに表示ファイルの選択を行わせるようにしますので、Bootstrap.php内にContextSwitchのコードもあわせて記述しておきます。</p>
<h3>Controllerプラグインの作成</h3>
<p>library以下にMy/Controler/Plugin/DetectContext.phpを作成し、ContextSwitchで利用するフォーマットの算出を行います。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"style=" height: 252px;"><div class="php"><ol><li class="li1"><div class="de1"><span class="kw2">class</span> My_Controller_Plugin_DetectContext <span class="kw2">extends</span> Zend_Controller_Plugin_Abstract</div></li>
<li class="li2"><div class="de2"><span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw2">public</span> <span class="kw2">function</span> dispatchLoopStartup<span class="br0">&#40;</span>Zend_Controller_Request_Abstract <span class="re0">$request</span><span class="br0">&#41;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$front</span> <span class="sy0">=</span> Zend_Controller_Front<span class="sy0">::</span><span class="me2">getInstance</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$bootstrap</span> <span class="sy0">=</span> <span class="re0">$front</span><span class="sy0">-&gt;</span><span class="me1">getParam</span><span class="br0">&#40;</span><span class="st0">&quot;bootstrap&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$device</span> <span class="sy0">=</span> <span class="re0">$bootstrap</span><span class="sy0">-&gt;</span><span class="me1">bootstrap</span><span class="br0">&#40;</span><span class="st0">&quot;mobiledevice&quot;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">getResource</span><span class="br0">&#40;</span><span class="st0">&quot;mobiledevice&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// デバイス情報を元に、フォーマットを定義する</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$device</span><span class="sy0">-&gt;</span><span class="me1">getFeature</span><span class="br0">&#40;</span><span class="st0">&quot;is_mobile&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$deviceName</span> <span class="sy0">=</span> <span class="re0">$device</span><span class="sy0">-&gt;</span><span class="me1">getFeature</span><span class="br0">&#40;</span><span class="st0">&quot;device&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span><span class="re0">$deviceName</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;iphone&quot;</span><span class="sy0">:</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$format</span> <span class="sy0">=</span> <span class="st0">&quot;iphone&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;ipad&quot;</span><span class="sy0">:</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$format</span> <span class="sy0">=</span> <span class="st0">&quot;ipad&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">default</span><span class="sy0">:</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// 空っぽだったり一致しないものはすべてガラケ表示</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$format</span> <span class="sy0">=</span> <span class="st0">&quot;mb&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$format</span> <span class="sy0">=</span> <span class="st0">&quot;pc&quot;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$request</span><span class="sy0">-&gt;</span><span class="me1">setParam</span><span class="br0">&#40;</span><span class="st0">&quot;format&quot;</span><span class="sy0">,</span> <span class="re0">$format</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">class My_Controller_Plugin_DetectContext extends Zend_Controller_Plugin_Abstract
{
    public function dispatchLoopStartup(Zend_Controller_Request_Abstract $request)
    {
        $front = Zend_Controller_Front::getInstance();
        $bootstrap = $front-&gt;getParam("bootstrap");
        $device = $bootstrap-&gt;bootstrap("mobiledevice")-&gt;getResource("mobiledevice");

        // デバイス情報を元に、フォーマットを定義する
        if($device-&gt;getFeature("is_mobile")) {
            $deviceName = $device-&gt;getFeature("device");
            switch($deviceName) {
                case "iphone":
                    $format = "iphone";
                    break;
                case "ipad":
                    $format = "ipad";
                    break;
                default:
                    // 空っぽだったり一致しないものはすべてガラケ表示
                    $format = "mb";
                    break;
            }
        }
        else {
            $format = "pc";
        }
        $request-&gt;setParam("format", $format);
    }
}</pre></div></div>

<p>先ほどBootstrapで記述した「_initMobileDebice」の実行結果を取り出し、getFeature()関数でモバイル端末か否かの判別と、モバイル端末のデバイス名の取得・判別を行います。</p>
<p>後はそれぞれに見合ったフォーマットを設定しています。</p>
<h3>最後にIndexControllerを修正</h3>
<p>最後にフォーマットに合わせたコンテキストを各アクションで有効化するためのコードを書き足します。</p>
<p>initなどに許可するコンテキストを以下のように書きます。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="re0">$context</span> <span class="sy0">=</span> <span class="re0">$this</span><span class="sy0">-&gt;</span>_helper<span class="sy0">-&gt;</span><span class="me1">ContextSwitch</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="re0">$context</span><span class="sy0">-&gt;</span><span class="me1">addActionContext</span><span class="br0">&#40;</span><span class="st0">&quot;index&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;pc&quot;</span><span class="sy0">,</span> <span class="st0">&quot;iphone&quot;</span><span class="sy0">,</span> <span class="st0">&quot;ipad&quot;</span><span class="sy0">,</span> <span class="st0">&quot;mb&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">initContext</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">$context = $this-&gt;_helper-&gt;ContextSwitch();
$context-&gt;addActionContext("index", array("pc", "iphone", "ipad", "mb"))-&gt;initContext();</pre></div></div>

<p><a href="http://blog.nully.org/files/2012/01/view-scripts.png"><img src="http://blog.nully.org/files/2012/01/view-scripts-150x150.png" alt="view-scripts" title="view-scripts" width="150" height="150" class="size-thumbnail wp-image-1635 alignleft" /></a>後はデバイス毎に表示吸うためのViewスクリプトを準備してあげます。</p>
<p>動作確認はFireFoxなどでシミュレーターを利用することで確認することができます。</p>
<h2>終わりに</h2>
<p>今回はあくまでiPhone及びiPad、PCを検出し、それぞれに合わせた出力ファイルを変更する手法です。</p>
<p>ガラケなどの表示もContextSwitchである程度対応は可能ですが、Filterなどを使って吐き出すHTMLを変換剃る必要はあります。</p>
<p><a title="Zend Framework 日めくり Calendar 2012" href="http://atnd.org/events/23579" target="_blank">Zend Framework 日めくり Calendar 2012</a>には関係が無いのですが、色々な方の投稿を見ていてｗｋｔｋしたので投稿してしまいました！</p>

<p><a href="http://feedads.g.doubleclick.net/~a/9R3zQhJ3vt76s036onvevo361_4/0/da"><img src="http://feedads.g.doubleclick.net/~a/9R3zQhJ3vt76s036onvevo361_4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/9R3zQhJ3vt76s036onvevo361_4/1/da"><img src="http://feedads.g.doubleclick.net/~a/9R3zQhJ3vt76s036onvevo361_4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/CSy_p-yOr4A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2012/01/07/try-for-using-zend_http_useragent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2012/01/07/try-for-using-zend_http_useragent/" />
	<feedburner:origLink>http://blog.nully.org/2012/01/07/try-for-using-zend_http_useragent/</feedburner:origLink></item>
		<item>
		<title>謹賀新年</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/sBwzYbVafRg/</link>
		<comments>http://blog.nully.org/2012/01/01/a-happy-new-year-2012/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 15:00:15 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[謹賀新年]]></category>
		<category><![CDATA[迎春]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1622</guid>
		<description />
			<content:encoded><![CDATA[<p><img class="size-full wp-image-1623" src="http://blog.nully.org/files/2011/12/nenga.gif" alt="迎春" title="迎春" width="420" height="500" /></p>

<p><a href="http://feedads.g.doubleclick.net/~a/ymndbzNajOAT5tHj0rEvsltolvI/0/da"><img src="http://feedads.g.doubleclick.net/~a/ymndbzNajOAT5tHj0rEvsltolvI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ymndbzNajOAT5tHj0rEvsltolvI/1/da"><img src="http://feedads.g.doubleclick.net/~a/ymndbzNajOAT5tHj0rEvsltolvI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/sBwzYbVafRg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2012/01/01/a-happy-new-year-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2012/01/01/a-happy-new-year-2012/" />
	<feedburner:origLink>http://blog.nully.org/2012/01/01/a-happy-new-year-2012/</feedburner:origLink></item>
		<item>
		<title>歳末大市！私が利用しているAndroidアプリの一覧！</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/gtODTOP4uOA/</link>
		<comments>http://blog.nully.org/2011/12/31/used-android-applications/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 11:00:25 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[その他]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[アプリ]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1616</guid>
		<description><![CDATA[年末なので、歳末大市っぽく私が現在利用しているAndroidアプリをざざざーっと公開しちゃいます！ ここで紹介するアプリは大半が個人で遊ぶ（趣味）程度で利用してるものが多く、ビジネスに向いているものは少ないです。 なので [...]]]></description>
			<content:encoded><![CDATA[<p>年末なので、歳末大市っぽく私が現在利用しているAndroidアプリをざざざーっと公開しちゃいます！</p>
<p><span id="more-1616"></span></p>
<p>ここで紹介するアプリは大半が個人で遊ぶ（趣味）程度で利用してるものが多く、ビジネスに向いているものは少ないです。</p>
<p>なので、ちょっとつまらない感じもするかもしれませんが、ケツに息を吹きかける程度で見守っていただければと思います。</p>
<p>端末環境</p>
<p>端末の環境は以下のとおりです。</p>
<ul>
<li>機種：Softbank X06HT Desire</li>
<li>OSバージョン：Android2.2</li>
<li>状態：戻るボタンがいうことを聞かない</li>
</ul>
<h2> 暇つぶし系</h2>
<h3><a title="2chMate" href="https://market.android.com/details?id=jp.co.airfront.android.a2chMate" target="_blank">2chMate</a></h3>
<p>バスを待っている時や、地下鉄を待っているとき、昼飯の待ち時間などを利用して2chを見るときに使います。</p>
<p>仕事的な内容から日常生活、エロまでと何でもゴザレ。</p>
<h3><a title="Facebook" href="https://market.android.com/details?id=com.facebook.katana" target="_blank">Android用Facebook</a></h3>
<p>Android端末でFacebookを楽しむならこのアプリがベストかもしれません。</p>
<p>ほかにもFriendCasterというものがありますが、UIが素敵だったのでコチラをチョイス。</p>
<p>ロードが若干もたついたり（多分SB端末の仕様）などもありますが、ほぼ快適に使えています。</p>
<h3><a title="Feedly" href="https://market.android.com/details?id=com.devhd.feedly" target="_blank">Feedly</a></h3>
<p>Googleリーダーのアカウントを設定することでGリーダーのRSSを見ることができるアプリ。</p>
<p>予め登録されているRSSもあるので（英語ですが）Gリーダー無しでもある程度の情報を集めることも出来ます。</p>
<p>主に2chまとめのRSSを購読。</p>
<h3><a title="Gowalla" href="https://market.android.com/details?id=com.gowalla" target="_blank">Gowalla</a></h3>
<p>Foursquareのような位置情報を元にしたSNSのアプリ。</p>
<p>「◯◯にいるよ！」「××に△△と一緒にイルよ！」などなど、いろいろな言葉を添えて、現在の場所を共有することができます。</p>
<p>Facebookのチェックインみたいなもんですね。</p>
<p>また、バッジもかなりの数が用意されており、行った場所や、登録した場所、登録個数等によってバッジがもらえます。</p>
<p>私は大概すき家にいます。</p>
<h3><a title="LittlePhoto" href="https://market.android.com/details?id=com.littlephoto" target="_blank">LittlePhoto</a></h3>
<p>様々な効果を持ったカメラアプリ。</p>
<p>既存の写真画像を読み込み、効果だけを当てることも可能です。</p>
<p>当てることのできる効果は70個以上あるそうです。</p>
<p>これ1つで大抵の効果を当てることができ、端末の容量的にも優しいアプリです。</p>
<p>また、撮影音も無いので、人目を気にせずパシャパシャできます。</p>
<p style="text-align: center;"><span style="color: #ff0000;">盗撮は絶対ダメ。</span></p>
<h3><span style="color: #000000;"><a title="Picasa Tool" href="https://market.android.com/details?id=larry.zou.colorfullife" target="_blank">PicasaTool</a></span></h3>
<p style="text-align: left;">Google Picasaを端末から操作できるアプリ。</p>
<p style="text-align: left;">オンラインアルバムでどれがいいかなーと迷いましたが、なんやかんやでこれに落ち着き、Googleマンセー状態が続きます。</p>
<p style="text-align: left;">アルバムの作成や、写真のアップロード、人気の写真を拝見することができます。</p>
<p style="text-align: left;">大方パチンコの最中に出てきたプレミアム画像（主にエウレカ）をアップしてます。</p>
<h3 style="text-align: left;"><a title="TuneIn Radio" href="https://market.android.com/details?id=tunein.player" target="_blank">TuneIn Radio</a></h3>
<p style="text-align: left;">海外のネットラジオを聞くことのできるアプリ。</p>
<p style="text-align: left;">日本のラジオなども聞くことができます。</p>
<p style="text-align: left;">私は大抵「Soulfull House」という局番を聞いています。</p>
<p style="text-align: left;">バスの中で一人気持ち悪くノリノリです。</p>
<h3 style="text-align: left;"><a title="Plume" href="https://market.android.com/details?id=com.levelup.touiteur" target="_blank">Plume</a></h3>
<p style="text-align: left;">Twitterクライアントアプリです。</p>
<p style="text-align: left;">今までいろいろ（TweetCasterやSeesmicなど）使ってきましたが、端末を買って初めて入れたこれに戻って来ました。</p>
<h3 style="text-align: left;"><a title="Picplz" href="https://market.android.com/details?id=com.picplz.rangefinder" target="_blank">Picplz</a></h3>
<p style="text-align: left;">iPhoneで言うところのInstagramのようなアプリケーション。</p>
<p style="text-align: left;">「俺の撮影した彼女かわいいでしょ！」とか「ﾊｯﾋﾟﾊﾞｰｽﾃﾞｰﾄｩｰﾐｰ！」などなど、色々な方が撮影した色々な写真がアップロードされています。</p>
<p style="text-align: left;">私も犬や犬、犬などの写真を撮影し、アップしております。</p>
<h3 style="text-align: left;"><a title="はてなブックマーク" href="https://market.android.com/details?id=com.hatena.android.bookmark" target="_blank">はてなブックマーク</a></h3>
<p style="text-align: left;">はてブされたいろいろな記事をAndroid端末から閲覧することができます。</p>
<h2 style="text-align: left;">便利系</h2>
<h3 style="text-align: left;"><a title="AA Task" href="https://market.android.com/details?id=my.Frank" target="_blank">AA Task</a></h3>
<p style="text-align: left;">有名どこではジョルテがありますが、SDに移動してしまうとウィジェットが使えなくなる（WidgetViewが登録できないだかなんだかで使えなくなる）ので、極力容量の少ないアプリを&#8230;！</p>
<p style="text-align: left;">てことでたまたま発見したアプリがこれでした。</p>
<p style="text-align: left;">タスク登録、メモ帳、目標などを登録でき、アラーム機能もついています。</p>
<p style="text-align: left;">明日はAちゃん、明後日はBちゃん、今日はCちゃんとEちゃん。なんて予定も一発管理できちゃいますね！</p>
<h3 style="text-align: left;"><a title="Apps Organizer" href="https://market.android.com/details?id=com.google.code.appsorganizer" target="_blank">Apps Organizer</a></h3>
<p style="text-align: left;">Folder Organizerと同様のアプリで、インストール済みアプリケーションをフォルダ（ラベル）で管理することができるアプリです。</p>
<p style="text-align: left;">これにSwipepad（後述）を組み合わせることで、ホームアプリのスクリーン枚数を少なく且つ自分なりの扱いやすい環境を構築しました！</p>
<p style="text-align: left;">『そう、Androidならこんなカスタマイズも、自由自在。』</p>
<p style="text-align: left;">ついついそんなことを口走りそうになります。</p>
<h3 style="text-align: left;"><a title="Dropbox" href="https://market.android.com/details?id=com.dropbox.android" target="_blank">Dropbox</a></h3>
<p style="text-align: left;">言わずと知れたオンラインストレージアプリ。</p>
<p style="text-align: left;">ほかにもZumo driveや、Sugarsync、Neverドライブなどもありますが、まぁ2Gもありゃ事足りるじゃん？てことでコチラをチョイス。</p>
<p style="text-align: left;">バスの時刻表や、後で読みたいなーという資料などをゴリゴリツッコミ、黙々と読みます。</p>
<p style="text-align: left;">もちろん、エロ画像もどんとこい。</p>
<h3 style="text-align: left;"><a title="Free Power Widget" href="https://market.android.com/details?id=at.abraxas.powerwidget.free" target="_blank">Free Power Widget</a></h3>
<p style="text-align: left;">色々なボタンウィジェット（wifiやGPS、機内モードなど）を自由に登録・配置できるウィジェットアプリ。</p>
<p style="text-align: left;">好きなボタンを好きな色・好きな場所に配置できるので、オレオレ画面の構築で利用します。</p>
<h3 style="text-align: left;"><a title="Garlic" href="https://market.android.com/details?id=an.garlic.tool.contacts" target="_blank">Garlic電話帳</a></h3>
<p style="text-align: left;">Garlic電話帳はグループ検索を搭載しつつも、シンプルに構成された電話帳アプリ。</p>
<p style="text-align: left;">g電話帳と悩んだ結果「使ってる人少さそうだし、何よりシンプルでいいな」ってことでコチラをインストール。</p>
<h3 style="text-align: left;"><a title="Google Chrome to Phone" href="https://market.android.com/details?id=com.google.android.apps.chrometophone" target="_blank">Google Chrome to Phone</a></h3>
<p style="text-align: left;">Android端末を使うならこのアプリは必須（なはず）。</p>
<p style="text-align: left;">パソコンでGoogle Chromeブラウザを利用していれば、Chrome拡張をインストールすることで、現在閲覧しているページをAndroid端末へと転送することが可能です。</p>
<p style="text-align: left;">Hな画面もブザウザで読み込んでいる最中に速攻で押せば&#8230;！</p>
<p style="text-align: left;">こんな使い方もしてみたいものです。</p>
<h3 style="text-align: left;"><a title="Launcher Pro" href="https://market.android.com/details?id=com.fede.launcher" target="_blank">Launcher Pro</a></h3>
<p style="text-align: left;">Androidはホーム画面をアプリによって切り替えることが可能です。</p>
<p style="text-align: left;">デフォルトで搭載されているアプリだと「若干使いづらい&amp;なんかだせぇｗｗｗｗｗｗｗｗｗ」ってのがあったので、無地に近いLauncher Proをインストール。</p>
<p style="text-align: left;">Dockランチャーも搭載していて、好きな場所に好きなアプリを登録することができます。</p>
<p style="text-align: left;">また、別途アイコンセットも有志で配布されているのでそちらを導入することでよりオレオレに！</p>
<h3 style="text-align: left;"><a title="My QR" href="https://market.android.com/details?id=net.karappo.android.myqr" target="_blank">My QR</a></h3>
<p style="text-align: left;">「あ、僕スマフォなんですよ^^」と言いながら颯爽とこのアプリを起動し、QRスキャナーで読み込んでもらうことのできるアプリです。</p>
<p style="text-align: left;">赤外線のツイてない端末（主に古い端末）では、赤外線通信で自分のアドレス等を送ることができない場合に、相手側には申し訳ないのですが、QRを読み込んで登録してもらいます。</p>
<h3 style="text-align: left;"><a title="Pocket" href="https://market.android.com/details?id=com.citc.wallet" target="_blank">Pocket</a></h3>
<p style="text-align: left;">メールアカウントの管理から、銀行口座の口座番号まで、幅広く管理できるアプリ。</p>
<p style="text-align: left;">Dropboxと動機することで、端末を変更した後もお手軽に同期することが可能です。</p>
<p style="text-align: left;">ポケットにPocketを忍ばせておくことでポケーっとしやすい私でもスマートに管理が可能に！</p>
<h3 style="text-align: left;"><a title="QRコードスキャナー" href="https://market.android.com/details?id=com.google.zxing.client.android" target="_blank">QRコードスキャナー</a></h3>
<p style="text-align: left;">私の端末では初期でQRコードリーダーを搭載しておらず、QRを読み込むときはこのアプリを利用しています。</p>
<p style="text-align: left;">また、QRだけじゃなく、JANコードなども読み込めるので、値札の貼りつけられていない商品のJANを読み込んで価格を検索することも可能です。</p>
<h3 style="text-align: left;"><a title="Quick Pic" href="https://market.android.com/details?id=com.alensw.PicFolder" target="_blank">QuickPic</a></h3>
<p style="text-align: left;">画像や動画をサクサク閲覧することが可能なアプリ。</p>
<p style="text-align: left;">とにかく機敏に動き、画像の簡易編集までサポートしてくれるので、写真をよく撮影される方にはお勧めのアプリです。</p>
<h3 style="text-align: left;"><a title="SD Card Manager" href="https://market.android.com/details?id=my.mobi.android.apps4u.sdcardmanager" target="_blank">SD Card Manager</a></h3>
<p style="text-align: left;">読んで字のごとく、SDカードの操作を行うアプリ。</p>
<p style="text-align: left;">SDだけじゃなく、端末側の操作も行えます。</p>
<p style="text-align: left;">ほかのアプリはどうにもゴタゴタとし過ぎていてあれなのでこれにしました。</p>
<h3 style="text-align: left;"><a title="Springpad" href="https://market.android.com/details?id=com.springpad" target="_blank">Springpad</a></h3>
<p style="text-align: left;">以前、当ブログでも紹介したSpringpadのアプリです。</p>
<p style="text-align: left;">SpringpadはEvernoteとは似て非なるもので、Springpadは単語帳のようなイメージで利用することのできるアプリです。</p>
<p style="text-align: left;">ノート作成はもちろん、タスク管理、ほしい物リスト、レシピまとめなど、型枠の決まったいろいろなものを登録することができます。</p>
<p style="text-align: left;">EvernoteをAndroid端末（主に携帯）で利用しない理由はノートなので、体裁をすべて自分で決定市なければならないので、手間が多すぎると個人的に感じたからです。</p>
<p style="text-align: left;">デバイスが小さいため、ある程度型枠が決まっている方が登録も行いやすく、後で探しやすいのでAndroid端末では利用していません。</p>
<h3 style="text-align: left;"><a title="SwipePad" href="https://market.android.com/details?id=mobi.conduction.swipepad.android" target="_blank">SwipePad</a></h3>
<p style="text-align: left;">画面の指定した場所からスワイプすることで隠れたスペースを呼び出すことができるアプリ。</p>
<p style="text-align: left;">先ほど紹介した「Apps Organizer」と併用することで、ホームをすっきりさせることができます。</p>
<h3 style="text-align: left;"><a title="Viber" href="https://market.android.com/details?id=com.viber.voip" target="_blank">Viber</a></h3>
<p style="text-align: left;">Skypeと似たようなアプリ。</p>
<p style="text-align: left;">チャットはもちろん、パケット通話（Skypeの音声チャットのような物）が利用できます。</p>
<p style="text-align: left;">パケットを利用した通話になるので通話料金は無料（パケット代はかかります）。</p>
<p style="text-align: left;">新しく自分の電話帳に登録されている人がViberを使い始めるとポップアップでこの人が利用し始めたよ！という旨も通知してくれます。</p>
<p style="text-align: left;">mVideoPlayer</p>
<p style="text-align: left;">デフォルトのビデオプレイヤーなどでもいいのですが、フォルダ毎にリストアップしてくれたりと小さいところで便利なので使ってます。</p>
<p style="text-align: left;">またこのプレーヤーはAndroid端末でサポートされているコーデックのみ再生できます。</p>
<p style="text-align: left;">なので、FLVの再生などは別のアプリを探すことをお勧めします。</p>
<h3 style="text-align: left;"><a title="なまず速報" href="https://market.android.com/details?id=jp.twiple.android.quake" target="_blank">なまず速報</a></h3>
<p style="text-align: left;">3月11日に起こった東日本大震災以来、地震に対する恐怖感などは拭えません。</p>
<p style="text-align: left;">地震発生と共にアラートとポップアップでおおよその最大震度と発生地域を表示してくれます。</p>
<h2 style="text-align: left;">その他</h2>
<h3 style="text-align: left;"><a title="ALYac Android" href="https://market.android.com/details?id=com.estsoft.alyac" target="_blank">ALYac Android</a></h3>
<p style="text-align: left;">Android端末の普及により、ウィルス・スパイウェア対策も怠ることはできません。</p>
<p style="text-align: left;">入れておいて損は無いだろうということで入れてます。</p>
<h3 style="text-align: left;"><a title="Fast Reboot" href="https://market.android.com/details?id=com.greatbytes.fastreboot" target="_blank">Fast Reboot</a></h3>
<p style="text-align: left;">Androidは起動したアプリをメモリに待機させるようになっていますが、これを強制的に開放するためのアプリです。</p>
<h3 style="text-align: left;"><a title="K-9 Mail" href="https://market.android.com/details?id=com.fsck.k9" target="_blank">K-9 Mail</a></h3>
<p style="text-align: left;">わんちゃんのような形をしたメーラアプリ。</p>
<p style="text-align: left;">Gmailのアカウントや、Webdavアカウント、通常のSMTP・POPアカウントまで手広くサポートされているメールクライアントです。</p>
<h3 style="text-align: left;"><a title="Sleipnir Mobile" href="https://market.android.com/details?id=jp.co.fenrir.android.sleipnir" target="_blank">Sleipnir Mobile</a></h3>
<p style="text-align: left;">言わずと知れたFenrir社で開発されているタブブラウザのAndroid版。</p>
<p style="text-align: left;">スワイプアクションが豊富で、イルカさんにも負けず劣らずなブラウザです。</p>
<p style="text-align: left;">デフォルトの検索エンジンがYahooなのが玉に瑕。</p>
<h3 style="text-align: left;"><a title="ぱちんこ帳簿" href="https://market.android.com/details?id=com.graceful3715.pachinkobook" target="_blank">ぱちんこ帳簿</a></h3>
<p style="text-align: left;">パチン<del>カス</del>カーにはもってこいのアプリ。</p>
<p style="text-align: left;">機種やホールを個別に管理でき、1日ごとの収支、全体の収支など様々な収支計算も行える優れもの。</p>
<p style="text-align: left;">これを使ってもっと楽しい、熱くなりすぎないパチンコライフを。</p>
<h3 style="text-align: left;"><a title="ぱちログ" href="https://market.android.com/details?id=jp.kyoraku.pachilog.main" target="_blank">ぱちログ</a></h3>
<p style="text-align: left;">ﾊﾟﾗﾊﾟｰｯ！</p>
<p style="text-align: left;">ﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰﾊﾟｰｯﾊﾟﾗﾊﾟｰｯ!</p>
<p style="text-align: left;">でででーんっ！でででーんっ！</p>
<h3 style="text-align: left;"><a title="Google 日本語入力" href="https://market.android.com/details?id=com.google.android.inputmethod.japanese" target="_blank">Google 日本語入力</a></h3>
<p style="text-align: left;">パソコン版のGoogleIMEが端末でも利用できます！</p>
<p style="text-align: left;">2011年12月31日現在、まだベータ版ですが、ベータ版でも十分に利用できるアプリで、iPhoneのように快適なフリック生活を過ごせます。</p>
<h2 style="text-align: left;">終わりに</h2>
<p style="text-align: left;">以上で現在私が端末にインストールしている33個のアプリを紹介しました。</p>
<p style="text-align: left;">今年ももうすぐ終わりますが、最後の最後まで充実したAndroid生活を送ってください！</p>

<p><a href="http://feedads.g.doubleclick.net/~a/tGuk-IUbn0skRdVtQy9XBdbk_i4/0/da"><img src="http://feedads.g.doubleclick.net/~a/tGuk-IUbn0skRdVtQy9XBdbk_i4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/tGuk-IUbn0skRdVtQy9XBdbk_i4/1/da"><img src="http://feedads.g.doubleclick.net/~a/tGuk-IUbn0skRdVtQy9XBdbk_i4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/gtODTOP4uOA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/12/31/used-android-applications/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/12/31/used-android-applications/" />
	<feedburner:origLink>http://blog.nully.org/2011/12/31/used-android-applications/</feedburner:origLink></item>
		<item>
		<title>退職</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/W2KDP0It-YA/</link>
		<comments>http://blog.nully.org/2011/12/16/taishoku/#comments</comments>
		<pubDate>Fri, 16 Dec 2011 10:00:12 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[雑記]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1614</guid>
		<description><![CDATA[突然ですが、今年度で現在務めている会社を退職します。 現在務めている会社は約3年とちょっと努めさせて頂きました。 その間、いろいろな人に出会い、様々な技術を学びました。 また、人間的にもいろいろ成長できたのではないかとも [...]]]></description>
			<content:encoded><![CDATA[<p>突然ですが、今年度で現在務めている会社を退職します。</p>
<p>現在務めている会社は約3年とちょっと努めさせて頂きました。</p>
<p>その間、いろいろな人に出会い、様々な技術を学びました。</p>
<p>また、人間的にもいろいろ成長できたのではないかとも思います。</p>
<p>&nbsp;</p>
<p>現在は有給休暇を消化中で、その合間に就職活動をしておりました。</p>
<p>次の勤め先は先日決定し、1月から美容系の企業で働かせていただける予定となりました。</p>
<p>業態としては未経験の場ですが、また新しい技術を学び、提供・開拓していくことが出来ればいいなと思っています。</p>
<p>&nbsp;</p>
<p>これからもLaquu.JSの開発はもちろん続けていきますし、今後は自分でも何かWebサービスを提供できるような人間になれたらいいなと、来年の抱負を口にしています。</p>
<p>&nbsp;</p>
<p>今までお世話になった皆様、今までありがとうございました。</p>
<p>また、今後ともよろしくお願いいたします。</p>
<p>これからお世話になる皆様、今後ともよろしくお願いいたします。</p>
<p>&nbsp;</p>
<p>それでは、アディオス！（柳沢慎吾風に）</p>

<p><a href="http://feedads.g.doubleclick.net/~a/2gJACT27_S4reHBMh2ZbdrDS_Qs/0/da"><img src="http://feedads.g.doubleclick.net/~a/2gJACT27_S4reHBMh2ZbdrDS_Qs/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/2gJACT27_S4reHBMh2ZbdrDS_Qs/1/da"><img src="http://feedads.g.doubleclick.net/~a/2gJACT27_S4reHBMh2ZbdrDS_Qs/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/W2KDP0It-YA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/12/16/taishoku/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/12/16/taishoku/" />
	<feedburner:origLink>http://blog.nully.org/2011/12/16/taishoku/</feedburner:origLink></item>
		<item>
		<title>WordPress3.3が発表されたので、EditorAPIをちょっとだけ使ってみた</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/Whl9EW06wJs/</link>
		<comments>http://blog.nully.org/2011/12/13/wordpress-3-3-editor-api-use-it/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 23:48:54 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1610</guid>
		<description><![CDATA[いつの間にかWordPress3.3 Sonnyが公開されていたので、今回から追加されたEditor APIの一部を利用してみた。 WordPress3.3 SonnyのSonnyとは、JazzSaxophonistのS [...]]]></description>
			<content:encoded><![CDATA[<p>いつの間にかWordPress3.3 Sonnyが公開されていたので、今回から追加されたEditor APIの一部を利用してみた。</p>
<p><span id="more-1610"></span></p>
<p>WordPress3.3 SonnyのSonnyとは、JazzSaxophonistのSonny Stittのことらしい。</p>
<p>Jazzはバーボン飲みながら聞くに限る&#8230;！</p>
<h3>EditorAPIとは</h3>
<p>EditorAPIは今まで投稿タイプなどにつけるのもちょっと手間だった、エディタ（TinyMCEを利用したエディタ）をワンツーで取り付けることができるAPIです。</p>
<p>オプションも豊富で、開発者視点からも楽をすることのできるAPIです。</p>
<h3>使い方</h3>
<p>EditorAPIを利用するには「wp_editor」という関数を呼び出すだけで利用することができます。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1">wp_editor<span class="br0">&#40;</span><span class="re0">$content</span><span class="sy0">,</span> <span class="re0">$editor_id</span><span class="sy0">,</span> <span class="re0">$settings</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">wp_editor($content, $editor_id, $settings);</pre></div></div>

<p>オプションページに新しいメニュー項目を追加して、そのページでエディタを表示するには以下のようなコードになります。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&quot;admin_menu&quot;</span><span class="sy0">,</span> <span class="st0">&quot;sample_add_nav&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">function</span> sample_add_nav<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; add_options_page<span class="br0">&#40;</span><span class="st0">&quot;Sample&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Sample&quot;</span><span class="sy0">,</span> <span class="st0">&quot;edit_posts&quot;</span><span class="sy0">,</span> <span class="kw4">__FILE__</span><span class="sy0">,</span> <span class="st0">&quot;sample_editor_page&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> sample_editor_page<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="co1">// コンテンツ内容を取得したりするなど</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; wp_editor<span class="br0">&#40;</span><span class="re0">$content</span><span class="sy0">,</span> <span class="st0">&quot;sample_editor_id&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">add_action("admin_menu", "sample_add_nav");
function sample_add_nav() {
    add_options_page("Sample", "Sample", "edit_posts", __FILE__, "sample_editor_page");
}
function sample_editor_page() {
    // コンテンツ内容を取得したりするなど
    wp_editor($content, "sample_editor_id");
}</pre></div></div>

<h3>引数</h3>
<p>wp_editor関数は引数を3つ取ります。</p>
<ul>
<li>$content：エディタに反映するコンテンツ内容</li>
<li>$editor_id：HTMLのID属性に利用するID</li>
<li>$settings：エディタに関する設定</li>
</ul>
<p>の3つです。</p>
<p>$contentは入力された文字をそのままセットするだけ、$editor_idは利用するエディタに見合ったIDを指定するだけです。</p>
<p>$settingsはエディタの振る舞いや、エディタ内容の振る舞いなどを設定することができます。</p>
<p>利用できるオプションについては<a title="wp_editor" href="http://codex.wordpress.org/Function_Reference/wp_editor" target="_blank">こちら</a>の「Argument」の項を御覧ください。</p>
<h3>終わりに</h3>
<p>今回のアプデでは投稿タイプで利用される機会の多いエディタがAPI形式として提供されたのが個人的には一番嬉しいです。</p>
<p>ユーザーからすれば、今まで若干煩わしかった画像のアップロードに関しても格段に良くなっています。</p>
<p>より詳しい更新内容は<a title="WordPress 3.3 Sonny " href="http://codex.wordpress.org/Version_3.3" target="_blank">コチラ</a>からご覧になれます。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/pX_wT269gS-PaX_HxZVY2Vma9VM/0/da"><img src="http://feedads.g.doubleclick.net/~a/pX_wT269gS-PaX_HxZVY2Vma9VM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/pX_wT269gS-PaX_HxZVY2Vma9VM/1/da"><img src="http://feedads.g.doubleclick.net/~a/pX_wT269gS-PaX_HxZVY2Vma9VM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/Whl9EW06wJs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/12/13/wordpress-3-3-editor-api-use-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/12/13/wordpress-3-3-editor-api-use-it/" />
	<feedburner:origLink>http://blog.nully.org/2011/12/13/wordpress-3-3-editor-api-use-it/</feedburner:origLink></item>
		<item>
		<title>WordPressのプラグインを作る際に覚えておくと便利な関数まとめ</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/yX596_n1K7U/</link>
		<comments>http://blog.nully.org/2011/11/30/useful-function-for-wordpress-plugin/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 10:00:03 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[まとめ]]></category>
		<category><![CDATA[プラグイン]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1588</guid>
		<description><![CDATA[WordPressの便利機能のひとつであるプラグイン。 このプラグインを自作する際に覚えておくと後でお得ですよ！奥さん！な関数をまとめてみました。 plugin_basename($file) プラグインのベースファイル [...]]]></description>
			<content:encoded><![CDATA[<p>WordPressの便利機能のひとつであるプラグイン。</p>
<p>このプラグインを自作する際に覚えておくと後でお得ですよ！奥さん！な関数をまとめてみました。</p>
<p><span id="more-1588"></span></p>
<h3>plugin_basename($file)</h3>
<p>プラグインのベースファイル名を取得します。</p>
<p>以下の例は/home/www/wp-content/plugins/myplugin/myplugin.phpというファイルがあった場合の例です。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="re0">$basename</span> <span class="sy0">=</span> plugin_basename<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw1">echo</span> <span class="re0">$basename</span><span class="sy0">;</span> <span class="co1">// myplugin/myplugin.php</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">$basename = plugin_basename(__FILE__);
echo $basename; // myplugin/myplugin.php</pre></div></div>

<h3>plugins_url([$path[, $plugin]])</h3>
<p>WordPressをインストールしたwp-content/plugins/へのURLを取得します。</p>
<p>$pathにファイルへのパスを指定すると、指定したパスへのURLを取得できます。</p>
<p>$pluginは基本的には自前で作成するプラグインファイルを指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// wp-content/plugins/へのURLを取得します</span></div></li>
<li class="li2"><div class="de2"><span class="re0">$url</span> <span class="sy0">=</span> plugins_url<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// mypluginディレクトリのsample.cssへのURLを取得します</span></div></li>
<li class="li1"><div class="de1"><span class="re0">$url</span><span class="sy0">=</span> plugins_url<span class="br0">&#40;</span><span class="st0">&quot;sample.css&quot;</span><span class="sy0">,</span> <span class="kw4">__FILE__</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// wp-content/plugins/へのURLを取得します
$url = plugins_url();

// mypluginディレクトリのsample.cssへのURLを取得します
$url= plugins_url("sample.css", __FILE__);</pre></div></div>

<h3>register_activation_hook($file, $function);</h3>
<p>プラグインが有効化された時のみ呼び出されるアクションを登録します。</p>
<p>$fileにはプラグインへのディレクトリパス（ファイル名込み）、$functionには有効化した際に呼び出される関数を指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// プラグインが有効化されたときのみ、プラグインで利用するオプションを追加します</span></div></li>
<li class="li2"><div class="de2">register_activation_hook<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="sy0">,</span> <span class="st0">&quot;my_register_hook&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> my_register_hook<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">update_option<span class="br0">&#40;</span><span class="st0">&quot;my_option_name&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my value&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// プラグインが有効化されたときのみ、プラグインで利用するオプションを追加します
register_activation_hook(__FILE__, "my_register_hook");
function my_register_hook() {
update_option("my_option_name", "my value");
}</pre></div></div>

<h3>register_deactivation_hook($file, $function)</h3>
<p>プラグインが無効化された時のみ呼び出されるアクションを登録します。</p>
<p>$fileにはプラグインへのディレクトリパス（ファイル名込み）、$functionには無効化した際に呼び出される関数を指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// プラグインが有効化された時のみ、有効化した際に追加したオプションを削除します</span></div></li>
<li class="li2"><div class="de2">register_deactivation_hook<span class="br0">&#40;</span><span class="kw4">__FILE__</span><span class="sy0">,</span> <span class="st0">&quot;my_deregister_hook&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> my_deregister_hook<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">delete_option<span class="br0">&#40;</span><span class="st0">&quot;my_option_name&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// プラグインが有効化された時のみ、有効化した際に追加したオプションを削除します
register_deactivation_hook(__FILE__, "my_deregister_hook");
function my_deregister_hook() {
delete_option("my_option_name");
}</pre></div></div>

<h3>register_setting($option_group, $option_name, $sanitize_callback)</h3>
<p>プラグインの設定画面のオプショングループを登録します。</p>
<p>1つの入力フィールドにつき1回呼び出します。</p>
<p>$option_groupは登録するオプションのグループ名を指定します。</p>
<p>$option_nameはグループに登録するフィールドの名前を指定します。</p>
<p>$sanitize_callbackはフィールドの値をサニタイズするコールバックを指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"style=" height: 252px;"><div class="php"><ol><li class="li1"><div class="de1">add_action<span class="br0">&#40;</span><span class="st0">&quot;admin_init&quot;</span><span class="sy0">,</span> <span class="st0">&quot;register_my_option_fields&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">function</span> register_my_option_fields<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1"><span class="co1">// my_optionsというオプショングループにそれぞれフィールドを登録する</span></div></li>
<li class="li2"><div class="de2">register_setting<span class="br0">&#40;</span><span class="st0">&quot;my_options&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_option_username&quot;</span><span class="sy0">,</span> <span class="st0">&quot;esc_attr&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">register_setting<span class="br0">&#40;</span><span class="st0">&quot;my_options&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_option_nicename&quot;</span><span class="sy0">,</span> <span class="st0">&quot;esc_attr&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// プラグイン等の管理画面を表示する関数</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> my_admin_page<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// options.phpには特別なコードがかかれています。</span></div></li>
<li class="li1"><div class="de1"><span class="co1">// wp-admin/options.phpにあります。</span></div></li>
<li class="li2"><div class="de2"><span class="sy0">&lt;</span>form action<span class="sy0">=</span><span class="st0">&quot;options.php&quot;</span> method<span class="sy0">=</span><span class="st0">&quot;post&quot;</span><span class="sy0">&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">&lt;?php</span> settings_fields<span class="br0">&#40;</span><span class="st0">&quot;my_options&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span> <span class="sy1">?&gt;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// register_my_option_fields で登録したフィールド名と同じ名前を指定することに注意！</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">&lt;</span>p<span class="sy0">&gt;&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> name<span class="sy0">=</span><span class="st0">&quot;my_option_username&quot;</span> value<span class="sy0">=</span><span class="st0">&quot;&lt;?php get_option('my_option_username'); ?&gt;&quot;</span> <span class="sy0">/&gt;&lt;/</span>p<span class="sy0">&gt;</span></div></li>
<li class="li2"><div class="de2"><span class="sy0">&lt;</span>p<span class="sy0">&gt;&lt;</span>input type<span class="sy0">=</span><span class="st0">&quot;text&quot;</span> name<span class="sy0">=</span><span class="st0">&quot;my_option_nicename&quot;</span> value<span class="sy0">=</span><span class="st0">&quot;&lt;?php get_option('my_option_nicename'); ?&gt;&quot;</span> <span class="sy0">/&gt;&lt;/</span>p<span class="sy0">&gt;</span></div></li>
<li class="li1"><div class="de1"><span class="sy0">&lt;/</span>form<span class="sy0">&gt;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">add_action("admin_init", "register_my_option_fields");
function register_my_option_fields() {
// my_optionsというオプショングループにそれぞれフィールドを登録する
register_setting("my_options", "my_option_username", "esc_attr");
register_setting("my_options", "my_option_nicename", "esc_attr");
}

// プラグイン等の管理画面を表示する関数
function my_admin_page() {
// options.phpには特別なコードがかかれています。
// wp-admin/options.phpにあります。
&lt;form action="options.php" method="post"&gt;
&lt;?php settings_fields("my_options"); ?&gt;
// register_my_option_fields で登録したフィールド名と同じ名前を指定することに注意！
&lt;p&gt;&lt;input type="text" name="my_option_username" value="&lt;?php get_option('my_option_username'); ?&gt;" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;input type="text" name="my_option_nicename" value="&lt;?php get_option('my_option_nicename'); ?&gt;" /&gt;&lt;/p&gt;
&lt;/form&gt;
}</pre></div></div>

<h3>settings_fields($option_group)</h3>
<p>settings_fieldsは$option_groupで登録したグループ名のnonceフィールドを生成します。</p>
<p>これにより、プラグインオリジナルの管理画面をより作りやすくなります。</p>
<h3>unregister_setting($option_group, $option_name, $sanitize_callback = null)</h3>
<p>register_settingで登録した設定項目を削除します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// 上で登録したmy_optionsのmy_option_usernameを削除します</span></div></li>
<li class="li2"><div class="de2">unregister_setting<span class="br0">&#40;</span><span class="st0">&quot;my_options&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_option_username&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// 上で登録したmy_optionsのmy_option_usernameを削除します
unregister_setting("my_options", "my_option_username");</pre></div></div>

<h3>menu_page_url($menu_slug, $echo = true)</h3>
<p>指定した$menu_slugをもとに、メニューページへのURLを表示及び取得します。</p>
<p>指定された$menu_slugに属するURLが存在しなければ、空文字が返却されます。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// my_options というスラッグをもとにURLを取得します</span></div></li>
<li class="li2"><div class="de2"><span class="re0">$url</span> <span class="sy0">=</span> menu_page_url<span class="br0">&#40;</span><span class="st0">&quot;my_options&quot;</span><span class="sy0">,</span> <span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// my_options というスラッグをもとにURLを取得します
$url = menu_page_url("my_options", false);</pre></div></div>

<h3>has_filter（$tag, $function_to_check = false)</h3>
<p>指定した$tagのフィルターが存在するかをチェックします。</p>
<p>$function_to_checkに文字列を指定すると、指定した$tagのフィルターに$function_to_checkが存在しているかをチェックします。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// the_contentタグは登録されているので true と表示される</span></div></li>
<li class="li2"><div class="de2"><span class="kw3">var_dump</span><span class="br0">&#40;</span>has_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// the_unkタグは登録されていないのでfalseと表示される</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span>has_filter<span class="br0">&#40;</span><span class="st0">&quot;the_unk&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="co1">// the_contentタグにdo_shortcode関数が登録されているので、登録時の優先度が表示される</span></div></li>
<li class="li2"><div class="de2"><span class="kw3">var_dump</span><span class="br0">&#40;</span>has_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;do_shortcode&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// the_contentタグにdo_unk関数は登録されていないのでfalseと表示される</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span>has_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;do_unk&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// the_contentタグは登録されているので true と表示される
var_dump(has_filter("the_content"));

// the_unkタグは登録されていないのでfalseと表示される
var_dump(has_filter("the_unk"));

// the_contentタグにdo_shortcode関数が登録されているので、登録時の優先度が表示される
var_dump(has_filter("the_content", "do_shortcode"));

// the_contentタグにdo_unk関数は登録されていないのでfalseと表示される
var_dump(has_filter("the_content", "do_unk"));</pre></div></div>

<h3>add_filter($tag, $function_to_add, $priority = 10, $accepted_args = 1)</h3>
<p>指定したフィルタータグに新しいフィルターを登録します。</p>
<p>$priorityの初期値は10でこの数値が小さいほど優先的に実行されます。</p>
<p>$accepted_argsは登録したフィルタで許可する引数の数を指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// the_contentタグに優先度を0、許可する引数の数を3として、output_hello_world関数を登録します</span></div></li>
<li class="li2"><div class="de2">add_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;output_hello_world&quot;</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// the_contentタグに優先度を0、許可する引数の数を3として、output_hello_world関数を登録します
add_filter("the_content", "output_hello_world", 0, 3);</pre></div></div>

<h3>aplly_filters($tag, $value[,$var...])</h3>
<p>指定した$tagのフィルタを適用させます。</p>
<p>$value以降の引数はいくつでも指定することができますが、add_filter関数にて登録された各関数の$accepted_args以上の引数の数は無視されます。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// the_contentタグに登録されたフィルターを、文字列「サンプル」に適用させます</span></div></li>
<li class="li2"><div class="de2">apply_filters<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;サンプル&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// the_example_filterタグに登録されたフィルターを、文字列「サンプル」に適用させ、</span></div></li>
<li class="li1"><div class="de1"><span class="co1">// 投稿の内容をフィルターの引数として指定します</span></div></li>
<li class="li2"><div class="de2">apply_filters<span class="br0">&#40;</span><span class="st0">&quot;the_example_filter&quot;</span><span class="sy0">,</span> <span class="st0">&quot;サンプル&quot;</span><span class="sy0">,</span> get_the_content<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// the_contentタグに登録されたフィルターを、文字列「サンプル」に適用させます
apply_filters("the_content", "サンプル");

// the_example_filterタグに登録されたフィルターを、文字列「サンプル」に適用させ、
// 投稿の内容をフィルターの引数として指定します
apply_filters("the_example_filter", "サンプル", get_the_content());</pre></div></div>

<h3>current_filter()</h3>
<p>現在実行されているフィルタ及びアクションの名前を取得します。</p>
<p>利用用途としては、同じ関数を複数のフィルターポイントに登録してあり、switchなどで分岐する際に利用します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1">add_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_example_filter&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">add_filter<span class="br0">&#40;</span><span class="st0">&quot;wp_exceprt&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_example_filter&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> my_example_filter<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; <span class="kw1">switch</span><span class="br0">&#40;</span>current_filter<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;the_content&quot;</span><span class="sy0">:</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="co1">// the_contentフィルタの場合の処理</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; <span class="kw1">case</span> <span class="st0">&quot;the_excerpt&quot;</span><span class="sy0">:</span></div></li>
<li class="li1"><div class="de1">&nbsp; &nbsp; <span class="co1">// the_exceprtフィルタの場合の処理</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; &nbsp; <span class="kw1">break</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp; <span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">add_filter("the_content", "my_example_filter");
add_filter("wp_exceprt", "my_example_filter");
function my_example_filter() {
  switch(current_filter()) {
    case "the_content":
    // the_contentフィルタの場合の処理
      break;
    case "the_excerpt":
    // the_exceprtフィルタの場合の処理
      break;
  }
}</pre></div></div>

<h3>remove_filter($tag, $function_to_remove, $priority = 10, $accepted_args = 1)</h3>
<p>指定した$tagに登録したフィルター関数$function_to_removeを削除します。</p>
<p>削除に成功すればtrueを返却し、失敗した場合はfalseを返却します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// the_contentに登録されている自動的に段落をつけてくれるフィルタ関数を削除します</span></div></li>
<li class="li2"><div class="de2">remove_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="st0">&quot;wpautop&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// クラスオブジェクトのフィルタ関数を削除する場合は以下のように配列で指定します</span></div></li>
<li class="li1"><div class="de1">remove_filter<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="re0">$myClass</span><span class="sy0">,</span> <span class="st0">&quot;my_filter&quot;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// the_contentに登録されている自動的に段落をつけてくれるフィルタ関数を削除します
remove_filter("the_content", "wpautop");

// クラスオブジェクトのフィルタ関数を削除する場合は以下のように配列で指定します
remove_filter("the_content", array( $myClass, "my_filter" ));</pre></div></div>

<h3>remove_all_filters($tag, $priority = false)</h3>
<p>指定した$tagのフィルターを削除します。</p>
<p>$priorityに数値を指定した場合は、$tagに登録された優先度$priorityのフィルタのみ削除されます。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// the_contentタグのフィルターを全て削除します</span></div></li>
<li class="li2"><div class="de2">remove_all_filters<span class="br0">&#40;</span><span class="st0">&quot;the_contnet&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// the_contentタグの優先度が20に指定されているフィルターを全て削除します</span></div></li>
<li class="li1"><div class="de1">remove_all_filters<span class="br0">&#40;</span><span class="st0">&quot;the_content&quot;</span><span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// the_contentタグのフィルターを全て削除します
remove_all_filters("the_contnet");

// the_contentタグの優先度が20に指定されているフィルターを全て削除します
remove_all_filters("the_content", 20);</pre></div></div>

<h3>has_action($tag, $function_to_check = false)</h3>
<p>指定した$tagのアクションが存在するかチェックします。</p>
<p>$function_to_checkに文字列を指定すると、$tagのアクションに登録された関数$function_to_checkが存在するかをチェックします。</p>
<p>内部構造はhas_filterと同等です。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// wp_headアクションが存在しているかチェックします</span></div></li>
<li class="li2"><div class="de2">has_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// wp_headアクションに関数名my_head_actionが存在しているかチェックします</span></div></li>
<li class="li1"><div class="de1">has_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_head_action&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// wp_headアクションが存在しているかチェックします
has_action("wp_head");

// wp_headアクションに関数名my_head_actionが存在しているかチェックします
has_action("wp_head", "my_head_action");</pre></div></div>

<h3> add_action($tag, $function_to_add, $priority = 10, $accepted_args = 1)</h3>
<p>指定したアクション$tagに関数$function_to_addを追加します。</p>
<p>$priorityに小さい数を指定することで優先的に実行されます。</p>
<p>$accepted_argsは登録するアクションで利用可能な引数の数を指定します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// wp_headアクションにmy_head_actionを登録します</span></div></li>
<li class="li2"><div class="de2">add_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_head_action&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// wp_headアクションに優先度を2、許可する引数の数を3として</span></div></li>
<li class="li1"><div class="de1"><span class="co1">// my_head_action関数を登録します</span></div></li>
<li class="li2"><div class="de2">add_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_head_action&quot;</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// wp_headアクションにmy_head_actionを登録します
add_action("wp_head", "my_head_action");

// wp_headアクションに優先度を2、許可する引数の数を3として
// my_head_action関数を登録します
add_action("wp_head", "my_head_action", 2, 3);</pre></div></div>

<h3>do_action($tag, $arg[,$arg_2...])</h3>
<p>指定したアクション$tagに登録された関数を実行します。</p>
<p>$argは配列及びカンマ区切りで複数の引数を指定することが可能です。</p>
<p>また、$argにはオブジェクトを指定することも可能です。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// my_custom_headアクションに登録した関数を実行します</span></div></li>
<li class="li2"><div class="de2">do_action<span class="br0">&#40;</span><span class="st0">&quot;my_custom_head&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// my_custom_headアクションに登録した関数を引数つきで実行します</span></div></li>
<li class="li1"><div class="de1">do_action<span class="br0">&#40;</span><span class="st0">&quot;my_custom_head&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st0">&quot;name&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;Nully&quot;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// または</span></div></li>
<li class="li1"><div class="de1">do_action<span class="br0">&#40;</span><span class="st0">&quot;my_custom_head&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Nully&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// my_custom_headアクションに登録した関数を実行します
do_action("my_custom_head");

// my_custom_headアクションに登録した関数を引数つきで実行します
do_action("my_custom_head", array( "name" =&gt; "Nully" ));
// または
do_action("my_custom_head", "Nully");</pre></div></div>

<h3>do_action_ref_array($tag, $arg)</h3>
<p>指定したアクション$tagに登録された関数を実行します。</p>
<p>$argは配列のみ指定可能です。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// my_custom_headアクションに登録した関数を引数付きで実行します</span></div></li>
<li class="li2"><div class="de2">do_action_ref_array<span class="br0">&#40;</span><span class="st0">&quot;my_custom_head&quot;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span> <span class="st0">&quot;name&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;Nully&quot;</span><span class="sy0">,</span> <span class="st0">&quot;age&quot;</span> <span class="sy0">=&gt;</span> <span class="st0">&quot;永遠の20歳&quot;</span> <span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// my_custom_headアクションに登録した関数を引数付きで実行します
do_action_ref_array("my_custom_head", array( "name" =&gt; "Nully", "age" =&gt; "永遠の20歳" ));</pre></div></div>

<h3>did_action($tag)</h3>
<p>現在実行されているアクションが$tagかチェックします。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// 現在実行されているアクションがwp_headの場合はtrue</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// それ以外はfalseを返却します</span></div></li>
<li class="li1"><div class="de1"><span class="kw3">var_dump</span><span class="br0">&#40;</span>did_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// 現在実行されているアクションがwp_headの場合はtrue
// それ以外はfalseを返却します
var_dump(did_action("wp_head"));</pre></div></div>

<h3>remove_action($tag, $function_to_remove, $priority = 10, $accepted_args = 1)</h3>
<p>指定したアクション$tagに登録した関数$function_to_removeを削除します。</p>
<p>$priorityはアクションに登録した数値を指定する必要があります。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// wp_headに登録されたmy_custom_headを削除します</span></div></li>
<li class="li2"><div class="de2">remove_action<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="sy0">,</span> <span class="st0">&quot;my_custom_head&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// wp_headに登録されたmy_custom_headを削除します
remove_action("wp_head", "my_custom_head");</pre></div></div>

<h3>remove_all_actions($tag, $priority = false)</h3>
<p>指定したアクション$tagを削除します。</p>
<p>$priorityに数値を指定することで$tagに登録された優先度$priorityのアクションを削除します。</p>
<p>例</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// wp_headに登録されたアクションを全て削除します</span></div></li>
<li class="li2"><div class="de2">remove_all_actions<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// wp_headに登録された、優先度が20のアクションを全て削除します</span></div></li>
<li class="li1"><div class="de1">remove_all_actions<span class="br0">&#40;</span><span class="st0">&quot;wp_head&quot;</span><span class="sy0">,</span> <span class="nu0">20</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// wp_headに登録されたアクションを全て削除します
remove_all_actions("wp_head");

// wp_headに登録された、優先度が20のアクションを全て削除します
remove_all_actions("wp_head", 20);</pre></div></div>

<h2>終りに</h2>
<p>ショートコード周りはすっ飛ばしました。<br />
時間があれば、近いうちにショートコードに関する関数のまとめっぽいものを書きたいと思います。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/ebVC69la1NJhdqXTUeQQuebR3RM/0/da"><img src="http://feedads.g.doubleclick.net/~a/ebVC69la1NJhdqXTUeQQuebR3RM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/ebVC69la1NJhdqXTUeQQuebR3RM/1/da"><img src="http://feedads.g.doubleclick.net/~a/ebVC69la1NJhdqXTUeQQuebR3RM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/yX596_n1K7U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/11/30/useful-function-for-wordpress-plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/11/30/useful-function-for-wordpress-plugin/" />
	<feedburner:origLink>http://blog.nully.org/2011/11/30/useful-function-for-wordpress-plugin/</feedburner:origLink></item>
		<item>
		<title>NetBeansカラースキーム6個まとめ</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/Vvx-8fQx9W8/</link>
		<comments>http://blog.nully.org/2011/10/19/color-scheme-pack-for-netbeans/#comments</comments>
		<pubDate>Wed, 19 Oct 2011 07:00:56 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[IDE]]></category>
		<category><![CDATA[NetBeans]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1571</guid>
		<description><![CDATA[最近IDEはめっきり使わなくなっていたのですが、どうしても1つのアプリから全てをあれこれしたくなるどうも僕です。 Aptana行って、Eclipse行って、NetBeans行って&#8230;。 行ったり来たりして最終的 [...]]]></description>
			<content:encoded><![CDATA[<p>最近IDEはめっきり使わなくなっていたのですが、どうしても1つのアプリから全てをあれこれしたくなるどうも僕です。 Aptana行って、Eclipse行って、NetBeans行って&#8230;。 行ったり来たりして最終的にNetBeansへとつばめ帰り！ てことで、NetBeansで使えるPHPのカラースキームを6つほどまとめてみました。 <span id="more-1571"></span></p>
<h2>カラースキームの設定方法</h2>
<p>NetBeansはカラースキームを設定ファイル（zipファイル）として外部に吐き出し、それを別のIDEで読み込ませることが出来ます。</p>
<p>他のIDEでも出来ますが。</p>
<p>落としてきたカラースキームファイルは次のように設定します。</p>
<p><strong>1. NetBeansの環境設定を開く</strong></p>
<p>NetBeansの環境設定を開き「フォントと色」を開きます。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/b87d1fbca7fbe23a710636e7a9633f00.png"><img src="http://blog.nully.org/files/2011/10/b87d1fbca7fbe23a710636e7a9633f00-300x254.png" alt="" title="設定方法01" width="300" height="254" class="aligncenter size-medium wp-image-1572" /></a></p>
<p><strong>2. ファイルをインポートする</strong></p>
<p><strong></strong>下の方の「インポート」を押し、ダウンロードしたzip形式のファイルを選択します。</p>
<p>すると「すべて」の下に「PHP」などいろいろ出てきますので、躊躇なく「すべて」にチェックを入れて颯爽「了解」ボタンを押します。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/486bbb5c00732d38755e85db4847351b.png"><img src="http://blog.nully.org/files/2011/10/486bbb5c00732d38755e85db4847351b-300x254.png" alt="" title="設定方法02" width="300" height="254" class="aligncenter size-medium wp-image-1573" /></a></p>
<h3><a title="NetBeans Twilight Theme" href="http://net.tutsplus.com/freebies/themes/netbeans-twilight-theme/">NetBeans Twilight Theme</a></h3>
<p>言わずと知れた人気のカラースキーム。</p>
<p>TextMateで利用されてからすごく人気の出たスキームです。 HTML/CSS/PHP/JavaScriptに対応しています。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/twilight.png"><img src="http://blog.nully.org/files/2011/10/twilight-300x239.png" alt="" title="twilight" width="300" height="239" class="aligncenter size-medium wp-image-1582" /></a></p>
<h3><a title="Dreamweaver color scheme" href="http://www.daftspunk.com/code/dreamweaver-color-scheme-for-netbeans-editor.html">Dreamweaver color scheme</a></h3>
<p>DreamWeaver利用者には嬉しいカラースキームです。</p>
<p>Dwに近い色合いなので、普段Dwを利用しているユーザーには有り難いカラースキームだと思います。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/dw.png"><img src="http://blog.nully.org/files/2011/10/dw-300x196.png" alt="" title="dw" width="300" height="196" class="aligncenter size-medium wp-image-1577" /></a></p>
<h3><a title="Solarized" href="https://github.com/fentie/netbeans-colors-solarized">Solirized light/Dark</a></h3>
<p>1つのスキームファイルに2つの定義が入ってるカラースキームです。</p>
<p>暗め・明るめの2つが入っているので、迷っている方にはオススメの1つです。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/solirized-light.png"><img src="http://blog.nully.org/files/2011/10/solirized-light-300x238.png" alt="" title="solirized light" width="300" height="238" class="aligncenter size-medium wp-image-1581" /></a></p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/solirized-dark.png"><img src="http://blog.nully.org/files/2011/10/solirized-dark-300x239.png" alt="" title="solirized dark" width="300" height="239" class="aligncenter size-medium wp-image-1580" /></a></p>
<p>このカラースキムはダウンロード後、一度展開し、出てきたディレクトリに有る「config」ディレクトリをzip形式で再度圧縮する必要があります。</p>
<h3><a title="Monokai" href="http://codesleepshred.com/dark-netbeans-themes-oblivion-revival-and-monokai/">Monokai</a></h3>
<p>黒背景にかなり明るめの配色です。</p>
<p>これだけはっきりしているので、タグの間違いや打ち間違いなどを見つけやすそうな感じはします。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/monokai.png"><img src="http://blog.nully.org/files/2011/10/monokai-300x190.png" alt="" title="monokai" width="300" height="190" class="aligncenter size-medium wp-image-1578" /></a></p>
<h3><a title="Oblivion Revival" href="http://coder.kidsreturn.org/2010/06/netbean-fonts-colors-profile-oblivion-revival/">Oblivion Revival</a></h3>
<p>現在はこのスキームを使っています。</p>
<p>全体が少し暗めで構成されていて、なんだかエロティックを感じたので使っています。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/oblivion.png"><img src="http://blog.nully.org/files/2011/10/oblivion-300x233.png" alt="" title="oblivion" width="300" height="233" class="aligncenter size-medium wp-image-1579" /></a></p>
<h3>終りに</h3>
<p>AptanaとかEclipseに行った理由は「なんとなく」です。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/CS8xCYic-5SSJ0hWD3ASK03CnK8/0/da"><img src="http://feedads.g.doubleclick.net/~a/CS8xCYic-5SSJ0hWD3ASK03CnK8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/CS8xCYic-5SSJ0hWD3ASK03CnK8/1/da"><img src="http://feedads.g.doubleclick.net/~a/CS8xCYic-5SSJ0hWD3ASK03CnK8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/Vvx-8fQx9W8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/10/19/color-scheme-pack-for-netbeans/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/10/19/color-scheme-pack-for-netbeans/" />
	<feedburner:origLink>http://blog.nully.org/2011/10/19/color-scheme-pack-for-netbeans/</feedburner:origLink></item>
		<item>
		<title>MacのVMWareFusionの仮想ディスクをVirtualBoxの仮想ディスクとして利用する方法</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/Yf4ibgCTAIc/</link>
		<comments>http://blog.nully.org/2011/10/18/convert-vmware-to-virtualbox-virtual-machine-for-mac/#comments</comments>
		<pubDate>Tue, 18 Oct 2011 09:30:52 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[VirtualBox]]></category>
		<category><![CDATA[VMWare]]></category>
		<category><![CDATA[仮想マシン]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1561</guid>
		<description><![CDATA[タイトル通りのことをするわけですが、VMからVBoxへ乗り換える人はそうそう居ないかと思います。 だがそれがいい！ はじめに 2011年10月にインストールしています。 各ソフトウェアのバージョンは以下のとおりです。 V [...]]]></description>
			<content:encoded><![CDATA[<p>タイトル通りのことをするわけですが、VMからVBoxへ乗り換える人はそうそう居ないかと思います。</p>
<p>だがそれがいい！</p>
<p><span id="more-1561"></span></p>
<h2>はじめに</h2>
<p>2011年10月にインストールしています。</p>
<p>各ソフトウェアのバージョンは以下のとおりです。</p>
<p>VMWare Fusion: 4</p>
<p>VirtualBox: 4.1.4</p>
<p>VMWare OVF Tool: 2.0.1</p>
<p>また、ターミナル.appを乱用しますので、予めご了承ください。</p>
<h3>OVF Toolをインストールする</h3>
<p>まずはOVFというVBoxで読み込める形式に変換するツールを入れます。</p>
<p>ファイルは<a title="VMWare OVF Tool" href="http://www.vmware.com/support/developer/ovf/" target="_blank">こちら</a>から落とせます。</p>
<p>次にターミナル.appを起動し、以下のコマンドを実行する。</p>
<pre class="brush:shell">$ tar zxvf /path/to/VMWare-ovftool-[version]-[build番号]-mac.i386.tar.gz</pre>
<p>すると「VMWare OVF Tool.pkg」というものが出てくるのでインストールする。</p>
<p>インストール完了後「/Applications/VMWare OVF Tool」というディレクトリが出来上がります。</p>
<p>このディレクトリの「ovftool」というのが実行ファイルになります。</p>
<h3>vmware仮想マシンをovf仮想マシンへ変換する</h3>
<p>これより先はターミナル.appから操作していきます。</p>
<p>一時的に上記パスをPATH変数に追加し、以降の作業をやりやすくしておきます。</p>
<pre class="brush:shell">$ PATH=$PATH:/Applications/VMWare\ OVF\ Tool</pre>
<p>次に仮想マシンをOVF形式で吐き出します。</p>
<pre class="brush:shell">$ ovftool /path/to/コピーしたい仮想マシン名.vmware/コピーしたい仮想マシン名.vmx /path/to/複製したい仮想マシン名.ovf</pre>
<p>上記のコマンドを実行することで、以下のような表記が現れます。</p>
<pre class="brush:shell">Opening VMX source: Windows 7.vmwarevm/Windows Vista.vmx
Opening OVF target: test.ovf
Writing OVF package: test.ovf</pre>
<p>上から順に「複製するためのマニフェストファイル」、「複製後の仮想マシン名」、「書きこんじゃうぜ！」となります。</p>
<p>で、その下に「Disk Progress」と出ていますが、これが100%になれば複製が完了します。</p>
<h3>VirtualBoxへインポート</h3>
<p>OVF形式のファイルは通常の仮想マシンを作成する手順とは異なり、仮想マシンをインポートするイメージになります。</p>
<p>VirtualBoxを起動し、「ファイル &gt; 仮想アプライアンスのインポート」を選択します。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/167c7cc264538a4ca4f6c037870b1b11.png"><img src="http://blog.nully.org/files/2011/10/167c7cc264538a4ca4f6c037870b1b11-300x81.png" alt="VBox 仮想アプライアンスのインポート" title="VBox 仮想アプライアンスのインポート" width="300" height="81" class="size-medium wp-image-1563 aligncenter" /></a></p>
<p>すると、インポートウィザードが立ち上がります。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/8544defaacd1d29c1ef744c8d0450833.png"><img src="http://blog.nully.org/files/2011/10/8544defaacd1d29c1ef744c8d0450833-300x216.png" alt="VBox インポートウィザード" title="VBox インポートウィザード" width="300" height="216" class="aligncenter size-medium wp-image-1564" /></a></p>
<p>「選択」から先ほど変換したOVF形式のファイルを選択します。</p>
<p>すると、OVFから読み取った情報をもとにVM上で設定されていた内容が表示されます。</p>
<p style="text-align: center;"><a href="http://blog.nully.org/files/2011/10/5231bc7dc9101fcff34308ee2b383661.png"><img src="http://blog.nully.org/files/2011/10/5231bc7dc9101fcff34308ee2b383661-300x252.png" alt="VBox - 仮想マシンの設定" title="VBox - 仮想マシンの設定" width="300" height="252" class="aligncenter size-medium wp-image-1565" /></a></p>
<p>Vistaか7どっちかはっきりしろっていう突っ込みは無しで<img src="http://blog.nully.org/wp-content/plugins/ktai-style/pics/SA/wink.gif" alt="ウィンク" class="pictogram" style="border:0 none;" /></p>
<p>このまま「import」を押してもかまいませんし、設定を少し変更したい場合は、各々変更します。</p>
<p>ちなみにインポートする時間は仮想マシンにより左右されますが、私の環境では20分近くかかりました。</p>
<p>これでVMWare FusionからVirtualBoxへ仮想マシンを移行する操作は完了です。</p>
<p>こんな手間を掛けて移行したい！ってのもなかなかありませんが&#8230;ｗ</p>

<p><a href="http://feedads.g.doubleclick.net/~a/-N5dX4vaYyDqwF2nX_fzupGxEHM/0/da"><img src="http://feedads.g.doubleclick.net/~a/-N5dX4vaYyDqwF2nX_fzupGxEHM/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-N5dX4vaYyDqwF2nX_fzupGxEHM/1/da"><img src="http://feedads.g.doubleclick.net/~a/-N5dX4vaYyDqwF2nX_fzupGxEHM/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/Yf4ibgCTAIc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/10/18/convert-vmware-to-virtualbox-virtual-machine-for-mac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/10/18/convert-vmware-to-virtualbox-virtual-machine-for-mac/" />
	<feedburner:origLink>http://blog.nully.org/2011/10/18/convert-vmware-to-virtualbox-virtual-machine-for-mac/</feedburner:origLink></item>
		<item>
		<title>Ajax専用JSライブラリ SACK</title>
		<link>http://feedproxy.google.com/~r/blog-of-nully/~3/Be0kFeKHPKg/</link>
		<comments>http://blog.nully.org/2011/09/17/ajax-javascript-library-sack/#comments</comments>
		<pubDate>Fri, 16 Sep 2011 18:00:22 +0000</pubDate>
		<dc:creator>nully</dc:creator>
				<category><![CDATA[プログラム]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SACK]]></category>

		<guid isPermaLink="false">http://blog.nully.org/?p=1555</guid>
		<description><![CDATA[Ajaxを行うためだけにjQueryやMootools、PorotypeJSなどのようなごついライブラリを使うのもなんだか機が引けちゃう&#8230;。 という場合はAjax専用のJSライブラリSACK（Simple A [...]]]></description>
			<content:encoded><![CDATA[<p>Ajaxを行うためだけにjQueryやMootools、PorotypeJSなどのようなごついライブラリを使うのもなんだか機が引けちゃう&#8230;。</p>
<p>という場合はAjax専用のJSライブラリSACK（Simple Ajax Code Kit）を利用すると良いかもしれません。</p>
<p><span id="more-1555"></span></p>
<h2>SACKとは</h2>
<p>SACK（サック）は<a href="http://www.twilightuniverse.com/?page_id=243" target="_blank">Twilight Universe</a>さんが開発されているシンプルで軽量なAjax専用のライブラリです。</p>
<p>名前の由来もSimple Ajax Code Kitのそれぞれの頭文字をとって命名されています。</p>
<h2>使い方</h2>
<p>まずは、SACKを利用するページに読み込みます。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="html4strict"><ol><li class="li1"><div class="de1"><span class="sc2">&lt;<span class="kw2">script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span> <span class="kw3">src</span><span class="sy0">=</span><span class="st0">&quot;js_tw-sack.js&quot;</span>&gt;&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">&lt;script type="text/javascript" src="js_tw-sack.js"&gt;&lt;/script&gt;</pre></div></div>

<p>次にSACKを利用するために、インスタンスを生成します。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar"><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"><div class="javascript"><ol><li class="li1"><div class="de1"><span class="kw2">var</span> ajax <span class="sy0">=</span> <span class="kw2">new</span> sack<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">var ajax = new sack();</pre></div></div>

<p>そんでもって、いろいろコールバックを定義します。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"style=" height: 252px;"><div class="php"><ol><li class="li1"><div class="de1"><span class="kw2">function</span> whenLoading<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; alert<span class="br0">&#40;</span><span class="st0">&quot;Nully&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> whenLoaded<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; alert<span class="br0">&#40;</span><span class="st0">&quot;は&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> whenInteractive<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; alert<span class="br0">&#40;</span><span class="st0">&quot;ゆきりんが&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
<li class="li2"><div class="de2">&nbsp;</div></li>
<li class="li1"><div class="de1"><span class="kw2">function</span> whenCompleted<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div></li>
<li class="li2"><div class="de2">&nbsp; &nbsp; alert<span class="br0">&#40;</span><span class="st0">&quot;大好き！&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1"><span class="br0">&#125;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">function whenLoading() {
    alert("Nully");
}

function whenLoaded() {
    alert("は");
}

function whenInteractive() {
    alert("ゆきりんが");
}

function whenCompleted() {
    alert("大好き！");
}</pre></div></div>

<p>そして最後に実行する内容を書いていきます。</p>

<div class="bwp-syntax-block clearfix">
<div class="bwp-syntax-toolbar" style="right: 15px;" ><div class="bwp-syntax-control"><a href="javascript:;" class="bwp-syntax-source-switch" title="View Source Code"></a></div></div>
<div class="bwp-syntax-wrapper clearfix bwp-syntax-advanced"style=" height: 252px;"><div class="php"><ol><li class="li1"><div class="de1"><span class="co1">// フォームタグを取得する</span></div></li>
<li class="li2"><div class="de2"><span class="kw2">var</span> form <span class="sy0">=</span> document<span class="sy0">.</span>getElementById<span class="br0">&#40;</span><span class="st_h">'form'</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li1"><div class="de1">&nbsp;</div></li>
<li class="li2"><div class="de2"><span class="co1">// 送信内容をセットする</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>setVar<span class="br0">&#40;</span><span class="st0">&quot;myTextBox&quot;</span><span class="sy0">,</span> form<span class="sy0">.</span>mytext<span class="sy0">.</span>value<span class="br0">&#41;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// リクエスト先のファイル（URL）を指定します</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>requestFile <span class="sy0">=</span> <span class="st0">&quot;sackdemo.php&quot;</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// 送信メソッドを指定します</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>method <span class="sy0">=</span> form<span class="sy0">.</span>method<span class="sy0">.</span>value<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// レスポンステキストをいれこむ要素ID</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>element <span class="sy0">=</span> <span class="st_h">'replaceme'</span><span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// 読み込み中のコールバック関数</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>onLoading <span class="sy0">=</span> whenLoading<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// データ送信中のコールバック関数</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>onLoaded <span class="sy0">=</span> whenLoaded<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// データ取得中のコールバック関数</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>onInteractive <span class="sy0">=</span> whenInteractive<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// 通信終了後のコールバック関数</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>onCompletion <span class="sy0">=</span> whenCompleted<span class="sy0">;</span></div></li>
<li class="li2"><div class="de2"><span class="co1">// AJAXを開始</span></div></li>
<li class="li1"><div class="de1">ajax<span class="sy0">.</span>runAJAX<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div></li>
</ol></div></div>
<div class="bwp-syntax-source"><pre class="no-parse">// フォームタグを取得する
var form = document.getElementById('form');

// 送信内容をセットする
ajax.setVar("myTextBox", form.mytext.value);
// リクエスト先のファイル（URL）を指定します
ajax.requestFile = "sackdemo.php";
// 送信メソッドを指定します
ajax.method = form.method.value;
// レスポンステキストをいれこむ要素ID
ajax.element = 'replaceme';
// 読み込み中のコールバック関数
ajax.onLoading = whenLoading;
// データ送信中のコールバック関数
ajax.onLoaded = whenLoaded;
// データ取得中のコールバック関数
ajax.onInteractive = whenInteractive;
// 通信終了後のコールバック関数
ajax.onCompletion = whenCompleted;
// AJAXを開始
ajax.runAJAX();</pre></div></div>

<p>jQueryやMootoolsなどよりコード量が若干多くなりますが、ここまでシンプルにかけるので、かなり使いやすいのではないかと想います。</p>
<h2>余談ですが</h2>
<p>このSACKは実は<a href="http://wpdocs.sourceforge.jp/AJAX_in_Plugins" target="_blank">WordPressのAjax機構</a>にも利用されています。</p>
<h2>終わりに</h2>
<p>Ajaxは今では必須となりつつある技術ではありますが、勉強のためにざっと使ってみると良いかもです。</p>
<p>詳しいドキュメントはダウンロードしたファイルに同梱されているdocs.htmlを御覧ください。</p>

<p><a href="http://feedads.g.doubleclick.net/~a/4bb6Aa8s8jNCOmmG3U7_F-gKcag/0/da"><img src="http://feedads.g.doubleclick.net/~a/4bb6Aa8s8jNCOmmG3U7_F-gKcag/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/4bb6Aa8s8jNCOmmG3U7_F-gKcag/1/da"><img src="http://feedads.g.doubleclick.net/~a/4bb6Aa8s8jNCOmmG3U7_F-gKcag/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/blog-of-nully/~4/Be0kFeKHPKg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://blog.nully.org/2011/09/17/ajax-javascript-library-sack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://blog.nully.org/2011/09/17/ajax-javascript-library-sack/" />
	<feedburner:origLink>http://blog.nully.org/2011/09/17/ajax-javascript-library-sack/</feedburner:origLink></item>
	</channel>
</rss><!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using apc (Feed is rejected)
Object Caching 1135/1280 objects using apc

Served from: blog.nully.org @ 2012-02-04 12:06:52 --><!-- W3 Total Cache: Page cache debug info:
Engine:             apc
Cache key:          w3tc_blog.nully.org_1_page_750978a6610fa2b4f8e13fb3a731f1b6_gzip
Caching:            enabled
Status:             not cached
Creation Time:      9.220s
Header info:
ETag:               "c4811056214f740a95fb71146ddc1c14"
Last-Modified:      Wed, 18 Jan 2012 09:58:12 GMT
Vary:               Accept-Encoding, Cookie
Expires:            Sat, 04 Feb 2012 04:06:52 GMT
X-Powered-By:       W3 Total Cache/0.9.2.4
Content-Encoding:   gzip
X-Pingback:         http://blog.nully.org/xmlrpc.php
Content-Type:       text/xml; charset=UTF-8
-->

